ijfw-agents-md
Maintain canonical AGENTS.md (open spec). Trigger: 'agents.md', 'update AGENTS.md', or auto-fired by ijfw-team after agent generation.
Donahoe Loop audit gate before execution. Trigger: 'audit plan', 'check plan', 'review plan', 'plan audit', 'plan check', 'before we build', 'before execution', 'validate the plan', 'is this plan solid', 'plan review'. Owns pre-execution audit intent -- fires before any foreign
$ npx -y skills add FerroxLabs/ijfw --skill ijfw-plan-check --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ijfw-plan-checkContext preview
The summary Claude sees to decide when to auto-load this skill.
Donahoe Loop audit gate before execution. Trigger: 'audit plan', 'check plan', 'review plan', 'plan audit', 'plan check', 'before we build', 'before execution', 'validate the plan', 'is this plan solid', 'plan review'. Owns pre-execution audit intent -- fires before any foreign
name: ijfw-plan-check description: "Donahoe Loop audit gate before execution. Trigger: 'audit plan', 'check plan', 'review plan', 'plan audit', 'plan check', 'before we build', 'before execution', 'validate the plan', 'is this plan solid', 'plan review'. Owns pre-execution audit intent -- fires before any foreign plan-checker."
Pre-execution audit gate. Runs before EXECUTE. Verdict is decisive.
Check in order: user-specified path, `.ijfw/memory/plan.md`, `.planning/**/PLAN.md`. If none found: `No plan doc located. Paste the plan or give the path.` Do not proceed.
Read success criteria from `.ijfw/memory/brief.md` if present. For every task: does it trace to a criterion? Tasks with no traceable criterion are scope drift -- flag them.
Anything in the plan not in the brief is a scope leak. List each with task name + reason. If no brief exists, flag the absence as a risk.
Flag tasks that are under-specified (no verify step, no file path), half-baked (depends on an undecided decision), or destructive (no rollback note).
If task B needs task A's output but B is listed before A, flag the inversion with names.
Plan audit: <N> tasks reviewed Goal alignment: <N> trace to criteria / <N> need attention Scope: clean | <N> leak(s) Risk surface: <N> need sharpening Dependency order: correct | <N> inversion(s) Verdict: PASS | FLAG | BLOCK Must-fix before execution (FLAG): 1. <task> -- <file>:<line> -- <fix> Rework needed (BLOCK): 1. <issue> -- <reason>
After the verdict text, emit this HTML comment block exactly:
<!-- plan-check-metrics tasks_total: <int> goal_alignment_pass: <int> goal_alignment_fail: <int> scope_leaks: <int> budget_overrun: <bool> dep_inversions: <int> under_specified_pct: <int> verdict: <PASS|FLAG|BLOCK> -->
**under_specified_pct:** percentage of tasks that are missing ANY of:
Populate each field from the counts gathered in Steps 2-6. `budget_overrun` is `true` if the plan exceeds the task ceiling for the `time_budget` bucket recorded in `.ijfw/memory/plan.md` frontmatter (HOUR_1=3, HOUR_2_3=7, HOUR_4_5=12, HOUR_6_PLUS=unlimited); `false` if no budget was set or ceiling not exceeded.
Fires ONLY for verdict `FLAG` or `PASS`. If verdict is `BLOCK`, skip Step 7 -- rework is needed, not a review mode.
if metrics.budget_overrun == true: default = REDUCTION elif metrics.dep_inversions > 0 or metrics.under_specified_pct > 30: default = HOLD elif metrics.goal_alignment_fail > 0 and metrics.scope_leaks == 0: default = SCOPE_EXPANSION else: default = SELECTIVE
Tag the default with `(Recommended)` and a one-line basis citing the triggering metric:
| Mode | When it fits | Action | |---|---|---| | SCOPE EXPANSION | Brief has acceptance criteria with no matching tasks (>20%) | Surface gaps; user adds to brief; re-plan | | SELECTIVE | Plan is right but too big for session | Pick top N tasks; rest go to backlog | | HOLD | Plan has too many unknowns (under_specified_pct > 30, or dep_inversions > 0) | Return to Discovery/Research; re-surface later | | REDUCTION | budget_overrun: true | Cut to smallest viable slice; defer rest |
{
"question": "Plan is ready. How do you want to move forward?",
"header": "Plan review",
"options": [
{ "label": "Selective -- execute top N tasks", "description": "Pick highest-value items; rest go to backlog" },
{ "label": "Reduction -- cut to smallest viable slice", "description": "Trim to what fits the time budget" },
{ "label": "Scope expansion -- surface missing pieces", "description": "Add tasks for uncovered acceptance criteria" },
{ "label": "Hold -- return to discovery", "description": "Too many unknowns; research more before execute" }
]
}If any routing action produces a new unresolved gap, emit a structured ISSUE with `kind: plan-review` and persist to `.ijfw/state/execute-issues.json` (unified ledger shared with Phase 4; discriminated by `kind` field).
Example entry:
{
"id": "iss_<N>",
"kind": "plan-review",
"mode": "SCOPE_EXPANSION",
"gap": "User cannot specify success criterion for task 'X'",
"status": "unresolved",
"resolution": null,
"created_at": "<ISO-8601>",
"resolved_at": null
}**Da
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.…