diff --git a/plugin/skills/weekly-digests/SKILL.md b/plugin/skills/weekly-digests/SKILL.md new file mode 100644 index 00000000..99338ab3 --- /dev/null +++ b/plugin/skills/weekly-digests/SKILL.md @@ -0,0 +1,262 @@ +--- +name: weekly-digests +description: Generate a serial week-by-week narrative digest of a project's full claude-mem timeline. Splits the timeline into per-ISO-week files, then runs one consecutive subagent per week — each receiving the prior week's carry-forward block — to produce one chapter per ISO week of data. Use when asked for "weekly digests", "week-by-week story", "serial timeline", or "narrative chapters" of a project's history. +--- + +# Weekly Digests + +Produce a serial, multi-chapter narrative digest of a project's complete claude-mem history. Differs from `timeline-report` (one long report) — this generates one digest *per ISO week*, with each subagent reading the prior week's carry-forward block so the story stays coherent. + +**The chapter count equals the number of ISO weeks the timeline covers.** A project with 2 weeks of data produces 2 chapters; one with 30 weeks produces 30. There is no fixed length — count the weeks first, then drive the pipeline off that count. + +## When to Use + +Trigger when the user asks for: + +- "Weekly digests" +- "Week-by-week story" +- "Serial timeline" +- "Story chapters of [project]" +- "Run a digest for each week" +- "Continue the story week by week" + +If the user wants a single sweeping report, use `timeline-report` instead. This skill is for serial chapter format. + +## Prerequisites + +- claude-mem worker running +- Project has at least one ISO week of observations (the pipeline degenerates gracefully — even N=1 works) +- A clean output directory the user is comfortable writing into + +**Resolve the worker port** (do this once, reuse `$WORKER_PORT`): + +```bash +WORKER_PORT="${CLAUDE_MEM_WORKER_PORT:-$(node -e "const fs=require('fs'),p=require('path'),os=require('os');const uid=(typeof process.getuid==='function'?process.getuid():77);const fallback=String(37700+(uid%100));try{const s=JSON.parse(fs.readFileSync(p.join(os.homedir(),'.claude-mem','settings.json'),'utf-8'));process.stdout.write(String(s.CLAUDE_MEM_WORKER_PORT||fallback));}catch{process.stdout.write(fallback);}" 2>/dev/null)}" +``` + +## Workflow + +### Step 1: Determine the Project Name + +Same worktree-detection pattern as `timeline-report`. In a worktree, the data source is the **parent project**: + +```bash +git_dir=$(git rev-parse --git-dir 2>/dev/null) +git_common_dir=$(git rev-parse --git-common-dir 2>/dev/null) +if [ "$git_dir" != "$git_common_dir" ]; then + parent_project=$(basename "$(dirname "$git_common_dir")") +else + parent_project=$(basename "$PWD") +fi +echo "$parent_project" +``` + +### Step 2: Fetch the Full Timeline and Save It + +```bash +mkdir -p .scratch +curl -s "http://localhost:${WORKER_PORT}/api/context/inject?project=PROJECT_NAME&full=true" \ + > .scratch/cm-timeline.md +wc -l .scratch/cm-timeline.md +``` + +Sanity-check: confirm the file is non-empty and has the expected structure (preamble, then date headers like `### Mon DD, YYYY`, then numeric observation lines `