Inspiration

Every team I've worked on has had the same meeting twice. Someone asks "why are we on SQS and not Kafka?", nobody can find the Slack thread from six months ago, and the debate starts again from scratch. Architecture Decision Records fix this, but writing one by hand takes 20 minutes, so nobody does. The hackathon's own pitch, about AI forgetting decisions you made ten prompts ago, made me realise that teams have the same problem. I wanted writing a decision down to be cheaper than not writing it down.

What it does

  • Paste a thread from Slack, Teams or email (Name: message lines; timestamps are fine).
  • Extract a decision record: title, decision, who decided, participants, context, options considered, rationale, action items with owners, open questions and tags. Every field is editable, because the AI drafts and you decide.
  • "⚠ You may have decided this already." Each new record is compared with your decision log. Strong overlaps show a red banner with the earlier decision, its date, a match % and the shared terms.
  • Decision log: save, search, view, edit and delete.
  • Export any record as a Markdown ADR (copy or download) for your repo's docs/decisions/.
  • Works out of the box: without an API key, an offline rule-based extractor runs. With ANTHROPIC_API_KEY, Claude does the extraction, and it falls back gracefully if the API fails.

Who it's for: developers and tech leads on small product teams who make real decisions in chat threads.

How we built it

  • I built a first working draft of Decided with Claude Code. Then I ran the Devpost Learn Skill Pack: 1-start profiled me, and 2-scope, 3-prd and 4-spec interviewed me, re-scoped the idea around its kernel (memory of past decisions, not yet another summariser) and produced the approved scope, PRD and spec in devpost/. I then aligned the build to them.
  • A CLAUDE.md project memory records the decisions already made (zero dependencies, demo mode must always work, no innerHTML with pasted text), which stopped the agent from re-litigating them.
  • Stack: Node.js built-ins only (http, fetch, node:test), vanilla HTML/CSS/ES modules, and the optional Anthropic Messages API. No build step and nothing to npm install.
  • The "already decided" check is cosine similarity over topic words, with title and tags weighted, and it shows the shared terms so the match is explainable.
  • 12 automated tests (extractor, similarity, Markdown, the full API flow, and mocked Claude success and failure), a smoke script, and an end-to-end click-through in headless Chrome.
  • A reusable skill, .claude/skills/decision-record, applies the same idea to the coding agent itself: "record this decision" writes an ADR for a choice made mid-session.

Challenges we ran into

  • Making the offline extractor good enough to demo. Small cues matter: "Agreed. Let's go with SQS…" should give "Use SQS plus a DLQ…" and not "Agreed."
  • Tuning the similarity thresholds so the SQS thread matches strongly and unrelated threads match nothing, and showing why something matched.
  • Keeping scope to a proof of concept when Slack integration was very tempting.

Accomplishments that we're proud of

  • The "you already decided this" moment works in under a second, offline, on first run.
  • No dependencies at all: clone, npm start, done.
  • Graceful degradation: if Claude is down or no key is set, you still get a useful record.

What we learned

  • Planning documents (scope → PRD → spec) made the agent much more predictable. When it drifted, I pointed it at a spec heading.
  • A short CLAUDE.md listing the decisions already made is the cheapest fix for an agent that repeats mistakes.
  • The interesting part of an AI feature is often the non-AI part around it. Here that's the log and the overlap check.

What's next

  • A Slack/Teams message action: "Save as decision".
  • Commit ADRs straight to the team repo as a pull request.
  • Embedding-based matching and "superseded by" links between decisions.
  • A shared team log.

Built With

Share this project:

Updates

Submission history