Relentless behavioral review after epic completion. Walks every branch of the design tree, verifying implemented behavior matches intent. Use when user says "grill me", "stress test the behavior", wants to verify an epic's behavioral coverage before shipping, or after /flux:epic-review to stress-test what was built.
From fluxnpx claudepluginhub nairon-ai/flux --plugin fluxThis skill uses the workspace's default tool permissions.
Executes pre-written implementation plans: critically reviews, follows bite-sized steps exactly, runs verifications, tracks progress with checkpoints, uses git worktrees, stops on blockers.
Guides idea refinement into designs: explores context, asks questions one-by-one, proposes approaches, presents sections for approval, writes/review specs before coding.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Relentlessly interrogate the behavior of implemented changes until every branch of the decision tree is verified. This is NOT a code review — it's a behavior review. Code can be perfect and still do the wrong thing.
"The most dangerous bugs are the ones where the code works exactly as written — it just does the wrong thing."
IMPORTANT: This plugin uses .flux/ for ALL task tracking. Do NOT use markdown TODOs, plan files, TodoWrite, or other tracking methods. All task state must be read and written via fluxctl.
CRITICAL: fluxctl is BUNDLED — NOT installed globally. which fluxctl will fail (expected). Always use:
PLUGIN_ROOT="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}}"
[ ! -d "$PLUGIN_ROOT/scripts" ] && PLUGIN_ROOT=$(ls -td ~/.claude/plugins/cache/nairon-flux/flux/*/ 2>/dev/null | head -1)
FLUXCTL="${PLUGIN_ROOT}/scripts/fluxctl"
$FLUXCTL <command>
On entry, set the session phase:
$FLUXCTL session-phase set grill
On completion, reset:
$FLUXCTL session-phase set idle
Agent Compatibility: This skill works across Codex, OpenCode, and legacy Claude environments. See agent-compat.md for tool differences.
Question Tool: Use the appropriate tool for your agent:
AskUserQuestionmcp_questionAskUserToolFull request: $ARGUMENTS
/flux:epic-review completes — epic-review checks code quality, grill checks behavioral correctness| Skill | Focus |
|---|---|
/flux:impl-review | Code quality per task |
/flux:epic-review | Code quality + security + browser QA at epic level |
/flux:grill | Behavioral correctness — does the implementation match intent? |
Silently gather the epic's intent and what was built:
$FLUXCTL epic list
$FLUXCTL epic show <epic-id>
Also read:
.flux/epics/<id>/spec.md or linked PRD).flux/brain/business/, .flux/brain/decisions/)Goal: Build a mental model of what was supposed to happen vs what actually happened.
From the epic spec and task specs, map out every behavioral branch:
For each branch of the decision tree, one at a time:
Question format:
Branch: [what scenario we're examining]
Expected: [what should happen based on the spec]
Finding: [what I found in the code — or what's unclear]
Recommendation: [your suggested answer]
Does this match your intent?
Rules:
After walking the main branches, systematically probe edge cases:
After all branches are resolved, present a summary:
## Behavioral Verification Summary
### Verified Behaviors
- [List of behaviors confirmed correct]
### Gaps Found
- [List of behaviors that are missing or incorrect, with recommendations]
### Decisions Made During Grill
- [List of ambiguities resolved during this session]
### Risk Areas
- [Behaviors that work but feel fragile or underspecified]
If any gaps or surprising findings emerged:
$FLUXCTL task add --epic <epic-id> --title "Fix: [gap description]" --status pending
cat >> .flux/brain/decisions/[area].md << 'EOF'
## [Decision Title] — [Date]
[What was decided and why]
EOF
/flux:impl-review and /flux:epic-reviewALWAYS run at the very end of /flux:grill execution:
PLUGIN_ROOT="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}}"
[ ! -d "$PLUGIN_ROOT/scripts" ] && PLUGIN_ROOT=$(ls -td ~/.claude/plugins/cache/nairon-flux/flux/*/ 2>/dev/null | head -1)
UPDATE_JSON=$("$PLUGIN_ROOT/scripts/version-check.sh" 2>/dev/null || echo '{"update_available":false}')
UPDATE_AVAILABLE=$(echo "$UPDATE_JSON" | jq -r '.update_available')
LOCAL_VER=$(echo "$UPDATE_JSON" | jq -r '.local_version')
REMOTE_VER=$(echo "$UPDATE_JSON" | jq -r '.remote_version')
If update available, append to output:
---
Flux update available: v${LOCAL_VER} → v${REMOTE_VER}
Update Flux from the same source you installed it from, then restart your agent session.
---
If no update: Show nothing (silent).
/flux:browser or manual testing for specific scenarios.