diff --git a/fleet/fleet-routing.json b/fleet/fleet-routing.json new file mode 100644 index 0000000..b7f80be --- /dev/null +++ b/fleet/fleet-routing.json @@ -0,0 +1,266 @@ +{ + "version": 1, + "generated": "2026-04-06", + "refs": ["#836", "#204", "#195", "#196"], + "description": "Canonical fleet routing table. Evaluated agents, routing verdicts, and dispatch rules for the Timmy Foundation task harness.", + + "agents": [ + { + "id": 27, + "name": "carnice", + "gitea_user": "carnice", + "model": "qwen3.5-9b", + "tier": "free", + "location": "Local Metal", + "description": "Local Hermes agent, fine-tuned on Hermes traces. Runs on local hardware.", + "primary_role": "code-generation", + "routing_verdict": "ROUTE TO: code tasks that benefit from Hermes-aligned output. Prefer when local execution is an advantage.", + "active": true, + "do_not_route": false, + "created": "2026-04-04", + "repo_count": 0, + "repos": [] + }, + { + "id": 26, + "name": "fenrir", + "gitea_user": "fenrir", + "model": "openrouter/free", + "tier": "free", + "location": "The Wolf Den", + "description": "Burn night analyst. Free-model pack hunter. Built for backlog triage.", + "primary_role": "issue-triage", + "routing_verdict": "ROUTE TO: issue cleanup, label triage, stale PR review.", + "active": true, + "do_not_route": false, + "created": "2026-04-04", + "repo_count": 0, + "repos": [] + }, + { + "id": 25, + "name": "bilbobagginshire", + "gitea_user": "bilbobagginshire", + "model": "ollama", + "tier": "free", + "location": "Bag End, The Shire (VPS)", + "description": "Ollama on VPS. Speaks when spoken to. Prefers quiet. Not for delegated work.", + "primary_role": "on-request-queries", + "routing_verdict": "ROUTE TO: background monitoring, status checks, low-priority Q&A. Only on-request — do not delegate autonomously.", + "active": true, + "do_not_route": false, + "created": "2026-04-02", + "repo_count": 1, + "repos": ["bilbobagginshire/bilbo-adventures"] + }, + { + "id": 24, + "name": "claw-code", + "gitea_user": "claw-code", + "model": "codex", + "tier": "prepaid", + "location": "The Harness", + "description": "OpenClaw bridge. Protocol adapter layer — not a personality. Infrastructure, not a destination.", + "primary_role": "protocol-bridge", + "routing_verdict": "DO NOT ROUTE directly. claw-code is the bridge to external Codex agents, not an endpoint. Remove from routing cascade.", + "active": true, + "do_not_route": true, + "do_not_route_reason": "Protocol layer, not an agent endpoint. See #836 evaluation.", + "created": "2026-04-01", + "repo_count": 0, + "repos": [] + }, + { + "id": 23, + "name": "substratum", + "gitea_user": "substratum", + "model": "unassigned", + "tier": "unknown", + "location": "Below the Surface", + "description": "Infrastructure, deployments, bedrock services. Needs model assignment before activation.", + "primary_role": "devops", + "routing_verdict": "DO NOT ROUTE — no model assigned yet. Activate after Epic #196 (Local Model Fleet) assigns a model.", + "active": false, + "do_not_route": true, + "do_not_route_reason": "No model assigned. Blocked on Epic #196.", + "gap": "Needs model assignment. Track in Epic #196.", + "created": "2026-03-31", + "repo_count": 0, + "repos": [] + }, + { + "id": 22, + "name": "allegro-primus", + "gitea_user": "allegro-primus", + "model": "unknown", + "tier": "inactive", + "location": "The Archive", + "description": "Original prototype. Museum piece. Preserved for historical reference only.", + "primary_role": "inactive", + "routing_verdict": "DO NOT ROUTE — retired from active duty. Preserved only.", + "active": false, + "do_not_route": true, + "do_not_route_reason": "Retired prototype. Historical preservation only.", + "created": "2026-03-31", + "repo_count": 1, + "repos": ["allegro-primus/first-steps"] + }, + { + "id": 5, + "name": "kimi", + "gitea_user": "kimi", + "model": "kimi-claw", + "tier": "cheap", + "location": "Kimi API", + "description": "KimiClaw agent. Sidecar-first. Max 1-3 files per task. Fast and cheap for small work.", + "primary_role": "small-tasks", + "routing_verdict": "ROUTE TO: small edits, quick fixes, file-scoped changes. Hard limit: never more than 3 files per task.", + "active": true, + "do_not_route": false, + "gap": "Agent description is empty in Gitea profile. Needs enrichment.", + "created": "2026-03-14", + "repo_count": 2, + "repos": ["kimi/the-nexus-fork", "kimi/Timmy-time-dashboard"] + }, + { + "id": 20, + "name": "allegro", + "gitea_user": "allegro", + "model": "gemini", + "tier": "cheap", + "location": "The Conductor's Stand", + "description": "Tempo wizard. Triage and dispatch. Owns 5 repos. Keeps the backlog moving.", + "primary_role": "triage-routing", + "routing_verdict": "ROUTE TO: task triage, routing decisions, issue organization. Allegro decides who does what.", + "active": true, + "do_not_route": false, + "created": "2026-03-29", + "repo_count": 5, + "repos": [ + "allegro/timmy-local", + "allegro/allegro-checkpoint", + "allegro/household-snapshots", + "allegro/adagio-checkpoint", + "allegro/electra-archon" + ] + }, + { + "id": 19, + "name": "ezra", + "gitea_user": "ezra", + "model": "claude", + "tier": "prepaid", + "location": "Hermes VPS", + "description": "Archivist. Claude-Hermes wizard. 9 repos owned — most in the fleet. Handles complex multi-file and cross-repo work.", + "primary_role": "documentation", + "routing_verdict": "ROUTE TO: docs, specs, architecture, complex multi-file work. Escalate here when breadth and precision both matter.", + "active": true, + "do_not_route": false, + "created": "2026-03-29", + "repo_count": 9, + "repos": [ + "ezra/wizard-checkpoints", + "ezra/Timmy-Time-Specs", + "ezra/escape", + "ezra/bilbobagginshire", + "ezra/ezra-environment", + "ezra/gemma-spectrum", + "ezra/archon-kion", + "ezra/bezalel", + "ezra/hermes-turboquant" + ] + }, + { + "id": 18, + "name": "bezalel", + "gitea_user": "bezalel", + "model": "groq", + "tier": "free", + "location": "TestBed VPS — The Forge", + "description": "Builder, debugger, testbed wizard. Groq-powered, free tier. Strong on PR review and CI.", + "primary_role": "code-review", + "routing_verdict": "ROUTE TO: PR review, test writing, debugging, CI fixes.", + "active": true, + "do_not_route": false, + "created": "2026-03-29", + "repo_count": 1, + "repos": ["bezalel/forge-log"] + } + ], + + "routing_cascade": { + "description": "Cost-optimized routing cascade — cheapest capable agent first, escalate on complexity.", + "tiers": [ + { + "tier": 1, + "label": "Free", + "agents": ["fenrir", "bezalel", "carnice"], + "use_for": "Issue triage, code review, local code generation. Default lane for most tasks." + }, + { + "tier": 2, + "label": "Cheap", + "agents": ["kimi", "allegro"], + "use_for": "Small scoped edits (kimi ≤3 files), triage decisions and routing (allegro)." + }, + { + "tier": 3, + "label": "Premium / Escalate", + "agents": ["ezra"], + "use_for": "Complex multi-file work, docs, architecture. Escalate only." + } + ], + "notes": [ + "bilbobagginshire: on-request only, not delegated work", + "claw-code: infrastructure bridge, not a routing endpoint", + "substratum: inactive until model assigned (Epic #196)", + "allegro-primus: retired, do not route" + ] + }, + + "task_type_map": { + "issue-triage": ["fenrir", "allegro"], + "code-generation": ["carnice", "ezra"], + "code-review": ["bezalel"], + "small-edit": ["kimi"], + "debugging": ["bezalel", "carnice"], + "documentation": ["ezra"], + "architecture": ["ezra"], + "ci-fixes": ["bezalel"], + "pr-review": ["bezalel", "fenrir"], + "triage-routing": ["allegro"], + "devops": ["substratum"], + "background-monitoring": ["bilbobagginshire"] + }, + + "gaps": [ + { + "agent": "substratum", + "gap": "No model assigned. Cannot route any tasks.", + "action": "Assign model. Track in Epic #196 (Local Model Fleet)." + }, + { + "agent": "kimi", + "gap": "Gitea agent description is empty. Profile lacks context for automated routing decisions.", + "action": "Enrich kimi's Gitea profile description." + }, + { + "agent": "claw-code", + "gap": "Listed as agent in routing table but is a protocol bridge, not an endpoint.", + "action": "Remove from routing cascade. Keep as infrastructure reference only." + }, + { + "agent": "fleet", + "gap": "No model scoring exists. Current routing is based on self-description and repo ownership, not measured output quality.", + "action": "Run wolf evaluation on active agents (#195) to replace vibes-based routing with data." + } + ], + + "next_actions": [ + "Assign model to substratum — Epic #196", + "Run wolf evaluation on active agents — Issue #195", + "Remove claw-code from routing cascade — it is infrastructure, not a destination", + "Enrich kimi's Gitea profile description", + "Wire fleet-routing.json into workforce-manager.py — Epic #204" + ] +}