Skip to content

camerash/tbd-board

v1.0.0MIT

A calm way for your coding agent to ask you for decisions: one HTML page of question cards that you answer in any browser, an add-only decision log, and a list of the small choices the agent made alone.

TBD Board gives your coding agent a calm way to ask you for decisions during long sessions, and keeps a record of every answer.

Your agent puts its questions on one page in your project. You open it in any browser, tap your answers, and paste them back into the chat in one go. The agent writes each decision to a log and keeps going. No server, no account, nothing to install for you.

Why

Long agent sessions hit questions that only you should answer: what the product does, how it looks, what it costs, what's risky, what's hard to undo. Asking in the chat works when you're watching. When you're not, the agent either stops and waits, or guesses. Neither is great.

TBD Board takes the middle road. The agent writes each question as a card, with the context, the options, and its recommendation, and carries on with everything that doesn't depend on the answer. You answer when it suits you, in a batch. The agent gets all your decisions in one message, plans once, and moves on.

And because every answer lands in an add-only decision log, you can always see what was decided, when, and why. The small calls the agent made on its own are listed too, so you can scan them and overrule any of them by ID.

How it works

flowchart LR
  A["Agent needs a decision"] -->|adds a card| B["docs/decisions/board.html"]
  B -->|you tap or type answers| C["Copy all answers"]
  C -->|paste once into the chat| D["Agent records each one in log.md"]
  D -->|keeps working| A
  1. The board is a single HTML file in your project. It works from your disk, offline, in light and dark mode, and on your phone.
  2. Cards have the context, 2 to 4 options, the agent's pick and why, optional images, and a priority: blocking, urgent, normal, or low. A blocking card only pauses the work that depends on it.
  3. You answer by tapping an option, writing a few words, or pressing Decide later. Then Copy all answers, and paste.
  4. The decision log (docs/decisions/log.md) gets one entry per answer. Past entries are never edited. A new decision supersedes an old one, with a link.
  5. Decided for you lists the small technical choices the agent made alone, with the reason. Reply with an ID (say A-013: use the other one) to change one.

The paste looks like this, so the agent knows exactly which board and which version you answered:

TBD Board answers: Hearth decisions (board k7f3q2, rev 14), 2026-10-11 14:05, 3 of 4 open cards answered.

Q-007 (Sync: local-first, or a hosted database?): A. Local-first, but keep the export button.

Q-006 (Onboarding: three short screens, or one screen?): One screen.

Q-004 (Release notes: playful or plain?): Later

(Agent: record these answers with the tbd-board skill.)

Install

Pick one route per agent. Two routes install the skill two times.

AgentInstallTested
Claude Codeclaude plugin marketplace add Camerash/tbd-boardclaude plugin install tbd-board@camerash(or /plugin marketplace add ... and /plugin install ... in a session)Yes
Codexcodex plugin marketplace add Camerash/tbd-boardcodex plugin add tbd-board@camerashYes
GitHub Copilot CLIcopilot plugin marketplace add Camerash/tbd-boardcopilot plugin install tbd-board@camerashNot yet
VS Code (Copilot)Command Palette, Chat: Install Plugin From Source, then https://github.com/Camerash/tbd-boardNot yet
Cursornpx skills add Camerash/tbd-board -a cursorNot yet
Gemini CLIgemini skills install https://github.com/Camerash/tbd-board.git --path skills/tbd-boardNot yet

More agents

AgentInstallTested
Antigravity CLIagy plugin install https://github.com/Camerash/tbd-boardNot yet
Windsurfnpx skills add Camerash/tbd-board -a windsurfNot yet
OpenCodenpx skills add Camerash/tbd-board -a opencodeNot yet
Ampnpx skills add Camerash/tbd-board -a ampNot yet
Goosenpx skills add Camerash/tbd-board -a gooseNot yet
Roo Codenpx skills add Camerash/tbd-board -a rooNot yet
Kironpx skills add Camerash/tbd-board -a kiro-cliNot yet
Pipi install git:github.com/Camerash/tbd-boardNot yet
ClineCopy skills/tbd-board into .cline/skills/ in your projectNot yet

Any other agent that reads Agent Skills: npx skills add Camerash/tbd-board (we tested this route with Codex).

