Inspiration

The challenge asked how AI could help teams align on decisions and review work better. Before coding, we talked to a real PM, who told us she manually tracks what every team knows, needs to know, and is working on — entirely in her head. We narrowed that into a specific, common failure: a PRD gets written in Confluence, Engineering builds against it in Jira, and the two quietly drift apart until it's expensive to fix.

What it does

Butterbean is a Mistral agent, connected live to Jira and Confluence via Mistral's Atlassian connector, that compares a PRD to its linked epic and classifies each requirement as:

  • MATCHES — implementation reflects the PRD
  • CONFIRMED_CHANGE — changed, but with real evidence it was a deliberate decision
  • SILENT_DRIFT — diverged with no trace of why

Requirements change for good reasons all the time — Butterbean's job isn't flagging every difference, it's telling governed change apart from silent gaps nobody flagged. Results render in a filterable dashboard. In testing, it also caught a requirement with no owning story at all — a gap we never explicitly told it to look for.

How we built it

  • Mistral Agents API with a system prompt encoding our detection rule: what counts as evidence of a governed change vs. silent drift
  • Mistral's Atlassian Connector (MCP) for live, tool-based Jira/Confluence access — no custom API auth needed
  • Structured JSON output for consistent, renderable results
  • A static, hand-built dashboard (HTML/CSS/JS) — the model decides the data, not the UI, keeping demos reliable
  • Test data built with both a confirmed-change and a silent-drift case, to verify the agent tells them apart

Challenges

Untangling Mistral's separate Vibe vs. pay-as-you-go billing systems, a corrupted local package install, and discovering connectors attach via the API (agents.create()), not the Studio UI.

Accomplishments

An end-to-end pipeline — real Atlassian data, reasoned about live, rendered cleanly — that correctly separated a real scope change from a silent one, and generalized well enough to catch a case we didn't plant.

What we learned

"Requirements changing" isn't the problem — silent, unconfirmed change is. That distinction shaped everything.

What's next

Making it continuous: webhook-triggered on ticket changes, with results published back into Confluence automatically.

Built with

Mistral Agents API · Mistral Atlassian Connector (MCP) · Python · HTML/CSS/JavaScript · Jira · Confluence

Built With

Share this project:

Updates