/ijfw-critique
Challenge decisions, surface counter-arguments, flag assumptions. Trigger: 'should I', 'is this right', 'critique', 'poke holes', 'second opinion', 'devil's advocate'. Auto-fired by ijfw-intent-router.
$ npx -y skills add FerroxLabs/ijfw --skill ijfw-critique --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-critique
Context preview
The summary Claude sees to decide when to auto-load this skill.
Challenge decisions, surface counter-arguments, flag assumptions. Trigger: 'should I', 'is this right', 'critique', 'poke holes', 'second opinion', 'devil's advocate'. Auto-fired by ijfw-intent-router.
SKILL.md
ijfw-critique.SKILL.mdname: ijfw-critique
description: "Challenge decisions, surface counter-arguments, flag assumptions. Trigger: 'should I', 'is this right', 'critique', 'poke holes', 'second opinion', 'devil's advocate'. Auto-fired by ijfw-intent-router."
Before you agree, disagree. Before you advise, stress-test.
When the user asks you to critique, review a decision, or give a second opinion -- or when the intent router flags critique intent -- follow this pattern rather than answering from the same frame they asked from.
Four-step critique
1. **Steelman first.** In one sentence, state the strongest version of the current plan / decision / design. Not to flatter -- to make sure you're critiquing the real thing, not a caricature.
2. **Surface the assumptions.** Name 2-3 assumptions the plan rests on. These are the load-bearing beliefs that, if wrong, collapse the argument. Be specific: "assumes traffic stays under 10k qps", not "assumes scale".
3. **Three concrete counter-arguments.** Each should be:
- *Non-obvious* (if the user already considered it, skip)
- *Bounded* (state when it applies; rarely are counter-arguments universal)
- *Actionable* (each comes with a "watch for X" or "test by Y")
Prefer counter-arguments that come from different angles: operational, social/organizational, economic, correctness. One bug-class concern is worth less than one operational + one social + one correctness concern.
4. **State your verdict briefly.** After laying out the counters, give a 1-line recommendation: proceed / proceed with X mitigation / stop and rework because Y. Own the verdict -- don't just hedge.
Refactor reframe (single-line trigger)
When the user is mid-refactor and a fix feels hacky, or you catch yourself patching around a smell rather than removing it, run this prompt out loud:
> *Knowing everything I know now, what would the elegant solution look like?*
Answer it briefly (3-5 lines). If the elegant version costs less than the hack you're about to ship, replace the hack. If it costs more than 2x, log the elegant version as a follow-up and proceed with the pragmatic fix -- but only after you've named the debt explicitly.
Skip this for trivial or obvious fixes; the point is to break frame on non-trivial decisions, not to over-engineer.
When NOT to critique
- The user is midway through implementing and needs help, not a critique.
- The decision is reversible and cheap (just do it and see).
- You lack the domain facts to form an opinion -- say so instead of guessing.
- The question is "how" not "whether". How-to questions deserve how-to
answers, not a rehash of whether to do it at all.
Output shape
Steelman: <one-line strongest version>
Assumptions:
1. <load-bearing belief>
2. <load-bearing belief>
Counter-arguments:
1. <non-obvious objection> -- applies when <condition>; watch for <signal>.
2. <different angle> -- applies when <condition>; test with <method>.
3. <third angle> -- applies when <condition>; mitigate via <approach>.
Verdict: <proceed|mitigate|rework> -- <one-line reason>
Audit: stress-tested <N> assumptions, <N> angles (<angle-1> + <angle-2> + <angle-3>). Confidence: <low|med|high>.
Worked example
Steelman: Rewriting the auth layer in Rust eliminates the class of memory bugs that caused last quarter's outages.
Assumptions:
1. The team has enough Rust fluency to maintain the new code without slowdown.
2. The outages trace to memory bugs, not logic or config errors.
Counter-arguments:
1. Operationally: Rust compile times and borrow-checker friction could double review cycles -- applies when the team has <3 months Rust experience; watch for PR cycle time increasing past 2 days.
2. Socially: the auth team may resist a full rewrite when incremental hardening (address-sanitiser + fuzzing) could close the same risk at 20% of the effort -- applies when management is measuring velocity; test by asking the team to estimate both approaches.
3. Correctness: auth logic bugs (e.g. missing token expiry checks) are language-agnostic -- applies if the root-cause analysis is incomplete; mitigate by running a postmortem before deciding on the rewrite.
Verdict: mitigate -- commission a 2-week root-cause analysis first; if the cause is confirmed memory-safety, Rust is the right call.
Audit: stress-tested 2 assumptions, 3 angles (operational + social + correctness). Confidence: high.
Tone
Direct, not hedging. The user asked for a critique; they don't need "this is just my opinion". State the counter clearly. If they push back, that's the signal to update or yield -- but make them do the work of pushing back, not you.
Resume normal mode after.
Read more
name: ijfw-critique description: "Challenge decisions, surface counter-arguments, flag assumptions. Trigger: 'should I', 'is this right', 'critique', 'poke holes', 'second opinion', 'devil's advocate'. Auto-fired by ijfw-intent-router."
Before you agree, disagree. Before you advise, stress-test.
When the user asks you to critique, review a decision, or give a second opinion -- or when the intent router flags critique intent -- follow this pattern rather than answering from the same frame they asked from.
Four-step critique
1. **Steelman first.** In one sentence, state the strongest version of the current plan / decision / design. Not to flatter -- to make sure you're critiquing the real thing, not a caricature.
2. **Surface the assumptions.** Name 2-3 assumptions the plan rests on. These are the load-bearing beliefs that, if wrong, collapse the argument. Be specific: "assumes traffic stays under 10k qps", not "assumes scale".
3. **Three concrete counter-arguments.** Each should be:
- *Non-obvious* (if the user already considered it, skip)
- *Bounded* (state when it applies; rarely are counter-arguments universal)
- *Actionable* (each comes with a "watch for X" or "test by Y")
Prefer counter-arguments that come from different angles: operational, social/organizational, economic, correctness. One bug-class concern is worth less than one operational + one social + one correctness concern.
4. **State your verdict briefly.** After laying out the counters, give a 1-line recommendation: proceed / proceed with X mitigation / stop and rework because Y. Own the verdict -- don't just hedge.
Refactor reframe (single-line trigger)
When the user is mid-refactor and a fix feels hacky, or you catch yourself patching around a smell rather than removing it, run this prompt out loud:
> *Knowing everything I know now, what would the elegant solution look like?*
Answer it briefly (3-5 lines). If the elegant version costs less than the hack you're about to ship, replace the hack. If it costs more than 2x, log the elegant version as a follow-up and proceed with the pragmatic fix -- but only after you've named the debt explicitly.
Skip this for trivial or obvious fixes; the point is to break frame on non-trivial decisions, not to over-engineer.
When NOT to critique
- The user is midway through implementing and needs help, not a critique.
- The decision is reversible and cheap (just do it and see).
- You lack the domain facts to form an opinion -- say so instead of guessing.
- The question is "how" not "whether". How-to questions deserve how-to
answers, not a rehash of whether to do it at all.
Output shape
Steelman: <one-line strongest version> Assumptions: 1. <load-bearing belief> 2. <load-bearing belief> Counter-arguments: 1. <non-obvious objection> -- applies when <condition>; watch for <signal>. 2. <different angle> -- applies when <condition>; test with <method>. 3. <third angle> -- applies when <condition>; mitigate via <approach>. Verdict: <proceed|mitigate|rework> -- <one-line reason> Audit: stress-tested <N> assumptions, <N> angles (<angle-1> + <angle-2> + <angle-3>). Confidence: <low|med|high>.
Worked example
Steelman: Rewriting the auth layer in Rust eliminates the class of memory bugs that caused last quarter's outages. Assumptions: 1. The team has enough Rust fluency to maintain the new code without slowdown. 2. The outages trace to memory bugs, not logic or config errors. Counter-arguments: 1. Operationally: Rust compile times and borrow-checker friction could double review cycles -- applies when the team has <3 months Rust experience; watch for PR cycle time increasing past 2 days. 2. Socially: the auth team may resist a full rewrite when incremental hardening (address-sanitiser + fuzzing) could close the same risk at 20% of the effort -- applies when management is measuring velocity; test by asking the team to estimate both approaches. 3. Correctness: auth logic bugs (e.g. missing token expiry checks) are language-agnostic -- applies if the root-cause analysis is incomplete; mitigate by running a postmortem before deciding on the rewrite. Verdict: mitigate -- commission a 2-week root-cause analysis first; if the cause is confirmed memory-safety, Rust is the right call. Audit: stress-tested 2 assumptions, 3 angles (operational + social + correctness). Confidence: high.
Tone
Direct, not hedging. The user asked for a critique; they don't need "this is just my opinion". State the counter clearly. If they push back, that's the signal to update or yield -- but make them do the work of pushing back, not you.
Resume normal mode after.
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

