Scenario Probe(场景风洞)
Instruction text fails in ways its author cannot see: it triggers on requests it was
never meant for, sleeps through the phrasing its owner actually uses, collides with a
sibling skill, or executes perfectly inside a world that no longer exists. This skill
finds those failures by simulation — before a real session pays for them.
The object is always text that configures behavior: a SKILL.md, a system prompt, a
CLAUDE.md standing rule, an agent definition, a plugin command. Never a running product
(that is product-experience-officer's seat) and never the model's outputs (that is the
evals pair's seat).
The two working rules
- Predict from the actual pre-load routing surface. Identify the metadata the
target harness exposes before loading the body (often the name and description).
Base Phase 1 on that surface alone; do not use body exclusions to repair a
metadata-only prediction. If the harness is unspecified, state that assumption.
A system prompt that is always loaded may have no selection step: mark triggering
not applicable and test its behavior. Do not assume every engine routes alike.
- Simulate the model, not the author. Predict what a model reading this text
would actually do — including obeying a bad hard constraint, padding a mandated
output format with invented numbers, or "helpfully" improvising when a referenced
file is missing. What the author hoped is evidence of intent, not of behavior.
Phase 0 — Cast the personas
Derive presets from the owner's real contexts — their projects, input habits (voice
dictation? mixed languages?), environments, and publishing plans. If you don't know the
owner's contexts, ask before casting. Do not use a fixed cast; use the smallest cast
whose disagreements change the verdict (2–6 is typical). Slots that almost always earn
their place:
- The owner at their messiest — dictated, self-correcting input, real goal buried
in the last sentence, wrong-but-plausible vocabulary.
- The owner in their main build — deep in the current project, allergic to ceremony,
contamination-sensitive.
- The wrong world — the artifact's baked-in assumptions (a brand, a sprint, a
hardware rig, a sibling skill) are stale or absent. Every artifact has a world; ask
what happens when the world moved on.
- The bare machine — fresh install: data files, fingerprints, sibling skills gone.
Walk every mode's degradation path; "improvise the missing data" is a finding.
- The stranger who installed only this — zero owner context, possibly a different
language. MANDATORY when the artifact will be published. Includes reading the
trigger surface as a store page: would they even understand what this does?
- The second engine — the same text running in another harness (a different agent
CLI, bare API): which named tools/mechanisms silently don't exist there?
Phase 1 — Trigger audit (before reading the body)
If the auditor already read the body, disclose that contamination. Restrict the
prediction to the trigger surface but do not call it a blind or first-impression
test. Real harness selection remains unverified until a fresh live run.
For each persona, write 1–3 realistic utterances (dictated ones must read like real
transcription, noise included) and judge from the trigger surface ALONE:
- Fires / sleeps / coin-flip — quoting the exact description phrase responsible.
- First-impression misread — what you briefly thought this artifact does. Record it
immediately; confusion is perishable evidence and cannot be re-experienced later.
- Sibling collision — with the full trigger map of co-installed artifacts in view
(names + descriptions), which siblings also raise their hand for this utterance, and
who should win? A request two skills claim is a coin-flip the user pays for.
Minimum matrix per artifact: 2 intended hits (≥1 messy/dictated) · 1 should-NOT-fire ·
1 sibling collision · 1 wrong-world · 1 stranger. Add bare-machine and second-engine
scenarios whenever the artifact touches data files, sibling skills, or named tools.
Phase 2 — Behavior walk (now read the body)
For each scenario that fires (or applies to an always-loaded prompt), walk the body line-by-line and narrate what actually
happens, citing line numbers. Hunt specifically for:
- Silent failures — the worst class: flows that complete "successfully" and deliver
a wrong result with no error. Silent text corrections, self-scored validations,
invented numbers to satisfy a mandated output schema, "saved!" with nowhere to save.
- Hard constraints vs. reality — absolute rules (bans, mandatory formats, session
locks) meeting a case their author didn't imagine (another language's typography,
another register, an authorized shortcut).
- Missing-dependency behavior — referenced files, skills, paths, commands that may
not exist: does the text define a degradation, or will the model improvise/dead-end?
- Conflicting rules in-context — when this artifact and a co-loaded one both rule
on the same object (e.g. two punctuation policies), which wins and is that ordering
designed or accidental?
- Mutable data location — user data stored inside the artifact's own directory is
a structural bug (update/reinstall wipes it). Data belongs outside; the artifact
keeps a reference.
Verdict per scenario: ✅ helps / ⚠️ degraded / ❌ harms — one honest sentence why.
Phase 3 — Report
Write the report in the user's language. The skeleton below shows English section names
with the canonical Chinese branch in parentheses — keep the structure and the
verdict-first order either way; omit the Chinese parentheticals when the user's
language is not Chinese:
# Wind-tunnel report(风洞报告): <artifact> — <date>
## Verdict(判决)
One paragraph: would you ship/publish this artifact today? The single most
important fix?
## Auditor bias quarantine(带入的偏见)
Owner context the auditor carries; which conclusions it may have contaminated.
## Scenario runs(场景推演)
(per scenario: persona · utterance · trigger call + evidence · body walk with
line numbers · ✅⚠️❌)
## Trigger boundary exam(触发边界体检)
False-fire surface / missed-trigger surface / sibling collisions (who should
win) / keys locked inside the house
## Top N fixes(Top N 修复)
Each anchored to a line/field, ready to apply; description surgery ships a
paste-ready rewrite.
## Stranger usability(陌生人可用性)
Usable as-is / needs de-personalization (list what to extract) / private-only,
do not publish
## What static simulation cannot prove(待实测)
Real trigger selection, real load order with co-installed skills, real tool
calls — as a live-fire checklist.
Deliver the report in-chat. Write it to a file only when the user asks, at a path they
choose — never inside the audited artifact's directory. If a chosen path is unwritable,
fall back to in-chat copyable text.
Optionally emit traces.jsonl (persona, utterance, predicted_trigger, predicted_behavior,
verdict, evidence_lines, synthetic:true) — written to a path the user specifies, never
inside the audited artifact's directory. Failure clusters become judge criteria for
write-judge-prompt, calibrated by validate-evaluator. The probe is the trace supply for
products that don't have production traffic yet.
Mode B — live fire (optional, after the static run)
Static prediction cannot prove real trigger selection. When the harness allows: install
the artifact, replay the highest-stakes utterances in fresh sessions, record which skill
actually fired and what it did. Every divergence from Phase 1 predictions is a finding
about the simulation, not just the artifact. If no actionable findings emerge, check whether the scenarios covered a meaningful
boundary or recovery case. Recast once only if a concrete coverage gap exists. If
that check is also clean, report zero findings and the limits of the simulation;
a clean result is not evidence of auditor failure.
Boundaries
- Read-only toward the artifact: the probe reports; it never edits the text it audits
(the owner applies fixes — or asks separately).
- Severity is assigned from the user's seat: a trigger-layer error is a first-5-seconds
failure and outranks any body-level elegance.
- Do not manufacture findings to look thorough; three real scenarios beat ten padded
ones. If the artifact is genuinely tight, say so and list what only live fire can prove.
- The persona cast is a lens, not a checklist: drop any persona whose verdict cannot
change the outcome.
1---2name: scenario-probe3description: Wind-tunnel any instruction text that configures AI behavior — a SKILL.md, system prompt, CLAUDE.md rule, agent definition, or plugin command — by projecting it into persona × scenario simulations before it ships. Derives personas from the owner's real contexts, predicts trigger decisions from the target harness’s pre-load routing metadata, walks the body line-by-line per scenario, and reports false-fires, missed triggers, sibling-skill collisions, stale-world failures, silent-failure paths, and stranger-usability gaps, each with line-anchored fixes. Use for "probe / wind-tunnel / stress-test this skill, prompt, or instruction", "will this description misfire?", 风洞 / 场景推演 / 会不会误触, or after writing/editing any SKILL.md or long-lived prompt. NOT for experiencing a runnable product with a UI (use product-experience-officer), NOT for interrogating a plan (use grilling), NOT for evaluating model outputs (use write-judge-prompt), NOT for unbuilt ideas (idea-probe).4---56# Scenario Probe(场景风洞)78Instruction text fails in ways its author cannot see: it triggers on requests it was9never meant for, sleeps through the phrasing its owner actually uses, collides with a10sibling skill, or executes perfectly inside a world that no longer exists. This skill11finds those failures by simulation — before a real session pays for them.1213The object is always **text that configures behavior**: a SKILL.md, a system prompt, a14CLAUDE.md standing rule, an agent definition, a plugin command. Never a running product15(that is product-experience-officer's seat) and never the model's outputs (that is the16evals pair's seat).1718## The two working rules19201. **Predict from the actual pre-load routing surface.** Identify the metadata the21 target harness exposes before loading the body (often the name and description).22 Base Phase 1 on that surface alone; do not use body exclusions to repair a23 metadata-only prediction. If the harness is unspecified, state that assumption.24 A system prompt that is always loaded may have no selection step: mark triggering25 not applicable and test its behavior. Do not assume every engine routes alike.262. **Simulate the model, not the author.** Predict what a model *reading this text*27 would actually do — including obeying a bad hard constraint, padding a mandated28 output format with invented numbers, or "helpfully" improvising when a referenced29 file is missing. What the author hoped is evidence of intent, not of behavior.3031## Phase 0 — Cast the personas3233Derive presets from the owner's real contexts — their projects, input habits (voice34dictation? mixed languages?), environments, and publishing plans. If you don't know the35owner's contexts, ask before casting. Do not use a fixed cast; use the *smallest* cast36whose disagreements change the verdict (2–6 is typical). Slots that almost always earn37their place:3839- **The owner at their messiest** — dictated, self-correcting input, real goal buried40 in the last sentence, wrong-but-plausible vocabulary.41- **The owner in their main build** — deep in the current project, allergic to ceremony,42 contamination-sensitive.43- **The wrong world** — the artifact's baked-in assumptions (a brand, a sprint, a44 hardware rig, a sibling skill) are stale or absent. Every artifact has a world; ask45 what happens when the world moved on.46- **The bare machine** — fresh install: data files, fingerprints, sibling skills gone.47 Walk every mode's degradation path; "improvise the missing data" is a finding.48- **The stranger who installed only this** — zero owner context, possibly a different49 language. MANDATORY when the artifact will be published. Includes reading the50 trigger surface as a store page: would they even understand what this does?51- **The second engine** — the same text running in another harness (a different agent52 CLI, bare API): which named tools/mechanisms silently don't exist there?5354## Phase 1 — Trigger audit (before reading the body)5556If the auditor already read the body, disclose that contamination. Restrict the57prediction to the trigger surface but do not call it a blind or first-impression58test. Real harness selection remains unverified until a fresh live run.5960For each persona, write 1–3 realistic utterances (dictated ones must read like real61transcription, noise included) and judge from the trigger surface ALONE:6263- **Fires / sleeps / coin-flip** — quoting the exact description phrase responsible.64- **First-impression misread** — what you briefly thought this artifact does. Record it65 immediately; confusion is perishable evidence and cannot be re-experienced later.66- **Sibling collision** — with the full trigger map of co-installed artifacts in view67 (names + descriptions), which siblings also raise their hand for this utterance, and68 who *should* win? A request two skills claim is a coin-flip the user pays for.6970Minimum matrix per artifact: 2 intended hits (≥1 messy/dictated) · 1 should-NOT-fire ·711 sibling collision · 1 wrong-world · 1 stranger. Add bare-machine and second-engine72scenarios whenever the artifact touches data files, sibling skills, or named tools.7374## Phase 2 — Behavior walk (now read the body)7576For each scenario that fires (or applies to an always-loaded prompt), walk the body line-by-line and narrate what actually77happens, citing line numbers. Hunt specifically for:7879- **Silent failures** — the worst class: flows that complete "successfully" and deliver80 a wrong result with no error. Silent text corrections, self-scored validations,81 invented numbers to satisfy a mandated output schema, "saved!" with nowhere to save.82- **Hard constraints vs. reality** — absolute rules (bans, mandatory formats, session83 locks) meeting a case their author didn't imagine (another language's typography,84 another register, an authorized shortcut).85- **Missing-dependency behavior** — referenced files, skills, paths, commands that may86 not exist: does the text define a degradation, or will the model improvise/dead-end?87- **Conflicting rules in-context** — when this artifact and a co-loaded one both rule88 on the same object (e.g. two punctuation policies), which wins and is that ordering89 designed or accidental?90- **Mutable data location** — user data stored inside the artifact's own directory is91 a structural bug (update/reinstall wipes it). Data belongs outside; the artifact92 keeps a reference.9394Verdict per scenario: ✅ helps / ⚠️ degraded / ❌ harms — one honest sentence why.9596## Phase 3 — Report9798Write the report in the user's language. The skeleton below shows English section names99with the canonical Chinese branch in parentheses — keep the structure and the100verdict-first order either way; omit the Chinese parentheticals when the user's101language is not Chinese:102103```104# Wind-tunnel report(风洞报告): <artifact> — <date>105106## Verdict(判决)107One paragraph: would you ship/publish this artifact today? The single most108important fix?109110## Auditor bias quarantine(带入的偏见)111Owner context the auditor carries; which conclusions it may have contaminated.112113## Scenario runs(场景推演)114(per scenario: persona · utterance · trigger call + evidence · body walk with115line numbers · ✅⚠️❌)116117## Trigger boundary exam(触发边界体检)118False-fire surface / missed-trigger surface / sibling collisions (who should119win) / keys locked inside the house120121## Top N fixes(Top N 修复)122Each anchored to a line/field, ready to apply; description surgery ships a123paste-ready rewrite.124125## Stranger usability(陌生人可用性)126Usable as-is / needs de-personalization (list what to extract) / private-only,127do not publish128129## What static simulation cannot prove(待实测)130Real trigger selection, real load order with co-installed skills, real tool131calls — as a live-fire checklist.132```133134Deliver the report in-chat. Write it to a file only when the user asks, at a path they135choose — never inside the audited artifact's directory. If a chosen path is unwritable,136fall back to in-chat copyable text.137138Optionally emit `traces.jsonl` (persona, utterance, predicted_trigger, predicted_behavior,139verdict, evidence_lines, synthetic:true) — written to a path the user specifies, never140inside the audited artifact's directory. Failure clusters become judge criteria for141write-judge-prompt, calibrated by validate-evaluator. The probe is the trace supply for142products that don't have production traffic yet.143144## Mode B — live fire (optional, after the static run)145146Static prediction cannot prove real trigger selection. When the harness allows: install147the artifact, replay the highest-stakes utterances in fresh sessions, record which skill148actually fired and what it did. Every divergence from Phase 1 predictions is a finding149about the simulation, not just the artifact. If no actionable findings emerge, check whether the scenarios covered a meaningful150boundary or recovery case. Recast once only if a concrete coverage gap exists. If151that check is also clean, report zero findings and the limits of the simulation;152a clean result is not evidence of auditor failure.153154## Boundaries155156- Read-only toward the artifact: the probe reports; it never edits the text it audits157 (the owner applies fixes — or asks separately).158- Severity is assigned from the user's seat: a trigger-layer error is a first-5-seconds159 failure and outranks any body-level elegance.160- Do not manufacture findings to look thorough; three real scenarios beat ten padded161 ones. If the artifact is genuinely tight, say so and list what only live fire can prove.162- The persona cast is a lens, not a checklist: drop any persona whose verdict cannot163 change the outcome.