ClosedTab
ClosedTab gives anyone directing AI agents a six-part record of each run and a check that names what the record leaves out.
Released on npm · Version 0.5.0 · MIT license
Example. An excerpt from a record in Vloora’s repository, whose rules ask for one at the end of every agent run. An agent wrote it on October 19, 2026, after editing Vloora’s agent interaction patterns guide.
Who made each call in one agent run
Decisions the agent made on its own: Kept the six technical pattern rules but replaced the repeated rubric with plain paragraphs; used the existing train-price and changed-request fixtures as the guide's worked example; kept separate steps for approvals, mandates, acknowledgments, and disputed outcomes; used the site's existing guide template and public navigation.
Of those, which should a human have made or seen: Final company navigation priorities, guide headline and whether the kit's existing downloadable archive should be revised as an editorial release. The founder may direct changes; source and technical contracts remain available.
Where a human actually intervened: The founder required immediate use of the existing editorial suite, after rejecting the prose quality of the pushed kit. No new text changes have been approved by the founder in this run.
Points where it should have escalated and didn't: No strategic scope changes were made. Decisions about broader public distribution and protocol claims are left with the owner.
Accountable for these actions: The agent for accuracy and testing of the edits; the founder for final positioning and public distribution decisions.
$ closedtab check docs/aar-agent-interaction-patterns-editorial-2026-10-19.md
closedtab check: docs/aar-agent-interaction-patterns-editorial-2026-10-19.md
score: 6/6
✓ scope / the ask
✓ rationale (the why)
✓ delegation record (who decided)
✓ validation
✓ follow-ups and known gaps
✓ residual risks
all six breadcrumbs present.
Write and score a record after an agent run
An agent starts the record when it finishes a piece of work, fills it in, and checks it before the next run begins.
Example. Commands and output from ClosedTab 0.5.0, run on October 20, 2026.
Start a blank record
closedtab newasks for an optional branch, pull request number, and commit, then writes a record file with today’s date, the six sections, and their field labels.$ closedtab new "Add the ClosedTab product page" --type record --dir docs
closedtab: review an agent run (or write a task doc) Optional context (press Enter to skip any): Branch: PR #: Commit: Scaffolding a blank Agent Action Record. Work through the six sections in order; the field labels and hints are in the file. ✓ Wrote docs/aar-add-the-closedtab-product-page.md Open it, fill it in, and keep it alongside the work. Read records across runs: the Deviation and Change sections tell you the most over time.A blank record scores 0 of 6
The check looks across the whole file for the ask, the reasoning, who decided, how the work was validated, follow-ups and gaps, and remaining risks, and prints a suggestion for each one it can’t find.
$ closedtab check docs/aar-add-the-closedtab-product-page.md
closedtab check: docs/aar-add-the-closedtab-product-page.md score: 0/6 ✗ scope / the ask ✗ rationale (the why) ✗ delegation record (who decided) ✗ validation ✗ follow-ups and known gaps ✗ residual risks to strengthen it: - State what the owner asked for, in their words. - Record why it was done this way, beyond what changed. - Note who decided what (owner / agent / joint), and flag any call the agent inferred. - Say how you know it works: tests run, what you checked. - List the follow-ups you left and the parts you scoped out for later. - Name the known gaps, risks, or open questions carried forward.Fill in the six parts
The agent that did the work fills in each part, starting with the person’s instruction in their actual words.
The check reads headings and phrases, so a score measures what the record covers. A reviewer or
closedtab reconciletests whether it is accurate.The six parts of an Agent Action Record Part What it captures Intent The instruction, how success was defined, the authority the agent had, and what was out of scope Action What the agent did, what it produced, where it diverged, and whether it stayed within its authority Judgment The decisions it made alone, which ones a human should have seen, where it should have escalated, and who is accountable Deviation The gaps and their root cause, the good departures, and what the agent got confidently wrong Consequence The outcome, the harm, cost, or risk, who was affected, and the expected failure over 100 runs Change What changes before the next run, what to keep, what belongs with a human, and the signal that the change worked
Reconcile records, connect agents, and keep notes private
Reconcile a record with a machine trace
closedtab reconcilematches the Intent and Action claims in a record against a machine trace of the run. Its report lists claims with no trace evidence, trace actions the record never mentions, and claims the trace contradicts, and it marks the run for human review when any of these appear.The matching rules are plain and deterministic, and the whole run stays on your machine.
closedtab reconcile --testimony <file.md> --trace <file.jsonl|file.json> [--out <diff.json>]- unsupported_claims
- omitted_actions
- contradicted_claims
- needs_human_review
- recommended_next_questions
Fields in the reconcile report An agent can write and score its own record
The
closedtab-mcpserver gives an agent the same tools through the Model Context Protocol (MCP). With it connected, the agent writes the record at the end of its run, scores it, and saves it next to the change.{ "mcpServers": { "closedtab": { "command": "closedtab-mcp" } } }- list_templates
- new_doc
- check
- reconcile
- write_private_note
- list_private_notes
- read_private_note
Tools the MCP server provides Private details stay out of a public repository
When the command-line tool or the MCP server saves a record, text inside a private fence moves to a gitignored
.closedtab/private/folder and the public file keeps a redaction stub. An unclosed fence redacts everything to the end of the file.<!-- private --> the part that stays out of the repo <!-- /private -->
Install ClosedTab from npm
ClosedTab needs only Node. Install it with npm install -g closedtab, then run closedtab new at the end of your next agent run.