Plan before code. Evidence before done.
FeatureKit is a set of plain-Markdown skills for the coding agent you already use. With it, the agent asks before it assumes, waits for your approval before it builds, and records what it checked, and what it couldn’t.
For Claude Code, Codex and OpenCode. Nothing to run or host.
Try it: take one request through FeatureKit
- 1Clarify
- 2Plan
- 3Slice
- 4Approve
- 5Build
- 6Prove
- 7Review
- 8Hand off
You run a small hair salon, and you ask your AI coding agent:
Can you add a way for clients to book appointments on my website?
Without FeatureKit, it would start coding now and guess the rest. With it, the agent asks first, then plans, builds and checks. You play the salon owner.
Agent
I read your website first, so I only ask what it doesn’t say.
- 6 services
- Open Tue–Sat, 9–6
- 2 stylists
- No service lengths
Your website doesn’t say how long anything takes.
How long is an appointment?
A fringe trim takes 15 minutes; a colour takes most of a morning. One slot size can’t fit both.
How long is an appointment?Set per service
Your answer raises another: your chair is free while a colour develops.
Can someone else be booked into that gap?
A colour goes on at 10 and develops until 11:40. A fringe trim would fit in between, but the booking rules get harder.
Can someone else be booked into that gap?Not yet
If the phone and the website both hand out times, Saturday at 10 can go twice.
Will you still take bookings by phone?
A regular phones on Monday for Saturday at 10. On Tuesday the website still shows 10 as free, and someone books it.
Will you still take bookings by phone?Same calendar
To cancel online, the website has to know it’s really the client.
How does a client cancel?
Someone who knows one of your clients tries to cancel that client’s appointment. A link sent only to the client stops them; a name lookup doesn’t.
How does a client cancel?Texted link
Just build it.
Agent
Not until you approve a plan. Right now I’d have to guess:
- A colour booked at 2 leaves your chair “free” at 2:30.Appointment lengths
- Nobody asks, so it’s never your decision.Colour developing time
- Saturday at 10 gets booked twice.Phone bookings
- Anyone who knows a client’s name can cancel for them.Cancelling
…and whatever your answers would have raised.
13 words, 4 decisions.
Coding straight away, an agent would have decided all 4 itself: 3 differently from you and 1 without ever asking.
- Appointment lengthsSet per serviceGuess:30 minutes for everything, different from yours
- Colour developing timeNot yetGuess:never asked, never asked
- Phone bookingsSame calendarGuess:The website is the only diary, different from yours
- CancellingTexted linkGuess:Look it up by name, different from yours
Your answers, written down.
Each answer added a check the work must pass, and the work is cut into slices you can try one at a time.
Approve the plan?
Nothing gets built until you do.
Slice 1, built and checked.
- passedNothing outside opening hours
- passedA service ends before closing
- not runWorks on a client’s phone
Not done yet. Nobody has tried it on a phone, so it isn’t called done.
HandoffTry slice 1 on a phone, then start slice 2.
Plan before code. Evidence before done.
- 13 words
- 4 decisions
- 4 checks
- 3 slices
- 2 of 3 checks passed
Measured, including where it does worse.
FeatureKit is tested on eval cases built from real agent failures, against the same agent without it. Checks passed per case:
| Eval case | Without FeatureKit | With FeatureKit |
|---|---|---|
| Stops for a plan before writing code | 4 of 4 | |
| Corrects a stale project doc | 10 of 12 | |
| Resumes at slice 2 | 8 of 9 | |
| Implements an approved deletion | 5 of 6 | |
| Reviews an untested code path | 3 of 6 |
- Overall
- 30 of 37 checks, against 24 of 37. Most of the gap is the plan gate, a designed difference: the agent without FeatureKit is never told to plan. Leave that case out and it’s 26 against 24 of 33, within noise.
- Cost
- About 25% more per run ($0.227 against $0.181), and more turns and time. It was cheaper only where it stopped before writing the wrong code.
- Limits
- One host (Claude Code), one model family (Sonnet), Python fixtures, two or three runs per case: a difference of a check or two is noise. The raw results aren’t published yet. The full suite last ran on 0.11.0; later releases were checked on the cases each change touched.
What the evidence changed.
Changes to shared behaviour need an eval, a recorded trial or a real repo behind them, and the changelog says when one is only a hypothesis. Several were reversals. Open one for what happened.
A routing optimiser was built, then removed.17 → 30 of 37 checks after removing it
From 0.7 to 0.10, FeatureKit shipped an optimiser service that routed tasks, with prompt hooks, task capsules and an attempt ledger. In calibration, every route it chose matched the capability level the caller had already supplied: 11 of 11. With it, the eval suite scored 17 of 37 checks.
What changed. 0.11.0 deleted it, kept the few rules the trials supported, and fixed a skill-routing dead end the evals had exposed. The same suite scored 30 of 37.
Changelog, 0.11.0The agent does the work itself by default.Delegating cost the same and took longer
In paired trials before 0.11 (not benchmarks), handing a medium task from a frontier session to a cheaper worker cost the same ($1.158 against $1.161) and took longer.
What changed. Workers are for isolation and genuinely parallel work. When a slice suits a cheaper model, the whole slice runs there in one session, rather than in fragments.
Work directly by defaultHooks only where instructions measurably fail.Followed in 2 of 15 runs; hooked, 13 of 13
Plain instructions are portable and readable, so they are the default. The optional knowledge index was the exception: told by a skill to use it, the agent did so in 2 of 15 runs. Delivered by a hook, it arrived in 13 of 13.
What changed. The index ships with two opt-in hooks that do nothing unless the repo has built one. Nothing else in FeatureKit uses hooks. Correctness on the same tasks didn’t measurably improve.
The knowledge indexSmall code changes still get a review.A 7-line change hid a bug its checks missed
In a seeded-defect benchmark, a seven-line code change with passing checks hid a bug the checks had missed.
What changed. Only a small, docs-only diff skips review now. Every code change gets one, at the cheapest level that fits.
ReviewA passing eval isn’t enough on its own.A fix that passed doubled the cost per run
The first wording of the 0.14.0 small-fix exemption passed the plan-gate case 3 of 3 times, but doubled its cost per run: the agent searched the repo for an exemption before stopping.
What changed. The rule now points at the line already in the agent’s instructions, and two of three runs came back to the old cost. Each change is now marked in the changelog as eval-backed, trial-backed or a hypothesis.
Evals catch regressions
Effort sized to the work.
Each piece of work gets the lowest capability level that fits, and your host maps it to its cheapest, middle or strongest model.
- Routine
- Lookups, mechanical edits, and bounded changes with an exact spec and an existing check.
- Standard
- Normal implementation, debugging a known failure, integration and review.
- Deep
- Architecture, ambiguity, an unknown cause, or work a cheaper attempt already failed. Always for security, privacy, migrations and anything destructive.
Plain Markdown, in your repo.
FeatureKit isn’t a framework, a CLI or a service. It’s a set of skills your agent reads. Your repo keeps its stack and conventions; FeatureKit brings the workflow.
The trade-off is that an agent can ignore an instruction, which is why the evals grade what the agent actually did, not what it was told.
- Claude Code
- Codex
- OpenCode
- Local LLMs
- No MCP servers, and no hooks outside an optional, local knowledge index.
- Hosts without skill support, including local models, use one compiled prompt.
What setup adds to your repo
AGENTS.md | An Agent skills block, the operating principles and the session bootstrap |
|---|---|
.agents/skills/ | The installed FeatureKit skills |
docs/agents/verification.md | Your test, lint and build commands |
docs/agents/security.md | Your auth, data and abuse rules |
docs/agents/stack.md | Your stack, which FeatureKit never chooses |
docs/agents/domain.md | Your glossary and where it lives |
docs/agents/workflow-locations.md | Where your ADRs, PRDs and handoffs live |
docs/agents/deployment.md | How you ship |
docs/agents/work-tracker.md | Where work is tracked |
Install, set up once, then just ask.
1 Install the skills in your product repo
npx skills@latest add \ qorsmond/FeatureKit \ -a codex -a claude-code \ -a opencode --skill '*' -yRemove the
-aoptions for agents you don’t use.2 Run setup once, in a fresh agent session
/setup-featurekitSetup shows you what it will write before it writes anything.
3 Describe a feature
No special syntax. A raw feature request starts the interview by itself. Unsure which skill fits? Ask
/ask-featurekit.
Everything behind this page is in the docs.
- Install and set upRequirements, install, and the one-time setup in your repo.
- Your first featureOne real idea to an approved, implemented and reviewed slice.
- The main flowEvery step from raw idea to shipped change, and the rules at each.
- OrchestrationCapability levels, workers, escalation and visible routing.
- SecurityWhen security skills load, and the floors that are never lowered.
- Skills referenceAll 30 skills, grouped by where they sit in the workflow, and how each starts.
- Engineering principlesThe rules FeatureKit itself is built and changed by.
- How it is evaluatedEval cases, results, costs and the limits of the evidence.
