intake — collect inputs, scaffold the project
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.md per 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 / the orchestrate skill, nobody to ask) —
write BLOCKED: <input> — why it is needed — how to provide it into PROJECT.md
and 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 returns discovered — task files, capability artifacts, existing
adapters. Reuse what it found; never re-author it.
- Inspect what
discovered leaves open: the entrypoint, how one eval runs, where
traces and scores land, candidate metrics, a natural train/val/test split, cost caps.
Run gh 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_condition in agent mode), splits, trials, budget, and memory_skill
(default md-files; offer wiki — the weakness-graph format, see
inputs/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/ via scripts/run.py: adapter stub, inputs/,
capevolve.yaml, PROJECT.md, and optimizer/INSTRUCTIONS.md. The whole
templates/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, so
implement-and-check wires trajectories() and score() against real inputs rather
than guesses. inputs/INPUTS.md → scorer specifies exactly what the feedback must
be (argument-level, gold-safe) and that score() must be deterministic — follow it
literally, that feedback is the learning signal. Note in PROJECT.md if you
deliberately return None from trajectories() (cap-evolve then falls back to its
own per-rollout JSON).
- Customize the scaffolded
optimizer/INSTRUCTIONS.md for 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 in capevolve.yaml: capabilities, so a run never presents an
artifact as editable that this run does not own. Point the optimizer at
./guidance/<cap>/SKILL.md for each selected capability's own edit space, and
at ./guidance/diagnose/SKILL.md for 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.md defines each one.
- Caution (issue #252): a relative
optimizer_instructions_file resolves
project-relative under check but cwd-relative under run, which then silently
falls back to the generic template. Write it absolute, or verify run actually
picks up the customized file — intake authors it, so intake is the cheapest place
to get it right.
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.sh clones and
installs a benchmark and wires the adapter until cap-evolve check is green, and its
run.sh runs 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.
1---2name: intake3description: intake — collect inputs, scaffold the project4---56# intake — collect inputs, scaffold the project78Turn a vague wish ("make this agent better at X") into a runnable project: a filled9`capevolve.yaml`, an adapter ready to implement, and **every NEEDED input resolved10before any budget is spent**. Intake is cheap; an unresolved input found three phases11later is a wasted run and a meaningless number.1213## Ask, never fabricate — the core discipline of this phase1415`inputs/INPUTS.md` classifies every input **NEEDED** or **RECOMMENDED**. For each16**NEEDED** input that is not already present, do not proceed:17- **Interactive / chat mode — ASK THE USER and wait.** Quote all three, they are in18 `INPUTS.md` per input: (a) the exact path the input is expected at, (b) the command19 or option that produces it, (c) the alternatives. Say what breaks without it.20- **Non-interactive** (`cap-evolve run` / the `orchestrate` skill, nobody to ask) —21 write `BLOCKED: <input> — why it is needed — how to provide it` into `PROJECT.md`22 and exit non-zero. A blocked-but-honest stop is correct; a green run on a guessed23 input is not.2425A fabricated dataset, scorer, trajectories path or gold answer does not unblock the run26— it produces a number that measures nothing and hides that fact. A missing tasks file27is a *question for the user*, not a gap for you to paper over.2829**RECOMMENDED** inputs may take their default, but log every default in `PROJECT.md`30with its honesty cost (e.g. "num_trials=1 — single-trial scores, so the significance31gate will correctly reject marginal gains"), so the cost is visible at report time.3233## Step 0 — mine, then inspect, then ask once341. **Mine the conversation first.** Anything the user already said is an answer you35 must not re-ask — "optimize my airline policy on the flight-change tasks" already36 fixed the capability, the artifact and the task subset. Harvest that, and any37 correction the user made, before asking anything.382. **Run the miner.** `python scripts/run.py --base .capevolve --workdir <repo-root>`39 scaffolds and returns `discovered` — task files, capability artifacts, existing40 adapters. Reuse what it found; never re-author it.413. **Inspect what `discovered` leaves open**: the entrypoint, how one eval runs, where42 traces and scores land, candidate metrics, a natural train/val/test split, cost caps.43 Run `gh auth status`. Fan subagents out over the benchmark repo (entrypoint, scorer,44 trace dir, task schema) *while* the user answers instead of serializing — come45 prepared, so the user carries as little of the research as possible.464. **Then ask the FEWEST questions, as ONE numbered batch**, each with the detected47 value pre-filled as a default plus a free-text escape — including the ones only a48 human can answer: which metric gates accept/reject and each shown metric's49 direction, GitHub mirroring, deterministic vs agent orchestration (plus50 `stop_condition` in agent mode), splits, trials, budget, and `memory_skill`51 (default `md-files`; offer `wiki` — the weakness-graph format, see52 `inputs/INPUTS.md` — when the user wants weaknesses tracked as a persistent graph53 rather than an append-only journal). `inputs/INPUTS.md` → RECOMMENDED is the54 authority on each key; SKILL.md only fixes *when* to ask. Define jargon in a55 clause before using it ("pass^k — how often it succeeds on all k tries"); the user56 may be a domain expert, not an ML one.575. **Confirm before scaffolding.** Echo the resolved spec back as one block —58 capability, optimizer, algorithm, dataset, splits, budget, every RECOMMENDED input59 you are defaulting — and get a yes. A misread is cheapest to fix here.6061## What it does62The interview settles the capability skill (*what* is optimized), the optimizer (*which*63coding agent proposes edits), the algorithm (*the search loop*), dataset, splits, budget.641. **Scaffold** `.capevolve/project/` via `scripts/run.py`: adapter stub, `inputs/`,65 `capevolve.yaml`, `PROJECT.md`, and `optimizer/INSTRUCTIONS.md`. The whole66 `templates/project/` tree is copytree'd verbatim — confirm the files landed.672. **Resolve inputs** per `inputs/INPUTS.md`, honoring the ask-never-fabricate rule.683. **Record** the resolved trajectories path and the scoring source in `PROJECT.md`, so69 `implement-and-check` wires `trajectories()` and `score()` against real inputs rather70 than guesses. `inputs/INPUTS.md` → **scorer** specifies exactly what the feedback must71 be (argument-level, gold-safe) and that `score()` must be deterministic — follow it72 literally, that feedback is the learning signal. Note in `PROJECT.md` if you73 deliberately return `None` from `trajectories()` (cap-evolve then falls back to its74 own per-rollout JSON).754. **Customize the scaffolded `optimizer/INSTRUCTIONS.md`** for THIS benchmark. The76 shipped template already carries the depth mandate, the non-overfitting guardrail,77 the STEP-0 reading mandate and the cross-iteration file protocol — do not78 re-author any of them. Your three jobs:79 a. keep every `{{...}}` placeholder intact (`{{FOCUS_SUMMARY}}`, `{{FAILURES}}`,80 `{{CAP_BRIEF}}`, `{{ALGO_BRIEF}}`, `{{BENCH_REPO}}` — the harness fills them per81 iteration; `implement-and-check`'s pipeline self-test fails if one is deleted,82 and rendering must leave no `{{` behind);83 b. **scope it to the selected capabilities** — delete the sections for capabilities84 not listed in `capevolve.yaml: capabilities`, so a run never presents an85 artifact as editable that this run does not own. Point the optimizer at86 `./guidance/<cap>/SKILL.md` for each selected capability's own edit space, and87 at `./guidance/diagnose/SKILL.md` for the failure taxonomy — both are88 materialized into its working dir. When a selected capability ships one, also89 point at `./guidance/<cap>/references/optimizer-playbook.md`;90 c. add the benchmark-specific facts the template cannot know: where the runner91 writes traces, what the scoring source is, which data-model files the92 capability's code imports.935. **Set the spec keys** in `capevolve.yaml` — `runner_repo_path`,94 `optimizer_instructions_file`, `capability_sources` (the module(s) a selected95 capability's code imports, copied into the optimizer's `./guidance/sources/`),96 `target_model`. `inputs/INPUTS.md` defines each one.97 - **Caution (issue #252):** a *relative* `optimizer_instructions_file` resolves98 project-relative under `check` but cwd-relative under `run`, which then silently99 falls back to the generic template. Write it absolute, or verify `run` actually100 picks up the customized file — intake authors it, so intake is the cheapest place101 to get it right.102103## How to run104```105python scripts/run.py --base .capevolve --workdir . # mine, then scaffold106```107The script is purely mechanical; the *judgment* — interviewing, choosing components, the108ask-if-missing loop — is yours. Then implement `adapters/adapter.py`, fill109`capevolve.yaml`, and hand off to `implement-and-check`: together the two phases are the110*full integration* (scaffold → the 3 required adapter methods → `cap-evolve check` green)111and no budget is spent until that gate passes.112113> **Onboarding transcript (one example):** `examples/tau2_airline/setup.sh` clones and114> installs a benchmark and wires the adapter until `cap-evolve check` is green, and its115> `run.sh` runs the optimization. Read it only when onboarding a benchmark you have not116> integrated before.117118## Good vs bad intake119- **Good:** every NEEDED input resolved to a real path or `"adapter"`; splits and budget120 chosen deliberately; each defaulted RECOMMENDED input logged; spec confirmed by the user.121- **Bad:** a synthesized tasks file that "looked plausible"; a scorer that leaks the gold122 answer into feedback; test == train with no note; a budget too small to find a gain;123 the run proceeded past a missing NEEDED input "to keep moving".124125## References126- `inputs/INPUTS.md` — the binding contract: every input classified NEEDED vs RECOMMENDED127 with the path / how-to-retrieve / alternatives you must quote, plus the meaning and128 default of every spec key. Read it during the interview.129- `references/concepts.md` — why the contract is shaped this way, the 3 required adapter130 methods, split/trial/budget guidance with sources. Read it if this phase is new to you.