Is the work really done?
Check the record.
Jaekit is a set of plugins for Claude Code and Codex, plus two small terminal programs. Before the work starts, it writes down what finished means; at the end, it judges completion from records of checks that actually ran, not from the agent's word.
$ brew install jgoneit/tap/jaekitWhat “done” doesn't tell you
Hand work to an AI coding agent and these can happen.
Some conditions are missing
You asked for ten things and got seven. A hard condition gets read as an easier one.
You can't see what was checked
It says “the tests pass”, but to learn what ran against which code you read the whole change yourself.
A new conversation starts from zero
In a new conversation you explain again what was promised and how far it got.
With Jaekit you get a record. Without it, just words.
The same work, handed over in a plain conversation and through Jaekit. Either way, the same agent does the work.
| When | Plain conversation | With Jaekit |
|---|---|---|
| Starting the work | PlainWhat finished means is scattered across the chat. | JaekitThe completion conditions are written down first, and work starts after you confirm them. |
| A check runs | PlainOnly the words “it passed” are left. | JaekitEach check your agent runs through ha is recorded on one line: the commit, the command and the result. |
| The code changes again | PlainYou can't tell whether the earlier pass still holds. | JaekitThe earlier pass stays in the record but no longer counts. The check has to run again on the current code. |
| A check that already passes before the change | PlainA check that can't tell whether the new behavior exists still looks like a pass. | JaekitA check for new behavior counts only with a record of it failing on the code before the change, because the behavior was missing. |
| Existing tests are edited | PlainA loosened test still shows “pass”. | JaekitA test change the request didn't allow, or one that weakens a test, blocks completion until you confirm it. |
| The conversation ends | PlainYou explain everything again. | JaekitIn a new conversation, name the goal folder and ask to continue; the agent reads the folder and its record and picks up from there. |
| “Done” | PlainWhether it is finished is settled by words. | Jaekitha works out completion from the record, the documents in the goal folder and Git, and records it. |
You do three things.
Ask, confirm, read. Your agent plans, builds and checks in between. You hand over work in the agent conversation; the terminal is mostly for installing and updating.
Describe the work
Send your request in the agent conversation. Spec writes the goal and its completion conditions to SPEC.md and stops; no code changes yet.
/$spec:spec add a "Forgot password" link
Read it and answer yes
Ask for changes if a condition is missing. If it is right, reply yes when Spec asks whether to implement now. From then on your agent follows Seal to plan, build and check to the end, and asks only when something is yours to decide or to check.
your agent runs → ha check · spar · ha done
Read the report
ha done records completion only when every required condition is met by a check record or your confirmation. A report of what changed and what was checked lands in PROGRESS.md.
PROGRESS.md ← completion report
Four parts · who does what
SpecInstructions for the goal
What your agent follows to turn a request into a goal document. It writes the goal, the completion conditions and a review tier, then stops.
SealInstructions to finish
Keeps your agent planning, building, checking and fixing against the confirmed goal. It only reads the goal document.
haThe program that records
Records every check your agent runs through ha check, and works out completion from those records, the documents in the goal folder and Git. It never calls an AI model.
SparReview by other AIs
Sends the same material to reviewers outside the working agent's conversation, and records what they find and how each finding was handled.
Four messages, start to finish.
A fictional session that plays only in your browser. Press the next input and watch for three things: the check failing before the change (✕), passing after it (✓), and the completion record ha done leaves.
Fictional · not connected to an agent or repository, and the record numbers are not results of a real run.
AC-1 completion condition 1 · baseline the check run before the change · seq record number · spar an independent review run
Not “done”. Evidence.
Each goal gets one folder of ordinary files in your project. If the conversation ends, a new one reads this folder and picks up from there.
SPEC.mdThe goal and its conditions, as you confirmed them← SpecPLAN.mdHow each condition is checked, and what may change← SealREVIEW.mdReview plan and Spar summary← SealPROGRESS.mdProgress and the completion report← Sealruns.jsonlThe run record; only ever appended to← ha
- Changed
- 1 files and 1 commits since base f46020ce6f77
- Checked
- 2 of 2 required conditions satisfied (2 by check records, 0 by user confirmation)
- To review
- none
- Remaining limits
- assurance local; check author: executor
- Next step
- none; completion record seq 6 holds
- How to read it
hacomputes these five lines from the record, the goal document and Git; the agent does not rewrite them. - base is the commit the work started from. seq 6 is the number of the record that holds the completion.
- local means the evidence comes from this computer. check author: executor means the working agent also wrote the checks.
What it promises, and what it doesn't.
Records stay in your project
Goals, plans and progress are files in docs/specs/<goal>/. Installing, updating or uninstalling never deletes them.
No AI decides completion
ha is a program that applies fixed rules. The same record, the same documents in the goal folder and the same Git state give the same result.
Complete is not “bug-free”
It means the agreed conditions are met by the records. Your agent writes the checks and the evidence lives on this computer, so a person still looks at the actual result.
Spar review leaves your machine
In a Spar review, each reviewer sends the criteria, the rules and the change (the diff) to its AI provider, and project files the reviewer reads can go too. If code must not leave your machine, don't run Spar.
claude → Anthropic · codex → OpenAI · agy → Google
Hand over your first goal.
$ brew install jgoneit/tap/jaekitYou need a project folder managed with Git, Claude Code or Codex (CLI or desktop app), and macOS or Linux.
macOS and Linux supported · WSL2 prepared, not yet checked · Seal not available on native Windows
The password-link example and record numbers on this page are fictional.