Fourteen manifests, zero call sites
The adapter registry is a piece of recorded judgement rather than a piece of machinery. Each entry states what a tool is for, how mature it is, which platforms it runs on, and — unusually — how it is expected to fail. Nothing in the codebase executes any of it.
What an adapter manifest holds
AdapterManifest (types.ts:72–96) has eight required fields and
seven optional ones. The required set is descriptive; the optional set is where the research
work is stored.
- id
- Stable key. Deliberately qualified where a name is ambiguous — see
autoloop-armgabrielyanbelow. - role
- One of eight:
executor,loop,optimizer,skill_evolution,prompt_optimizer,trace_eval,platform,benchmark_reference. - integrationType
- One of six:
cli,sdk,template,benchmark_reference,mcp,manifest_only. Themcpvalue is declared and used by no entry. - status
supported(4),optional(5),later(2),research_only(3).- capabilities
- Free-form string tags. Not matched against anything.
- source
- Repository or documentation URL.
- notes
- A sentence of positioning — where this tool sits relative to Daedalus.
- command?
- The invocation string. Present on 7 of 14.
- doctor?
- Version-probe commands for a health check. Present on 5 of 14.
- supportedPlatforms?
windows,wsl,macos,linux. Present on 7 of 14.- license? · maturity?
- License present on 6 of 14; maturity on all 14.
- failureModes?
- How this integration is expected to break. Optional in the type, present on all 14.
The failureModes field is the unusual one. A registry that records “ambiguous
package naming” and “model variance” alongside a command string is describing operational
reality, not marketing a plugin catalogue.
Fig. 6.1 Adapter matrix — role against status
supported, which in this
codebase means “judged ready to integrate”, not “integrated”. The ladder below is the honest
reading: docs/ADAPTERS.md defines four escalating integration levels and every entry
is at the first rung. The seven command strings and five doctor probe
lists are the raw material for rung two, already written down.The registry in full
| id | Role | Integration | Command | Status | Maturity | Declared failure modes |
|---|---|---|---|---|---|---|
| codex | executor | cli | codex exec | supported | active | model/API credentials missing · noninteractive command contract changes · sandbox mismatch |
| opencode | executor | cli | opencode run | supported | active | provider config missing · model variance · CLI behavior changes |
| aider | executor | cli | aider | optional | stable | less suited for browser/game debugging · requires model configuration |
| bmalph | loop | template | bmalph | supported | early | Windows requires WSL/Git Bash · workflow files can drift from Daedalus state |
| autoloop-armgabrielyan | optimizer | cli | autoloop | supported | early | ambiguous package naming · requires stable scalar metric |
| autoloop-shengzhe-claude-plugin | loop | template | — | research_only | unknown | not interchangeable with armgabrielyan/autoloop |
| autoloop-pypi | loop | manifest_only | — | research_only | unknown | name collision · unverified runtime semantics |
| pi-autoresearch | optimizer | cli | pi-autoresearch | optional | early | requires Pi · requires stable benchmark command |
| evoskill | skill_evolution | cli | evoskill | later | research | needs benchmark splits · may optimize skills rather than product code |
| gepa | prompt_optimizer | sdk | — | later | research | needs rich feedback traces · can overfit rubrics |
| agentevals | trace_eval | sdk | — | optional | active | requires OpenTelemetry traces · does not prove product behavior |
| openevolve | optimizer | cli | — (cli, no command) | optional | research | bad fit for whole-product construction · requires strong evaluator |
| openhands | platform | sdk | — | optional | active | heavier deployment surface · workspace/server API setup required |
| agencybench | benchmark_reference | benchmark_reference | — | research_only | research | benchmark scenarios are not product acceptance tests by themselves |
openevolve declares integrationType: "cli" with no
command, no doctor array and no supportedPlatforms. The
manifest type permits this — command is optional on every integration type — so
the registry can carry an entry that claims to be command-line integrable while providing
nothing to invoke.
Fig. 6.2 Name-collision handling — “Autoloop”
research_only until “command contract and license are verified”. This is the kind of
detail that only exists because someone did the reading; it is also the only piece of the adapter
registry the test suite touches.Platform and licence coverage
Seven of fourteen entries declare supportedPlatforms. The gap matters because
the project’s own runner is Windows-first — package.json ships an
install-command script that shells out to PowerShell, and
docs/TESTING.md is written entirely in PowerShell blocks.
| Adapter | windows | wsl | macos | linux | Licence | doctor probe |
|---|---|---|---|---|---|---|
| codex | yes | yes | yes | yes | Apache-2.0 | codex --version |
| opencode | yes | yes | yes | yes | MIT | opencode --version |
| aider | yes | yes | yes | yes | Apache-2.0 | aider --version |
| autoloop-armgabrielyan | yes | yes | yes | yes | — | autoloop --version |
| pi-autoresearch | yes | yes | yes | yes | MIT | — |
| bmalph | no | yes | yes | yes | — | node · git · bash --version |
| autoloop-shengzhe-claude-plugin | no | yes | yes | yes | — | — |
| 7 further entries | no supportedPlatforms field | 2 of 7 licensed | — | |||
bmalph is the one entry whose platform list actively excludes Windows, and its
failure modes say why: “Windows requires WSL/Git Bash”. The registry therefore contains a
contradiction it is honest about — the primary loop adapter does not run natively on the
platform the installer targets.
$ daedalus adapters
[
{
"id": "codex",
"name": "Codex CLI",
"role": "executor",
"integrationType": "cli",
"command": "codex exec",
"capabilities": ["edit_repo", "run_commands", "noninteractive", "mcp_client"],
"status": "supported",
"source": "https://github.com/openai/codex",
"notes": "Primary practical executor when OpenAI models are acceptable.",
"doctor": ["codex --version", "git --version"],
"supportedPlatforms": ["windows", "wsl", "macos", "linux"],
"license": "Apache-2.0",
"maturity": "active",
"failureModes": [
"model/API credentials missing",
"noninteractive command contract changes",
"sandbox mismatch"
]
},
… 13 more entries, verbatim from adapters.ts …
]
# the doctor array is data. Nothing spawns `codex --version`.
The judgement behind the list
docs/RESEARCH_MATRIX.md records a position on each tool in one sentence, and
RESEARCH.md expands each into a short review with a verdict. The conclusions
section is where the shape of Daedalus is actually argued for:
“A general system should not fuse these repos into one codebase… The durable core is goal/eval/state/scoring, not code editing… Metric optimizers are powerful only after Daedalus has a meaningful score command.”
docs/RESEARCH_MATRIX.md — Critical conclusionsThat last clause is a precise diagnosis of the project’s own critical path. Four of the
fourteen adapters — autoloop-armgabrielyan, pi-autoresearch,
openevolve, and to a lesser extent evoskill — are all optimisers that
need a trustworthy scalar to ratchet against. Until an evaluator actually runs and produces
that number, none of them can be usefully connected, which is why they are marked
optional and later rather than supported.
The registry also carries several entries the research explicitly declines to integrate. DGM,
HyperAgents, Hermes and AgentFactory are reviewed in RESEARCH.md and deliberately
not given manifests — the note on DGM is that it “expands mutation surface before eval
discipline is strong enough”. Absence from the registry is itself a recorded decision.
Sheet notes
research/repos.jsonholds twelve entries with a URL and a coarse role, for the PowerShell clone scriptscripts/clone-research-repos.ps1. The clones land inresearch/repos/, which.gitignoreexcludes — research inputs, explicitly not vendored dependencies.- The two lists do not line up.
repos.jsoncovers eleven of the fourteen adapters and adds a twelfth entry,ralph, which has no manifest at all. Three adapters are absent from it:gepa, whose source is a documentation site rather than a repository, and the two quarantined Autoloop entries —repos.jsoncarries a single unqualifiedautoloopid pointing at the armgabrielyan project, which is precisely the ambiguityadapters.tswas careful to split. capabilitiesstrings are never compared against anything. An adapter claimingmcp_clientand one claimingsandboxare treated identically bylistAdapters(), which returns the array unfiltered.- The
integrationTypeunion includes"mcp", anticipating adapters that are themselves MCP servers. No entry uses it.