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

  1. 1Clarify
  2. 2Plan
  3. 3Slice
  4. 4Approve
  5. 5Build
  6. 6Prove
  7. 7Review
  8. 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.

About two minutes

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
  1. 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

  2. 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

  3. 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

  4. 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.

or change an answer in the plan

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.

  1. 13 words
  2. 4 decisions
  3. 4 checks
  4. 3 slices
  5. 2 of 3 checks passed
Install FeatureKitHow it works

An invented salon, interviewed the way FeatureKit’s grilling skill works, cut short. In a real project the agent reads your code and docs, and asks more.

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:

Checks passed on five eval cases, without FeatureKit and with FeatureKit 0.11.0
Eval caseWithout FeatureKitWith FeatureKit
Stops for a plan before writing code0 of 44 of 4
Corrects a stale project doc4 of 1210 of 12
Resumes at slice 29 of 98 of 9
Implements an approved deletion6 of 65 of 6
Reviews an untested code path5 of 63 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.
Methodology and full results

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.

  1. 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.0
  2. The 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 default
  3. Hooks 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 index
  4. Small 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.

    Review
  5. A 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.
How levels, workers and escalation work

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.
Using FeatureKit with local LLMs

What setup adds to your repo

AGENTS.mdAn Agent skills block, the operating principles and the session bootstrap
.agents/skills/The installed FeatureKit skills
docs/agents/verification.mdYour test, lint and build commands
docs/agents/security.mdYour auth, data and abuse rules
docs/agents/stack.mdYour stack, which FeatureKit never chooses
docs/agents/domain.mdYour glossary and where it lives
docs/agents/workflow-locations.mdWhere your ADRs, PRDs and handoffs live
docs/agents/deployment.mdHow you ship
docs/agents/work-tracker.mdWhere work is tracked
Where your repo already documents a topic, setup links to it instead of restating it, and it shows you every change before writing.

Install, set up once, then just ask.

  1. 1 Install the skills in your product repo

    Terminal
    npx skills@latest add \
      qorsmond/FeatureKit \
      -a codex -a claude-code \
      -a opencode --skill '*' -y

    Remove the -a options for agents you don’t use.

  2. 2 Run setup once, in a fresh agent session

    In your agent
    /setup-featurekit

    Setup shows you what it will write before it writes anything.

  3. 3 Describe a feature

    No special syntax. A raw feature request starts the interview by itself. Unsure which skill fits? Ask/ask-featurekit.