accept-no-substitutes
This skill should be used when agents generate placeholder tokens like "pseudo-", "mock-", "temporary", "TODO", "demo-", or similar incompleteness markers. Detects substitution patterns in agent OUTPUT and triggers mandatory user interview instead of accepting incomplete work. Activates automatically on any output containing forbidden tokens.
When & Why to Use This Skill
The 'Accept No Substitutes' Claude skill is a specialized validation guardrail designed to eliminate technical debt and incomplete work in AI-generated outputs. By monitoring for placeholder tokens such as 'TODO', 'mock-', 'pseudo-', and 'TBD', this skill prevents the agent from delivering lazy or unfinished results. Instead of substituting uncertainty with placeholders, it automatically halts the process and triggers a mandatory user interview, ensuring that every piece of code, configuration, or documentation produced is complete, accurate, and production-ready.
Use Cases
- Production Code Generation: Prevents the agent from leaving 'TODO' or 'FIXME' comments in source code, ensuring that all functions are fully implemented before delivery.
- Technical Documentation Accuracy: Detects and rejects 'pseudo-code' or 'skeleton' implementations in technical guides, forcing the agent to provide concrete, executable examples.
- Configuration and Security: Blocks the use of 'dummy-values' or 'example_keys' in deployment scripts, prompting the user for actual credentials to prevent configuration errors.
- Project Planning and Logic: Identifies deferral signals like 'TBD' or 'later' in strategic outputs, ensuring that critical decisions are addressed immediately rather than being deferred as technical debt.
- Automated Quality Assurance: Acts as a pre-submission validator in CI/CD pipelines to ensure that AI-generated PRs or documentation updates meet strict completeness standards.
| name | accept-no-substitutes |
|---|---|
| description | This skill should be used when agents generate placeholder tokens like "pseudo-", "mock-", "temporary", "TODO", "demo-", or similar incompleteness markers. Detects substitution patterns in agent OUTPUT and triggers mandatory user interview instead of accepting incomplete work. Activates automatically on any output containing forbidden tokens. |
| version | 0.1.0 |
| trit | -1 |
| color | "#2626D8" |
| role | validator |
| - skill-creator | ○ structure |
| - tree-sitter | ⊕ AST detection |
| - kolmogorov-compression | ⊕ compression ratio |
| - chromatic-walk | ⊕ triadic search |
| - code-review | ⊖ validation pattern |
| - narya-proofs | ⊖ GF(3) emission |
Accept No Substitutes
Zero tolerance for placeholder tokens in agent output. Incompleteness triggers user interview.
Purpose
Detect and reject incomplete work tokens generated in agent output. When uncertainty exists, ask the user rather than substitute with placeholders.
Scope: Agent Output Only
This skill validates what agents produce, not existing code:
- Code being written or modified
- Prose explanations
- Configuration being generated
- Any text output from parallel agents
NOT for scanning existing codebases (use linters for that).
Trit Assignment
- Trit: -1 (MINUS/VALIDATOR)
- Hue: 240° (cold blue - enforcement)
- Role: Constraint enforcer, substitution detector
Forbidden Token Categories
Prefix Substitutions
| Pattern | Examples |
|---|---|
pseudo-* |
pseudo-code, pseudo-implementation |
mock-* |
mock-data, mock-service |
fake-* |
fake-response, fake-auth |
stub-* |
stub-function, stub-api |
dummy-* |
dummy-value, dummy-handler |
Completeness Evasions
| Token | Context |
|---|---|
temporary |
"temporary solution" |
placeholder |
"placeholder for now" |
TODO |
inline TODOs as output |
FIXME |
deferred fixes |
TBD/TBA |
undetermined items |
WIP |
work-in-progress as deliverable |
Deferral Signals
| Pattern | Context |
|---|---|
later |
"we'll add this later" |
eventually |
"eventually this will..." |
for now |
"for now just use..." |
skeleton |
incomplete implementation |
Example/Demo Evasions
| Pattern | Examples |
|---|---|
example_* |
example_config, example_key |
demo_* |
demo_mode, demo_data |
foo/bar/baz |
metasyntactic placeholders |
xxx/yyy |
marker placeholders |
Enforcement Protocol
On Detection
- HALT - Stop generation immediately
- ABANDON - Discard substituted content with complete disgust
- INTERVIEW - Ask user for clarification
Interview Template
Substitution detected that indicates incomplete work:
- Token: "[detected token]"
- Context: [what was being attempted]
This requires input:
1. What is the ACTUAL implementation needed?
2. What specific details are missing?
3. Should research be conducted before proceeding?
GF(3) Integration
Operates as MINUS (-1) validator in any triad:
accept-no-substitutes(-1) + generator(+1) + coordinator(0) = 0
When generator produces substitution tokens:
- Validator REJECTS with -1
- Generator must RE-ATTEMPT with +1
- Coordinator mediates user interview at 0
Examples
Rejected Output (triggers interview)
def authenticate(user):
# TODO: implement actual auth
return True # temporary bypass
Accepted Output (no substitution)
def authenticate(user: User) -> AuthResult:
credentials = vault.get_credentials(user.id)
return verify_signature(user.token, credentials.public_key)
Rejected Prose (triggers interview)
Here's a pseudo-implementation you can adapt...
Accepted Prose (no substitution)
Clarification needed before implementing:
- Which authentication provider is used?
- What is the expected token format?
Rationale
Placeholder tokens are technical debt laundering:
- Create false sense of progress
- Defer decisions that need making NOW
- Accumulate into unmaintainable systems
- Signal uncertainty that should be surfaced
The correct response to uncertainty is asking, not substituting.
Integrated Detection Pipeline
Phase 1: Regex Scan
scripts/detect.py --stdin < output.txt
Phase 2: AST Check (if code)
# Invoke tree-sitter for structural detection
tree-sitter query '(comment) @comment' | grep -iE 'TODO|FIXME|placeholder'
Phase 3: Compression Test
# High compression ratio = likely template/placeholder
from zlib import compress
ratio = len(compress(output.encode())) / len(output)
if ratio < 0.3: # Suspiciously compressible
flag_as_boilerplate()
Phase 4: GF(3) Emit
# On detection, emit MINUS signal
emit_trit(-1, reason="substitution_detected", token=matched)
Hook Integration
Add to .claude/settings.json:
{
"hooks": {
"PostToolUse": [{
"matcher": {"toolName": "Write|Edit"},
"command": "~/.claude/skills/accept-no-substitutes/scripts/validate.sh"
}]
}
}
MCP Bridge
Call via babashka for fast validation:
(require '[babashka.process :refer [shell]])
(defn validate-output [text]
(let [{:keys [exit]} (shell {:in text} "scripts/detect.py" "-")]
(zero? exit)))