intake — collect inputs, scaffold the project
SkillProductivityStarts a cap-evolve optimization run. Interviews the user to decide what capability to optimize, which runner/optimizer/algorithm to use, and where the tasks and the scoring source live, then scaffolds .capevolve/project/ (adapter stub, capevolve.yaml, PROJECT.md). Use when someone asks to optimize or improve an agent capability against an eval and no project exists yet — "set up a run", "start optimizing X", "make X score higher on this benchmark". This is Phase 1 of the pipeline. For every NEEDED input that is missing it asks the user — quoting the expected path, how to retrieve it, and the alternatives — instead of fabricating it. Not for a project that already exists: when .capevolve/project/ is present, go to implement-and-check or the algorithm loop instead.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the intake — collect inputs, scaffold the project skill
What this skill tells your AI
The instructions your AI receives, as published by skillberry-ai/cap-evolve in skills/phases/intake/SKILL.md and read by ahel’s review.
Turn a vague wish ("make this agent better at X") into a runnable project: a filled
capevolve.yaml, an adapter ready to implement, and every NEEDED input resolved
before any budget is spent. Intake is cheap; an unresolved input found three phases
later is a wasted run and a meaningless number.
Ask, never fabricate — the core discipline of this phase
inputs/INPUTS.md classifies every input NEEDED or RECOMMENDED. For each
NEEDED input that is not already present, do not proceed:
- Interactive / chat mode — ASK THE USER and wait. Quote all three, they are in
INPUTS.mdper input: (a) the exact path the input is expected at, (b) the command or option that produces it, (c) the alternatives. Say what breaks without it. - Non-interactive (
cap-evolve run/ theorchestrateskill, nobody to ask) — writeBLOCKED: <input> — why it is needed — how to provide itintoPROJECT.mdand exit non-zero. A blocked-but-honest stop is correct; a green run on a guessed input is not.
A fabricated dataset, scorer, trajectories path or gold answer does not unblock the run — it produces a number that measures nothing and hides that fact. A missing tasks file is a question for the user, not a gap for you to paper over.
RECOMMENDED inputs may take their default, but log every default in PROJECT.md
with its honesty cost (e.g. "num_trials=1 — single-trial scores, so the significance
gate will correctly reject marginal gains"), so the cost is visible at report time.
Step 0 — mine, then inspect, then ask once
- Mine the conversation first. Anything the user already said is an answer you must not re-ask — "optimize my airline policy on the flight-change tasks" already fixed the capability, the artifact and the task subset. Harvest that, and any correction the user made, before asking anything.
- Run the miner.
python scripts/run.py --base .capevolve --workdir <repo-root>scaffolds and returnsdiscovered— task files, capability artifacts, existing adapters. Reuse what it found; never re-author it. - Inspect what
discoveredleaves open: the entrypoint, how one eval runs, where traces and scores land, candidate metrics, a natural train/val/test split, cost caps. Rungh auth status. Fan subagents out over the benchmark repo (entrypoint, scorer, trace dir, task schema) while the user answers instead of serializing — come prepared, so the user carries as little of the research as possible. - Then ask the FEWEST questions, as ONE numbered batch, each with the detected
value pre-filled as a default plus a free-text escape — including the ones only a
human can answer: which metric gates accept/reject and each shown metric's
direction, GitHub mirroring, deterministic vs agent orchestration (plus
stop_conditionin agent mode), splits, trials, budget, andmemory_skill(defaultmd-files; offerwiki— the weakness-graph format, seeinputs/INPUTS.md— when the user wants weaknesses tracked as a persistent graph rather than an append-only journal).inputs/INPUTS.md→ RECOMMENDED is the authority on each key; SKILL.md only fixes when to ask. Define jargon in a clause before using it ("pass^k — how often it succeeds on all k tries"); the user may be a domain expert, not an ML one. - Confirm before scaffolding. Echo the resolved spec back as one block — capability, optimizer, algorithm, dataset, splits, budget, every RECOMMENDED input you are defaulting — and get a yes. A misread is cheapest to fix here.
What it does
The interview settles the capability skill (what is optimized), the optimizer (which coding agent proposes edits), the algorithm (the search loop), dataset, splits, budget.
- Scaffold
.capevolve/project/viascripts/run.py: adapter stub,inputs/,capevolve.yaml,PROJECT.md, andoptimizer/INSTRUCTIONS.md. The wholetemplates/project/tree is copytree'd verbatim — confirm the files landed. - Resolve inputs per
inputs/INPUTS.md, honoring the ask-never-fabricate rule. - Record the resolved trajectories path and the scoring source in
PROJECT.md, soimplement-and-checkwirestrajectories()andscore()against real inputs rather than guesses.inputs/INPUTS.md→ scorer specifies exactly what the feedback must be (argument-level, gold-safe) and thatscore()must be deterministic — follow it literally, that feedback is the learning signal. Note inPROJECT.mdif you deliberately returnNonefromtrajectories()(cap-evolve then falls back to its own per-rollout JSON). - Customize the scaffolded
optimizer/INSTRUCTIONS.mdfor THIS benchmark. The shipped template already carries the depth mandate, the non-overfitting guardrail, the STEP-0 reading mandate and the cross-iteration file protocol — do not re-author any of them. Your three jobs: a. keep every{{...}}placeholder intact ({{FOCUS_SUMMARY}},{{FAILURES}},{{CAP_BRIEF}},{{ALGO_BRIEF}},{{BENCH_REPO}}— the harness fills them per iteration;implement-and-check's pipeline self-test fails if one is deleted, and rendering must leave no{{behind); b. scope it to the selected capabilities — delete the sections for capabilities not listed incapevolve.yaml: capabilities, so a run never presents an artifact as editable that this run does not own. Point the optimizer at./guidance/<cap>/SKILL.mdfor each selected capability's own edit space, and at./guidance/diagnose/SKILL.mdfor the failure taxonomy — both are materialized into its working dir. When a selected capability ships one, also point at./guidance/<cap>/references/optimizer-playbook.md; c. add the benchmark-specific facts the template cannot know: where the runner writes traces, what the scoring source is, which data-model files the capability's code imports. - Set the spec keys in
capevolve.yaml—runner_repo_path,optimizer_instructions_file,capability_sources(the module(s) a selected capability's code imports, copied into the optimizer's./guidance/sources/),target_model.inputs/INPUTS.mddefines each one.- Caution (issue #252): a relative
optimizer_instructions_fileresolves project-relative undercheckbut cwd-relative underrun, which then silently falls back to the generic template. Write it absolute, or verifyrunactually picks up the customized file — intake authors it, so intake is the cheapest place to get it right.
- Caution (issue #252): a relative
How to run
python scripts/run.py --base .capevolve --workdir . # mine, then scaffold
The script is purely mechanical; the judgment — interviewing, choosing components, the
ask-if-missing loop — is yours. Then implement adapters/adapter.py, fill
capevolve.yaml, and hand off to implement-and-check: together the two phases are the
full integration (scaffold → the 3 required adapter methods → cap-evolve check green)
and no budget is spent until that gate passes.
Onboarding transcript (one example):
examples/tau2_airline/setup.shclones and installs a benchmark and wires the adapter untilcap-evolve checkis green, and itsrun.shruns the optimization. Read it only when onboarding a benchmark you have not integrated before.
Good vs bad intake
- Good: every NEEDED input resolved to a real path or
"adapter"; splits and budget chosen deliberately; each defaulted RECOMMENDED input logged; spec confirmed by the user. - Bad: a synthesized tasks file that "looked plausible"; a scorer that leaks the gold answer into feedback; test == train with no note; a budget too small to find a gain; the run proceeded past a missing NEEDED input "to keep moving".
References
inputs/INPUTS.md— the binding contract: every input classified NEEDED vs RECOMMENDED with the path / how-to-retrieve / alternatives you must quote, plus the meaning and default of every spec key. Read it during the interview.references/concepts.md— why the contract is shaped this way, the 3 required adapter methods, split/trial/budget guidance with sources. Read it if this phase is new to you.
Signals
- GitHub stars
- 56
- Forks
- 16
- Last commit
- Sep 2026
ahel review
K6low
bundled executables the agent is told to runK1binfo
installs-packages (in inputs/INPUTS.md)
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
intake-skillberry-ai- Source
- github.com/skillberry-ai/cap-evolve