An agent with no skill support: copy the skills/tbd-board folder into your project and add this line to your AGENTS.md:

For decisions that need the user, read and follow `skills/tbd-board/SKILL.md`.

The helper script needs Python 3.8 or newer, which most machines and agent sandboxes already have. No packages.

Quick start

  1. Install the skill for your agent (above).
  2. Ask your agent: "Set up a TBD board for this project." It creates docs/decisions/board.html and docs/decisions/log.md.
  3. Work as usual. When the agent adds cards, it tells you in the chat. Open the board, answer, press Copy all answers, and paste.

Want to see it first? Open examples/hearth/board.html, a demo board for a made-up chores app.

Features

Tap an option to answer. The label drops into your answer, and you can add a few words after it ("A, but keep the export button").

Search and filter. One search box and chips for priority and area. The board remembers your filters.

Copy all answers. One block, with a header that names the board and its revision, ready to paste. If your clipboard is blocked, the text is right there to select.

And also:

  • Progress at a glance: "3 of 4 open cards answered. 1 blocking card has no answer."
  • Decide later, which is not the same as no answer: the agent keeps that card open.
  • Drafts stay in your browser between visits, per board.
  • Light and dark, readable contrast, big touch targets, keyboard friendly, and fine at 360 px wide.
  • Images on cards for visual choices (mockups, icons, screenshots).
  • A careful helper (board.py) that writes the board and the log together, checks for mistakes, and never breaks the page.

FAQ

Why copy and paste, and not a server or an inbox?

We looked at about fifteen ways that tools bring human answers back to an agent: local servers that write a result file, blocking tool calls, hooks, harness inboxes, and hosted stores. They're clever, and several work really well inside their own setup.

Copy and paste is the one that works everywhere: every agent, every browser, a phone, offline, with no port, token, or background process. You decide when the batch is ready, and the paste is both the signal and the content. A file changing on disk doesn't wake up a chat agent anyway, so you'd still have to say "done". The header line lets the agent spot answers to an old version of the board, and a card you didn't answer simply stays open: the agent never fills in its own recommendation for you.

Does it work offline?

Yes. The board is one file with no external requests: no fonts, no CDN, no analytics. Open it straight from your disk.

Can I use it on my phone?

Yes, the page is built for it. The catch is getting the file onto your phone: iOS may not run the page's script when you open an HTML file from the Files app. Open it from a web address instead:

  • On your local network: in the board folder, run python3 -m http.server 8000, then open http://<your computer's IP>:8000/board.html on your phone. This shares everything in that folder with your network, so stop it when you're done.
  • On a private web page: put the file on any private static host you trust.

Answering works the same: copy on the phone, paste into any chat that reaches your agent.

Where are my drafts?

In your browser's local storage, on your device only, under a key that includes the board's ID (so two projects never mix). When a card is answered or closed, its draft is removed. In a private window, or with storage blocked, the board still works: drafts just aren't kept.

Can I use my own decision log?

Yes. If your project already has one, the agent uses it instead of making a second one (board.py init --log ../DECISIONS.md). New entries are added at the end, one line each, and your existing entries are never touched.

How do I upgrade the board?

Update the skill (for example claude plugin update tbd-board@camerash), then ask your agent to "upgrade the TBD board". It runs board.py upgrade, which swaps in the new page and keeps your data exactly as it was.

How is this different from similar tools?

There are some nice projects in this space:

  • ie3jp/decision-board builds a similar decision page as a Claude Artifact.
  • Agent Docket is a hosted decision board for agents.
  • LangChain Agent Inbox is an inbox UI for LangGraph interrupts.
  • Matt Pocock's to-questionnaire skill writes a Markdown questionnaire.
  • Built-in tools such as Claude Code's AskUserQuestion ask a few questions and wait for the answer.

TBD Board's angle: one file with no server and no account, that works offline and on a phone; answers in a batch with one paste; an add-only decision log with supersede links; a visible list of the choices the agent made alone; and one skill for all common agents.

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md for how to run the tests and regenerate the screenshots.

License and credits

MIT © 2026 Esmond Wong.

The repository layout follows mattpocock/skills. The icon, the demo images, and the screenshots were made with coding agents and the tools in tools/. Hearth, the demo app, is fictional.