Repository navigation
ROADMAP §3.6 + §4.9: model routes, HostAdapter, portable .aladdin/config.yaml - #14
Merged
Merged
Conversation
Roles map to strongest | strong | economical (plugin/hosts/routes.json); bin/models resolve gives each host its own id and, with --json, the route (conformance 18). AGENTIC_MODEL_PLANNING/WORKER default to routes, a pinned id passes through, host-specific pins still win. aloop install renders from the same table. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014j4wLin3oJTtnvjE9Lq2VV
… adapters (ROADMAP §4.9) _host.py names, per host, where the harness does each thing: capabilities, dispatch vocabulary, model/transcript resolution, usage, context pressure, compact/rotate, worktrees, gate install/enforcement, tool policy. host check fails an incomplete adapter or one that would enforce a gate as a warning; a capability a host lacks raises Unsupported. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014j4wLin3oJTtnvjE9Lq2VV
…ADMAP §4.9) config migrate writes the yaml (budgets incl. per-role profiles, context, semantic, models, provenance, memory, git) from the current settings and renders docs/agents/defaults.md from it; the yaml is authoritative when present (Python readers directly; bash gates through config sync, run by SessionStart and aloop-init --apply). config check validates it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014j4wLin3oJTtnvjE9Lq2VV
adeelahmad
pushed a commit
that referenced
this pull request
Oct 18, 2026
Run 11 (wordfreq, all run-10 fixes): 12/12, 12m56s, $0.86, 6 blocks, down from 44m48s, $1.20 and 45 blocks in run 10. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
adeelahmad
pushed a commit
that referenced
this pull request
Oct 18, 2026
adeelahmad
pushed a commit
that referenced
this pull request
Oct 18, 2026
…and #14) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Adeel · project thread
Before: model choice was a per-host alias table inside
install, the three hosts were wired ad hoc with no shared interface or conformance check, and the human's only config file wasdocs/agents/defaults.md, a bag ofAGENTIC_*lines that each host parsed differently.After: settings name abstract routes (
strongest|strong|economical) thataloop models resolvemaps to a concrete model per host fromplugin/hosts/routes.json. Every host is aHostAdapter(_host.py) with one method set;aloop host checkfails CI if an adapter is incomplete or its gate enforcement is neither native nor outer. The human edits.aladdin/config.yaml(schemaaladdin.config/1);aloop config migratecreates it from the current settings,config sync(run by SessionStart andaloop-init --apply) renders defaults.md from it so the bash gates see the same values, andconfig checkrefuses unknown keys, bad numbers or a wrong schema before anything reaches a gate.This closes ROADMAP §3.6 and the HostAdapter, gate-equivalence and portable-config items of §4.9.
How:
_routes.pyresolves group → route → host model (host-specificMODEL_*_CODEX/OPENCODEoverrides still win, pinned ids pass through);_host.pydeclares the adapter METHODS tuple with Claude as the reference and Codex/OpenCode adapters;_config.pyis a dependency-free YAML-subset parser plus render, overlaid at the end of_paths.settings();budgetreadsbudgets.roles.<role>profiles;aloop-init --applywrites the yaml when it exists instead of forking defaults.md.Evidence:
scripts/test/model-routes.test.py4 checks,host-adapter.test.py5,portable-config.test.py5, all wired intomake test-hostsmake pycheck json eval-validate test-hostsandmake testgreen locally on the rebased headGenerated by Claude Code