Redmine logo Redmine automation · runs daily

Triage unassigned Redmine issues with an agent

New issues land in the project overnight with no assignee and the default priority, and someone has to open each one before the day's work can start.

Cotlet does it in your own Redmine account with list_issues, get_issue, list_issue_options, list_project_members and update_issue, called by your AI agent, an n8n workflow or a script.

Hosted · nothing to install or maintain

Can Redmine do this on its own?

Redmine's Issues API can update status, priority, assignee and notes on an issue (checked 16 Oct 2026), and include=allowed_statuses lists the statuses a user may move an issue to. It applies the values you send and decides nothing. There is no official MCP server and no rule engine for sorting new issues by their text.

How you do it in Redmine today

  1. Open Issues in the project and filter for open issues; Redmine lists open issues first by default.
  2. Open each new issue, read the description and click Update, the pencil icon at the top or bottom of the issue.
  3. Set status, priority and assignee, add a note and save. Fields you may change depend on your role.
  4. Use a private note when the reason is not for the reporter.
  5. The people on the Watchers block get a notification for every update, so each triage touch reaches them.

How to triage unassigned Redmine issues with an agent

Prompt

Every morning, take the open issues in the Billing portal project that have no assignee, set the priority from the description, assign them by the category, and add a note saying why.
  1. 01

    List what is untouched

    list_issues returns open issues, which is also Redmine's default, sorted by creation. The agent keeps the ones without an assignee and skips issues another person updated in the last day.

  2. 02

    Read the whole issue

    get_issue brings description, history and allowed statuses. A crash report with a stack trace is judged differently from "button looks odd", and the agent quotes the line it relied on.

  3. 03

    Look up the valid values

    list_issue_options gives the instance's statuses and priorities, and list_project_members gives who can be assigned. The agent never sends an ID it did not read from these lists.

  4. 04

    Update with a reason

    update_issue sets priority and assignee and adds a note that says why. The agent uses a private note for internal reasoning, and each update waits for your OK by default.

  5. 05

    Keep unclear ones

    An issue with no steps to reproduce, or one that fits two categories, stays unassigned. The agent adds it to the list it returns, with the question that would settle it.

What you get back

Example data

Unassigned open issues in Billing portal: 8
Triaged 5:
- #4830 Refund email not sent: High, Priya Nair (payments)
- #4831 Typo on invoice page: Low, Tom Becker
Kept for you 3:
- #4834 "Export is slow": no dataset size given
Skipped: #4829 (updated an hour ago by Tom Becker)

Other ways to ask

  • Find open issues with no update for 14 days and ask the assignee for status with a note.
  • Move issues in status Resolved for more than a week to Closed and say so in a note.
  • Triage only issues tagged with category Payments and assign them to Priya.
  • Show me how you would triage today's new issues, changing nothing.

What Redmine allows, and what to know first

  • Redmine lists only open issues by default; status_id accepts open, closed, * for both, or a status ID.
  • Changing the subject or description needs the Edit Issues permission, and other fields depend on the role's permissions.
  • Redmine splits comments into notes and private notes, and a private note is not visible to every role.
  • The allowed_statuses include, available since Redmine 5.0, returns the statuses the user may move an issue to, which follows the workflow of the tracker.
  • Redmine returns at most 100 issues per request, so a large backlog is read page by page with offset.

update_issue asks for your OK by default. To run it daily without you, switch confirmation off for that tool in your dashboard.

Sources: Redmine Guide: REST API, Issues · Redmine Guide: Creating and updating issues · Redmine Guide: REST API

Call update_issue from a script

curl

curl -X PATCH https://cotlet.dev/api/v1/redmine/issues/4830 \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"priority_id":3,"assigned_to_id":31,"notes":"Refund emails are a payments flow and customers wait on them, so High. Assigned to Priya."}'

Example response

{
  "issue_id": 4830,
  "status": "New",
  "priority": "High",
  "assigned_to": "Priya Nair",
  "note_added": true,
  "updated_on": "2026-10-16T09:31:00Z"
}

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is redmine_write → update_issue. Example data.

Schedule it in n8n, Make, Zapier or cron

Redmine tools this automation uses

Cotlet Redmine tools used to triage unassigned Redmine issues with an agent
Tool Parameters
list_issues project_id, assigned_to_id, status, tracker_id, sort, limit, offset
get_issue issue_id, include
list_issue_options none
list_project_members project_id, limit, offset
update_issue issue_id, status_id, priority_id, assigned_to_id, subject, description, notes, private_notes
All 12 Redmine tools with descriptions

Frequently asked questions

Is it safe to connect Redmine to Cotlet?

Yes. You sign in to Redmine yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Redmine once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

Give your agent access to Redmine.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Redmine.