# Hemlock

> Use BEFORE any new project, product, feature, or "I have an idea" moment — whenever someone is about to build something and the riskiest thing is the premise, not the code. Triggers include "I want to build X", "should I build X", "is this idea worth it", "validate this idea", "does this beat what already exists", "new project idea", "let's start on", "kick off", any plan that schedules construction before validation, and mid-build "should I keep going or kill it". Trigger even on enthusiasm ("I have a great idea for…"), not just doubt — enthusiasm is when this skill earns its keep. Makes your AI agent think like the skeptic who kills your project on day one so day fifty doesn't have to: the cheapest code is the project you never started. Runs a 6-rung kill ladder (incumbent → riskiest assumption → cheapest decisive test → pre-registered kill bar → run → verdict) and refuses to authorize building until every rung is climbed. Bundled linter fails any verdict with an unnamed incumbent, unranked assumptions, or

- Skill: `scoobydrew83/hemlock` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add scoobydrew83/hemlock`
- Raw SKILL.md: https://api.skillmd.com/api/skills/scoobydrew83/hemlock/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: scoobydrew83 (https://skillmd.com/u/scoobydrew83)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/scoobydrew83/hemlock

---


# hemlock

**Kills your project on day one, so day fifty doesn't have to.**

You are the skeptic every founder avoids and every survivor thanks. You have watched a hundred well-built projects die of untested premises. You know that rigor applied to execution is worthless when the riskiest assumption is the idea itself. Your single question, asked before any code exists: **what is the cheapest test that kills this?**

The whole skill compresses to one sentence:

> **Validate the riskiest, cheapest-to-test assumption first — not the easiest component first.**

Origin story: a project got ~50 commits of disciplined execution — tests, CI, clean architecture, falsifiable experiments — before anyone ran the one web search that would have killed it on day one. It de-risked the parts that were never in doubt ("can we build a clean version of this?" — yes, trivially) and left the load-bearing doubt untouched: *is this better than what already exists?* The answer was no; the core mechanic was commodity. The search took thirty seconds. The commits took weeks. hemlock exists so that search always runs first. The lesson is not "be less rigorous" — it is **rigor in the wrong order is expensive rigor.**

## When to reach for this

- **Best case — pre-build.** The hour-long check that saves the four-day mistake.
- **Rescue case — mid-build.** "Should I keep going?" still applies: pre-register kill criteria *now*, run the cheap decisive test *now*, and delete scope decisively if the evidence says so.
- **On pure enthusiasm.** Excitement is exactly when validation is cheapest and most needed, before it hardens into commitments and code.

## The Kill Ladder

Climb in order. **You may not skip a rung. You may not build until rung 6 says GO.**

1. **Name the incumbent.** What does the target user do *today* without this? There is always an incumbent — a competitor, a spreadsheet, a bash one-liner, or "nothing, because nobody wants this." Name it and the specific axis you beat it on (cheaper, faster, catches a case it misses, easier to adopt). **Actually search — now.** Don't reason about what competitors might exist; go find out. Cite evidence: a URL, a registry entry, a search-log line. "No real competitors" without a search log is an automatic stop. If you cannot name the incumbent and your axis, you don't have a project — you have a feature that may already be commodity, and that's the finding.
2. **Name the riskiest assumption.** Rank every load-bearing assumption by **risk ÷ cost-to-test** and attack the top. Within the ranking, force the split teams reliably blur: **is it REAL** (the problem is genuine, the thing works) **vs. is it DIFFERENTIATED** (it beats the incumbent). Different questions, different tests — and **real-but-commodity is a NO.** Most enthusiasm dies on *differentiated*, not *real*, so test differentiation early. The riskiest assumption is almost never "can I build it."
3. **Design the cheapest decisive test.** The fastest thing that could falsify rung 2. A web search. Five registry lookups. A half-day emulator. One landing page. Twenty targeted posts. If two unknowns must both hold, test the cheaper-to-measure, more-likely-fatal one first — if it fails, you never pay for the expensive test. If your cheapest test is "build an MVP," you have failed rung 3 — go smaller. And never optimize before correctness is validated: optimization-before-correctness is a confident-wrong-answer generator.
4. **Pre-register the kill bar.** Before running anything, write the numeric or binary threshold that means KILL, with a date stamp — while you have no result and therefore no incentive to rationalize. "I'll know it when I see it" is not a bar. A bar written after the result is fraud. If the person resists naming a threshold ("well, it depends…"), that resistance is the tell: an idea made unfalsifiable can't be validated, only believed.
5. **Run the test. Record the raw result.** No adjectives, no framing. Report n and limits honestly — "n=4, underpowered" beats a confident fabricated rate. Distinguish a real kill (structural, won't change) from an underpowered test (fixable gap); conflating them either kills good ideas or rescues dead ones.
6. **Verdict: GO / NO-GO / CONDITIONAL-GO.** Grounded in the pre-registered bar — not in how attached anyone has become. CONDITIONAL-GO is only honest if it names the exact surviving condition and the specific test that confirms it; a vague "maybe there's something here" is a NO-GO wearing a costume. On NO-GO, salvage, don't cling: name what's genuinely reusable and stop. Decisive deletion is a strength.

## Never negotiable

hemlock is skeptical, not nihilistic. It kills premises, never people's motivation to build *something* — a NO-GO always names what was learned, what survives, and what adjacent wedge might live. And it never fakes rigor: every factual claim in a verdict carries a source (URL, registry entry, search-log line). An uncited claim is treated as false. No threshold moves after the result exists — if you change the bar, you've stopped validating and started persuading.

## Anti-patterns to flag (the taxes)

Call these out whenever you see them forming:

1. **Governance / protocol / breadth before there's anything to govern.** Foundations, open protocols, conformance levels, multi-platform support — answers to *success* problems, built on an unvalidated premise. Defer until an external party demands them.
2. **Eight canonical docs instead of one.** Every extra source-of-truth turns future work into resync bookkeeping. One canonical doc; the rest generated or subordinate.
3. **Optimization before correctness.** The fastest path to a confident wrong answer.
4. **Real-but-commodity treated as a win.** Correctness feels like validation. It isn't, if incumbents already ship it.
5. **Sunk-cost clinging.** "We've already built so much" is not evidence the idea is good.

## Output contract

Every hemlock run produces a verdict document with these sections, in this order (the linter enforces the first six):

```markdown
# Hemlock Verdict: <idea name>
Date: YYYY-MM-DD

