Inspiration
A release looks green. Every ticket is Done. But the security decision those tickets were built against was rewritten two days ago, and nobody connected the edit to the finished work. Decision logs record decisions; release dashboards count tickets. Nothing tells a release manager that finished work now rests on a commitment that no longer exists.
What it does
Accord links the decisions written in Confluence to the Jira work built on them, and flags drift.
- Write decisions in plain prose. Accord reads the page as the current user and asks Forge LLM (Claude) to propose commitments. Each proposal must quote one sentence of the page word for word, and any Jira key or label it names must be written there. Proposals that fail are discarded. A person confirms what stays.
- Catch drift by sentence. When the page changes, Accord compares the confirmed sentence with the current text. A rewritten sentence becomes "ACD-14 was built on a commitment that changed", with the old and new wording and the Done work it affects. Formatting-only edits become a warning, not an alarm.
- Say what the change means. On request, Forge LLM judges whether the new wording contradicts, weakens, strengthens or is compatible with the old commitment. It is labelled as an AI opinion and never changes a signal.
- Check the rest of the release. Open prerequisites, forbidden labels and missing owners are evaluated by plain code, as the caller. Anything missing or unreadable is shown as unknown, never as clear.
- Explore a smaller release. A what-if lab finds the smallest deferral that clears the critical signals. It is a simulation and never changes Jira.
- Keep the human call. Recording a decision writes a Jira comment only after confirmation and a fresh evidence comparison.
- Meet people where they work. A Decisions panel on the Jira issue, an "Accord commitments" button on the Confluence page, and the
@AccordRovo agent in chat. Teamwork Graph shows who shaped the decision.
How we built it
A Forge app with a React + TypeScript Custom UI. One evaluator in src/domain/ is shared by the UI, the resolvers and the Rovo actions, so every surface gives the same answer.
- Forge LLM drafts commitments and gives the advisory assessment. Model output is only ever a proposal; verification, drift detection and rules are plain TypeScript.
- Rovo: a
rovo:agentwith five read-only actions and a reusablerovo:skill. - Teamwork Graph API:
requestTeamworkGraphas the user, to show decision owners next to the evidence. - Surfaces:
jira:globalPage,jira:issueContext,confluence:contentBylineItem. - Storage: confirmed commitments are a Confluence page property, so they share the page's visibility and are never copied into Jira. Every read uses
asUser(), nothing is cached across users, and the app has no external egress. - A one-click sample release creates a labelled version, work items, two decision pages and one post-review edit, so you can see real drift on your own site.
Challenges we ran into
- Making a model useful without letting it invent facts. Every proposal is checked against the page, and a page that says "ignore previous instructions" can only produce proposals that fail verification.
- Teamwork Graph is in Preview. Raw Cypher is closed to new apps, so Accord uses curated queries and never lets graph data change a result.
- Working inside Forge's sandboxed frames: links must open through the host router, and contextual modules need their own entry points from one bundle.
Accomplishments that we're proud of
- A drift signal you can read in one sentence: the old wording, the new wording, and the Done work it affects.
- AI where it helps, determinism where it matters. The model proposes and explains, but can never turn an unknown into a pass.
- Verified end to end in a browser on real Jira and Confluence sites: sample release, Forge LLM drafting, Teamwork Graph owner lookup, the issue panel, the Confluence button, and the Rovo agent reading its skill and calling the inspect tool.
What we learned
Trust is the product. A release tool that is wrong in the reassuring direction is worse than no tool, so uncertainty is a first-class result in Accord.
What's next
Proactive notification when a decision page changes, goal-aware impact once Goals is available on a site, and a Marketplace listing.
Built With
- atlassian-forge
- claude
- confluence
- forge-llm
- jira
- node.js
- react
- rovo
- rovo-agents
- teamwork-graph
- typescript
- vite
- vitest
- zod
Log in or sign up for Devpost to join the conversation.