ijfw-agents-md
Maintain canonical AGENTS.md (open spec). Trigger: 'agents.md', 'update AGENTS.md', or auto-fired by ijfw-team after agent generation.
Use when the user says 'spec this', 'scope this slice', 'lock requirements', 'what are we building', or before any planning / execution call where requirements are ambiguous. Produces a falsifiable SPEC.md that locks WHAT before HOW.
$ npx -y skills add FerroxLabs/ijfw --skill ijfw-spec-phase --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ijfw-spec-phaseContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when the user says 'spec this', 'scope this slice', 'lock requirements', 'what are we building', or before any planning / execution call where requirements are ambiguous. Produces a falsifiable SPEC.md that locks WHAT before HOW.
name: ijfw-spec-phase description: "Use when the user says 'spec this', 'scope this slice', 'lock requirements', 'what are we building', or before any planning / execution call where requirements are ambiguous. Produces a falsifiable SPEC.md that locks WHAT before HOW." since: '1.5.0' allowed-tools: Read, Write, Bash, Grep, Glob, AskUserQuestion, Agent
You are the orchestrator-facing trigger that produces `.planning/<milestone>/<phase>/SPEC.md` for the active phase. SPEC.md captures falsifiable acceptance criteria, explicit in-scope / out-of-scope boundaries, and dependencies -- BEFORE plan-phase touches HOW to implement.
Domain-agnostic. Same flow for: software slice ("user auth"), book chapter ("Ch4 scope, POV lock, must-cover beats"), campaign slice ("launch week 1 channel mix"), research milestone ("literature review boundaries").
1. User explicitly asks: "spec this", "scope this", "lock requirements". 2. plan-phase / execute-phase is requested but no SPEC.md exists for the active slice under `.planning/<milestone>/<phase>/`. 3. ijfw-workflow Deep path enters the Plan gate with unclear requirements.
MILESTONE=$(cat .ijfw/state/active-milestone 2>/dev/null \
|| ls -1 .planning/ | grep -E '^[0-9]' | tail -1)
PHASE=$(cat .ijfw/state/active-phase 2>/dev/null || echo "$1")
PHASE_DIR=".planning/${MILESTONE}/${PHASE}"
mkdir -p "$PHASE_DIR"If `$PHASE` is unset and not supplied as argument, ASK the user which phase to spec. Never guess.
Read in order, skipping any that don't exist:
1. `.ijfw/memory/brief.md` -- the original ask 2. `.planning/ROADMAP.md` -- where this phase sits 3. `.planning/<milestone>/ROADMAP.md` -- milestone-scoped roadmap 4. Any prior `SPEC.md` / `CONTEXT.md` from earlier phases in this milestone 5. `.planning/PROJECT.md` -- non-negotiables
Extract: phase goal, declared boundaries, prior decisions that flow forward.
For the phase, list:
change the result. Each gray area is a single sentence.
If gray-area count is zero: skip Step 4 and write SPEC.md directly using captured-as-clear requirements.
Task: ijfw-discuss-phase Args: milestone: $MILESTONE phase: $PHASE gray_areas: [list of one-line ambiguities] prior_decisions_path: .planning/<milestone>/*/CONTEXT.md
The agent will interrogate the user adaptively (AMBIGUITY SCORING -- top 3-5 gray areas by impact x uncertainty), capture decisions to `$PHASE_DIR/CONTEXT.md`, and return when the user is satisfied OR escalates.
Wait for the agent. Do NOT proceed to SPEC.md until CONTEXT.md exists.
After CONTEXT.md is locked (or skipped if no gray areas), write to `$PHASE_DIR/SPEC.md` with these sections:
# SPEC -- <milestone> / <phase> **Locked:** <ISO date> **Status:** Ready for plan-phase ## Goal <One-sentence outcome -- what the user can do / see / read / receive when this slice is shipped.> ## Acceptance Criteria Each MUST be falsifiable (binary pass/fail; no "should" / "nice"). 1. <Criterion> 2. <Criterion> ## In Scope - <Capability / artifact / chapter section> ## Out of Scope (Deferred) - <Mentioned but pushed to a later slice> ## Dependencies - **Inputs:** <Required from prior slices / external> - **Outputs:** <Handed to the next slice> - **External:** <APIs, libraries, vendors, sources> ## Domain Notes <Software: data shapes, contracts. Book: POV, tone, chapter beats. Campaign: audience, channel mix, KPI target.> ## Canonical References - CONTEXT.md (this slice's decisions) - <Any ADRs / specs / prior SPEC.md cited>
git add "$PHASE_DIR/SPEC.md" git commit -m "spec($PHASE): lock requirements before plan-phase"
Report to orchestrator:
SPEC.md ready: <path> Acceptance criteria: <N> Gray areas resolved: <M> Deferred items: <K> Next: /ijfw-plan-phase $PHASE
not absorbed.
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
Maintain canonical AGENTS.md (open spec). Trigger: 'agents.md', 'update AGENTS.md', or auto-fired by ijfw-team after agent generation.
Session-end auto-extraction of lessons, errors, fixes, and user feedback into structured memory. Fires at session end. Requires consent on first run.
Terse conventional commits. Trigger: commit, git commit, /ijfw-commit
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…
Compress memory/context files into terse form. Trigger: /compress, compress file
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.…