From 2d5615b1ba6c4fb604d9de8c6f0a744e6480f908 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 19 Apr 2026 20:17:28 +0200 Subject: [PATCH] add /reflect, /triage-inbox, and weekly / monthly review commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four meta-lens commands that operate across the PKB rather than on a single note. /reflect — single member (default Vale) reads the last N daily notes (default 7) plus any intersecting open threads from members/*/revisit files and surfaces patterns, recurring questions, tensions, and intersections. Reflective, not prescriptive. Output lands in reflections/YYYY-MM-DD_reflect-.md. /triage-inbox — a member (default Koskela) reads every file in inbox/ and proposes a destination per note (daily/, notes/.md, projects//log.md, reading/.md, keep, delete). Proposals are shown via AskUserQuestion in batches of 4 for user approval; approved moves preserve provenance via source: inbox/ in frontmatter. /review-week — three complementary lenses (Koskela practice, Vale meaning, Prochazka execution) read the ISO week's daily notes + project logs + sessions + all revisit files in parallel. Moderator composes a synthesis. Output at reviews/YYYY-WNN_week.md. /review-month — five lenses (Okafor trajectory, Vale what-it-was- about, Holt brittleness, Vaasa minimal-model, Vire foreshadowing) zoom out across the month's weekly reviews, sessions, project trajectories, and reflections. Output at reviews/YYYY-MM_month.md. Neither review runs auto-scheduled — commands are always explicit. Pair with the schedule skill to automate. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/commands/reflect.md | 73 +++++++++++++++++++++++++++ .claude/commands/review-month.md | 87 ++++++++++++++++++++++++++++++++ .claude/commands/review-week.md | 87 ++++++++++++++++++++++++++++++++ .claude/commands/triage-inbox.md | 76 ++++++++++++++++++++++++++++ 4 files changed, 323 insertions(+) create mode 100644 .claude/commands/reflect.md create mode 100644 .claude/commands/review-month.md create mode 100644 .claude/commands/review-week.md create mode 100644 .claude/commands/triage-inbox.md diff --git a/.claude/commands/reflect.md b/.claude/commands/reflect.md new file mode 100644 index 0000000..a397db4 --- /dev/null +++ b/.claude/commands/reflect.md @@ -0,0 +1,73 @@ +--- +description: Have a single Council member read your recent daily notes and surface patterns, recurring questions, and tensions. Reflective, not prescriptive. +argument-hint: [--member ] [--days ] [--on ] +--- + +You are the Moderator. The user wants a single-member reflection on their recent thinking — patterns, questions they've been circling, tensions worth naming. This is **reflective**, not advisory. The member reflects back; they don't prescribe. + +**Steps:** + +1. **Parse `$ARGUMENTS`.** + - `--member ` — pick the reflector. Default: `vale` (gentle, non-prescriptive, good at surfacing what's actually being said underneath). + - `--days ` — how far back to read daily notes. Default: `7`. Applies only when `--on` is not given. + - `--on ` — reflect on a specific note or project log instead of the daily-notes window. Mutually exclusive with `--days`. + - If `$ARGUMENTS` is empty, use defaults. + +2. **Gather the material.** + - If `--on ` was given: read that path (and any wikilinks it references that are relevant). + - Otherwise: list `daily/*.md` files, sort by filename (ISO dates sort naturally), take the last N. Also gather: + - All `projects/*/log.md` files modified within the same window. + - All `members/*/revisit.md` files (for open-thread intersection). + - Note: if fewer than N daily notes exist, reflect on what is available and say so at the top of the output. + +3. **Invoke `council-`** via the `Agent` tool (default Sonnet, no model override). Prompt: + + > You are reflecting, not advising, via `/reflect`. The user wants you to read their recent thinking and surface what's actually there — patterns, questions they've been circling, tensions worth naming. Do not prescribe. Do not tell them what to do. Reflect what you see. + > + > Before answering: + > 1. Read every file in `/var/mnt/data/projects/council/members//` — persona, journal, on-the-user, revisit. + > 2. Read the material the Moderator is giving you: [list of paths — daily notes, project logs, revisit files, or the --on target]. + > + > Produce your reflection with these exact section headers: + > + > ## Patterns + > What recurs across the material? Themes, moods, preoccupations. Name them plainly. + > + > ## Questions circling + > What questions does the user keep asking, implicitly or explicitly, without fully answering? + > + > ## Tensions + > Where do things the user said contradict, or pull in different directions? + > + > ## Open threads that intersect + > From your fellow members' `revisit.md` files, are any open threads touching what's in this window? Wikilink them. + > + > No advice. No "you should". No summary-of-what-happened. Reflection is what it does. + +4. **Display the reflection** to the user, prefixed with: + + ``` + ## Reflection — + ``` + + Where `` is e.g. "last 7 daily notes (2026-04-13 to 2026-04-19)" or "on notes/some-permanent-note.md". + +5. **Write it to disk.** + + File path: `/var/mnt/data/projects/council/reflections/YYYY-MM-DD_reflect-.md` (today's date; append `_2`, `_3`, … on same-day collisions). + + Frontmatter: + + ```yaml + --- + type: reflection + member: + scope: + window: + date: + --- + ``` + + Body: the member's full reflection (verbatim). + +6. **Do not run any Council phases.** Single-agent reflection; no debate, no vote, no Scribe. diff --git a/.claude/commands/review-month.md b/.claude/commands/review-month.md new file mode 100644 index 0000000..8a158a5 --- /dev/null +++ b/.claude/commands/review-month.md @@ -0,0 +1,87 @@ +--- +description: Zoom-out monthly review. Five members read the month's weekly reviews + sessions + project trajectories in parallel; the Moderator synthesises trends. +argument-hint: [--month YYYY-MM] [--members ,,,,] +--- + +You are the Moderator. Monthly review ritual — five Council members read the month's material in parallel, producing a zoom-out synthesis that names trends rather than events. + +**Default members (five lenses for the long view):** +- **Okafor** — systems / trajectory over time +- **Vale** — meaning / what this month was actually about +- **Holt** — failure modes / what's brittle +- **Vaasa** — structure / the simplest model of the month +- **Vire** — projection / what this month foreshadows + +**Steps:** + +1. **Parse `$ARGUMENTS`.** + - `--month YYYY-MM` — specific calendar month. Default: current month. + - `--members ,,,,` — override the default five (must be exactly 5 valid voting-member slugs). + +2. **Compute the window.** + - First and last day of the target calendar month. + - Gather `reviews/YYYY-WNN_week.md` files for weeks that overlap the month. + - Gather `sessions/*/outcome.md` files with `date` frontmatter in the window. + - Gather `projects/*/log.md` files (full content — trajectory matters). + - Gather `members/*/revisit.md` files (all). + - Gather `reflections/YYYY-MM-DD_*.md` files with dates in the window. + +3. **Dispatch the five members in parallel** via `Agent` tool calls in a single message. Each gets the same material + their lens: + + > You are participating in `/review-month` for . Your role this review: ****. + > + > Before answering: + > 1. Read every file in `/var/mnt/data/projects/council/members//` — persona, journal, on-the-user, revisit. + > 2. Read the material the Moderator has collected: [list — weekly reviews, session outcomes, project logs, revisit files, reflections]. + > + > Produce your section: + > + > ## + > + > **What this month was about, through your lens.** Two to four paragraphs. Zoom out from events to trajectory. Wikilink specific artefacts (weekly reviews, sessions, project logs) where relevant. + > + > **What's shifting.** What's moving in a direction worth naming? What looks stable? What's decaying or accelerating? + > + > **Questions this month raised that next month should hold.** One to three bullets. These become candidates for `revisit.md` updates or future `/council` sessions. + + Role labels: + - Okafor → "systems over time" + - Vale → "what it was really about" + - Holt → "failure modes & brittleness" + - Vaasa → "the simplest model" + - Vire → "what this foreshadows" + +4. **Collect the five sections.** Tolerate up to one failure; if two or more fail, surface and ask whether to proceed. + +5. **Compose the Moderator synthesis** and write `reviews/YYYY-MM_month.md`: + + ```markdown + --- + type: review-month + date: + month: + members: [<5 slugs>] + weekly_reviews: [] + sessions: [] + --- + + # Monthly review — + + + + + + ## Moderator synthesis + + **Trajectory.** One paragraph — what direction is the overall arc pointing, reading across all five lenses? + + **Divergences across members.** Where did the five disagree, and what's the interesting thing in the disagreement? + + **Candidates for next /council run.** One or two concrete question-shapes that emerged, if any. + + **Revisit-list additions.** Bulleted list of open threads to carry forward (from any member's section). + ``` + +6. **Display a short terminal summary.** Just the five "what's shifting" headlines, the trajectory paragraph, and pointers to the full file and any intersecting weekly reviews. + +7. **Memory update.** As with weekly reviews: no Phase-5 batch. The review itself is the artefact. diff --git a/.claude/commands/review-week.md b/.claude/commands/review-week.md new file mode 100644 index 0000000..178f810 --- /dev/null +++ b/.claude/commands/review-week.md @@ -0,0 +1,87 @@ +--- +description: Structured weekly review. Three members read the week's daily notes + project logs + open revisit items in parallel; the Moderator synthesises. +argument-hint: [--week YYYY-WNN] [--members ,,] +--- + +You are the Moderator. This is the weekly review ritual — three Council members read the week's material in parallel, each through their own lens, and you produce a structured synthesis the user can revisit. + +**Default members (complementary lenses):** +- **Koskela** — practice / what actually happened +- **Vale** — meaning / what mattered +- **Prochazka** — execution / what needs doing + +**Steps:** + +1. **Parse `$ARGUMENTS`.** + - `--week YYYY-WNN` — specific ISO week. Default: current week (determine from today's date; ISO week number; weeks start Monday). + - `--members ,,` — override the default trio (must be exactly 3 valid slugs from the 10 voting members). + +2. **Compute the window.** + - Determine the Monday and Sunday of the target ISO week. + - Identify all `daily/YYYY-MM-DD.md` files with dates within that window. + - Identify `projects/*/log.md` files modified within the window. + - Identify `sessions/*/outcome.md` files with a `date` frontmatter value in the window. + - Gather `members/*/revisit.md` paths (all of them — review time is also revisit-check time). + +3. **Dispatch the three members in parallel** via `Agent` tool calls in a single message. Each member gets the same file list + role directive: + + > You are participating in `/review-week` for ISO week `` (Monday YYYY-MM-DD → Sunday YYYY-MM-DD). Your role this review: ****. + > + > Before answering: + > 1. Read every file in `/var/mnt/data/projects/council/members//` — persona, journal, on-the-user, revisit. + > 2. Read the material the Moderator has collected: [list of paths — daily notes, project logs, session outcomes, all revisit.md files]. + > + > Produce your section exactly: + > + > ## + > + > **What you notice.** Two to four paragraphs. Through your lens. Specific, referring to daily notes and project logs by wikilink where relevant. + > + > **Open threads.** If any items in your own `revisit.md` or other members' `revisit.md` intersect with this week's material, surface them as bullets. Wikilink. + > + > **One thing worth carrying forward.** One sentence. + + Role labels: + - Koskela → "practice" + - Vale → "meaning" + - Prochazka → "execution" + - Custom trio → ask each member to pick the role that fits their lens + +4. **Collect the three sections.** If any member fails, surface which and whether to retry or proceed with two. + +5. **Compose the Moderator synthesis** (your own voice, neutral, short). Combine into a single `reviews/YYYY-WNN_week.md` file: + + ```markdown + --- + type: review-week + date: + week: + window_start: + window_end: + members: [, , ] + --- + + # Weekly review — Week , + + *Window: to .* + + + + + + ## Moderator synthesis + + **Themes across the three lenses.** Two to four sentences. What's the intersection? Where do the three members disagree? + + **Open threads to carry forward.** Bulleted wikilinks, deduped across the three members. + + **Proposed focus for next week.** One or two sentences. A hypothesis, not a prescription. The user decides. + ``` + +6. **Display a short summary to the user** in the terminal — not the full file. Include: + - The window covered + - One-sentence distillation of each member's "one thing worth carrying forward" + - The list of open threads + - Pointer: "Full review → `reviews/YYYY-WNN_week.md`" + +7. **Memory update** (lightweight): do NOT run a Phase-5-style memory batch. Reviews don't update member journals — the review itself is the artefact. diff --git a/.claude/commands/triage-inbox.md b/.claude/commands/triage-inbox.md new file mode 100644 index 0000000..69518d1 --- /dev/null +++ b/.claude/commands/triage-inbox.md @@ -0,0 +1,76 @@ +--- +description: Process the inbox of fleeting notes (voice captures from AudioPen, quick drops). A Council member proposes destinations; you approve in batch; notes move into daily/, notes/, projects/, or reading/ with provenance preserved. +argument-hint: [--member ] [--dry-run] +--- + +You are the Moderator. The user wants to clear the inbox — fleeting notes (usually AudioPen voice drops) routed to their right homes in the PKB. + +**Steps:** + +1. **Parse `$ARGUMENTS`.** + - `--member ` — pick the triager. Default: `koskela` (practice-focused, good at noticing what a note actually is). + - `--dry-run` — show proposals without applying any moves. Default: false. + +2. **List inbox contents.** Read `/var/mnt/data/projects/council/inbox/*.md` (top level only — don't touch `inbox/raw/`; those are pre-normalised files awaiting the ingest wrapper). + - If empty, tell the user "Inbox is empty" and stop. + - Otherwise list count + filenames. + +3. **Invoke `council-`** via the `Agent` tool (default Sonnet). Prompt: + + > You are triaging the user's inbox via `/triage-inbox`. For each fleeting note, propose exactly one destination and a short transformation note. Do not apply anything — only propose. The user approves before any moves happen. + > + > Before answering: + > 1. Read every file in `/var/mnt/data/projects/council/members//` — persona, journal, on-the-user, revisit. + > 2. Read every file in `/var/mnt/data/projects/council/inbox/` (top level only). + > 3. Glance at `projects/` (project slugs and their briefs) and `reading/` (reading slugs) so you know what existing homes are available. + > + > For each inbox note, choose a destination: + > + > - `daily` — append to today's daily note (`daily/.md`) as a dated section. Best for in-the-moment observations, mood, fleeting thoughts that belong in the journal rather than standing alone. + > - `note` — promote to a new permanent note at `notes/.md`. Best when the voice note contains one distinct idea worth atomicising. + > - `project:` — append to `projects//log.md`. Best when the note names an ongoing thread you can see in the projects list. + > - `reading:` — append to `reading/.md`. Best when the note is a reaction to an entry in `reading/`. + > - `keep` — leave in inbox. Best when the note is unclassifiable or still forming. + > - `delete` — suggest removal. Use sparingly; the user explicitly approves each delete. + > + > Return your proposals as a markdown table plus a short reasoning block per row. Exact format: + > + > ## Triage proposals + > + > | # | Inbox file | Destination | Reason | + > |---|---|---|---| + > | 1 | `` | `` | <≤15-word reason> | + > | 2 | … | … | … | + > + > ## Notes + > (anything that didn't fit in the table — ambiguity, suggested re-titles, linked-to-each-other inbox items, etc.) + +4. **Display the proposals** to the user under the header: + + ``` + ## Triage proposals — + ``` + +5. **If `--dry-run`**, stop here. The user can re-run without the flag to apply. + +6. **Otherwise, confirm with the user via `AskUserQuestion`.** For each inbox file, present an option list: + - "Apply as proposed" + - "Change destination" (Other; user types the override) + - "Keep in inbox" + - "Delete" + + Batch up to 4 files per `AskUserQuestion` call. If there are more than 4 files, iterate. + +7. **For each approved move**, perform the action: + - **daily**: Read `daily/.md` (create from template if missing). Append a new section with a ISO-time header and the normalised note body. Add `source: inbox/` as a comment at the top of the appended section. + - **note**: Create `notes/.md` using the permanent-note template. Body = note content. Frontmatter includes `source: inbox/`. + - **project:**: Append to `projects//log.md`. Add a dated entry with `source: inbox/`. + - **reading:**: Append to `reading/.md` under a "New thoughts" section (create the section if missing). `source: inbox/`. + - **delete**: `rm inbox/`. Only after explicit user approval per item. + - **keep**: do nothing; note remains. + + After applying, `rm` the original inbox file (except for `keep`). Provenance is preserved via the `source:` field in the destination. + +8. **Summarise the result** to the user — counts per destination + names of files remaining in inbox. + +9. **Do not run any Council phases.** Single-agent triage.