One-Way Pipeline
user ─► ERP agent tab
│ POST /api/agent/<domain>/submit
▼
agent_jobs queue # 2 workers · SKIP LOCKED
│ {model, messages:[system prompt, …], mode:<domain>}
▼
Hermes gateway # api_server · loopback
│ tools/list ◄── /mcp/<domain>/ # scoped tool schemas
▼
Codex · LLM # reads prompt + schemas → picks tool + args
│ tools/call <domain>__<tool>(args) · Bearer
▼
/mcp/<domain>/ # ERP MCP server
│ catalog.dispatch → registry.dispatch
▼
ERP services ─► PostgreSQL ─► JSON (≤ 24k)
└──► back into the LLM context ─► loop until the answer is ready
LLM Tool Selection
tools/list → schemas
name · description · JSON Schema
tool-use loop
max 60 turns · failure guardrails
mode · channels
ERP tab · Telegram · Mattermost
Streamable HTTP
stateless · JSON
Bearer auth
host-local loopback