Compare commits

...

1 Commits

Author SHA1 Message Date
Alexander Whitestone
4721518ac6 feat: add fleet routing table with evaluated agent verdicts
Some checks are pending
CI / validate (pull_request) Waiting to run
Evaluate all 10 Gitea agents and commit canonical routing table to
fleet/fleet-routing.json. Sourced from ~/.hermes/fleet-routing.json
and enriched with routing verdicts, cost-cascade tiers, task-type map,
gap analysis, and next actions from issue #836 evaluation.

Key decisions:
- claw-code marked do_not_route (protocol bridge, not endpoint)
- substratum marked inactive (no model assigned, blocked on #196)
- allegro-primus marked retired
- Cost cascade: free (fenrir/bezalel/carnice) → cheap (kimi/allegro) → prepaid (ezra)
- Task-type map wires issue types to specific agents

Fixes #836

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 14:07:03 -04:00

266
fleet/fleet-routing.json Normal file
View File

@@ -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"
]
}