This is a Naive → Naive guide.
defineConfig is a permanent @deprecated alias —
it keeps today’s lenient behavior byte for byte and is never removed — so switching is
never urgent, only strictly better. There is no Sunset date on anything here.Concept map
Both entrypoints return the config unchanged. A legacy config — one that declares
neither
company nor teams — passes through defineConfig untouched, and gains only
the unconsumed-field pass under defineProject.
Before / after
naive up --plan is enough — it is read-only). Either it
passes, and you are done, or it refuses with one line per offending field:
What gets refused
The fields on the not-yet-consumed list today — declared, dropped (or carried and read by nothing), enforced nowhere:
For each one: remove the field (it was enforcing nothing — the refusal changes what
you know, not what runs), or keep the config on
defineConfig until a consumer lands.
Wiring a field deletes its row from the one shared list, so strictness only shrinks.
Not refused, on either entrypoint: fields consumed by one runtime and reported in
unconsumed on the other — a hermes-led team’s agent({ model }), team({ review }),
spend/hardSpend, memory — and the whole legacy surface (runtime.pool(),
systems:, agentProfiles, agent-level runtime: "<pool>" strings), which keeps
compiling and applying with a deprecation notice. See
what naive up prints.
Minimal viable migration
- Rename the call:
defineConfig→defineProject(import and call site). - Run
naive up --plan. Fix eachdeclared_unconsumedline by deleting the field. - Optionally rename
agents:→kits:(andagent()entries tokit()) to clear the rename notice — identical output, one namespace, refused only if a name appears in both blocks (kit_and_agent_duplicate).
What does not map yet
- There is no per-field opt-out. Strict mode is all of the list or none of it —
a config that must keep one listed field stays on
defineConfig. - The strict pass covers the unconsumed list only. It does not (yet) validate the
legacy
infrastructure/runtime/systemsblocks beyond whatdefineConfigalready checks.