redmine-cli
Redmine CLI
Use the bundled scripts/redmine_cli.py (no external dependencies) to interact with Redmine from the terminal. It reads auth/config from ~/.red/config.json (and optionally ./.red/config.json as an override).
Quick start
- Create a Redmine API key (Redmine UI: My account -> API access key).
- Create
~/.red/config.json(v1 / single-instance format):
{
"api-key": "YOUR_API_KEY",
"editor": "",
"pager": "",
"project": "",
"project-id": 0,
"server": "https://redmine.example.com",
"user-id": 0
}
- Verify connectivity:
python scripts/redmine_cli.py project list --json | head
Multi-instance (--rid) (optional)
If your ~/.red/config.json uses a v2 / multi-server structure (like the reference red-cli), select a server with --rid:
python scripts/redmine_cli.py issue list --rid prod
python scripts/redmine_cli.py issue list --rid 1
Common tasks
List projects (default output is TSV; use --json for automation):
python scripts/redmine_cli.py project list
python scripts/redmine_cli.py project list --json
List issues (uses project-id from config unless --all or issue list all):
python scripts/redmine_cli.py issue list
python scripts/redmine_cli.py issue list --json --limit 10 --page 1
python scripts/redmine_cli.py issue list --query "login fails" --status_id 1 --sort priority
python scripts/redmine_cli.py issue list --issue-urls
python scripts/redmine_cli.py issue list --project # include project column in output
List available projects, trackers, statuses, and priorities (useful before creating issues):
python scripts/redmine_cli.py issue meta
Create an issue (defaults to "Task" tracker; use --tracker to override by name):
python scripts/redmine_cli.py issue create --project-id 1 --subject "New feature request" --json
python scripts/redmine_cli.py issue create --subject "Bug fix" --description "Details here" --json
python scripts/redmine_cli.py issue create --subject "Subtask" --parent-id 123 --json
python scripts/redmine_cli.py issue create --subject "A bug" --tracker Bug --priority-id 3 --json
Get an issue:
python scripts/redmine_cli.py issue view 12345
python scripts/redmine_cli.py issue view 12345 --journals
List all issues across projects:
python scripts/redmine_cli.py issue list all
python scripts/redmine_cli.py issue list --all
List only issues assigned to the current user:
python scripts/redmine_cli.py issue list me
Add a journal note to an issue:
python scripts/redmine_cli.py issue note 12345 -m "Fixed in commit abc123"
python scripts/redmine_cli.py issue note 12345 -m "Customer-visible" --private
python scripts/redmine_cli.py issue note 12345 --message-file ./notes.md
python scripts/redmine_cli.py issue note 12345 --message-file - < ./notes.md
Edit issue fields (subject, description, status, priority, tracker, parent, assigned-to):
python scripts/redmine_cli.py issue edit 12345 --description "New description"
python scripts/redmine_cli.py issue edit 12345 --description-file ./description.md
python scripts/redmine_cli.py issue edit 12345 --subject "Renamed" --status-id 2
python scripts/redmine_cli.py issue edit 12345 --parent-id 100 # make it a subtask
python scripts/redmine_cli.py issue edit 12345 --assigned-to-id 5 --priority-id 3
Manage issue relations (relates, blocks, duplicates, precedes, follows):
python scripts/redmine_cli.py issue relate add 12345 67890 # relates (default)
python scripts/redmine_cli.py issue relate add 12345 67890 --type blocks # 12345 blocks 67890
python scripts/redmine_cli.py issue relate list 12345 # list relations
python scripts/redmine_cli.py issue relate list 12345 --json
python scripts/redmine_cli.py issue relate remove 42 # delete by relation id
Update/remove an existing comment (journal):
- Find the journal id in
issue view --journalsoutput:issue.journals[].id - Update or remove:
python scripts/redmine_cli.py issue comment update 5993 -m "Updated comment text"
python scripts/redmine_cli.py issue comment update 5993 --message-file ./comment.md
python scripts/redmine_cli.py issue comment remove 5993
Show current user info:
python scripts/redmine_cli.py user me
Troubleshooting
HTTP 401/403: API key missing/invalid, REST API disabled, or insufficient permissions.HTTP 404: wrong base URL (ensure it is the Redmine root, not a sub-path like/projects).- Config not found: ensure
~/.red/config.jsonexists and is valid JSON.
References
- Redmine REST API notes (endpoints, payloads, filters):
references/rest-api.md