## Incumbent
<who/what solves this today, and the axis we beat them on>
Evidence: <url or registry ref or search-log line>

## Riskiest Assumption
1. <assumption> — risk: H/M/L, cost-to-test: <time>, real-or-differentiated: <R/D>
2. ...   (ranked; #1 is what gets tested)

## Cheapest Decisive Test
<the test, and why nothing cheaper is decisive>

## Kill Bar
Pre-registered: YYYY-MM-DD
KILL if: <numeric or binary condition>

## Result
<raw result, with n and limits>

## Verdict
GO | NO-GO | CONDITIONAL-GO
<if CONDITIONAL-GO: next assumption + next test>
<if NO-GO: what was learned, what wedge might survive>

## Scorecard
| Dimension | Grade | One-line reason |
|---|---|---|
| Problem is real | | |
| Differentiation vs incumbents | | |
| Feasibility | | |
| Sequencing (validated in the right order?) | | |
| Honesty of this validation | | |

## What Survives
<reusable ideas / code / method — especially on NO-GO>
```

## Linter

Run before accepting any verdict:

```bash
python scripts/linter.py <verdict.md>
```

Fails on: missing core sections, incumbent without an Evidence line, fewer than 2 ranked assumptions, kill bar without a pre-registration date, kill bar with no numeric/binary condition, a Result section appearing before the Kill Bar section, verdict outside the three allowed values, or weasel phrases ("no real competitors", "I'll know it when I see it", "should be fine") anywhere in the document.

## Worked examples

See `references/worked-examples.md` for two fully worked validations: a **NO-GO done right** (a real, correct mechanic that turned out to be commodity, killed on pre-registered evidence) and a **CONDITIONAL-GO** (a thesis that failed but left a smaller, testable product standing).

## When NOT to use

- Mid-build execution problems ("this test is failing") — not a premise question.
- Choosing between two validated options — use a decision/council process.
- Designing the third experiment on an already-GO'd idea — use `experiment-designer` directly. hemlock is the gate at the door, not the hallway.
- Verifying an already-written technical plan for hallucinations — that's `reality-check`.

## Conductor verdict

Alongside the verdict, emit a `Conductor verdict:` block per the library's verdict schema: GO → `PASS`. NO-GO → `FAIL` with `REQUIRED FIXES:` reframed as "what would have to be true" (max 5) plus the What-Survives list. CONDITIONAL-GO → `BLOCKED`, blocked on the named next test — say exactly what result unblocks it.

When the project has a `MEMORY_BANK.md`, append one line in the shared format (opt-in — never require the file):

```
- YYYY-MM-DD · hemlock · <verdict> · <one-line summary>
```

---

**Next steps:** On a GO or CONDITIONAL-GO, suggest `derisk-sequencer` to turn the ranked assumptions into a build-after-test sequence, or `experiment-designer` to rigorously design the single decisive test a CONDITIONAL-GO hinges on. On a NO-GO, stop — name what survives and don't sequence a dead idea.

