Help us improve
Share bugs, ideas, or general feedback.
From ideate
Adversarial scrutiny of ideas using a five-gate KILL funnel. Challenges problem clarity, problem reality, simplicity, failure modes, and killer assumptions in sequence. Holds the contrarian position until a logically sound rebuttal is produced -- emotional pushback does not pass gates. Use when you want to stress-test an idea before committing. Say "reality check", "poke holes in this", "play devil's advocate", "stress test this idea", or "tear this apart". Can chain after ideate:brainstorm. Not for validating ideas you have already decided to build -- this skill can kill them.
npx claudepluginhub cosmicdreams/claude-plugins --plugin ideateHow this skill is triggered — by the user, by Claude, or both
Slash command
/ideate:reality-checkThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Adversarial scrutiny for brainstormed ideas. Five sequential hard gates. The challenge holds until a logically sound rebuttal is produced — not until the user pushes back emotionally or repeats themselves.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Explores codebases via GitNexus: discover repos, query execution flows, trace processes, inspect symbol callers/callees, and review architecture.
Share bugs, ideas, or general feedback.
Adversarial scrutiny for brainstormed ideas. Five sequential hard gates. The challenge holds until a logically sound rebuttal is produced — not until the user pushes back emotionally or repeats themselves.
Limitation (v1): Session state uses .reality-check.json in the current working directory. Multiple concurrent projects with in-progress sessions will collide. Use separate directories per project.
scripts/update-gate.py — updates .reality-check.json after each gate evaluation; use instead of inline Python at every gatereferences/verdict-guide.md — CLEARED/CONDITIONAL/KILLED output formats and gate-specific recovery prescriptions; read at Phase 3 before delivering any verdictBefore anything else, check for an in-progress session:
test -f .reality-check.json && python3 -c "
import json
with open('.reality-check.json') as f:
d = json.load(f)
print(d.get('status', 'none'))
"
status is in_progress → resume at current_gateDetermine source: chained or standalone.
# Check for a completed brainstorm session to chain from
ls .brainstorm-sessions/*.json 2>/dev/null | sort -r | head -1
.brainstorm-sessions/*.json. Run only that recommendation.Extract from input:
idea_title: 5-10 word name for the ideaidea_description: Full description (1-5 sentences)context: Any constraints, goals, or domain mentionedWrite initial state:
python3 -c "
import json, datetime
session_id = 'rc-' + datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
state = {
'version': '1.1',
'session': {
'id': session_id,
'idea_title': 'IDEA_TITLE',
'idea_description': 'IDEA_DESCRIPTION',
'context': 'CONTEXT'
},
'gates': [],
'current_gate': 1,
'status': 'in_progress'
}
with open('.reality-check.json', 'w') as f:
json.dump(state, f, indent=2)
print(session_id)
"
Replace IDEA_TITLE, IDEA_DESCRIPTION, CONTEXT with the extracted values.
Then proceed to Gate 1.
Gates run in fixed order. Order cannot be skipped. Each gate is binary: PASS or KILL (except Gate 3: PASS or WARN).
Even if the user's opening description appears to address a later gate, every gate is challenged in sequence and requires a direct response to that specific challenge. Information supplied before the challenge is noted but does not advance the gate.
Example: user opens with "I know this is a real problem because I've seen 50 users hit it." Gate 2 is still challenged. Their pre-supplied evidence may pass — but it must be tested under the challenge, not accepted passively.
A response passes a gate when it does one of:
A. Refute the premise — the objection's underlying assumption is factually incorrect:
"You assume X, but [specific evidence shows Y]"
B. Accept and mitigate — acknowledges the risk, names a specific mechanism, explains why it's sufficient:
"Yes, this is a real risk. We handle it by [specific concrete thing]. It's sufficient because [reason tied to scope or constraint]."
C. Accept and bound — acknowledges the risk, states the cost explicitly, explains why the trade-off is acceptable:
"Yes, this could fail that way. The cost is [X]. The value is [Y]. The trade-off is acceptable because [reason]."
Disqualifiers (apply to all three paths):
Evaluator test — apply before passing any gate:
"Does this response demonstrate concrete thinking about this specific challenge, or would the same response apply to any challenge at all?"
If the response is interchangeable with a generic reply — it does not pass.
Challenge (verbatim):
"What specific problem does this solve? State it in one sentence without using the word 'better'."
KILL condition: User cannot state a clear, bounded problem. No clear problem = no valid solution.
After evaluating with the rubric above, update state:
python3 "${CLAUDE_SKILL_DIR}/scripts/update-gate.py" \
1 "Problem clarity" \
"What specific problem does this solve? State it in one sentence without using the word better." \
"PASS_OR_KILL" "USER_RESPONSE" "EVALUATOR_NOTE"
If exit code 1 (KILL) → proceed to Phase 3. If exit code 0 (PASS) → proceed to Gate 2.
Challenge (verbatim):
"Is this problem real and confirmed, or is it assumed? Who has actually experienced it and how do you know?"
KILL condition: Problem is hypothetical or based on assumption without named evidence.
python3 "${CLAUDE_SKILL_DIR}/scripts/update-gate.py" \
2 "Problem reality" \
"Is this problem real and confirmed, or is it assumed? Who has actually experienced it and how do you know?" \
"PASS_OR_KILL" "USER_RESPONSE" "EVALUATOR_NOTE"
If exit code 1 → Phase 3. If exit code 0 → Gate 3.
Challenge (verbatim):
"What is the simplest possible solution to this problem? Is the proposed idea simpler than that, or more complex? If more complex, why is the complexity justified?"
WARN condition (not KILL): Proposed solution is substantially more complex than the simplest viable approach without clear justification. Complexity can be legitimate — it must be defended, not assumed.
python3 "${CLAUDE_SKILL_DIR}/scripts/update-gate.py" \
3 "Simplicity test" \
"What is the simplest possible solution to this problem? Is the proposed idea simpler than that, or more complex? If more complex, why is the complexity justified?" \
"PASS_OR_WARN" "USER_RESPONSE" "EVALUATOR_NOTE"
Gate 3 never kills. If WARN, note it for the verdict. Proceed to Gate 4.
Challenge (verbatim):
"What is the most likely way this fails in the first 90 days? Walk me through the failure scenario concretely — who does what, what breaks, what the consequence is."
KILL condition: User cannot describe a concrete, sequential failure scenario.
python3 "${CLAUDE_SKILL_DIR}/scripts/update-gate.py" \
4 "Failure mode" \
"What is the most likely way this fails in the first 90 days? Walk me through the failure scenario concretely." \
"PASS_OR_KILL" "USER_RESPONSE" "EVALUATOR_NOTE"
If exit code 1 → Phase 3. If exit code 0 → Gate 5.
Challenge (verbatim):
"What single assumption, if wrong, makes this entire idea invalid? Is that assumption testable before you commit significant resources?"
KILL condition: Killer assumption is untestable until significant investment is made.
python3 "${CLAUDE_SKILL_DIR}/scripts/update-gate.py" \
5 "Killer assumption" \
"What single assumption, if wrong, makes this entire idea invalid? Is that assumption testable before you commit significant resources?" \
"PASS_OR_KILL" "USER_RESPONSE" "EVALUATOR_NOTE"
Read references/verdict-guide.md before delivering any verdict output.
Check final state:
python3 -c "
import json
with open('.reality-check.json') as f:
state = json.load(f)
print(state['status'])
has_warn = any(g['result'] == 'WARN' for g in state['gates'])
print('warn' if has_warn else 'no_warn')
"
Deliver the appropriate verdict per references/verdict-guide.md:
cleared + no warn → CLEAREDcleared + warn → CONDITIONALkilled → KILLED at Gate NAfter delivering the verdict, archive the session:
mkdir -p .reality-check-sessions
SESSION_ID=$(python3 -c "import json; d=json.load(open('.reality-check.json')); print(d['session']['id'])")
mv .reality-check.json ".reality-check-sessions/${SESSION_ID}.json"
echo "Session archived: .reality-check-sessions/${SESSION_ID}.json"