Repository navigation
0.8.0 — hosts, RSI report, tournament & campaign
Added
-
agentdescent install grok-bot/uninstall grok-botscaffold a skill +
HOST.md+mcp.example.jsonunder~/.agentdescent/plugins/grok-bot/
(#165). Grok Bot has no public one-click plugin API for local skill+stdio
MCP yet, sodoctorreportsmcp n/awhen the scaffold is current rather
than pretending a host config was wired. Docs:plugins.md,
plugin-quickstart.md. -
agentdescent install opencodewrites/agentdescent/evolveunder
~/.config/opencode/command/agentdescent/evolve.md, andinstall codexwrites
/prompts:evolveas~/.codex/prompts/evolve.md— the same prompt body as
Claude Code's/agentdescent:evolve.uninstallremoves each only while still
stock (#165). -
agentdescent installwrites an/algorithmsslash entry beside/evolveon
Claude Code (commands/algorithms.md→/agentdescent:algorithms), OpenCode
(command/agentdescent/algorithms.md→/agentdescent/algorithms), and Codex
(prompts/algorithms.md→/prompts:algorithms). The body lists, shows, or
runs a named method through the same cards asagentdescent algorithms list|showand MCPlist_algorithms/describe_algorithm. Grok Bot's
HOST.mdnames the CLI/MCP discovery path;uninstallremoves each slash
file only while still stock (#384). -
rsi_report/agentdescent rsi/ MCPrsi: a read-only longitudinal view of
the consolidation archive. Per decision slot it reports the first and best
adopted reward, the adoption that set the best, the gain, adoptions since that
best, and the exam counts, and returns an overallimproving/stagnant/
mixed/insufficientverdict with the current portfolio reallocation. -
run_tournament/agentdescent tournament: run the same spec under several
registered algorithms (and seeds) with the same evolve budget, then report the
measured ranking and winner. The winner is aggregated per algorithm over seeds
(mean reward, fewer mean calls on a tie); a tie is reported as a tie. An errored seed counts as
reward 0 and is reported undererrors, so a crash cannot win by shrinking the
denominator;--dry-runprices every arm before a run.defaultis the spec's own recipe; each named arm
gets a deep copy, so the spec file is untouched. Ordinary
EvolveSpec -> compose() -> evolve()per arm, not a second engine or a claim to
reproduce the ports' published numbers. -
run_campaign/agentdescent campaign: run several evolution sessions on one
spec, each starting from the previous session's artifact. The campaign works on
a copy in a temporary workspace, applies only improving sessions, stops after
patiencenon-improving rounds, and reports the best artifact, workspace and
stopped_reason. Session 0 is the baseline (not a claimed improvement), the
split seed is fixed across sessions so rewards are comparable, andfinal_reward
is the last session whilebest_rewardis the artifact kept.--dry-runprices
the sessions first;policy_slotand inlinetexttargets are refused because
there is no file to carry, and--workdirmust be empty. -
MCP tools
safety,portfolioandaudit_trace: a host agent can now ask
whether an archive is safe to seed from, how its layers rank for the next
budget window, and where one adoption's evidence came from, without finding the
CLI verbs in the source. They return the same structure as the CLI's--json
(which now also carriesarchiveforsafety), write nothing, and treat a
missing archive as an error. The installedSKILL.mdsays when to use them, and
thedoctortool description now listsopencode(#505). -
LeakageGuard, a pre-evaluation screen and acceptance backstop that rejects a
candidate introducing a protected gold answer, task id or corpus string. It
checks diff keys and values before the held-out sweep and reports the existing
critic-rejectedoutcome, so a leak never crashes the aggregator or buys an
inflated score. The acceptance form only refuses newly introduced matches, so a
protected string already in the seed does not freeze the run. Matching is
case-insensitive and whitespace-collapsed, and short strings are ignored. -
ApprovalGate+ApprovalStore: high-risk self-modifications (blast radius or
diff size above a threshold) are not committed; a request is appended to a JSONL
store, and a human approval lets the same content through while a rejection
stays sticky. The key fingerprints target, ops and base version instead of the
producer'sdiff_id,needs-approval/approval-rejectedare real
MergeOutcomemembers, requests carry a reviewable summary, and malformed store
lines are skipped. Low-risk candidates delegate to the inner acceptance policy. -
MarginalGainStop, a statefulstop_whenpolicy: it watches the recent
reward/call slope and stops afterpatiencemeasurements whose per-call gain
is belowmin_gain_per_call. The per-call bar decides on its own under the
defaults, so a run that improves too slowly to pay for its calls now stops;
min_gainis an optional absolute-gain floor combined by OR. Thereason
names the measured gain and call delta, a round with no new calls never counts
as low, andreset()makes the object reusable across runs. This is an
economic stop for long self-improvement runs, not a safety verdict. -
VarianceSampler, aTaskSamplerthat prefers tasks whose recent reward
variance is high (flip-flopping tasks) over a lifetime pass-rate average, with a
UCB exploration bonus and round-index tie rotation. It is a drop-in
task_sampler=argument, thread-safe likeDifficultyWeighted. -
diagnose_payload/agentdescent diagnose/ MCPdiagnose: turnsshow's
samples, rejected candidates and outcome histogram into one actionable verdict
(solved,partial-improvement,running,cancelled,run-failed,
reflector-error,scoring-mismatch,gate-rejected,agent-failures,
no-improvement,unknown) with bounded evidence and the next step. A
committed-but-partial run is no longer called "no candidate adopted", gate
rejections win over the worst-sample rule, truncated samples do not claim a
scoring mismatch, and running/cancelled states are named. It reuses the same
read model as the CLI/MCP without building a discarded diff. -
GuardPipeline, one ordered acceptance gate that composes the checks a caller
supplies and names the ring that refused a candidate. It keeps the inner
guard's merge category (falling back tobelow-threshold) instead of inventing
a category the aggregator cannot decode, reports the first refusal even with
collect_all, and forwardsbind/configureplus checkpoint, restore and
screen-reject hooks to every guard. It imports no specific guard, so third-party
checks are first-class. -
DecisionRecord+DecisionLog: an append-only JSONL of immutable adoption and
session decisions with the guard category, evidence, cost and parent link.
Malformed lines (including non-object JSON) are skipped, a torn last line is
closed before the next append, duplicate record ids are refused, non-finite
floats become null, andchildren()exposes the decision tree a dashboard or
audit export needs. Writers in one process share a per-path lock. -
bootstrap_ci/is_significant/paired_gainandcontamination_overlap:
seeded paired-task bootstrap confidence intervals with an effect-size test, and
a contamination report between train and validation text. Paired keys are
sorted so the same seed is reproducible across processes, non-finite scores are
refused, normalized exact duplicates and CJK/short text are screened, and
"nothing to screen" isNonerather than a clean-looking0.0. Pure
standard-library functions for adoption gates, reports and external audits. -
KillSwitch,canaryandrollback_plan: a file-based global stop, a paired
exact sign test that recommends promote/hold/rollback from incumbent vs candidate
per-task scores, and a pure state diff for rollback. Missing candidate tasks
block promotion and are reported, significant losses use a separate
max_regressionbar, a delete-only rollback is not a no-op, and the switch
treats a directory at its path as engaged and writes atomically. These are
deployment operations separate from the acceptance gate, so a committed change
can still be canaried and reverted deliberately. -
run_guarded, one entry point for a session that cannot skip the kill switch or
the decision record. The injected acceptance is chained before the spec's
own acceptance policy or the shipped default statistical gate, so guards can
only tighten adoption; stateful checkpoint/restore/screen-reject hooks are
forwarded. The decision record says whether a candidate actually committed and
carries the error separately, a failing log does not hide the result, and an
aggregator_factoryalgorithm is called out innotes. The kill switch is an
explicit pre-flight check. -
RunManifest/build_manifest/verify_manifest/diff_manifest: a
content-addressed manifest of a run's spec, data files or directory tree, model
configuration (secret keys redacted), seeds, algorithm and code version. The
manifest id is stable for identical inputs, and verification names the fields
that changed. -
RiskPolicy/RiskRule/RiskContext: ordered, declarative rules that map a
change's tier, blast radius, diff size, capability domain and tenant to
allow/approve/canary/rollback/deny. First match wins, no match is
fail-closed (denyby default), and invalid actions or duplicate rule names are
refused at construction. -
evaluate/EvaluationReport: a deterministic, budgeted verifier-vs-oracle
pass. The verifier scores every task, the oracle only a seeded sample capped by
budget, and the report carries means, signed/absolute bias, coverage, oracle
calls and per-task rows. Zero coverage is explicitly "no truth evidence", not a
pass. -
run_controller/ControllerConfig/SessionOutcome: a generic multi-session
loop with max sessions, call budget, kill switch, patience/stagnation and an
optional decision record per session. The caller suppliesrun_session(index, seed), so a guarded run, campaign step, population generation or remote job can
sit behind the same scheduling and stop policy. -
metrics_from_records/metrics_from_log,to_prometheusandalerts: RSI
aggregates from decision records -- acceptance rate, calls/tokens/wall clock,
calls per accepted decision and category frequency -- plus a deterministic
Prometheus text export and pure threshold alerts. The export gives the
per-category counter its own family, escapes label values and rejects malformed
records instead of silently coercing them. No model calls and no second source
of truth. -
docs/algorithm-authoring.mdplusagentdescent/algorithms/_TEMPLATE.py: the short contributor path to register one named Algorithm card in a single PR (algorithms list/show/plan), with links from the generated catalog, plugins docs, and the porting checklists (#539). -
The MCP
applytool now accepts optionalfrom+to(mutually exclusive with
run_id, same rules as CLIapply --from:fromrequiresto, symlinks
refused, dry-run / backup viaapply_from_payload), so an MCP host can install
a campaignfinal_targetwithout shelling out (#540). -
QualityDiversityArchive, a MAP-Elites-style archive that keeps one elite per
behaviour cell and reports coverage and QD-score instead of collapsing the
search to a single best artifact. -
leave_one_out_creditandshapley_creditattribute a candidate's gain to
individual edits, with a shared subset cache and an explicit interaction term so
a reflector can learn which change actually paid. -
ConformalGate, a split-conformal lower prediction bound for one new task's
paired improvement. It uses the finite-sample floor rank, returns-inf(and
insufficient) when the calibration set cannot certifyalpha, and states the
exchangeability/per-task assumption instead of claiming a candidate-level
false-acceptance rate. -
agentdescent mcp --transport streamable-http [--host 127.0.0.1] [--port 8000]
serves the MCP tools over HTTP at/mcp, so URL-only hosts such as Grok Bot can
connect through an HTTPS tunnel; stdio stays the default. A non-loopback
--hostis refused unless--allow-remoteis passed. The Grok BotHOST.md
and plugin docs now give the copy-paste commands (#560). -
EProcess/sequential_test, an anytime-valid hedged-betting e-process for
paired improvement deltas: a dashboard can watch the same evidence continuously
without inflating the false-positive rate. -
detect_goodhartandGoodhartMonitormeasure proxy-oracle inflation, rank
tracking, and concrete shortcut candidates, so a self-improving loop can alarm
when the reward it optimises stops tracking the reward it cares about. -
MetamorphicSuite,MetamorphicRelationandinvariancecheck output
relations under input transforms, so a candidate that scores higher by learning
surface form can be caught by a broken invariance. The suite is an acceptance
probe, not yet wired into the evolution loop;accept(min_rate=...)supports a
bounded failure rate. -
SelfModel, a deterministic logit-space Newton/IRLS Platt calibrator with
ECE/Brier reporting and calibrated answer/abstain routing. It refuses to predict
beforefit, reports anti-correlation instead of hiding it, marks tiny samples
insufficient, and converges on saturated 0/1 confidences where fixed-step
gradient descent diverges. -
dedupe_textswith Unicode-aware SimHash and MinHash fingerprints, clustering
near-duplicate artifacts deterministically. CJK runs contribute character
trigrams and punctuation-only text falls back to characters, so distinct rules
do not collapse; it is an archive-hygiene utility, not yet wired into the
population/QD path. -
LineageGraphandlineage_reportfor artifact provenance: ancestry,
descendants, shortest derivation path, impact size, roots/leaves, topological
order, external-parent accounting, and cycle detection. Walks are iterative and
child adjacency is indexed, so long self-improvement lineages stay usable. -
fit_power_law/plan_budgetfit a deterministic saturating compute curve
(a - b * budget^-c) with grid + local refinement, report R² and RMSE, and
invert it to the smallest budget that reaches a target. Unreliable fits are
refused by default and targets already observed are not extrapolated. -
RSIController, a duck-typed control plane that turns each session result into
accept / reject / defer / rollback / continue / stopusing target, cost,
patience, risk, pluggable gates and a budget policy. It wraps the existing
guarded/controller/portfolio pieces instead of replacing them. -
TaskFoundry, a failure-seeded task assembly line: generate, validate,
deduplicate (exact + optional near-duplicate), filter contamination and
unlearnable tasks, and split accepted tasks deterministically into train and
holdout.failure_seedsmines low-reward trajectory rows as seeds. -
ArtifactGraph, a Unicode-aware TF-IDF retrieval graph over prompts, skills and
harness fragments with kind/tag filters, trust weighting, parent/child edges,
and budgeted composition into a task prompt. -
VerifierEnsemble, a cost-aware verifier cascade with weighted/majority/unanimous
strategies, early stopping on confident agreement, a hard cost cap, fail-closed
incomplete panels, explicit-fail vetoes, and disagreement/error reporting. -
ReplayLab, a deterministic counterfactual replay layer over a session trace:
remove/replace/disable interventions, leave-one-out effects, and Shapley
attribution throughcredit. The cache is value/metadata-based (or caller-keyed,
or disabled for unhashable payloads), and multi-step results carry the real
intervention tuple. -
DeferralPolicy, a learned confidence threshold forauto-approve / defer / deny: it fits from past reviewer outcomes under a target auto-approve risk,
honours a hard-risk deny ceiling, refuses small calibration sets, and makes the
defer-all fallback genuinely defer everything (including confidence 1.0). -
SocietyRuntime, a role-based blackboard loop for multi-agent RSI:
proposer/critic/verifier/historian roles, per-role budgets, consensus or target
stopping, cost accounting, participation-based role credit, critic vetoes, and
optional Shapley attribution throughcredit. -
SafeSelfModifier, a capability gate plus canary/rollback promotion path for
self-modifying code: allow-listed imports, forbidden name/attribute references
(not only calls), inferred files/network/process capabilities, risk tiers, and a
canary measurement before promotion. Static screening is defense-in-depth; a
sandbox is still required for execution. -
RSITelemetry, an OTel-inspired span/event tree for RSI runs
(run → round → rollout → merge → gate → commit) with unique IDs, attributes,
events, exception/cancellation status, wall vs span time, escaped Prometheus
samples, and OTel-shaped dictionaries (not OTLP JSON). -
bench.rsi_bench, a long-horizon RSI benchmark: hash-split train/holdout with a
generation-outer loop, transfer, mean/max/forgetting-fraction, proxy-vs-oracle
gain gap, error counts, cost cap, generations-to-target, family breakdown,
andimproving / flat / regressing / no-transfer / forgetting / hacking / insufficientverdicts. -
DurableRunService+SqliteRunStore: an event-sourced, reopenable run log
with leases/heartbeats, idempotent event keys, retries, exactly-once completion,
cancel, and expired-lease recovery for long RSI sessions. -
WorkspaceRegistry: tenant/workspace principals, role-based permissions
(viewer/operator/approver/admin/owner), token/cost/concurrency quotas with
reservations, and append-only audit export as JSONL or dicts. -
PolicyBundle+AdmissionController+ signedArtifactManifest: deny-overrides
policy evaluation, approval obligations, canonical manifest hashes, HMAC-SHA256
detached signatures (demo signer; swap for cosign/Sigstore), and fail-closed
admission when the signature is missing or invalid. -
EvalOps: versioned dataset registry with content hashes, eval specs, paired
bootstrap results, CI regression gates, drift monitoring, scheduled reruns, and
a serialisable operations snapshot. -
OperationsConsole, a read-model API for runs, approval queues, QD coverage,
lineage, and cost: filtered/paginated run lists, risk-sorted pending approvals,
terminal decisions, and a serialisable dashboard snapshot. -
DataFlywheel: turn production traces into a content-hashed dataset candidate
with reward/error filtering, deterministic sampling, recursive secret/PII
redaction, exact/near-duplicate clustering and a per-cluster cap. -
ModelRouter: a cost-aware Thompson-sampling router over model quality and
price, with context/tag/budget filters, epsilon exploration, posterior updates
and a per-model routing report. -
PreferenceModel+PreferenceBuffer: a Bradley-Terry reward model over
pairwise preferences with tie targets, deterministic IRLS, accuracy/log-loss,
and an uncertainty/distance-based next-query selector for active feedback. -
ContinualMetaLearner: online softmax meta-policy updates with a bounded replay
buffer, validation-gated promotion, rollback on regression, and a feature-drift
signal for when the validation context stops matching the replay context. -
open_ended_coevolve: novelty-and-difficulty task/solver co-evolution with a
bounded archive, a target-difficulty frontier, deterministic generation and a
best-task/coverage report. -
ProcessRewardModel: a calibrated step-level logistic reward model with IRLS,
accuracy/log-loss/ECE/Brier reporting, and candidate reranking for PRM-guided
credit and search. -
MCTSPlanner: UCT planning over a caller-supplied simulator and value function,
with a hard simulation budget, deterministic seed, terminal transitions,
cost penalty, and a PlanResult carrying the chosen action/value/visits. -
ToolSynthesizer: generate/validate/select tool candidates with a recorded
rejection trail, capability metadata, custom selector, and anEnvironmentSpec
for grouping validated tools. -
Deliberation: structured multi-agent debate with evidence-bearing arguments,
confidence/weighted judge votes, agreement tracking, and a consensus/round-budget
stopping rule. -
ProofRunner+ProofCertificate: execute an invariant suite, record
warning/error obligations, hash the artifact, and emit/verify a serialisable
proof-carrying certificate for manifests, lineage and policy admission. -
LoopKernel: a resumable RSI loop overdurable_runsthat composes the
existing seams in one order —step -> RSIController -> apply/rollback— and
replays completed generations after a crash. Each generation carries its
observation, control action, gain, cost and optional decision-log/telemetry
ids; the final generation is durable instead of being lost in the completion
payload. -
promote()+PromotionRules: one fail-closed promotion decision over
evaluation, contamination, conformal/sequential evidence, canary, proof,
admission, risk and human approval. Missing evidence returnsdefer, a failed
gate returnsreject, a canary regression returnsrollback, and only a fully
green bundle returnspromotewith a stable evidence hash for manifest/lineage. -
ComputeController+ComputeOption: an action-level Thompson-sampling
allocator over direct / PRM-rerank / MCTS / verifier-ensemble strategies. It
composesmodel_routerfor the concrete model, respects difficulty bands,
context/tag/cost constraints and an optional call budget, and records the
chosen option, model, expected quality/cost and exploration flag for the
decision log. -
CapabilityFoundry: the admission loop for a synthesized tool. It binds
validation score, debate/review agreement,safe_selfmodcapability/canary
checks, proof certificate verification, holdout gain and artifact-graph
registration into one fail-closed outcome (promoted/deferred/rejected
/rolled_back). Missing evidence defers; failed gates reject; a measured
canary regression rolls back. -
ExperienceStore+ExperienceEngine: append-only cross-run experience
memory with nearest-neighbour recall and a continual meta-policy update guarded
by a frozen anchor slice. The engine warms its learner replay from an existing
store on restart; a candidate that improves validation but regresses the
anchors is rolled back, andContinualMetaLearner.rollback()restores the
weights while keeping the attempt in history as a rejected update. -
examples/rsi_loop: one offline run that composes the loop kernel, adaptive
compute, trusted promotion, capability foundry and continual experience, with a
test asserting each layer's decision. It is the end-to-end demonstration of the
five integration features rather than another primitive. -
TrustEvidence+build_trust_evidence: one paired evaluation becomes the
eval/bootstrap, canary, conformal, sequential, Goodhart, metamorphic, verifier
and calibration reports in one bundle, ready forto_promotion_request().Changed
promotionnow acceptsgoodhart,metamorphic,verifierandcalibration
evidence and has matchingrequire_*rules: gaming/failed relations/failed
panel/overconfidence reject, suspicious/incomplete evidence defers, and a green
bundle still promotes. The evidence hash covers the new reports. The builder
leavesrisk/contaminatedasNonewhen not supplied (so the fail-closed
gates defer), and computes eval means/CI/per-task over paired keys only. -
TaskPipeline+TaskPipelineConfig/TaskPipelineReport: production
TraceSamples are mined byDataFlywheel, accepted failures become seeds, and
TaskFoundryvalidates, deduplicates, checks contamination and splits them into
train and holdout. The pipeline respects the foundry's own verdict (insufficient,
filtered,no-train) instead of turning it intoready; only an empty seed
set maps toempty, andno-holdoutis explicit. -
SearchFabric: a process reward model (and optional verifier ensemble) as the
value function forMCTSPlanner, plus PRM ranking/selection for candidates
outside the planner.MCTSPlannernow returns the chosen child state in
PlanResult.state, so the fabric reports that state without stepping a
possibly side-effecting simulator twice. An incomplete verifier panel is
exposed asverifier_complete=Falseand can never report a pass. -
OpsFabric: one finishedLoopReportis written into the operations console,
the lineage graph, the telemetry trace and an optional QD snapshot. Generations
become lineage nodes (chained from the last accepted artifact) and telemetry
events. Re-recording the same(run_id, generation count, status)is a no-op;
a later terminal report updates the run and appends new generations. Unknown
statuses are refused, and a caller-supplied emptyLineageGraphis preserved. -
CalibratedDeferral: fitsSelfModelon raw confidence/outcomes, then fits
DeferralPolicyon the calibrated confidence and risk.decidereturns
answer / defer / deny with both raw and calibrated confidence and the hard-risk
ceiling still enforced. The report carries the calibration and deferral reports
together.
Changed
-
agentdescent doctorprintsskillandmcpon each installed host line
(for examplepartial (skill ok, mcp missing; …)), so stale skill vs missing
MCP is visible without reading the problems section (#165). -
CI's test matrix runs on
ubuntu-24.04instead ofubuntu-latest: the
Ubuntu 26.04 runner image has no Python 3.9 forsetup-python, so the required
test (3.9)check could never pass, and the sandboxed AlgoTune timing test was
failing there too. -
LoopKernel,promote/PromotionRulesandComputeControllerare now
re-exported from the top-levelagentdescentpackage, listed in the generated
API reference and documented with the loop, promotion and compute guides. The
modules stay usable through their submodules as before. An explicit
approved=Falsenow rejects even whenrequire_approvalis off, matching the
documented fail-closed rule. -
CapabilityFoundry,ExperienceEngine/ExperienceStoreand the
ContinualMetaLearnertypes are now re-exported from top-level
agentdescent, listed in the generated API reference, and documented with the
capability-foundry and continual-experience guides. The modules remain usable
through their submodules as before.
Fixed
-
agentdescent initwith anopencodeworker and both--modeland
--base-urlnow writes the OpenCode Coding recipe intoagent(-m <provider>/<model>plusenv.OPENCODE_CONFIGnaming a provider-only
<spec>.opencode-providers.jsonbeside the spec, key as{env:VAR}, never
inline) instead of a bare{"ref": "opencode"}that ignored both flags.
Without both flags the bare ref and its warning are unchanged (#485). -
agentdescent portfolio,examandauditno longer create a missing archive
directory and report it as empty: likesafety, they now fail with
error: archive '<path>' does not exist(exit 2).auditlikewise rejects a
--meta-audit/--inner-auditfile that does not exist (#502). -
gepa,skilloptanddgmspecs no longer get the default reflective
merge pair their own aggregator ignores, soevolvestops emitting a
RuntimeWarningaboutconflict/fusionpolicies nobody wrote; a spec that
names those policies explicitly gets the warning fromplaninstead (#504). -
python -m agentdescentnow runs the CLI, the same as theagentdescent
console script, instead of failing with "No module named
agentdescent.main" (#510). -
Missing-archive errors from
safety/portfolio/audit(CLI and MCP) now
namecontinuous_meta_runand say thatevolve/ plugin runs do not write an
archive, so a host agent does not invent a nonexistent "consolidation" step.
Those read-only verbs also leave an existing empty archive untouched (no
runs/directory as a side effect) (#512). -
--jsonnow works after the subcommand as well as before it, for every verb:
agentdescent show --json <id>,doctor --json,status --json,
plan --json <spec>,portfolio --jsonandaudit <id> --jsonused to exit 2
with "unrecognized arguments", even though the docs write them that way. -
agentdescent install opencodeno longer leaves OpenCode without its MCP
server when~/.config/opencode/opencode.jsonchas comments: the commented file
is still never rewritten, and themcp.agentdescententry goes into
opencode.jsonbeside it, which OpenCode merges. If neither file can be parsed,
install prints aFAILED:line and exits 1, andinstall/uninstallnow
honour--json.doctorno longer reports such a host asokwhen the
commented file does not even nameagentdescent(a commented-out mention no longer counts), anduninstall opencode
cleans up theopencode.jsonentry too. -
agentdescent campaignresults can now be installed:agentdescent apply --from <final_target> --to <target> [--dry-run]applies an on-disk artifact with the
same.bak-Nbackup and no-op check asapply <run_id>, and the campaign's
output ends with the ready-to-copy diff / dry-run / apply / cleanup commands
(nextin--json).docs/campaign.mdno longer points at anapply --to
form that failed with "has no result to apply yet".Symlinks inside a
--fromdirectory (or a--frompath that is itself a
symlink) are refused rather than dereferenced into real files under--to,
matchingapply <run_id>which never materialises links. -
campaignnow stops as soon as a session reaches the spec'starget_reward
and reportsstopped_reason: "target_reward", instead of spending another
session and then reportingpatience(#534). -
agentdescent doctorno longer labels a host CLI it found onPATHas
missing: an installed but unwired CLI now readsnot installed (cli ...)
with theagentdescent installcommand, a host without a CLI readsno cli on PATH, and the closing line saysok: no blocking problems, naming how
many hosts can be wired. The--jsonreport is unchanged (#535). -
A bare
agentdescent algorithms(andagentdescent algorithms --json) now lists
the algorithms likealgorithms listinstead of exiting with an argparse
"arguments are required: action" error (#546). -
agentdescent algorithms --kind Know filters likealgorithms list --kind K
(with or without--json) instead of exiting 2 with a misleading
invalid choiceerror, and--kindwithalgorithms showis refused with a
clear message rather than ignored (#549). -
agentdescent planwithout--jsonno longer prints a{"ok": false, ...}
JSON object when the spec fails to compile (bad--algorithm/--param, bad
data rows): it printserror: <message>on stderr and exits 2, like an
unreadable spec file.--jsonoutput is unchanged (#551). -
agentdescent planwithout--jsonno longer dumps the{"ok": false, ...}
JSON object when the spec compiles but fails a hard check (too few tasks,
missing CLI binary, unfilled placeholder): it printserror: <message>on
stderr and exits 2, like a spec that fails to compile.--jsonoutput is
unchanged (#553). -
agentdescent installno longer reportsupdatedfor files whose contents are
already identical; it printskept <path> (unchanged)and leaves the file
untouched (#555). -
agentdescent init --datanow reads the cases file's first row and, when it has
noprompt/goldcolumn, maps a single common alias (input/question/query/problem,
expected/answer/output/target) and says so, or warns with the real column
names. Spec loading now names thedata.promptfield in a missing-column error,
andplan/evolve/MCP refuse a gold-comparing scorer (contains,exact,
last_number,numeric_close) when no row has thedata.goldcolumn instead of
silently scoring every answer 0. -
agentdescent mcp --transport streamable-http --allow-remotenow serves
non-loopback clients on mcp 1.x too: the SDK pins allowed Host headers to
loopback when the server is built, so a remote bind answered every request 421;
the pin is now dropped for a non-loopback host (#587). -
agentdescent mcp --transport streamable-httpon mcp 1.2–1.7 now exits with a
one-line "needs mcp>=1.8" message instead of the SDK's opaque Unknown transport
error; CLI host/port defaults stay locked tomcp.DEFAULT_HTTP_*, and the
.mcpimport stays lazy so a shadowed cwd still prints one line (#589). -
agent_society._is_literalno longer references deprecatedast.NameConstant
(removed in Python 3.14);True/False/Noneare alreadyast.Constanton
the supported 3.9+ range (#591). -
agent_society._is_literalnow accepts unary+/-on numeric constants
(-1,+2, nested in dict/list), matchingast.literal_eval, so the society
gate no longer reports a signed number as "computed code" (#593). -
The
evoskillalgorithm card now acceptskind: skill_dirandpluginas well
asagent_dir, soagentdescent init <skill> --kind skill_dir --algorithm evoskillno longer exits 2; the module docstring,docs/algo-evoskill.mdand
the registry now agree (#604). ItsSkillLibraryTreeis now built over the
kind's ownFileTree(newOverrides.strategy_fromhook), so a plugin keeps its
host's frozen paths and its.ts/.jscode, and askill_dirkeeps its
SKILL.md gate; on askill_dirthe induced rule goes toreferences/<slug>.md,
linked from a managed index block in the rootSKILL.md, instead of a nested
skill the host would not load. -
agentdescent doctoraccepts--home <dir>with the same probe semantics as
install/uninstall(#605): host skill/MCP status is read under that tree,
and an explicit--homewins overCODEX_HOME/DSH_HOME/
XDG_CONFIG_HOME. The MCPdoctortool takes the same optionalhome
argument. -
diagnoseand the guarded-run decision log treat named-algorithm adopt
categories (gepa-select,skillopt-accept,dgm-select) and per-round
committedtotals as adoptions, so a successful GEPA/SkillOpt/DGM run is
no longer reported as "no candidate was adopted" (#617).