Meta-campaign — continuous meta-learning as a bounded loop¶
agentdescent meta-campaign runs repeated continuous_meta_run sessions over
one consolidation archive, each in a fresh ledger repo, under the existing
RSIController stop policy:
session: evolve a slot -> validate on unseen problems -> archive an adopted rule
stop: target / cost / patience / max_sessions
memory: the archive is the only state shared between sessions
It does not reimplement meta evolution. It supplies the durable loop, the per-session repo isolation and the archive continuity.
Quickstart¶
agentdescent meta-campaign init --out meta.json --demo
agentdescent meta-campaign plan --spec meta.json
agentdescent meta-campaign run --spec meta.json --json --out report.json
The demo uses agentdescent.meta_demo, a deterministic offline domain, so it
runs with no model or dataset. run exits 0 only when the campaign completed
without an errored session; a rejected rule is a normal measured session.
Spec¶
{
"archive": "~/.agentdescent/archive",
"repo_dir": "meta-repos",
"slot": "task_sampler",
"spec": "mypkg.meta:slot_spec",
"tasks_for": "mypkg.meta:tasks_for",
"run": "mypkg.meta:run",
"reward": "mypkg.meta:reward",
"inner_propose": "mypkg.meta:inner_propose",
"inner_strategy": "mypkg.meta:inner_strategy",
"propose": "mypkg.meta:propose",
"problems": "mypkg.meta:problems",
"val_problems": "mypkg.meta:val_problems",
"campaign": {"max_sessions": 2, "patience": 5},
"inner": {"rounds": 5, "n_workers": 1},
"evolve": {"rounds": 1, "n_workers": 1},
"seeds": [0, 1, 2, 3],
"val_seeds": [10, 11]
}
spec,inner_strategy,problems,val_problemsare zero-argument builders (or ready objects).tasks_for,run,reward,inner_propose,proposeare callables.meta_rewardandcost_fnare optional callable refs.campaignisMetaCampaignConfig;inneris the innerevolve()settings;evolveis the outer metaevolve()settings.seeds/val_seedsmust be disjoint; the validation set is fixed and never seen by the search.
plan resolves refs and validates configs without calling builders or creating
the archive. On MCP, refs are gated by AGENTDESCENT_SURFACE_ALLOW (empty
refuses) and archive/repo/report writes by AGENTDESCENT_SURFACE_WRITE_DIRS.
When repo_dir is omitted, meta_campaign_run creates a system temporary
directory for the per-session ledgers; that fallback is outside the write
allowlist by design, so pass repo_dir when you need the ledgers confined.