Curator (Autonomous Model Curation): foundations
Status
draft — 2026-06-01. Sector bootstrap proposed in the same session that ratified stack-RFC-008 (decision set aaa/a). This RFC is the per-sector foundation; the cross-stack form, the three loops and the control-plane×data-plane boundary live in stack-RFC-008. Slug curator is a working name pending ratification against specs/naming/forms.kmd (alternatives: scout, modelscout).
Summary
curator is the orchestrator daemon for the Koder AI model lifecycle: it discovers candidate models across modalities, drives eval to measure them (tiered), records results in modelreg, ranks the served set by benchmark relevance, and emits a PromotionProposal that a human (internal Koder staff, control-plane) approves before a model is served. It also runs the benchmark-of-benchmarks meta-routine that keeps the ranking grounded on the most relevant benchmarks available. Self-hosted analog of the model-selection layer of managed MLOps platforms — scoped to Koder's own platform operations.
Boundary. curator coordinates;
evalmeasures;modelregrecords (system of record,GlobalTenant="koder");runtime/gatewayserve. The curator owns no catalog storage — it writes through modelreg (#003#004#005). It is not the public model hub (that iszoo).
Motivation
Today runtime/models.yaml is hand-curated and runtime/internal/updater only refreshes SHAs of already-listed models; --discover is text-only and log-only. New frontier models are invisible until a human edits the YAML, and the benchmark suite we rank with is never reviewed for relevance. See stack-RFC-008 §1.
Scope
In
- The three loops (A: relevance curation; B: multimodal discovery; C:
benchmark-of-benchmarks) — see stack-RFC-008 §5.
PromotionProposalobject + governed-flip pipeline (proposal → notify →approve → write catalog).
- Orchestration only: scheduler, source polling, eval triggering, ranking,
proposal/notification adapters.
Out
- Catalog storage (modelreg owns it).
- Benchmark execution (eval owns it).
- Weight hostingserving (runtime + infradata/kdb-blob).
- The public model/dataset hub (zoo).
- Tenant model-preference (data-plane, future — stack-RFC-008 §8).
- Auto-promotion without a human (future, by amendment — stack-RFC-008 D1).
Initial design
Surfaces
backend/— Go daemonkoder-curator(the three loops + proposal queue).app/— deferred; the operator review UI is desk approval-workflows, not acurator-native surface.
Key flows
curator run --loop=discover— Loop B: multimodal scan → modelreg drafts +eval queue.
curator run --loop=curate— Loop A: rank →PromotionProposal→ notify.curator run --loop=benchmarks— Loop C: allowlist poll + LLM scan →ai-benchmarksregistry vetting queue → eval re-weight.curator --dry-run— one cycle of all loops, no catalog write, logsproposals + evidence (E2E verification per stack-RFC-008).
Dependencies
services/ai/eval— benchmark execution (tiered) + ingestion.services/ai/modelreg— metadata system of record (#003#004#005).services/ai/runtime— receivesmodels.yamlwrites; keeps SHA updater.services/foundation/desk— approval-workflows (#063); *ootstrap adaptervia
reminders.md/noticesuntil #063 ships*infra/observe/notify(koder-notify) — notification fan-out.services/foundation/id— internal staff roles (control-plane).
Relation to existing sectors
- Generalizes
runtime/internal/updater.DiscoverNew(text-only, log-only) intoa multimodal, registering discovery engine.
- Consumes
eval/internal/nightlyrankings; writes proposals against thegovernance surface, never serving autonomously (stack-RFC-008 D1).
Self-hosted-first analysis (5 gates)
See stack-RFC-008 §6. G1 = supersedes the manual curation workflow; G2 = N/A (orchestration); G3 = bootstrapping; G4 = scheduler + polling + eval trigger + proposal queue; G5 = unblocks benchmark-grounded model decisions for the platform.
Open questions
Tracked in stack-RFC-008 §7 (slug, loop cadence, PromotionProposal ownership, non-HF discovery sources).
Next steps
Bootstrap skeleton (koder.toml, README, backlog) + registries + modelreg type extensions land with this RFC; the loops follow via backlog/pending/ tickets.