- • Fixed DAG: Orchestrator → Specialists → Writer
- • Dynamic node selection — orchestrator picks the team per task
- • Sequential execution with context chaining (600-char truncation)
- • Writer always runs last, gets full untruncated outputs
- • No tools: text-in/text-out only, no web/code/files/memory
- • Run config frozen at start — concurrency-safe across sessions
- • 4 adapter classes, per-call construction via build_adapter()
- • AggregatorAdapter: OpenRouter + Nous (OpenAI-compatible /chat/completions)
- • AnthropicDirectAdapter: native /v1/messages, content_block_delta parsing
- • OpenAIDirectAdapter: strips openai/ prefix, filters non-chat models
- • NousAuth reads Hermes CLI auth.json, auto-refreshes via portal OAuth
- • Model catalog: live fetch at startup, FALLBACK_MODELS on failure
- • SSE events: token, status, connection, plan, stream_start/end, done
- • In-memory task store with TTL eviction (10 min after done)
- • Client disconnect sets cancelled flag → workflow self-terminates
- • Per-agent max_tokens: Orch 1024 · Spec 4096 · Writer 8192
- • Agent accent colors match the warm bistro canvas palette
- • Render auto-deploys from GitHub master on push