End of session. Five skills for Claude Code that turn a working session into a document you and or your team can read. You can then check it against what actually happened.
You spent the afternoon on a CSV import. Rows came in with a trailing comma, a filter should have caught empty fields and didn't, and it took most of the day to find. The manager wants your efforts in the ticket. You close the window.
The session holds the only complete record of the events, and when a session closes the record disappears.
On Monday you write four lines from memory and you only remember the wins. The filter that looked correct didn't work and you don't remember the errors. Six weeks later someone tries it again.
We put up skills that you can use to turn a session into a document. They read the transcript, record failures as well as wins. They write for people rather than a model.
One model writes the document. The same model checks it. Ask it to confirm its own draft and it confirms. Writer equals checker, and the check inherits every judgment that produced the sentence. A fabricated line reads exactly like a true one, which explains "it looks fine."
A document that names no command, path or number, and a checker that declines to pass it:
You can't walk back an unchecked document. If you wrote code that failed you need an audit trail. We can't depend on just session memory even if you keep your markdown files in a database.
We suggest that you write it where git will place it. If you don't know how to set up a
git server, you may have no access to a versioning system. session-writeup puts your EOS
document at docs/sessions/YYYY-MM-DD-short-slug.md in the repository you worked in, so a
reviewer can find it in the same diff as the change. It creates the directory, never overwrites
a file, prints the path, and doesn't commit. That decision stays yours.
Then run a program that can fail. The session-writeup skill carries a Python script
called verify_writeup.py. It pulls every command, path and number out of the finished
document, looks for each one in the session record, and exits non-zero on anything it can't
find. It reads the finished text against the transcript. Claude Code runs it for you, and you
can run it yourself.
Take the register from the developer, not from a template. It uses one sample: what you captured in that session. It makes it humanized. It measures the length of your sentences run, whether you use contractions, what you call the things in your own system. Type four terse prompts and it stays plain rather than inventing a voice for you. A reader understands plain writing rather than an impression of your vernacular.
The skill makes four passes, each reporting rather than rewriting:
| skill | what it does |
|---|---|
concision |
names which of five things made the draft long, checks five structural slots, finds the verb buried in a noun |
american-usage |
flags where an American would have chosen a different word, preposition or spelling. Five families, each flag carrying its confidence |
prose-audit |
counts ten mechanical signals per thousand words, and shows what a revision changed |
quote-check |
opens the file a quotation cites and looks for the words, and for the line |
The method behind them isn't something we invented. The concision pass follows the Stanford
Graduate School of Business method with the five capital sins from Joseph McCormack's Brief.
The rules pass follows Strunk and White. american-usage starts from Swan and Smith on
first-language interference and from Pawley and Syder, who named nativelike selection in 1983.
Every finding names which standard it came from, so you can argue with the standard rather than
with the tool.
Accuracy, measured. Time, not measured.
A document describing a real session, with three things planted in it that never happened: a script that does not exist, a test run nobody ran, an invented count. The checker flagged all three and passed the seven true statements. Remove the three and it passes everything.
Two fixtures ship with it, so you can reproduce what follows rather than take it from us. From the top of the repository:
cd skills/session-writeup
python3 scripts/verify_writeup.py tests/writeup-ungrounded.md --session tests/session.jsonl
8 assertions checked, 4 not found exit 1
python3 scripts/verify_writeup.py tests/writeup-grounded.md --session tests/session.jsonl
8 assertions checked, every one found exit 0
The ungrounded fixture, checked against the session it claims to describe:
quote-check refuses the same way, on a document that cites nothing:
The gap that is still open. Nobody has measured writing this up at the end of a session against reconstructing it on Monday. We haven't either. Closing it takes one team, both ways, over a month of real tickets. Until somebody runs that, treat any time saving you read here as unmeasured, including ours.
npx skills add tadelstein9/eos
/plugin install session-writeup@eos
Pass --copy if you want real files. npx skills add symlinks by default.
You have to ask. At the end of a session you tell Claude Code what you want, in whatever words you use:
write this up
document what we did
summarize the changes for the ticket
what is left to do
Say which of the two you want. One covers everything that happened. The other gives the state of the code now: what it does, what nobody finished, what comes next. They aren't the same document, and guessing wrong costs you the last five minutes of your session.
Claude Code runs the checker on the finished document. You can also run it by hand:
python3 scripts/verify_writeup.py docs/sessions/2026-08-10-csv-import.md \
--session ~/.claude/projects/my-project/SESSION.jsonl
Read the document before you send it. The checker looks for every command, path and number in the session record. It confirms you wrote down what happened. It can't tell you that you understood it. Describe the wrong cause and the sentence still passes.
Check a finding before you change anything. Rename a file after the session ends. Its path drops out of the transcript, and the checker reports it missing. The sentence holds. The flag doesn't. Decide which, and say so in the document. Don't edit a true line to keep the tool quiet.
Tell it where the session is. You pass --session every time. It has no default. Under
Claude Code the transcripts sit in ~/.claude/projects/, one directory to a project.
Leave --include-assistant off unless you know why you want it. It adds the assistant's
own prose to the record. A document written during the session can match itself.
Open an issue at https://github.com/tadelstein9/eos/issues
Name the skill, paste the error, and give the command you ran. If a check fired on something that was correct, include the line it flagged.
We use Claude Code every day, and these came out of a working application, Colophon Works.
Written by Tom Adelstein. Apache-2.0.


