Implements the core Vassal Protocol infrastructure: Timmy as the
lead decision-maker for development direction, agent management,
and house health on Hermes (M3 Max).
New module: src/timmy/vassal/
- backlog.py — Gitea backlog fetch, triage (priority scoring +
agent routing: Claude / Kimi / Timmy-self)
- dispatch.py — Apply claude-ready / kimi-ready labels and post
routing comments; in-memory dispatch registry
- agent_health.py — Detect idle/stuck agents (last-comment heuristic),
nudge stuck issues via Gitea comment
- house_health.py — System resource snapshot (disk, memory via psutil,
Ollama reachability), stale-file cleanup
- orchestration_loop.py — VassalOrchestrator: ties all four into a
single observe→triage→dispatch→monitor→house-check
cycle; runs as background asyncio task; broadcasts
via WebSocket
Config: five new vassal_* settings in Settings (all off by default:
vassal_enabled, vassal_cycle_interval, vassal_max_dispatch_per_cycle,
vassal_stuck_threshold_minutes, vassal_idle_threshold_minutes)
Tests: 40 new unit tests across five test files — all pass.
All gracefully degrade when Gitea / Ollama are unavailable.
Refs #1070
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>