Journaling Sessions
Capture what a session produced as structured, separable, retrieval-ready
entries — prose with metadata, one idea each — that a future session can find
and reason about in isolation. The quality bar is not "does this summarize the
session" but "will a future session, retrieving this cold months from now, be
measurably better for having it."
These entries are raw material: a downstream process clusters many of them into
generalizations, and repeated reinforcement promotes the durable ones into
long-lived guidance. Write each entry so that clustering works — that is what
every rule here optimizes for.
This skill produces raw capture. It runs an automatic multi-pass loop so you
get thorough output from a single invocation — you do not need to ask for
"multiple passes."
What a session produces
Three kinds of knowledge; capture all three, not only the most obvious:
- Conclusions — decisions made, facts discovered, tradeoffs analyzed,
hypotheses formed. What a meeting summary would contain.
- Process dynamics — the shape of the reasoning: where breakthroughs
happened, where we got stuck, what surprised us, what assumptions proved wrong.
- Perceptions — what the user cared about, what engaged them or felt like
overhead, what they pushed back on and why.
The three-part framing is a coverage checklist, not a prediction of how entries
cluster. Underjournaling conclusions is fine; underjournaling perceptions is a
systematic blind spot.
When to produce
- The session was substantive (not quick Q&A).
- Something was decided, discovered, or perceived worth remembering.
- An authoritative source was read/ingested end-to-end.
- The user asks ("journal", "log this", "wrap up"), or the session is clearly
ending.
Were you asked, or did you notice? — write, or offer first
How this skill activated decides whether you write the journal now or only offer
it. The journal is real work — often several thousand tokens — and every entry
you write lands in the user's long-term store; producing one unbidden, or on a
session that wasn't worth it, is the cost to avoid.
- The user asked — write now. "journal", "log this", "wrap up", or any
request to preserve what was worked out ("don't lose this", "before I
forget", "so next time we don't relitigate"). Run the loop below and write the
file. No confirmation step.
- You activated on your own — offer first. The session is winding down and
you judged it substantive (3+ decisions/findings), but the user voiced no wish
to capture — e.g. a bare "that's everything, thanks." Do not write the
journal. Emit a single one-line offer naming what is capturable, then stop:
"This session worked out 4 decisions and a dead end worth journaling — want me
to capture them?" Write the entries only after the user accepts.
- One offer, not a nag. If the user declines, ignores it, or says stop, do
not offer again this session.
- Match a shown cadence. If the user already journaled once this session,
you may offer again when the next arc of work finishes — they've shown they
want this session captured.
When you can't tell which path you're on, offer — don't auto-write.
Pick the mode
Most sessions are one of two shapes; the capture questions differ. Pick first.
- Implementation / decision mode — the session did work: made a choice,
diagnosed a bug, designed a component, ran an experiment, built something. Use
the Conclusions / Process / Perceptions framework below.
- Reference-ingestion mode — the session converted an authoritative source
(standard, textbook, regulation, paper, framework docs, teaching material) into
entries. The reliable signal: most entries would have
origin: reading. Use
the eight-category taxonomy in references/reference-ingestion.md, and
detect any declared downstream use (implementation / teaching / cross-project /
positioning) before capturing — that file explains how.
A session can be both (implementation-targeted reference-ingestion is canonical);
run both frameworks.
The workflow — automatic multi-pass
Once you are writing — the user asked, or accepted your offer (see "Were you
asked, or did you notice?" above) — produce all entries in a single file. Do not
pause for approval between entries. If a journal file already exists
for this session, read it first and only add what is not yet captured. If the
session contains ready-made entry drafts (e.g. from a questioning/critique pass),
include them verbatim — they are already shaped — then add the rest.
Then run this loop internally, before presenting anything:
- Identify the mode (+ downstream use if reference-ingestion).
- Pass 1 — produce all entries for the chosen framework.
- Self-check (silent) against the three coverage axes in
references/coverage-check.md: source, downstream-use, measurability.
- If gaps: run pass N+1 adding only the missing entries. Repeat until the
coverage signals are clean, or a 3-pass cap is reached. Pass 1 routinely
under-captures, often by a lot; this loop is the mitigation, not optional.
- Present once: the file, the entry count and its breakdown by entry type
("ran K passes; coverage clean").
- One surviving offer: only if a downstream use was declared and remains
thin after the cap, offer a single targeted pass naming the specific axis.
Otherwise stop — do not offer a generic "second pass."
For long runs (40+ entries), save after each arc to avoid quality drift; the user
can say "continue journaling" to resume.
How to produce — implementation mode
Work through these in order. Skip any with no answer. Each becomes one or more
entries. Aim for at least one process or perception entry per session.
Conclusions.
- What was decided? What was chosen, what was rejected, what evidence drove it.
Include the WHY — the reasoning matters more than the outcome.
- What was discovered? Bugs diagnosed, research findings, empirical
observations, undocumented patterns. Include the source.
- What tradeoffs were analyzed? Approaches compared, dimensions used, winner,
conditions where the loser would win.
- What hypotheses changed? Created, confirmed, refuted, with the evidence.
- What contradicted existing knowledge? Both sides and how to resolve.
- What connects across domains? Structural similarities, shared principles.
Process dynamics.
- Where did breakthroughs or turning points happen? The reframing question, the
observation that changed direction — high-value reusable reasoning patterns.
- Where did we get stuck or go wrong? Dead ends, wrong assumptions, wasted
effort, what Claude got wrong and how it was corrected. A system that only
remembers successes has survivorship bias.
- What assumptions did Claude bring that were challenged? Default
recommendations pushed back on, consensus that didn't apply.
Perceptions.
- What did the user care about most — not the topic, but what within it
mattered (depth vs speed, correctness vs progress, elegance vs pragmatism).
- What was the user's energy like — what engaged them vs felt like a chore.
- What would help a future instance work better with this user on this topic?
How to produce — reference-ingestion mode
Work through the eight categories in references/reference-ingestion.md in
order, checking each against the source before deciding it does not apply.
Aim for at least one OBSERVATION entry on the source-reading dynamics.
Output
Write entries in the structured envelope defined in
references/output-format.md — the envelope, the full field set (including
visibility, language, and the optional validated boolean), entry types, the
ANTI_PATTERN template, area/domains, refs, confidence, multi-user privacy, and the
VALIDATED marker.
Where the journal goes. Write the file to docs/journal/<YYYY-MM-DD>-<session>.md
by default, so consolidate-knowledge has a defined place to gather from. A
target_store profile with a path overrides that location; use it when the store
lives elsewhere.
Binding to a specific store (optional). By default the envelope is generic — a
placeholder author and example area values — and any structured store can ingest
it. But area and author are scope/partition keys in a typical store (retrieval
filters by author; consolidation runs author+area-scoped), so when you are
journaling into a specific existing store, the host or user can supply an optional
target_store profile that binds them to that store's real vocabulary —
otherwise the entry ingests cleanly and is then silently orphaned from the corpus it
belongs to. The profile is something you are given (stated inline, or by being
pointed at one) — do not hunt for it at a fixed path or invent one. Absent a profile,
behavior is exactly as today. See references/store-binding.md for the profile
shape and binding rules.
Envelope vs prose-only — decide by an explicit signal, not inference. The
envelope exists to be machine-ingested and clustered, so it is the default; drop it
only on an explicit opt-in:
- A
target_store profile is present ⇒ there is a store downstream, so the
envelope is mandatory — never take the prose-only branch.
- The user explicitly says there is no store downstream — "just for my own
re-reading", "no vector store", "skip the envelope" ⇒ emit each entry's CONTENT
prose and skip the envelope. Keep the discipline that carries the value (one idea
per entry, reasoning inline, anti-patterns hunted); drop only the ceremony.
- Neither signal ⇒ default to the envelope. A mis-inferred "no store" yields a
whole file that reads like a journal but no store can parse — the costlier error —
so when unsure, emit the envelope.
Writing quality
Five rules carry most of the value; the full craft is in
references/writing-for-retrieval.md:
- Be concrete and include the reasoning inline. "Connection pooling cut p99
latency 6x under load by reusing TCP+TLS setup" beats "pooling is faster."
- One idea per entry. If it wants to exceed ~300 words, it's two entries.
- Anti-patterns are the most valuable entries — actively hunt for what was
tried and failed, not only what worked.
- Apply the reconstruction test at drafting time: would a future instance
benefit from this specifically, vs. reconstructing it from generic training?
If training already covers it, don't draft it.
- Front-load the distinctive concept and use specific names — the first
sentence does the heaviest retrieval work.
Boundaries
- Live run state is not journal material. The plan, current cursor,
invariants, and mid-run decisions of a run still in flight belong to
compaction-survival's control anchor — rewritten continuously by the same
run so a compaction or reset cannot erase them. Journal entries capture what a
finished stretch of work taught, after the fact; "persist the state so a
reset doesn't lose it" is an anchor ask, not a journaling ask.
- Handing work to a fresh session or teammate is context-handoff's brief,
not a journal.
- Consolidating prior journals into higher-level guidance is the downstream
pass (consolidate-knowledge), not this skill.
1---2name: journaling-sessions3description: Capture knowledge from a work or reference-reading session into structured, separable, retrieval-ready entries for a long-term memory store. Use when the user says "journal", "log this", "wrap up", "session summary", "capture what we learned", or "create registries for everything" — and equally on any request to preserve what was worked out for the future, even about one specific topic — phrasings like "record the decisions/dead ends", "note the reasoning", "don't lose this", "before I forget", "so next time we don't relitigate", "so a future session benefits". Activate proactively when a substantive session is ending after 3+ decisions, findings, or ingested reference items. Covers implementation/decision sessions and end-to-end reference ingestion. Not for quick Q&A or sessions with no novel knowledge; not for consolidating prior journals into higher-level patterns (that is a separate downstream pass).4---56# Journaling Sessions78Capture what a session produced as **structured, separable, retrieval-ready9entries** — prose with metadata, one idea each — that a future session can find10and reason about in isolation. The quality bar is not "does this summarize the11session" but "will a future session, retrieving this cold months from now, be12measurably better for having it."1314These entries are raw material: a downstream process clusters many of them into15generalizations, and repeated reinforcement promotes the durable ones into16long-lived guidance. Write each entry so that clustering works — that is what17every rule here optimizes for.1819This skill produces raw capture. It runs an **automatic multi-pass loop** so you20get thorough output from a single invocation — you do not need to ask for21"multiple passes."2223## What a session produces2425Three kinds of knowledge; capture all three, not only the most obvious:2627- **Conclusions** — decisions made, facts discovered, tradeoffs analyzed,28 hypotheses formed. What a meeting summary would contain.29- **Process dynamics** — the shape of the reasoning: where breakthroughs30 happened, where we got stuck, what surprised us, what assumptions proved wrong.31- **Perceptions** — what the user cared about, what engaged them or felt like32 overhead, what they pushed back on and why.3334The three-part framing is a coverage checklist, not a prediction of how entries35cluster. Underjournaling conclusions is fine; underjournaling perceptions is a36systematic blind spot.3738## When to produce3940- The session was substantive (not quick Q&A).41- Something was decided, discovered, or perceived worth remembering.42- An authoritative source was read/ingested end-to-end.43- The user asks ("journal", "log this", "wrap up"), or the session is clearly44 ending.4546## Were you asked, or did you notice? — write, or offer first4748How this skill activated decides whether you write the journal now or only offer49it. The journal is real work — often several thousand tokens — and every entry50you write lands in the user's long-term store; producing one unbidden, or on a51session that wasn't worth it, is the cost to avoid.5253- **The user asked — write now.** "journal", "log this", "wrap up", or any54 request to preserve what was worked out ("don't lose this", "before I55 forget", "so next time we don't relitigate"). Run the loop below and write the56 file. No confirmation step.57- **You activated on your own — offer first.** The session is winding down and58 you judged it substantive (3+ decisions/findings), but the user voiced no wish59 to capture — e.g. a bare "that's everything, thanks." Do **not** write the60 journal. Emit a **single one-line offer** naming what is capturable, then stop:61 *"This session worked out 4 decisions and a dead end worth journaling — want me62 to capture them?"* Write the entries only after the user accepts.63 - **One offer, not a nag.** If the user declines, ignores it, or says stop, do64 not offer again this session.65 - **Match a shown cadence.** If the user already journaled once this session,66 you may offer again when the next arc of work finishes — they've shown they67 want this session captured.6869When you can't tell which path you're on, offer — don't auto-write.7071## Pick the mode7273Most sessions are one of two shapes; the capture questions differ. Pick first.7475- **Implementation / decision mode** — the session did work: made a choice,76 diagnosed a bug, designed a component, ran an experiment, built something. Use77 the Conclusions / Process / Perceptions framework below.78- **Reference-ingestion mode** — the session converted an authoritative source79 (standard, textbook, regulation, paper, framework docs, teaching material) into80 entries. The reliable signal: most entries would have `origin: reading`. Use81 the eight-category taxonomy in **`references/reference-ingestion.md`**, and82 detect any declared downstream use (implementation / teaching / cross-project /83 positioning) before capturing — that file explains how.8485A session can be both (implementation-targeted reference-ingestion is canonical);86run both frameworks.8788## The workflow — automatic multi-pass8990Once you are writing — the user asked, or accepted your offer (see "Were you91asked, or did you notice?" above) — produce all entries in a single file. Do not92pause for approval between entries. If a journal file already exists93for this session, read it first and only add what is not yet captured. If the94session contains ready-made entry drafts (e.g. from a questioning/critique pass),95include them verbatim — they are already shaped — then add the rest.9697Then run this loop internally, before presenting anything:98991. **Identify the mode** (+ downstream use if reference-ingestion).1002. **Pass 1** — produce all entries for the chosen framework.1013. **Self-check (silent)** against the three coverage axes in102 **`references/coverage-check.md`**: source, downstream-use, measurability.1034. **If gaps:** run pass N+1 adding *only* the missing entries. Repeat until the104 coverage signals are clean, or a **3-pass cap** is reached. Pass 1 routinely105 under-captures, often by a lot; this loop is the mitigation, not optional.1065. **Present once:** the file, the entry count and its breakdown by entry type107 ("ran K passes; coverage clean").1086. **One surviving offer:** only if a downstream use was *declared* and remains109 thin after the cap, offer a single targeted pass naming the specific axis.110 Otherwise stop — do not offer a generic "second pass."111112For long runs (40+ entries), save after each arc to avoid quality drift; the user113can say "continue journaling" to resume.114115## How to produce — implementation mode116117Work through these in order. Skip any with no answer. Each becomes one or more118entries. Aim for at least one process or perception entry per session.119120**Conclusions.**121- *What was decided?* What was chosen, what was rejected, what evidence drove it.122 Include the WHY — the reasoning matters more than the outcome.123- *What was discovered?* Bugs diagnosed, research findings, empirical124 observations, undocumented patterns. Include the source.125- *What tradeoffs were analyzed?* Approaches compared, dimensions used, winner,126 conditions where the loser would win.127- *What hypotheses changed?* Created, confirmed, refuted, with the evidence.128- *What contradicted existing knowledge?* Both sides and how to resolve.129- *What connects across domains?* Structural similarities, shared principles.130131**Process dynamics.**132- *Where did breakthroughs or turning points happen?* The reframing question, the133 observation that changed direction — high-value reusable reasoning patterns.134- *Where did we get stuck or go wrong?* Dead ends, wrong assumptions, wasted135 effort, what Claude got wrong and how it was corrected. A system that only136 remembers successes has survivorship bias.137- *What assumptions did Claude bring that were challenged?* Default138 recommendations pushed back on, consensus that didn't apply.139140**Perceptions.**141- *What did the user care about most* — not the topic, but what within it142 mattered (depth vs speed, correctness vs progress, elegance vs pragmatism).143- *What was the user's energy like* — what engaged them vs felt like a chore.144- *What would help a future instance work better with this user on this topic?*145146## How to produce — reference-ingestion mode147148Work through the eight categories in **`references/reference-ingestion.md`** in149order, checking each against the source before deciding it does not apply.150Aim for at least one OBSERVATION entry on the source-reading dynamics.151152## Output153154Write entries in the structured envelope defined in155**`references/output-format.md`** — the envelope, the full field set (including156visibility, language, and the optional `validated` boolean), entry types, the157ANTI_PATTERN template, area/domains, refs, confidence, multi-user privacy, and the158VALIDATED marker.159160**Where the journal goes.** Write the file to `docs/journal/<YYYY-MM-DD>-<session>.md`161by default, so `consolidate-knowledge` has a defined place to gather from. A162`target_store` profile with a `path` overrides that location; use it when the store163lives elsewhere.164165**Binding to a specific store (optional).** By default the envelope is generic — a166placeholder `author` and example `area` values — and any structured store can ingest167it. But `area` and `author` are scope/partition keys in a typical store (retrieval168filters by `author`; consolidation runs author+area-scoped), so when you are169journaling *into a specific existing store*, the host or user can supply an optional170**`target_store` profile** that binds them to that store's real vocabulary —171otherwise the entry ingests cleanly and is then silently orphaned from the corpus it172belongs to. The profile is something you are **given** (stated inline, or by being173pointed at one) — do not hunt for it at a fixed path or invent one. Absent a profile,174behavior is exactly as today. See **`references/store-binding.md`** for the profile175shape and binding rules.176177**Envelope vs prose-only — decide by an explicit signal, not inference.** The178envelope exists to be machine-ingested and clustered, so it is the default; drop it179only on an explicit opt-in:180181- **A `target_store` profile is present** ⇒ there is a store downstream, so the182 envelope is **mandatory** — never take the prose-only branch.183- **The user explicitly says there is no store downstream** — "just for my own184 re-reading", "no vector store", "skip the envelope" ⇒ emit each entry's CONTENT185 prose and skip the envelope. Keep the discipline that carries the value (one idea186 per entry, reasoning inline, anti-patterns hunted); drop only the ceremony.187- **Neither signal** ⇒ default to the envelope. A mis-inferred "no store" yields a188 whole file that reads like a journal but no store can parse — the costlier error —189 so when unsure, emit the envelope.190191## Writing quality192193Five rules carry most of the value; the full craft is in194**`references/writing-for-retrieval.md`**:1951961. **Be concrete and include the reasoning inline.** "Connection pooling cut p99197 latency 6x under load by reusing TCP+TLS setup" beats "pooling is faster."1982. **One idea per entry.** If it wants to exceed ~300 words, it's two entries.1993. **Anti-patterns are the most valuable entries** — actively hunt for what was200 tried and failed, not only what worked.2014. **Apply the reconstruction test at drafting time:** would a future instance202 benefit from this *specifically*, vs. reconstructing it from generic training?203 If training already covers it, don't draft it.2045. **Front-load the distinctive concept** and use specific names — the first205 sentence does the heaviest retrieval work.206207## Boundaries208209- **Live run state is not journal material.** The plan, current cursor,210 invariants, and mid-run decisions of a run still in flight belong to211 **compaction-survival**'s control anchor — rewritten continuously by the same212 run so a compaction or reset cannot erase them. Journal entries capture what a213 *finished* stretch of work taught, after the fact; "persist the state so a214 reset doesn't lose it" is an anchor ask, not a journaling ask.215- **Handing work to a fresh session or teammate** is **context-handoff**'s brief,216 not a journal.217- **Consolidating prior journals into higher-level guidance** is the downstream218 pass (**consolidate-knowledge**), not this skill.