/cross-critique
Adversarial multi-angle critique. All three auditors fire in parallel (codex=technical, gemini=strategic, claude=ux). Counter-args ranked by rebuttal survival score, not raw severity. Usage: /cross-critique [--with <id> | list | compare] <target>
$ npx -y skills add FerroxLabs/ijfw --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/cross-critique
Context preview
What this command does when you run it.
Adversarial multi-angle critique. All three auditors fire in parallel (codex=technical, gemini=strategic, claude=ux). Counter-args ranked by rebuttal survival score, not raw severity. Usage: /cross-critique [--with <id> | list | compare] <target>
Command definition
cross-critique.mddescription: "Adversarial multi-angle critique. All three auditors fire in parallel (codex=technical, gemini=strategic, claude=ux). Counter-args ranked by rebuttal survival score, not raw severity. Usage: /cross-critique [--with <id> | list | compare] <target>"
allowed-tools: ["Read", "Write", "Bash", "Grep"]
Stress-test any target against three adversarial perspectives simultaneously. Solves "a single reviewer's blind spots." Unlike cross-audit (which reviews for correctness/security/ops/maint), cross-critique hunts for the hardest counter-arguments to your position -- then ranks them by how likely each argument is to survive a rebuttal. High-survival counter-args are the ones worth acting on first.
Subcommands
| Form | Behavior | |------|----------| | `/cross-critique` | **Zero-arg auto-pick.** Detect target from git state (staged → unstaged → last commit). Fire all three angles in parallel. | | `/cross-critique <target>` | Named target, same parallel fan-out. | | `/cross-critique --with <id> [target]` | Override one auditor slot: `codex`, `gemini`, `opencode`, `aider`, `copilot`, `claude`. Target optional. | | `/cross-critique list` | Show roster with self marker. No requests generated. | | `/cross-critique compare` | Read all response files, score by rebuttal survival, render ranked table, archive. |
Smart target auto-detection (bare `/cross-critique`)
When invoked without a target, run this detection cascade and use the first non-empty result:
1. **Staged changes** -- `git diff --cached --name-only` 2. **Unstaged changes** -- `git diff --name-only` 3. **Last commit** -- `git diff HEAD~1 --name-only` 4. If all empty: print the roster and ask "what would you like critiqued?"
Report which step succeeded:
Cross-critique target auto-detected: 1 staged file(s)
claude/commands/cross-critique.md
(Override with /cross-critique <path> or /cross-critique --with <id> <path>.)
If >5 files, group in request body but list all paths. If a single file >2000 lines, use the diff hunks rather than the full file.
The natural-language phrase **"challenge this from every angle"** / **"adversarial critique"** fires the intent router (`mcp-server/src/intent-router.js`), which nudges Claude to invoke `/cross-critique` automatically -- same auto-detect flow runs.
Default flow -- Donahoe Trident (don't make me think)
Caller holds one perspective (UX/adoption lens). Two external auditors cover the other two angles (technical and strategic) independently, in parallel, so no reviewer anchors on another's findings. All three streams merge into a single ranked table.
When invoked, do this in order:
1. **Probe roster.** Call `pickAuditors({ count: 2, env: process.env })` from `audit-roster.js`. Returns `{ picks, missing, note }`.
2. **Show a TODO surface** in chat:
Cross-critique plan
[ ] Step A.1: Generate requests (codex=technical, gemini=strategic, claude=ux)
[ ] Step A.2: Fire all three in background (parallel)
[ ] Wave A (caller leg): Collect in-session specialist findings
[ ] Wait for all completions
[ ] Step B.1: Score by rebuttal survival
[ ] Step B.2: Render ranked counter-arg table
[ ] Step B.3: Archive all requests + responses + merge3. **Ask the user once** which combo to run:
Auditors detected and ready: codex, gemini.
Run cross-critique:
[A] codex only (technical angle)
[B] gemini only (strategic angle)
[C] Both + claude ux -- recommended (Donahoe Trident)
[D] Cancel / pick custom
Default: [C] All three -- press enter to confirm.Default suggestion: **C (All three)** when >=2 external auditors installed.
4. **If only one external auditor installed:**
> "Only `<id>` is installed locally. The full Trident covers technical, > strategic, and UX angles in one pass -- install one more auditor > (opencode, aider, etc.) to unlock complete angle coverage."
Then offer to run the partial two-angle flow (external + claude ux).
5. **Fire all three in background** simultaneously (see Parallel fan-out section).
6. **Collect caller's in-session findings** (see Caller perspective section).
7. **Score, merge, and render** ranked table (see Compare section).
8. **Archive** all files to `.ijfw/cross-audit/archive/<ts>-critique/`.
Auditor picking
node --input-type=module -e "import('./mcp-server/src/audit-roster.js').then(m => console.log(m.formatRoster()))"Default pick order (first non-self): `codex → gemini → opencode → aider → copilot → claude`.
Critique role assignment is mode-aware via `assignRoles('critique', roster, self)` in `cross-dispatcher.js`:
- `codex` → `technical` angle (implementation weaknesses, edge cases, failure modes)
- `gemini` → `strategic` angle (market, adoption, sustainability, risk)
- `claude` (fresh session via `claude -p`) → `ux` angle (cognitive load, onboarding, discoverability)
- Caller's own perspective is collected in-session and merged at the end -- the
caller does NOT occupy one of the three external slots.
---
Wave A -- Parallel fan-out -- all three angles at once
Step A.1 -- Generate requests via the dispatcher
Run one node call per auditor:
node --input-type=module -e "
import('./mcp-server/src/cross-dispatcher.js').then(m =>
process.stdout.write(m.buildRequest('critique', '<target>', 'codex', 'technical'))
)" > .ijfw/cross-audit/request-critique-codex.mdnode --input-type=module -e "
import('./mcp-server/src/cross-dispatcher.js').then(m =>
process.stdout.write(m.buildRequest('critique', '<target>', 'gemini', 'strategic'))
)" > .ijfw/cross-audit/request-critique-gemini.mdnode --input-type=module -e "
import('./mcp-server/src/cross-dispatcher.js').then(m =>
process.stdout.write(m.buildRequest('critique', '<target>', 'claude', 'ux'))
)" > .ijfw/cross-audit/request-critique-claude.md> *
Read more
description: "Adversarial multi-angle critique. All three auditors fire in parallel (codex=technical, gemini=strategic, claude=ux). Counter-args ranked by rebuttal survival score, not raw severity. Usage: /cross-critique [--with <id> | list | compare] <target>" allowed-tools: ["Read", "Write", "Bash", "Grep"]
Stress-test any target against three adversarial perspectives simultaneously. Solves "a single reviewer's blind spots." Unlike cross-audit (which reviews for correctness/security/ops/maint), cross-critique hunts for the hardest counter-arguments to your position -- then ranks them by how likely each argument is to survive a rebuttal. High-survival counter-args are the ones worth acting on first.
Subcommands
| Form | Behavior | |------|----------| | `/cross-critique` | **Zero-arg auto-pick.** Detect target from git state (staged → unstaged → last commit). Fire all three angles in parallel. | | `/cross-critique <target>` | Named target, same parallel fan-out. | | `/cross-critique --with <id> [target]` | Override one auditor slot: `codex`, `gemini`, `opencode`, `aider`, `copilot`, `claude`. Target optional. | | `/cross-critique list` | Show roster with self marker. No requests generated. | | `/cross-critique compare` | Read all response files, score by rebuttal survival, render ranked table, archive. |
Smart target auto-detection (bare `/cross-critique`)
When invoked without a target, run this detection cascade and use the first non-empty result:
1. **Staged changes** -- `git diff --cached --name-only` 2. **Unstaged changes** -- `git diff --name-only` 3. **Last commit** -- `git diff HEAD~1 --name-only` 4. If all empty: print the roster and ask "what would you like critiqued?"
Report which step succeeded:
Cross-critique target auto-detected: 1 staged file(s) claude/commands/cross-critique.md (Override with /cross-critique <path> or /cross-critique --with <id> <path>.)
If >5 files, group in request body but list all paths. If a single file >2000 lines, use the diff hunks rather than the full file.
The natural-language phrase **"challenge this from every angle"** / **"adversarial critique"** fires the intent router (`mcp-server/src/intent-router.js`), which nudges Claude to invoke `/cross-critique` automatically -- same auto-detect flow runs.
Default flow -- Donahoe Trident (don't make me think)
Caller holds one perspective (UX/adoption lens). Two external auditors cover the other two angles (technical and strategic) independently, in parallel, so no reviewer anchors on another's findings. All three streams merge into a single ranked table.
When invoked, do this in order:
1. **Probe roster.** Call `pickAuditors({ count: 2, env: process.env })` from `audit-roster.js`. Returns `{ picks, missing, note }`.
2. **Show a TODO surface** in chat:
Cross-critique plan
[ ] Step A.1: Generate requests (codex=technical, gemini=strategic, claude=ux)
[ ] Step A.2: Fire all three in background (parallel)
[ ] Wave A (caller leg): Collect in-session specialist findings
[ ] Wait for all completions
[ ] Step B.1: Score by rebuttal survival
[ ] Step B.2: Render ranked counter-arg table
[ ] Step B.3: Archive all requests + responses + merge3. **Ask the user once** which combo to run:
Auditors detected and ready: codex, gemini.
Run cross-critique:
[A] codex only (technical angle)
[B] gemini only (strategic angle)
[C] Both + claude ux -- recommended (Donahoe Trident)
[D] Cancel / pick custom
Default: [C] All three -- press enter to confirm.Default suggestion: **C (All three)** when >=2 external auditors installed.
4. **If only one external auditor installed:**
> "Only `<id>` is installed locally. The full Trident covers technical, > strategic, and UX angles in one pass -- install one more auditor > (opencode, aider, etc.) to unlock complete angle coverage."
Then offer to run the partial two-angle flow (external + claude ux).
5. **Fire all three in background** simultaneously (see Parallel fan-out section).
6. **Collect caller's in-session findings** (see Caller perspective section).
7. **Score, merge, and render** ranked table (see Compare section).
8. **Archive** all files to `.ijfw/cross-audit/archive/<ts>-critique/`.
Auditor picking
node --input-type=module -e "import('./mcp-server/src/audit-roster.js').then(m => console.log(m.formatRoster()))"Default pick order (first non-self): `codex → gemini → opencode → aider → copilot → claude`.
Critique role assignment is mode-aware via `assignRoles('critique', roster, self)` in `cross-dispatcher.js`:
- `codex` → `technical` angle (implementation weaknesses, edge cases, failure modes)
- `gemini` → `strategic` angle (market, adoption, sustainability, risk)
- `claude` (fresh session via `claude -p`) → `ux` angle (cognitive load, onboarding, discoverability)
- Caller's own perspective is collected in-session and merged at the end -- the
caller does NOT occupy one of the three external slots.
---
Wave A -- Parallel fan-out -- all three angles at once
Step A.1 -- Generate requests via the dispatcher
Run one node call per auditor:
node --input-type=module -e "
import('./mcp-server/src/cross-dispatcher.js').then(m =>
process.stdout.write(m.buildRequest('critique', '<target>', 'codex', 'technical'))
)" > .ijfw/cross-audit/request-critique-codex.mdnode --input-type=module -e "
import('./mcp-server/src/cross-dispatcher.js').then(m =>
process.stdout.write(m.buildRequest('critique', '<target>', 'gemini', 'strategic'))
)" > .ijfw/cross-audit/request-critique-gemini.mdnode --input-type=module -e "
import('./mcp-server/src/cross-dispatcher.js').then(m =>
process.stdout.write(m.buildRequest('critique', '<target>', 'claude', 'ux'))
)" > .ijfw/cross-audit/request-critique-claude.md> *
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 commands on ijfw.
- /compress
Compress a memory/context file into terse form. Saves ~40-50% tokens per session. Usage: /compress <filepath>
Open command - /consolidate
Dream cycle -- promote patterns, prune stale, reconcile contradictions, optionally promote to global.
Open command - /cross-audit
Second-model review. Picks an auditor (codex/gemini/opencode/aider/copilot), excludes the caller, writes a prompt to paste, reads the response back. Usage: /cross-audit [--with <id> | list | compare] <target>
Open command - /cross-research
Two-phase multi-model research. Phase A fans codex+gemini in parallel (benchmarks + citations angles); Phase B synthesises via fresh Claude session. Usage: /cross-research [--with <id> | list | compare] <target>
Open command - /doctor
Run IJFW health check (files, MCP server, hooks, memory, caps, framing)
Open command - /handoff
Generate or load a session handoff. Usage: /handoff [create|resume]
Open command

