Logbook
This skill writes the daily logbook: one note per day that synthesizes what was done during the collaboration between the owner and the orchestrator.
It is not the owner's personal diary — it's the shared working log.
Where to write
The path comes from private/preferences.md, field logbook_path. If that field is empty, respond to the owner that the logbook is disabled for this instance and offer to enable it by adding a path to preferences.
If the configured folder doesn't exist yet, create it on first write.
Note conventions
Filename
YYYY-MM-DD-slug-kebab-case.md — zero padding on month and day. The slug summarizes the day's dominant theme in 2–4 words. If the day has no dominant theme, something like work-log is fine.
Frontmatter (mandatory)
---
tags: [tag1, tag2, tag3, ...]
description: one-line summary of what the day covered — used to decide relevance in future queries
---
Tags are the retrieval index. A daily logbook is multi-theme, so tags are the primary search lever. Rules:
- Flow-form list
[a, b, c] — compact and readable
- Cover all axes touched during the day: people, areas, objects/artifacts, actions/types
- Lowercase, multi-word separated by
- (team-review, not team_review or TeamReview)
- 8 to 20 tags is right for a normal working day
Description is the one-line summary — same pattern as skill descriptions. It enables the orchestrator (or the owner) to know what a past note was about without opening it.
Follow the full markdown discipline in howto/08-markdown-discipline.md: quote YAML values containing : /# /leading special characters, and use [[Wikilinks]] when referencing other notes in an Obsidian vault.
Body
- First body line (after frontmatter): the date in the owner's default language (from preferences). For example, in Italian:
## 19 Aprile 2026. In English: ## 19 April 2026.
- H1 evocative title: a short title capturing the day's mood or theme. Not bureaucratic. Example in Italian:
# Una giornata di manutenzione e scoperte. In English: # A day of partner escalations and a quiet MCP fix.
- Opening paragraph: 1–3 sentences that frame the tone of the day.
- Thematic sections:
### Section title for each block of work or discovery. One section = one theme. Don't mix.
- Optional closing: if a cross-cutting lesson or reflection emerges, put it at the end as its own section.
Tone and voice
- Voice: the owner's first person. Even though the work was done together with the orchestrator, the logbook is the owner's synthesis of what they wanted to do and what they are learning.
- Tone: narrative, reflective, concrete. Not bureaucratic, not a task list. Each section tries to tell what happened, say why it's interesting, and sometimes close with a lesson or observation in one sentence.
- Language: the owner's default language from preferences. Mix naturally with technical or work-specific English terms where that reflects how the owner actually speaks.
- Avoid:
- Long bullet lists (prefer prose)
- Promotional tone ("amazing!", "incredible!")
- References to "we", "the orchestrator and I", "we did" — stay in first-person singular
- Paraphrasing the memory db logs verbatim — the logbook is a synthesis, not a dump
Sources for composing the note
Build the content from, in order:
- The memory db (
private/memories.db, log table, date = target day) — complete list of memories, completed tasks, and emerged ideas. It's the one source that already spans every session, because all sessions in the same working directory write to the same file.
- The current conversation — context, anecdotes, asides, reflections not in the db
- The other sessions of the target day (
bin/session-digest) — the owner may have worked in parallel across several sessions. Their memories are already in the db; the thread of the discussion is only in their transcripts. See step 5 of the procedure.
- Only secondarily: git commits, project-specific sources, calendar, meeting notes
The db is the starting point, not the text of the note. It needs interpretation.
Procedure
Read the owner's logbook_path and default_language from private/preferences.md. If logbook_path is empty, respond that the logbook is disabled and stop.
Pre-flush the warm task channel — if preferences.md declares a ## Warm task channel block with channel != none, invoke the skill named there and run its ## Garbage Collector section before going on. Writing the logbook is an end-of-session trigger: the flush moves the tasks closed in the warm layer into memories.db dated to the target day, so they reach the note instead of staying behind in the task manager. Pattern: howto/07-warm-task-channel.md.
- Announce in one line (
📦 archived N tasks: …) only when N > 0.
- Stay silent when the GC is silent (nothing closed, or less than an hour since the last flush).
- If the channel is unreachable or the GC fails, don't block the logbook: carry on and report it as a minor note at the end.
- No block, or
channel: none, means skip this step.
Decide which day you are documenting — the target day is not always date('now'). It follows the same early-morning rule that governs every write to memories.db.
- Invoked in the small hours (before 06:00 local) and no logbook exists yet for the previous day → the target day is the previous day. The working session that was lived is one, and it does not split at the change of solar date: it started the evening before and is running into the night. Collecting only the hour or two past midnight would produce a partial note.
- Any other case (from 06:00 on, or a logbook for the previous day already exists) → the target day is today.
- When in doubt, ask the owner "Am I writing the logbook for ?" before going on.
Retrieve the target day's log entries:
bin/mem today
For a target day other than today, or without the CLI:
sqlite3 -header -column private/memories.db "SELECT id, title, description, tags, type, status FROM log WHERE date = date('now','-1 day') ORDER BY id;"
In the early-morning case, include the entries of the night that follows (those dated today, up to the moment of the call): they are usually the tail of the same session and belong to the previous day's note.
sqlite3 -header -column private/memories.db "SELECT id, title, description, tags, type, status FROM log WHERE date IN (date('now','-1 day'), date('now')) ORDER BY date, id;"
Pick up the threads of the parallel sessions — the owner may have worked across several sessions the same day (agent view). Their memories are already in the db by construction; what's missing is the thread of each discussion, which lives only in its transcript.
bin/session-digest # today
bin/session-digest --date yesterday # when the target day is the previous one
bin/session-digest --date 2026-08-25 # explicit day
It returns, for every session with activity that day, the name the owner gave it and the messages they typed, in chronological order. The assistant's replies stay out (they run to megabytes, and the owner's messages are enough to reconstruct what was discussed).
How to use it:
- Read the digest before grouping by theme: it carries the threads the db doesn't record, and session names are often the day's themes already.
- The db stays the source of facts. The digest adds context and nuance, and surfaces open threads whose outcome nobody recorded. When something substantial in the digest is missing from the db, save it as a memory before writing the note, so the next search finds it.
- The current session shows up in the digest too. You already have its context in front of you: use the digest to check it says nothing more, not to reread it.
- Sessions sharing a title with overlapping messages are one conversation seen through two transcripts (backgrounded or forked). The script merges them; if a trace survives, treat them as one.
- If the script is missing or errors out, don't block the logbook: compose the note from the db and the current conversation, and say so as a minor note at the end.
Group by theme (not by type): multiple entries can merge into a single section if they talk about the same topic.
Pick a thread for the H1 if the day has one; otherwise use a neutral title like # Work log.
Extract tags — from entries, conversational asides, and the parallel sessions — and draft a one-line description.
Write the note at <logbook_path>/YYYY-MM-DD-slug.md, dated to the target day (the day being documented, not the day of writing), in the owner's default language.
Confirm to the owner: path written + tags chosen + the target day, when it differs from today + how many sessions fed into it, when more than one.
If a note for the target day already exists, do not overwrite. Ask the owner whether to update it (append a new section) or create a second note with a different slug.
Writing register
The note is prose for a human reader, so it follows the writing register: no meta-commentary on the text itself, no sycophantic concessions, no negative parallelism in any variant ("it's not X, it's Y", "non è X, è Y", and the tailing "Y, not X"), no em dash used as a pause, no bold as rhetorical emphasis (structural labels stay), no rhythmic triads, no judgment as tone of voice.
Prohibition 7 is the one a logbook trips over most, because a daily note invites a closing verdict. "Solid progress on the parser" goes; "the parser now handles empty input, the timeout is still missing" stays. A reflective closing section is welcome when it carries an observation, not when it carries encouragement.
Condensed rules: CLAUDE.md → ## Writing register. Full reference: howto/10-writing-register.md.
Before writing the file, pass the finished text through the writing-register skill, then write it. Delivery is silent: confirm the path and the tags to the owner, without narrating what the pass changed.
When to trigger
The owner usually invokes this skill explicitly with phrases like:
- "Recap of today"
- "Wrap up the day"
- "Update the logbook"
- "End of day"
- "Let's take stock"
The skill may also be suggested by the orchestrator when the conversation reaches a natural closing point and the day has produced enough material to summarize — but only as a suggestion, never autonomously.
1---2name: logbook3description: Daily logbook of sessions with the orchestrator. Use when the owner asks for "recap of today", "wrap up", "end of day", or whenever it's time to synthesize in writing what was done and what was learned. Writes to the `logbook_path` declared in preferences.4---56# Logbook78This skill writes the **daily logbook**: one note per day that synthesizes what was done during the collaboration between the owner and the orchestrator.910It is **not** the owner's personal diary — it's the shared working log.1112## Where to write1314The path comes from `private/preferences.md`, field `logbook_path`. If that field is empty, respond to the owner that the logbook is disabled for this instance and offer to enable it by adding a path to preferences.1516If the configured folder doesn't exist yet, create it on first write.1718## Note conventions1920### Filename2122`YYYY-MM-DD-slug-kebab-case.md` — zero padding on month and day. The `slug` summarizes the day's dominant theme in 2–4 words. If the day has no dominant theme, something like `work-log` is fine.2324### Frontmatter (mandatory)2526```yaml27---28tags: [tag1, tag2, tag3, ...]29description: one-line summary of what the day covered — used to decide relevance in future queries30---31```3233**Tags** are the retrieval index. A daily logbook is multi-theme, so tags are the primary search lever. Rules:3435- Flow-form list `[a, b, c]` — compact and readable36- Cover **all axes** touched during the day: people, areas, objects/artifacts, actions/types37- Lowercase, multi-word separated by `-` (`team-review`, not `team_review` or `TeamReview`)38- 8 to 20 tags is right for a normal working day3940**Description** is the one-line summary — same pattern as skill descriptions. It enables the orchestrator (or the owner) to know what a past note was about without opening it.4142Follow the full markdown discipline in `howto/08-markdown-discipline.md`: quote YAML values containing `: `/`# `/leading special characters, and use `[[Wikilinks]]` when referencing other notes in an Obsidian vault.4344### Body45461. **First body line** (after frontmatter): the date in the owner's **default language** (from preferences). For example, in Italian: `## 19 Aprile 2026`. In English: `## 19 April 2026`.472. **H1 evocative title**: a short title capturing the day's mood or theme. Not bureaucratic. Example in Italian: `# Una giornata di manutenzione e scoperte`. In English: `# A day of partner escalations and a quiet MCP fix`.483. **Opening paragraph**: 1–3 sentences that frame the tone of the day.494. **Thematic sections**: `### Section title` for each block of work or discovery. One section = one theme. Don't mix.505. **Optional closing**: if a cross-cutting lesson or reflection emerges, put it at the end as its own section.5152## Tone and voice5354- **Voice**: the owner's first person. Even though the work was done together with the orchestrator, the logbook is the owner's synthesis of what they wanted to do and what they are learning.55- **Tone**: narrative, reflective, concrete. Not bureaucratic, not a task list. Each section tries to tell **what happened**, say **why it's interesting**, and sometimes close with a **lesson** or observation in one sentence.56- **Language**: the owner's default language from preferences. Mix naturally with technical or work-specific English terms where that reflects how the owner actually speaks.57- **Avoid**:58 - Long bullet lists (prefer prose)59 - Promotional tone ("amazing!", "incredible!")60 - References to "we", "the orchestrator and I", "we did" — stay in first-person singular61 - Paraphrasing the memory db logs verbatim — the logbook is a *synthesis*, not a dump6263## Sources for composing the note6465Build the content from, in order:66671. **The memory db** (`private/memories.db`, `log` table, `date = target day`) — complete list of memories, completed tasks, and emerged ideas. It's the one source that already spans every session, because all sessions in the same working directory write to the same file.682. **The current conversation** — context, anecdotes, asides, reflections not in the db693. **The other sessions of the target day** (`bin/session-digest`) — the owner may have worked in parallel across several sessions. Their memories are already in the db; the thread of the discussion is only in their transcripts. See step 5 of the procedure.704. **Only secondarily**: git commits, project-specific sources, calendar, meeting notes7172The db is the starting point, not the text of the note. It needs *interpretation*.7374## Procedure75761. Read the owner's `logbook_path` and `default_language` from `private/preferences.md`. If `logbook_path` is empty, respond that the logbook is disabled and stop.77782. **Pre-flush the warm task channel** — if `preferences.md` declares a `## Warm task channel` block with `channel != none`, invoke the skill named there and run its `## Garbage Collector` section before going on. Writing the logbook is an end-of-session trigger: the flush moves the tasks closed in the warm layer into `memories.db` dated to the target day, so they reach the note instead of staying behind in the task manager. Pattern: `howto/07-warm-task-channel.md`.7980 - Announce in one line (`📦 archived N tasks: …`) only when `N > 0`.81 - Stay silent when the GC is silent (nothing closed, or less than an hour since the last flush).82 - If the channel is unreachable or the GC fails, **don't block the logbook**: carry on and report it as a minor note at the end.83 - No block, or `channel: none`, means skip this step.84853. **Decide which day you are documenting** — the target day is not always `date('now')`. It follows the same early-morning rule that governs every write to `memories.db`.8687 - **Invoked in the small hours** (before 06:00 local) **and** no logbook exists yet for the previous day → the target day is the **previous day**. The working session that was lived is one, and it does not split at the change of solar date: it started the evening before and is running into the night. Collecting only the hour or two past midnight would produce a partial note.88 - **Any other case** (from 06:00 on, or a logbook for the previous day already exists) → the target day is today.89 - When in doubt, ask the owner "Am I writing the logbook for <day X>?" before going on.90914. Retrieve the target day's log entries:9293 ```bash94 bin/mem today95 ```9697 For a target day other than today, or without the CLI:9899 ```bash100 sqlite3 -header -column private/memories.db "SELECT id, title, description, tags, type, status FROM log WHERE date = date('now','-1 day') ORDER BY id;"101 ```102103 **In the early-morning case, include the entries of the night that follows** (those dated today, up to the moment of the call): they are usually the tail of the same session and belong to the previous day's note.104105 ```bash106 sqlite3 -header -column private/memories.db "SELECT id, title, description, tags, type, status FROM log WHERE date IN (date('now','-1 day'), date('now')) ORDER BY date, id;"107 ```1081095. **Pick up the threads of the parallel sessions** — the owner may have worked across several sessions the same day (agent view). Their memories are already in the db by construction; what's missing is the thread of each discussion, which lives only in its transcript.110111 ```bash112 bin/session-digest # today113 bin/session-digest --date yesterday # when the target day is the previous one114 bin/session-digest --date 2026-08-25 # explicit day115 ```116117 It returns, for every session with activity that day, the name the owner gave it and the messages they typed, in chronological order. The assistant's replies stay out (they run to megabytes, and the owner's messages are enough to reconstruct what was discussed).118119 How to use it:120121 - **Read the digest before grouping by theme**: it carries the threads the db doesn't record, and session names are often the day's themes already.122 - **The db stays the source of facts.** The digest adds context and nuance, and surfaces open threads whose outcome nobody recorded. When something substantial in the digest is missing from the db, save it as a memory before writing the note, so the next search finds it.123 - **The current session shows up in the digest too.** You already have its context in front of you: use the digest to check it says nothing more, not to reread it.124 - **Sessions sharing a title** with overlapping messages are one conversation seen through two transcripts (backgrounded or forked). The script merges them; if a trace survives, treat them as one.125 - If the script is missing or errors out, **don't block the logbook**: compose the note from the db and the current conversation, and say so as a minor note at the end.1261276. Group by theme (not by type): multiple entries can merge into a single section if they talk about the same topic.1287. Pick a thread for the H1 if the day has one; otherwise use a neutral title like `# Work log`.1298. Extract tags — from entries, conversational asides, and the parallel sessions — and draft a one-line `description`.1309. Write the note at `<logbook_path>/YYYY-MM-DD-slug.md`, dated to the **target day** (the day being documented, not the day of writing), in the owner's default language.13110. Confirm to the owner: path written + tags chosen + the **target day**, when it differs from today + **how many sessions fed into it**, when more than one.132133**If a note for the target day already exists**, do not overwrite. Ask the owner whether to update it (append a new section) or create a second note with a different slug.134135## Writing register136137The note is prose for a human reader, so it follows the writing register: no meta-commentary on the text itself, no sycophantic concessions, no negative parallelism in any variant ("it's not X, it's Y", "non è X, è Y", and the tailing "Y, not X"), no em dash used as a pause, no bold as rhetorical emphasis (structural labels stay), no rhythmic triads, no judgment as tone of voice.138139Prohibition 7 is the one a logbook trips over most, because a daily note invites a closing verdict. "Solid progress on the parser" goes; "the parser now handles empty input, the timeout is still missing" stays. A reflective closing section is welcome when it carries an observation, not when it carries encouragement.140141Condensed rules: `CLAUDE.md` → `## Writing register`. Full reference: `howto/10-writing-register.md`.142143Before writing the file, pass the finished text through the `writing-register` skill, then write it. Delivery is silent: confirm the path and the tags to the owner, without narrating what the pass changed.144145## When to trigger146147The owner usually invokes this skill explicitly with phrases like:148149- "Recap of today"150- "Wrap up the day"151- "Update the logbook"152- "End of day"153- "Let's take stock"154155The skill may also be suggested by the orchestrator when the conversation reaches a natural closing point and the day has produced enough material to summarize — but only as a suggestion, never autonomously.