Append a timestamped tagged line (finding / decision / summary) to the session journal at .hook-state/session-journal.md, so a discovered fact, a settled choice, or a transient breadcrumb survives.
A long writing session will compact. When it does, the conversation summary keeps the gist and drops the detail — the gotcha you found three hours ago, the reason you picked one framing over another, the exact key you decided not to cite. /note is the kit's defense: it writes one timestamped line to a durable-within-the-session journal before the detail is at risk, so CLAUDE.md → After Compaction can re-read it and restore what the summary lost.
This is deterministic memory, not judgment (CLAUDE.md → Model vs Code). Do not paraphrase a finding back into the chat and hope it survives — append it. The skill never reasons about the text; it timestamps and stores it. One line, one fact.
Invoke with /note <tag> <text> the moment something is worth not re-deriving:
You discovered a fact or gotcha that cost you effort — a source's real scope, a notation collision, a compile quirk. Tag it finding.
You made a choice with a reason — picked one term for a concept, settled a framing, decided a claim is the author's own and not citeable. Tag it decision.
You want a transient breadcrumb for this working block — "left off mid-paragraph in Results §3.2, the CI still needs checking." Tag it summary.
Proactively, when you sense a session is getting long and dense, before compaction takes the detail.
Do not use /note for things with a permanent home: a settled framing/scope/methods decision belongs in tasks/decisions.md; a recurring reviewer critique belongs in tasks/reviews/; an open task belongs in tasks/todo.md. The journal is short-term working memory, not the archive.
A discovered fact or gotcha — something true you had to work out and don't want to re-derive
Yes — folded
finding tooluse2023 is single-turn QA only; do NOT cite it for multi-turn agent claims
decision
A choice made and why — the reasoning, so future-you doesn't reopen it
Yes — folded
decision standardize on "tool-call accuracy" (not "success rate") across the draft — one term per concept
summary
A transient breadcrumb for the current block — pure "where am I" state
No — discarded
summary mid-rewrite of Discussion ¶2, softening the causal verbs flagged by /claim-check
The split is intentional: findings and decisions are knowledge worth carrying into the next session; a summary is scaffolding that is stale the moment the block is done. journal-fold.sh (below) folds the first two and discards summary-only journals — so over-tagging as summary silently loses the note. If it would matter tomorrow, it is a finding or a decision.
Keep <text> to one self-contained line — it must make sense with zero surrounding context, because post-compaction that is exactly the context it gets. Name the artifact it concerns (a .bib key, a .tex section, a quantity).
The script appends <ISO-timestamp> [<tag>] <text> to .hook-state/session-journal.md (creating the dir + its .gitignore on first use) and echoes back the line plus the running entry count.
Carry on writing. Do not stop to summarize the journal — it accumulates silently and is read only on demand (after compaction) or folded at session end.
An invalid tag or empty text exits non-zero with usage — fix the tag, do not invent a fourth.
When you detect a compaction (a conversation summary appears; earlier detail is gone), CLAUDE.md → After Compaction step 5 has you re-read .hook-state/session-journal.md if it exists. That is the payoff for every /note you logged this session: the findings and decisions you journaled are still there verbatim, even though the chat summarized them away. Read it before resuming — do not draft on a half-restored context.
Tag choice is the load-bearing decision; these settle the common ambiguities:
"I just realized halluc2022 reports a 23% rate, not 32% — I had it backwards." → finding. A corrected fact you must not re-confuse; it has to survive to the next session.
"We're going with IEEE style, not APA — the target journal requires it." → decision (the why is the venue requirement). Then promote it to tasks/decisions.md if it is a settled manuscript-level choice — the /note is the short-term capture, decisions.md is the durable home.
"Currently rewriting Discussion ¶3 to soften the causal verbs; will re-run /claim-check after." → summary. Pure where-am-I state; stale once ¶3 is done. Folding it to handoff would be noise.
"latexmk needs -shell-escape for the minted blocks or the compile-gate fails." → finding. A non-obvious build gotcha worth not rediscovering — exactly what a folded handoff should carry.
"Decided the horizon-scaling sentence is the author's own observation, not a citeable claim — Results §3.2 supports it." → decision. A sourcing judgment with a reason; future-you should not reopen it.
The test in every case: would this matter to a session that starts tomorrow with none of today's chat? Yes → finding/decision. Only-right-now → summary.
The script reports the appended line and the journal's new size:
Noted: 2026-06-03T14:22:05Z [finding] tooluse2023 is single-turn QA only; do NOT cite it for multi-turn agent claims→ .hook-state/session-journal.md (4 entries)
There is no manuscript output and nothing to commit — the journal is gitignored (same lifetime as the rest of .hook-state/). Its only durable trace is what journal-fold.sh carries into the handoff.
Within the session: the journal lives at .hook-state/session-journal.md, gitignored, accumulating one line per /note. It is the across-compaction memory described above.
At session end:.claude/hooks/journal-fold.sh (a SessionEnd hook) reads the journal and folds [finding] and [decision] lines into tasks/handoff-<session-id>.md — appending them under a ## Journal block with per-tag counts, so the next session's Tier-2 boot (CLAUDE.md → Session Boot, "read the latest tasks/handoff-*.md") inherits them. [summary]-only journals are discarded — a journal with no findings or decisions is deleted unfolded. Then the journal is cleared so the next session starts clean.
So a finding is a promise that survives twice — across compaction (re-read) and across sessions (folded to handoff). A summary survives neither; it is honestly transient.
.claude/hooks/journal-fold.sh (SessionEnd) — the consumer: folds findings + decisions into the handoff, discards summary-only. Runs alongside session-end.sh (the /scorecard audit hook).
CLAUDE.md → After Compaction — the reader: step 5 re-reads the journal to recover pre-compaction findings. /note exists so that step has something to recover.
tasks/handoff-*.md — the destination for folded findings/decisions; read at session boot when continuing work.
tasks/decisions.md — for a durable, manuscript-level decision (framing, scope, methods, an approved Protected Claim). A /note decision is its short-term cousin; promote it here if it will outlive the session.
/retro — reads the folded journal findings out of the handoffs when assembling the "what was learned" section of a windowed retrospective.
One fact per note. Two findings in one line means one of them gets lost when you skim the journal post-compaction.
Write the note as if the reader has no memory of this session — because after compaction, they don't.
This is a headless-friendly operation (mode:headless): in an unattended pass, journaling each non-obvious finding/decision as you go is how an autonomous run leaves a trail the next session can pick up — there is no human watching the chat to remember it for you.
The journal is append-only through this skill; there is no /note edit or delete. A superseded note is corrected by adding a newer one, not by rewriting history — the timestamps are the record.
Tagging discipline is the whole game: the difference between "carried to the next session" and "silently dropped" is one word. When unsure whether something is durable, tag it finding or decision — folding a slightly-too-trivial note costs nothing; losing a load-bearing one costs a re-derivation.