README: herdr-centric bridged as leading approach; bump wiki
- Swap leading approach to the bridged message server driving herdr (AgentAPI retained as fallback injector); add mermaid overview - Update status to Design (2026-07-11) - Advance wiki submodule to new docs
This commit is contained in:
@@ -9,26 +9,45 @@ Sibling of [`crush-bridge`](https://git.ltms.dev/systems/vms) (which drives a he
|
||||
process*, so it inherits `CLAUDE.md`, hooks, skills, and MCP — just pointed at a
|
||||
cheaper/local model.
|
||||
|
||||
## Leading approach — AgentAPI
|
||||
## Leading approach — herdr-centric message server (`bridged`)
|
||||
|
||||
[`coder/agentapi`](https://github.com/coder/agentapi) wraps the Claude Code **CLI** as an
|
||||
HTTP server (`POST /message`, `GET /messages`, `GET /events` SSE, `GET /status`). The
|
||||
worker's model is whatever env its wrapped `claude` process launches with — so the worker
|
||||
server runs with `ANTHROPIC_BASE_URL=https://ollama.ltms.dev` + a bearer token, and the
|
||||
primary Opus session talks to it over HTTP.
|
||||
A small always-on message server, **`bridged`**, controls
|
||||
[herdr](https://herdr.dev) (an agent multiplexer) over its Unix-socket API and exposes a
|
||||
clean 2-way messaging API (HTTP/SSE + optional broker). herdr owns the PTYs, multiplexing,
|
||||
persistence, and **agent-status events**; `bridged` owns policy (subscription boundary,
|
||||
session lifecycle, status-gated delivery) and the client contract. The worker `claude`
|
||||
launches with `ANTHROPIC_BASE_URL=https://ollama.ltms.dev` + a bearer token; the primary
|
||||
Opus stays env-clean and talks to `bridged` over HTTP.
|
||||
|
||||
```
|
||||
Opus (Claude Code, subscription, env CLEAN)
|
||||
│ HTTP POST /message ─┐
|
||||
▼ ▼
|
||||
agentapi server ──launches──► claude (ANTHROPIC_BASE_URL=ollama.ltms.dev, worker model)
|
||||
▲ GET /events (SSE) ◄──┘
|
||||
```mermaid
|
||||
flowchart LR
|
||||
OPUS["Opus — primary<br/>(Claude Code, env CLEAN)"]
|
||||
BD["bridged<br/>message server<br/>(not a claude process)"]
|
||||
HERDR["herdr<br/>panes · agent-status"]
|
||||
W["worker claude<br/>ANTHROPIC_BASE_URL set"]
|
||||
M["ollama.ltms.dev<br/>(worker model)"]
|
||||
|
||||
OPUS -->|"POST /message · SSE /events"| BD
|
||||
BD -->|"Unix socket<br/>send_text · events.subscribe"| HERDR
|
||||
HERDR -->|"drives PTY"| W
|
||||
W -->|"inference"| M
|
||||
|
||||
classDef ext fill:#2b6cb0,stroke:#1a365d,color:#ffffff;
|
||||
classDef core fill:#2f855a,stroke:#22543d,color:#ffffff;
|
||||
class OPUS ext
|
||||
class BD,HERDR core
|
||||
```
|
||||
|
||||
- **Subscription boundary:** the *primary* never sets `ANTHROPIC_BASE_URL` (stays on
|
||||
Pro/Max). Only the *secondary* process is off-subscription.
|
||||
Pro/Max). Only the *secondary* process is off-subscription — and `bridged` itself is a
|
||||
plain daemon (no Anthropic quota), so it may poll/subscribe freely.
|
||||
- **Symmetric 2-way:** herdr can inject a turn into *either* pane (typing keystrokes is
|
||||
subscription-safe), so primary→worker and worker→primary use one mechanism.
|
||||
- **Different model per process** sidesteps Claude Code's lack of per-subagent provider
|
||||
routing — the worker isn't a subagent, it's its own configured process.
|
||||
- **AgentAPI** ([`coder/agentapi`](https://github.com/coder/agentapi)) is retained only as a
|
||||
swappable *fallback injector* behind the same interface. See the wiki for the full
|
||||
design, comparison, and rationale.
|
||||
|
||||
## Docs
|
||||
|
||||
@@ -46,4 +65,6 @@ Gitea wiki.
|
||||
|
||||
## Status
|
||||
|
||||
🟡 Planning — AgentAPI selected as the primary approach (2026-07-08).
|
||||
🟢 Design — herdr-centric **`bridged`** message server selected as the primary approach
|
||||
(2026-07-11), superseding the AgentAPI plan (2026-07-08). AgentAPI retained as fallback
|
||||
injector.
|
||||
|
||||
+1
-1
Submodule wiki updated: 5f5c84e524...c2c14f7912
Reference in New Issue
Block a user