/ijfw-milestone-summary
Use when the user asks for a milestone summary, milestone recap, or to summarize a milestone -- or runs /ijfw-milestone-summary. Trigger: 'milestone summary', 'summarize milestone', 'milestone recap', 'onboard someone to this release', 'what shipped in v<X>', invoked by
$ npx -y skills add FerroxLabs/ijfw --skill ijfw-milestone-summary --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/ijfw-milestone-summary
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use when the user asks for a milestone summary, milestone recap, or to summarize a milestone -- or runs /ijfw-milestone-summary. Trigger: 'milestone summary', 'summarize milestone', 'milestone recap', 'onboard someone to this release', 'what shipped in v<X>', invoked by
SKILL.md
ijfw-milestone-summary.SKILL.mdname: ijfw-milestone-summary
description: "Use when the user asks for a milestone summary, milestone recap, or to summarize a milestone -- or runs /ijfw-milestone-summary. Trigger: 'milestone summary', 'summarize milestone', 'milestone recap', 'onboard someone to this release', 'what shipped in v<X>', invoked by ijfw-complete-milestone."
since: '1.5.0'
Produce an onboarding doc for someone joining mid-stream. Output: `.planning/<milestone>/SUMMARY.md`.
Domain-agnostic: "what shipped" means chapters drafted for a book, launches that landed for a campaign, features released for software, episodes recorded for a podcast. Adapt the noun to the project type.
Step 1 -- Resolve milestone
Argument is the milestone slug (e.g. `1.5.0`, `q2-launch`, `book-draft-2`). If absent: 1. Read `.ijfw/state/workflow.json` -- use the current milestone field. 2. Else read `.planning/ROADMAP.md` -- pick the active milestone. 3. Else list directories under `.planning/` and ask which one.
Set `MS="<resolved-slug>"`. Set `OUT=".planning/${MS}/SUMMARY.md"`.
Step 2 -- Inventory artifacts
Read whatever exists, skip whatever doesn't. Missing files are normal -- the doc adapts.
- `.planning/ROADMAP.md` -- scope, dates, status of each item.
- `.planning/${MS}/SUMMARY.md` -- prior version (overwrite guard, see Step 6).
- `.planning/${MS}/**/SUMMARY.md` -- per-item outcomes.
- `.planning/${MS}/**/LEARNINGS.md` -- per-item decisions (written by ijfw-extract-learnings / C06).
- `.planning/${MS}/**/VERIFICATION.md` -- gaps, deferred items.
- `CHANGELOG.md` -- the `${MS}` entry if present.
- Git log for the milestone tag range:
- If `v${MS}` tag exists: `git log --oneline v${MS}` and `git log v${MS}~1..v${MS} --stat`.
- Else: `git log --since="<earliest .planning/${MS}/ commit date>" --oneline`.
- Else: skip git stats.
Step 3 -- Synthesize
Compose the doc with these six sections in this order. Plain English. No jargon a new contributor wouldn't know.
What shipped
One paragraph, 3-5 sentences. Lead with the user-visible outcome ("v1.5.0 shipped runtime honesty + pluggability completion -- the workflow now self-audits, dispatches parallel subagents, and runs cross-model critique unattended"). Avoid implementation detail. Adapt the noun:
- software: features shipped
- book: chapters drafted, edits landed
- campaign: launches that landed, channels lit up
- podcast: episodes recorded and published
- research: papers drafted, experiments concluded
Scope shipped
Table of items in the milestone -> outcome. Pull item names from ROADMAP.md scope list; pull outcomes from per-item SUMMARY.md `one_liner` (fall back to first H1 sentence). Status column: `done | partial | deferred`.
| Item | Outcome | Status |
|--------|----------------------------------|----------|
| <name> | <one-liner> | done |
Scope deferred
List items that were planned but cut. For each: name, one-line rationale (from LEARNINGS.md "deferred" sections, RETROSPECTIVE.md, or VERIFICATION.md gaps), and where it lives next (`v<next>` backlog, indefinitely parked, etc.).
If nothing was deferred: say so in one line. Do not pad.
Key decisions
Aggregate from per-item LEARNINGS.md. For each decision: one-line restatement + link to the source file. Format:
- **<decision>** -- <one-line rationale>. See [<phase>/LEARNINGS.md](<relative-path>).
Top 5-7 only. If LEARNINGS.md files are absent (C06 hasn't run), fall back to CONTEXT.md or SUMMARY.md "decisions" sections; if neither, list the empty section with a one-line note "decisions log not captured for this milestone".
Known gaps / followups
From VERIFICATION.md gaps, RETROSPECTIVE.md "what to improve", and any open issues tagged with the milestone. Each item: one line, with severity if obvious (`blocking | annoying | nice-to-have`).
How to continue
One paragraph for someone picking up next. Cover: (1) where to start reading next (next milestone's ROADMAP or active HANDOFF), (2) the single command/skill to invoke (`/ijfw-workflow`, `/gsd-new-milestone`, etc.), (3) any state file they should load. End with one sentence on the next milestone's working title if known.
Step 4 -- Stats footer (only if git data available)
Append after the six sections:
---
Timeline: <start-date> -> <end-date> (<duration>)
Commits: <N>
Files: <N> changed (+<ins> / -<del>)
Authors: <comma-separated list>
Skip silently if no tag and no date range could be determined.
Step 5 -- Length & tone gate
Cap at ~400 lines of output markdown. If a section runs long, summarize and link to the source artifact rather than inlining. Tone is operator-direct: facts first, no celebration, no hedging. Adjectives must earn their keep.
Step 6 -- Write & commit
If `${OUT}` already exists and the caller did not pass `--overwrite`:
- Standalone invocation: ask the user `SUMMARY.md exists for ${MS}. Overwrite or view existing?`
- Invocation from ijfw-complete-milestone (C04): overwrite without prompt -- the milestone is closing and the summary must reflect final state.
Write the file. Then commit on the current branch:
git add ".planning/${MS}/SUMMARY.md"
git commit -m "docs(${MS}): milestone summary for onboarding"Step 7 -- Output to caller
Print the resolved path and a 3-line excerpt of "What shipped" so the calling skill (or user) can verify the result inline without re-reading the file.
Wrote: .planning/${MS}/SUMMARY.md
What shipped: <first 3 lines of the section>Notes
- Standalone-runnable: works without a parent skill in context.
- Called by ijfw-complete-milestone (C04); also runnable by hand any time after a milestone is mostly done.
- Pulls from C06 output (per-phase LEARNINGS.md). If C06 hasn't run, the "Key decisions" section degrades gracefully.
- Domain-agnostic: never assume software. Detect from PROJECT.md / brief / file types and adapt the noun.
- This skill writes one d
Read more
name: ijfw-milestone-summary description: "Use when the user asks for a milestone summary, milestone recap, or to summarize a milestone -- or runs /ijfw-milestone-summary. Trigger: 'milestone summary', 'summarize milestone', 'milestone recap', 'onboard someone to this release', 'what shipped in v<X>', invoked by ijfw-complete-milestone." since: '1.5.0'
Produce an onboarding doc for someone joining mid-stream. Output: `.planning/<milestone>/SUMMARY.md`.
Domain-agnostic: "what shipped" means chapters drafted for a book, launches that landed for a campaign, features released for software, episodes recorded for a podcast. Adapt the noun to the project type.
Step 1 -- Resolve milestone
Argument is the milestone slug (e.g. `1.5.0`, `q2-launch`, `book-draft-2`). If absent: 1. Read `.ijfw/state/workflow.json` -- use the current milestone field. 2. Else read `.planning/ROADMAP.md` -- pick the active milestone. 3. Else list directories under `.planning/` and ask which one.
Set `MS="<resolved-slug>"`. Set `OUT=".planning/${MS}/SUMMARY.md"`.
Step 2 -- Inventory artifacts
Read whatever exists, skip whatever doesn't. Missing files are normal -- the doc adapts.
- `.planning/ROADMAP.md` -- scope, dates, status of each item.
- `.planning/${MS}/SUMMARY.md` -- prior version (overwrite guard, see Step 6).
- `.planning/${MS}/**/SUMMARY.md` -- per-item outcomes.
- `.planning/${MS}/**/LEARNINGS.md` -- per-item decisions (written by ijfw-extract-learnings / C06).
- `.planning/${MS}/**/VERIFICATION.md` -- gaps, deferred items.
- `CHANGELOG.md` -- the `${MS}` entry if present.
- Git log for the milestone tag range:
- If `v${MS}` tag exists: `git log --oneline v${MS}` and `git log v${MS}~1..v${MS} --stat`.
- Else: `git log --since="<earliest .planning/${MS}/ commit date>" --oneline`.
- Else: skip git stats.
Step 3 -- Synthesize
Compose the doc with these six sections in this order. Plain English. No jargon a new contributor wouldn't know.
What shipped
One paragraph, 3-5 sentences. Lead with the user-visible outcome ("v1.5.0 shipped runtime honesty + pluggability completion -- the workflow now self-audits, dispatches parallel subagents, and runs cross-model critique unattended"). Avoid implementation detail. Adapt the noun:
- software: features shipped
- book: chapters drafted, edits landed
- campaign: launches that landed, channels lit up
- podcast: episodes recorded and published
- research: papers drafted, experiments concluded
Scope shipped
Table of items in the milestone -> outcome. Pull item names from ROADMAP.md scope list; pull outcomes from per-item SUMMARY.md `one_liner` (fall back to first H1 sentence). Status column: `done | partial | deferred`.
| Item | Outcome | Status | |--------|----------------------------------|----------| | <name> | <one-liner> | done |
Scope deferred
List items that were planned but cut. For each: name, one-line rationale (from LEARNINGS.md "deferred" sections, RETROSPECTIVE.md, or VERIFICATION.md gaps), and where it lives next (`v<next>` backlog, indefinitely parked, etc.).
If nothing was deferred: say so in one line. Do not pad.
Key decisions
Aggregate from per-item LEARNINGS.md. For each decision: one-line restatement + link to the source file. Format:
- **<decision>** -- <one-line rationale>. See [<phase>/LEARNINGS.md](<relative-path>).
Top 5-7 only. If LEARNINGS.md files are absent (C06 hasn't run), fall back to CONTEXT.md or SUMMARY.md "decisions" sections; if neither, list the empty section with a one-line note "decisions log not captured for this milestone".
Known gaps / followups
From VERIFICATION.md gaps, RETROSPECTIVE.md "what to improve", and any open issues tagged with the milestone. Each item: one line, with severity if obvious (`blocking | annoying | nice-to-have`).
How to continue
One paragraph for someone picking up next. Cover: (1) where to start reading next (next milestone's ROADMAP or active HANDOFF), (2) the single command/skill to invoke (`/ijfw-workflow`, `/gsd-new-milestone`, etc.), (3) any state file they should load. End with one sentence on the next milestone's working title if known.
Step 4 -- Stats footer (only if git data available)
Append after the six sections:
--- Timeline: <start-date> -> <end-date> (<duration>) Commits: <N> Files: <N> changed (+<ins> / -<del>) Authors: <comma-separated list>
Skip silently if no tag and no date range could be determined.
Step 5 -- Length & tone gate
Cap at ~400 lines of output markdown. If a section runs long, summarize and link to the source artifact rather than inlining. Tone is operator-direct: facts first, no celebration, no hedging. Adjectives must earn their keep.
Step 6 -- Write & commit
If `${OUT}` already exists and the caller did not pass `--overwrite`:
- Standalone invocation: ask the user `SUMMARY.md exists for ${MS}. Overwrite or view existing?`
- Invocation from ijfw-complete-milestone (C04): overwrite without prompt -- the milestone is closing and the summary must reflect final state.
Write the file. Then commit on the current branch:
git add ".planning/${MS}/SUMMARY.md"
git commit -m "docs(${MS}): milestone summary for onboarding"Step 7 -- Output to caller
Print the resolved path and a 3-line excerpt of "What shipped" so the calling skill (or user) can verify the result inline without re-reading the file.
Wrote: .planning/${MS}/SUMMARY.md
What shipped: <first 3 lines of the section>Notes
- Standalone-runnable: works without a parent skill in context.
- Called by ijfw-complete-milestone (C04); also runnable by hand any time after a milestone is mostly done.
- Pulls from C06 output (per-phase LEARNINGS.md). If C06 hasn't run, the "Key decisions" section degrades gracefully.
- Domain-agnostic: never assume software. Detect from PROJECT.md / brief / file types and adapt the noun.
- This skill writes one d
IJFW — It Just F*cking Works. Ferrox Labs' local-first infrastructure for AI coding agents: shared memory, smart routing, multi-AI cross-audits, disciplined workflow.
Repo: FerroxLabs/ijfw
Other skills on ijfw.
- /ijfw-agents-md
Maintain canonical AGENTS.md (open spec). Trigger: 'agents.md', 'update AGENTS.md', or auto-fired by ijfw-team after agent generation.
Open skill - /ijfw-auto-memorize
Session-end auto-extraction of lessons, errors, fixes, and user feedback into structured memory. Fires at session end. Requires consent on first run.
Open skill - /ijfw-commit
Terse conventional commits. Trigger: commit, git commit, /ijfw-commit
Open skill - /ijfw-complete-milestone
Use when a milestone is shipping and you need to archive its artifacts, generate a summary, and seed the next milestone. Trigger: 'milestone complete', 'ship milestone', 'wrap milestone', 'complete milestone <id>', /ijfw-complete-milestone.
Open skill - /ijfw-compress
Compress memory/context files into terse form. Trigger: /compress, compress file
Open skill - /ijfw-compute
Use when the user says: 'compute', 'crunch this', 'analyze logs', 'aggregate the data', 'run a script', 'dedupe', 'count by', 'top N', or any data-shaping ask. Replaces dumping raw data into context with sandboxed script execution.
Open skill

