Skip to content

The template, the context reads, and the acceptance bar are all type-dependent — so a cheap classifier must decide the kind-of-thing before the expensive planner opens its mouth.

Principle

Classification Precedes Planning

Why classification is first

The plan's shape is the type.

Three issue types. Three different templates. The planner's first decision is which one to fill.

/chore

task listvalidation cmds— no user story— no root cause

/bug

steps to reproduceroot-cause analysis— no user story— no phases

/feature

user storythree-phase implacceptance criteria— no repro steps

Different templates demand different context reads and different acceptance bars.

If the planner doesn't know the type, it cannot know which template it's filling in.

The division of labor

Cheap agent decides. Expensive agent executes.

Step 1 · Classifier

/classify_issue

reads✓ title✓ body

✗ no codebase

✗ no architecture docs

outputs/chore``/bug``/feature``0

cheap · small prompt · Sonnet

Step 2 · Planner

/plan (template pre-selected)

reads✓ full issue

✓ codebase structure

✓ architecture docs

outputsplan.md — sharp, single-template

expensive · big context · no wasted reasoning

Expensive reasoning on a cheap question is waste.

A three-field JSON output buys the planner its entire template — before it loads a single file.

Why the order is load-bearing

Classify after the plan and the classifier can only rubber-stamp.

Same two agents. Run them in reverse and everything collapses.

Plan → Classify✗ broken

1.planner guesses a template

2.plan commits to it

3.classifier rubber-stamps

Scope creeps at template-selection time. What should have been a chore becomes a refactor. The classifier has no decision left to make.

Classify → Plan✓ correct

1.classifier picks template

2.planner fills the template

3.plan matches the type

Template is fixed before the plan is written. The planner cannot drift into feature-shaped work while solving a bug-shaped issue.

The separation is not bureaucracy — it's the only way the planner's reasoning can stay on the work instead of on the wrapper.

What violation looks like

Four ways to skip the gate — all produce template soup.

Every one of these collapses into the same failure mode.

Feed a generic "plan it" prompt to every issue.

The planner hedges — "appears to be a bug, so I'll add steps to reproduce, but I'll also add a user story just in case." Every section from every template, none sharp.

Classify after the plan is written.

The plan already picked a template. The classifier can only confirm the mistake.

Ask the planner to self-select its own template.

Expensive reasoning pass consumed on a question a three-field classifier answers for pennies.

Use the same template for chore, bug, and feature.

Scope creeps. A chore grows a three-phase implementation. A bug grows a user story. The template is doing the drifting.

The discipline

Decide the kind-of-thing before you decide what to do about it.

The classifier is a gate, not a formality. Skip it and the planner pays for both decisions with the expensive agent — and still ships a plan that fits no template sharply.