Seed/full synthesis in /wiki-compile (and the /save Phase 3 recompile) now delegates the draft to a Sonnet subagent (model: "sonnet") instead of Ollama qwen3 — better prose quality, no local-Ollama dependency. Refresh mode unchanged (surgical, no model). Main agent still reviews the draft before writing (billing/IPs/vault-paths; Patterns/History preserved). Softfail now keys on subagent unavailability -> surgical refresh. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.9 KiB
Save a comprehensive session log to the appropriate session-logs/ directory, then sync the repo.
/save and /sync share bash .claude/scripts/sync.sh as the canonical driver for git operations. The only difference: /save writes a session log first, then calls sync. /sync calls sync directly (no log).
Phase 1 — Generate the narrative
Claude writes all sections directly. Be concise, factual, technical. No filler phrases. Past tense. No emojis.
| Author | Sections |
|---|---|
| Claude | All sections |
Narrative sections (Claude writes directly)
Session Summary — 3-5 paragraphs: what was accomplished, in what order, why.
Key Decisions — bullet list of non-obvious decisions and their rationale.
Problems Encountered — bullet list of problems hit and how each was resolved. Omit section if none.
Phase 2 — Write to disk
Location
| Work scope | Path |
|---|---|
| Single project | projects/<project>/session-logs/YYYY-MM-DD-session.md |
| Client | clients/<slug>/session-logs/YYYY-MM-DD-session.md |
| Multi-project / general | session-logs/YYYY-MM-DD-session.md |
Filename + append behavior
- Filename:
YYYY-MM-DD-session.md(today's local date) - If file exists, append a
## Update: HH:MM PT — <topic>section. Do not overwrite. - If two users worked on the same date, namespace:
YYYY-MM-DD-<user>-<topic>.md(e.g.2026-05-01-howard-syncro-billing-batch.md)
Required sections (in order)
- User block — generate it deterministically; do NOT hand-write or infer it. Run:
Paste its output verbatim as this section. The script reads
bash .claude/scripts/whoami-block.sh.claude/identity.json(+users.jsonfor role) — the only authoritative attribution sources. Never derive the user from the hostname, the# userEmailcontext hint, or memory. If the script emits a[WARNING]about a stale machine/hostname mismatch, stop and fixidentity.jsonbefore saving. - Session Summary (Ollama)
- Key Decisions (Ollama)
- Problems Encountered (Ollama)
- Configuration Changes — files modified / created / deleted (with paths)
- Credentials & Secrets — UNREDACTED if newly discovered or created. Vault paths if vaulted. Never half-redact a value future-Claude might need.
- Infrastructure & Servers — IPs, hostnames, ports, tenant IDs, container names, DNS, certs
- Commands & Outputs — important one-liners, key outputs, error messages with resolution
- Pending / Incomplete Tasks — what's left, blockers, next steps
- Reference Information — URLs, endpoints, commit SHAs, ticket IDs, routine IDs, file paths
When in doubt, include MORE detail — future sessions search these logs to recover context.
Phase 3 — Wiki Compile (before sync)
Fold what you just worked on into the wiki article so it ships in the same commit as the session log. This runs before sync and re-synthesizes the article (via a Sonnet subagent — model: "sonnet", not Ollama), so new findings/patterns actually land — not just dynamic fields.
-
Derive the slug from the session-log path written in Phase 2:
clients/<slug>/session-logs/...→ client<slug>projects/<project>/session-logs/...→ project article slug (e.g.guru-rmm,guru-connect)- Root
session-logs/...→ skip this phase entirely (no single article is implied)
-
Run the
/wiki-compilegeneration for that target, writing the article + updatingwiki/index.md, but stop before its commit/push step —sync.sh(Phase 4) commits everything together in one commit:- Article exists → full recompile (
/wiki-compile <type>:<slug> --full): the Sonnet subagent re-synthesizes, preserving Patterns and History verbatim (unless the new session log shows an item resolved) and refreshing everything else, absorbing this session's work. Clients also refresh live Syncro fields (hours, tickets). - No article yet → seed (full synthesis) to create it.
- The main agent reviews the subagent's draft before writing — verify IPs/paths; never invent vault paths (use
(verify)); keep billing fields Syncro-authoritative.
- Article exists → full recompile (
-
Softfail (critical) — a wiki failure must NEVER block the save:
- If the synthesis subagent fails or is unavailable, fall back to a surgical refresh (bump
last_compiled+sources; refresh client Syncro fields) so the article still records the session, and emit[WARN] wiki refreshed, not recompiled; run /wiki-compile --full later. - Any other failure: log it and continue to sync.
- If the synthesis subagent fails or is unavailable, fall back to a surgical refresh (bump
The article + wiki/index.md are picked up by sync.sh's git add -A and committed alongside the session log.
Phase 4 — Sync
bash .claude/scripts/sync.sh
sync.sh handles: reconcile this machine's git config user.name/email to .claude/identity.json (so commit authorship can't drift), stage all changes with git add -A (after purging garbled Windows path-as-filename cruft), auto-commit, fetch + rebase, push, then the same flow for the vault repo, then surface cross-user ## Note for <user> blocks.
After sync, emit a Post-commit Summary:
## Post-commit Summary
Commit: <sha> <subject>
Author: <name> <<email>>
Push: <old>..<new> main -> main (origin)
File: <session log path> (+N lines, appended/created)
Wiki updates (if any): <count> articles updated (clients/projects/systems/patterns)
Cross-user note handling (CRITICAL)
If sync.sh surfaces a ## Note for <user> or ## Message for <user> block from an incoming session log, display it prominently at the top of the response, before the sync summary:
============================================================
MESSAGE FROM <author> (<date>)
============================================================
<full note content>
============================================================
Explicitly address each action item or question before moving on.