Prompts that frame a decision instead of pre-answering it.
Copy/paste into your CLI prompt:
Install the neutral-prompt skill/plugin from https://github.com/skyRolly/neutral-prompt, refer to the repo's AGENTS.md for instructions.
Or 🔗 check the installation instructions.
A skill for your coding assistant that stops prompts from carrying the answer. Every prompt that hands a decision to an agent also hands it a prior — "do not stop them" is read as continue, "avoid unnecessary changes" as prefer the existing code. This skill finds that wording, explains why it biases, and rewrites it as a decision the evidence settles.
It does not push agents toward continuing, stopping, changing, preserving, accepting, or rejecting. It pushes them toward deciding well.
The negation is the only instruction with force. "Check what they are doing" has no criterion attached, so the check produces a description rather than a decision — and stopping now requires overriding the prompt. |
|
10 rules. Full text in SKILL.md.
- Separate settled constraints from open decisions.
- Name the decision, not the answer.
- List every admissible outcome.
- Balance the negations.
- Replace protected actions with decision criteria.
- Order the prompt: evidence, alternatives, choice, record.
- Keep the intensity symmetric.
- Make the thresholds observable.
- Require the decision record, not the decision.
- Do not manufacture balance.
They govern open decisions — the choices a prompt delegates. They do not govern settled constraints: safety rules, output contracts, budgets, standards. Directive wording is the correct form for a constraint.
A prompt linter ships with the repo. It flags the twelve patterns catalogued in
references/patterns.md. Here
it is on the Before prompt above, saved as plain text in my-prompt.md:
$ python3 scripts/scan_prompt.py my-prompt.md
my-prompt.md:1:1 NP012 advisory '(whole document)'
why: The text delegates a lifecycle or review decision but states no criteria, so the agent falls back on tone, on its own defaults, or on whichever outcome was named first.
try: Name the admissible outcomes and the observable condition that selects each one.
my-prompt.md:1:49 NP001 high 'Do NOT immediately stop'
why: A negated stop verb protects continuation: the complement becomes the default and needs no justification.
try: Name the decision instead: 'Evaluate each one. Continuing and stopping are both admissible outcomes.'
2 finding(s): 1 high, 0 medium, 1 advisoryIt finds phrasings, not intent. A hit on a settled constraint is correct as
written — confirm what each phrase governs, then suppress the ones that are fine
with neutral-prompt: allow NP001 on the line or the line above.
Measure it against the labeled cases in evals/:
python3 scripts/run_evals.py scanFork, edit skills/neutral-prompt/SKILL.md, then swap your copy in:
claude plugin uninstall neutral-prompt # drop the upstream copy first:
claude plugin marketplace remove neutral-prompt # fork and upstream share both names
claude plugin marketplace add <your-username>/neutral-prompt
claude plugin install neutral-prompt@neutral-promptRestart Claude Code, then re-invoke /neutral-prompt.
Adding a rule to the scanner means adding an entry to references/patterns.md, a
Rule in scripts/scan_prompt.py, and a labeled case in evals/cases.jsonl. The
unit tests fail until all three agree, and python3 scripts/run_evals.py scan
fails when any case's findings differ from its label. See
CONTRIBUTING.md.
MIT.