Skip to main content

Triage issues with an agent

A captured error already names the files that broke. Tiden also knows which requirements those files implement and which tests cover them. This workflow hands all of that to a coding agent so it can fix the error and close the coverage gap that let the error escape.

Before you start:

1. Install the triage skill

tiden skill install triage-issues

The skill teaches the agent the whole loop below — which command to run at each step, how to rank issues, and when it is allowed to resolve one. Install it into the current repository instead of your home directory with --local:

tiden skill install triage-issues --local

Confirm it is present:

tiden skill list --format text

Then start the agent in the repository and ask it to triage issues. Agents that speak MCP can use the same data through tiden-mcp-server instead of the CLI.

2. Point the agent at an environment

An issue has no environment of its own — its occurrences do. Scope the work to the environment you actually care about:

tiden issue list \
--environment production \
--status unresolved \
--sort times_seen \
--period 7d

--environment, --release, and --component accept names as well as IDs, so production works without looking anything up.

Rank what comes back by impact (timesSeen), recency (lastSeen), and regression. A non-empty regressedAt means Tiden reopened an issue that had been resolved — the fix did not hold, and that belongs at the top of the list.

3. Read the fix context

This is the call that turns an error into a plan:

tiden issue fix-context <issue-id>

It returns, in one response:

FieldWhat to do with it
suspectPathsThe repository files the stack trace implicates, in stack order. Open these first.
suspectRequirementsThe requirements those files implement, each with the paths that matched it, so a wrong match is visible rather than silent.
coverageverified, not_run, or no_test for each suspect requirement.
environmentsOccurrence counts per environment — a production outage versus dev noise.
componentThe component the error was attributed to.
regressedtrue when this issue was resolved and came back.
truncationSignalsNames anything left out to keep the response bounded.

Use --branch to resolve requirements against a branch instead of main, and --max-frames to widen or narrow the stack window.

Raw event payloads are omitted throughout the issue commands. Symbolicated stack frames — the part that localizes the bug — are always included. Pass --payload to issue get, issue events, or issue event only if the frames were not enough, and never copy secrets or personal data out of a payload into code, commits, or requirements.

4. Fix the code

Have the agent change the files in suspectPaths. The linked requirements are the specification the broken code was meant to satisfy — read them for the intended behavior before changing it.

5. Add the missing test

If a suspect requirement's coverage is no_test or not_run, that gap is why the error reached production. Fixing only the code leaves the gap open.

Write the regression test, then link it to the requirement so the coverage verdict and the quality gate both see it:

tiden test link-requirement <test-id> --requirement-id <requirement-id>

On a non-main branch this creates a link proposal to review before merge. See Manage branches.

6. Resolve the issue

tiden issue resolve <issue-id>

tiden issue ignore is for issues that are expected and not actionable. tiden issue reopen undoes either. Every status change records who made it, so an agent's decisions stay attributable and reversible — but only resolve an issue that was actually fixed and verified.

Several issues at once:

tiden issue resolve <issue-id> <issue-id> --product-id <product-id>

7. Verify after the next release

A fix is proven by the next release, not by the commit. After the fix ships:

tiden release issues <release-version>

This lists the issues first seen in that release. The issue you resolved should not appear, and no new issue should have taken its place. If it does reappear, Tiden marks it as a regression and it re-enters the loop at step 3.

Finish with the gate before promoting:

tiden gate check --product-id <product-id>