Try it
Install Decision Trail on your Jira site
Open the link while signed in as a Jira site admin, pick your site, and approve the two scopes
(read:jira-work, write:jira-work). The app then appears under Apps in the Jira sidebar. The demo
site used in the video is kaminari-research.atlassian.net.
Inspiration
Teams decide things in Jira comments: we are going with Postgres, the retry queue is out of scope, ninety days of retention is a hard requirement. Then the issue closes and the reasoning stays buried in the thread. Six months later someone asks why we built it that way, and the answer is on page four of forty comments.
Jira stores the work. It does not store the reasoning behind it.
What it does
Decision Trail reads an issue's description and every comment, then returns the sentences where the team actually decided something, sorted into four kinds: decided, ruled out, deferred, and constraint.
Each result carries the author, the date, a confidence score, and a permalink to the exact comment. The text is quoted verbatim, so anyone can check it against the source.
The app has two surfaces. A Jira page lists every decision across issues updated in the last 30 days. An MCP server exposes four tools, so Rovo agents and external MCP clients can ask Jira why something was decided.
How it works
The extraction engine is a weighted phrase heuristic, not a model. It splits sentences, scores them against decision markers ("we decided", "going with", "out of scope", "agreed", "instead of"), and penalises uncertainty markers ("maybe", "not sure", "TBD", trailing question marks).
That has three consequences. It never invents a decision that was not written down. The same comment always produces the same trail. It needs no API key and stores nothing.
MCP tools
get-issue-contextreturns summary, status, type, priority, assignee, labels, links, and description for one issue.find-decisionsreturns the decisions on one issue with author, date, confidence, and permalink.search-project-decisionsruns a JQL query, scans up to eight issues, and returns the strongest decisions.record-decisionposts a decision as a structured comment so the reasoning stays on the issue.
The rovo:mcp module exposes these as MCP tools, and the same action definitions are available to Rovo agents in Rovo Studio. External clients connect to https://mcp.atlassian.com/forge/<appId> once a site admin enables the tools under Connected apps.
How I built it
Forge with UI Kit, native render, Node 24 runtime. Every Jira call goes through @forge/api with asUser(), so the app reads with the caller's permissions and cannot widen them. Four modules: jira:globalPage, jira:issuePanel, rovo:mcp, and four action definitions. Issue and comment reads use Jira REST v3, and ADF is flattened to text before scoring.
Challenges
A comment body is an ADF document, not a string. Flattening it without losing sentence boundaries needed a recursive walker that emits newlines at block nodes.
Confidence scoring goes wrong in both directions. Long rambling sentences needed a penalty, and question marks had to count as uncertainty, otherwise every "should we use X?" came back as a decision.
Manifest limits: an action description is capped at 255 characters, and an app can declare at most one rovo:mcp module with at most 50 tools.
What is next
Promote a decision into a Confluence page so it survives the issue. Detect contradictions, where two comments decided opposite things. Let a team tune the phrase list to their own vocabulary.
Built With
- forge
- forge-api
- forge-resolver
- forge-ui-kit
- javascript
- jira-rest-api
- mcp
- node.js