Note
Append a timestamped mid-session note to the session journal — finding/decision/summary tags for across-compaction memory. Use when you discover something the session must remember past /compact. Folded to the handoff at session end.From its SKILL.md
npx -y skills add tansuasici/claude-code-kit --skill noteAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.3 KB, as published. Nobody here has run it
Note
Core Rule
Append <ISO8601> [<tag>] <text> to .hook-state/session-journal.md. Tag MUST be one of finding, decision, summary. The journal is transient (gitignored, same lifetime as other .hook-state/*) but durable across /compact within the same session.
Process
scripts/note.sh <tag> <text>
The helper validates the tag, ensures the .hook-state/ dir + .gitignore exist, appends a timestamped line, and prints a confirmation with the new entry count.
Tags
Three only — pick exactly one per note. Don't invent new tags; extend the vocabulary only after a recurring pattern shows up across multiple sessions.
| Tag | Use for |
|---|---|
finding | A non-obvious technical observation worth carrying past /compact (e.g. "qdrant treats null filter as ANY") |
decision | A choice made mid-session that may later become an ADR in tasks/decisions.md (e.g. "going with Drizzle over Prisma") |
summary | A "what state are we in right now" checkpoint, useful before a tool-heavy block (e.g. "auth wired, billing endpoints next") |
The lifecycle differs by tag:
finding/decision→ folded intotasks/handoff-<session-id>.mdat session end (durable)summary→ discarded at session end if no findings/decisions are present (transient breadcrumb)
When to Use
When you discover something that:
- The session needs to remember after
/compact(compaction wipes mid-session findings from the conversation) - Doesn't yet warrant a lesson (correction-driven) or ADR (architectural decision)
- Is too small to commit as a code change
Examples:
scripts/note.sh finding "qdrant client treats null filter as ANY, not none"
scripts/note.sh decision "going with Drizzle over Prisma — see ADR-014 draft"
scripts/note.sh summary "auth wired, billing endpoints next"
Not for:
- Code — use
Edit/Write - Across-session memory — use
tasks/lessons/(correction-driven) ortasks/decisions.md(ADRs) - Long-form content — the journal is one line per entry; for paragraphs use a real file
- Replacing the lesson flow — lessons come from user corrections, not agent self-discovery
Lifecycle
mid-session (you call /note)
└─► .hook-state/session-journal.md (append)
/compact happens
└─► CLAUDE.md → After Compaction tells you to re-read the journal
session ends
└─► .claude/hooks/journal-fold.sh:
├─ findings or decisions present? → fold to tasks/handoff-<session-id>.md
├─ only summaries? → discard
└─ always: rm .hook-state/session-journal.md
The journal never persists across sessions; durable content lands in handoff.
Output Format
scripts/note.sh prints to stdout:
Noted: 2026-05-22T19:30:11Z [finding] qdrant client treats null filter as ANY
→ .hook-state/session-journal.md (3 entries)
The appended line in the journal file is exactly the first stdout line minus the Noted: prefix.
Rules
Always:
- Use
scripts/note.sh— never write to the journal file directly (the helper guarantees timestamp format and tag validation) - Pick a tag explicitly — let the agent's classifier earn its place; never
/note auto - Keep notes one-line — multiple notes if you need to record multiple things
Never:
- Use this skill for content that should be committed (code, ADRs, lessons)
- Read other agents' notes (this is a per-session, local journal — sharing happens via handoff)
- Bypass the helper script — direct
echo >>skips timestamp + gitignore guards
Smoke Test
# 1. Write a finding
./scripts/note.sh finding "test observation"
cat .hook-state/session-journal.md
# Expect: one ISO8601 line with [finding] test observation
# 2. Add a decision
./scripts/note.sh decision "test choice"
wc -l .hook-state/session-journal.md
# Expect: 2
# 3. Invalid tag is rejected
./scripts/note.sh nonsense "ignored"
# Expect: exit 2, stderr: "invalid tag 'nonsense'"
# 4. Missing args rejected
./scripts/note.sh finding
# Expect: exit 2, usage message
End-to-end roundtrip (skill write → fold at session end) is covered in bench/scenarios/s18-note-journal-fold.json.
Pairs With
- CLAUDE.md → After Compaction — instructs re-read of the journal post-compaction
.claude/hooks/journal-fold.sh— SessionEnd companion that consumes the journaltasks/handoff-*.md— auto-populated byjournal-fold.shfrom this skill's outputtasks/lessons/— across-session memory (different time-scale; afindingmay later turn into a lesson if it recurs)
Out of Scope
- Tag vocabulary beyond
finding/decision/summary— extend later if patterns emerge - LLM-classified or auto-tagged notes — agent picks the tag explicitly
- Auto-promotion of
findingentries totasks/lessons/— that's a separate, deliberate lifecycle (/lesson-refreshplus user judgment) - Cross-session journal merging — every session starts with an empty journal
- Reading journal contents during write (this skill writes only; reading happens in
## After Compaction)