@enderfga/claw-orchestrator 7.5.1 → 7.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/configs/council-system-prompt.md +2 -0
- package/dist/src/autoloop/dispatcher.js +3 -3
- package/dist/src/autoloop/dispatcher.js.map +1 -1
- package/dist/src/base-oneshot-session.d.ts +24 -0
- package/dist/src/base-oneshot-session.js +46 -2
- package/dist/src/base-oneshot-session.js.map +1 -1
- package/dist/src/council.js +12 -37
- package/dist/src/council.js.map +1 -1
- package/dist/src/dashboard/index.html +94 -15
- package/dist/src/embedded-server.js +33 -3
- package/dist/src/embedded-server.js.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/models.js +36 -7
- package/dist/src/models.js.map +1 -1
- package/dist/src/persistent-agy-session.d.ts +1 -0
- package/dist/src/persistent-agy-session.js +17 -2
- package/dist/src/persistent-agy-session.js.map +1 -1
- package/dist/src/persistent-codex-app-session.d.ts +6 -0
- package/dist/src/persistent-codex-app-session.js +14 -1
- package/dist/src/persistent-codex-app-session.js.map +1 -1
- package/dist/src/persistent-codex-session.d.ts +1 -0
- package/dist/src/persistent-codex-session.js +3 -0
- package/dist/src/persistent-codex-session.js.map +1 -1
- package/dist/src/persistent-cursor-session.d.ts +1 -0
- package/dist/src/persistent-cursor-session.js +3 -0
- package/dist/src/persistent-cursor-session.js.map +1 -1
- package/dist/src/persistent-grok-session.js +1 -0
- package/dist/src/persistent-grok-session.js.map +1 -1
- package/dist/src/persistent-opencode-session.d.ts +1 -0
- package/dist/src/persistent-opencode-session.js +3 -0
- package/dist/src/persistent-opencode-session.js.map +1 -1
- package/dist/src/session-manager.d.ts +1 -0
- package/dist/src/session-manager.js +3 -0
- package/dist/src/session-manager.js.map +1 -1
- package/package.json +1 -1
- package/skills/references/autoloop.md +8 -3
- package/skills/references/claude-cli-tracking.md +2 -1
- package/skills/references/council.md +7 -1
- package/skills/references/getting-started.md +1 -1
- package/skills/references/sessions.md +1 -1
- package/skills/references/tools.md +1 -1
|
@@ -76,6 +76,11 @@ Coder and Reviewer **never speak to you directly**. Anything they observe
|
|
|
76
76
|
flows through the Planner. The Planner decides what to surface and what to
|
|
77
77
|
absorb.
|
|
78
78
|
|
|
79
|
+
A run left idle past `sessionTtlMinutes` has its role sessions evicted like any
|
|
80
|
+
other session. The next message to a role starts it again under the same name,
|
|
81
|
+
which resumes the persisted conversation where the engine supports it, instead of
|
|
82
|
+
failing with "Session not found".
|
|
83
|
+
|
|
79
84
|
## UX flow
|
|
80
85
|
|
|
81
86
|
```
|
|
@@ -324,11 +329,11 @@ Every JSON artifact in the ledger carries a `schema_version` field (currently
|
|
|
324
329
|
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
325
330
|
| `GET /autoloop/list` | `{ ok, runs: AutoloopState[] }` |
|
|
326
331
|
| `POST /autoloop/new` | `{ ok, run_id, planner_session }` — body `{ workspace, run_id?, planner_engine?, planner_model?, planner_custom_engine?, coder_engine?, coder_model?, coder_custom_engine?, reviewer_engine?, reviewer_model?, reviewer_custom_engine?, send_timeout_ms?, activity_lease_ms?, autoloop_hard_timeout_ms? }`. Timeout fields use the defaults and inclusive bounds documented above; malformed or out-of-range values return 400 before a run starts. |
|
|
327
|
-
| `GET /autoloop/<id>/state` | `{ ok, state: AutoloopState }` — also returns a `terminated`-state stub reconstructed from the registry for runs that aren't in this process's memory, so the dashboard can open historical runs without 404'ing. |
|
|
332
|
+
| `GET /autoloop/<id>/state` | `{ ok, state: AutoloopState, live }` — `live` is `true` only when the run is running in this process; also returns a `terminated`-state stub reconstructed from the registry for runs that aren't in this process's memory, so the dashboard can open historical runs without 404'ing. |
|
|
328
333
|
| `GET /autoloop/<id>/push_log` | `{ ok, entries: PushLogEntry[] }` — served from the ledger via `autoloopStatus`, so historical runs work the same as live ones. |
|
|
329
334
|
| `GET /autoloop/<id>/chat_history` | `{ ok, entries: ChatEntry[] }` — replays `<ledger>/chat.jsonl`. The dashboard fetches this when opening a run so the Planner-pane conversation survives a page refresh / cross-process / re-opening a terminated run. Returns `[]` when the file doesn't exist (e.g. runs that predate the chat-history feature). |
|
|
330
|
-
| `GET /autoloop/<id>/events` | SSE: `snapshot` / `message` / `state` / `push` / `iter_done` / `planner_reply` / `planner_error` / `coder_reply` / `reviewer_reply` / `terminated`. For runs that are NOT in this process's memory (terminated, or live in another process), the endpoint emits a single-shot `snapshot` + `terminated` then closes — the dashboard's existing handlers render history without hanging. |
|
|
331
|
-
| `POST /autoloop/<id>/chat` | **202** `{ ok, queued: true }` — body `{ text }`. Fire-and-forget: the Planner's reply streams back via the `/events` SSE channel as a `planner_reply` event (or `planner_error` on failure); the HTTP response intentionally does NOT wait for it, because first-contact replies routinely exceed reverse-proxy idle limits (e.g. Cloudflare Tunnel cuts at ~100s → 524). 400 on empty text
|
|
335
|
+
| `GET /autoloop/<id>/events` | SSE: `snapshot` / `message` / `state` / `push` / `iter_done` / `planner_reply` / `planner_error` / `coder_reply` / `reviewer_reply` / `terminated`. For runs that are NOT in this process's memory (terminated, or live in another process), the endpoint emits a single-shot `snapshot` + `terminated` then closes — the dashboard's existing handlers render history without hanging. A run still in memory that has already reached `terminated` or `crashed` gets the same single-shot pair instead of an open stream that would never receive another event. Every such stream sets `retry: 864000000`, so an `EventSource` does not keep reconnecting to a stream that can only end again. |
|
|
336
|
+
| `POST /autoloop/<id>/chat` | **202** `{ ok, queued: true }` — body `{ text }`. Fire-and-forget: the Planner's reply streams back via the `/events` SSE channel as a `planner_reply` event (or `planner_error` on failure); the HTTP response intentionally does NOT wait for it, because first-contact replies routinely exceed reverse-proxy idle limits (e.g. Cloudflare Tunnel cuts at ~100s → 524). 400 on empty text. 404 when the run is not in this process's memory: if the store still holds it, the error says so and names `POST /autoloop/<id>/resume`; an unknown or malformed id is plain `not found`. The MCP `autoloop_chat` tool path keeps the synchronous await-and-return-reply semantics (it runs in-process). |
|
|
332
337
|
| `GET /autoloop/<id>/resume-requirements` | `{ ok, runId, rolesNeedingCustomEngine }` — the roles whose engine was `custom`, so a caller knows which secret references a resume needs. Role names only; nothing sensitive. 404 when there is no such run. |
|
|
333
338
|
| `POST /autoloop/<id>/resume` | `{ ok, state }` — restore the role engine/model choices from the run's spec and re-create dispatcher + runner. For recoverable send timeouts, body fields `send_timeout_ms` and `pending_dispatch_id` apply the increase-only migration described above; `allow_decrease`, lease overrides, and hard-cap overrides are rejected. A custom-engine config is never persisted and is never accepted over HTTP, so a role using `custom` is re-supplied by **reference**: `plannerCustomEngineRef` / `coderCustomEngineRef` / `reviewerCustomEngineRef` name an environment variable `CLAWO_CUSTOM_ENGINE_<NAME>` on the orchestrator host, which the server reads and resolves. The name is not sensitive, the value never crosses the wire, and an unknown name is an error rather than a silent start without credentials. Existing engine-specific conversation resume behavior is reused where supported; `chat.jsonl` remains the visual history fallback. 404 when there is no such run. |
|
|
334
339
|
| `POST /autoloop/<id>/delete` | `{ ok }` — stops the runner if still alive, scrubs the row from `~/.claw-orchestrator/autoloop-registry.jsonl`, and purges `persistedSessions` so the run cannot be `/resume`'d back. The ledger directory under `<workspace>/tasks/<run_id>/` is kept on disk. 404 if the run was not present in either memory or the registry. |
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
This document tracks which Claude Code CLI version Claw Orchestrator is currently synced to, and which features have been integrated.
|
|
4
4
|
|
|
5
|
-
## Currently tracked: **Claude Code CLI 2.1.
|
|
5
|
+
## Currently tracked: **Claude Code CLI 2.1.280** (as of 2026-09-23, plugin v7.5.3)
|
|
6
6
|
|
|
7
7
|
## Sync history
|
|
8
8
|
|
|
9
9
|
| Plugin Version | Claude CLI Version | Date | Notable integrations |
|
|
10
|
+
| v7.5.3 | 2.1.280 | 2026-09-23 | **A new frontier model on both sides, and the `opus` alias moved with it.** CC 2.1.278→2.1.280, Codex 0.155.1→0.156.1, agy 1.2.7→1.2.8, grok 1.0.34→1.0.41, OpenCode 1.18.31→1.18.32. 2.1.280 added Claude Opus 5.5 and made it what `--model opus` resolves to — confirmed against the binary, which reported `claude-opus-5-5` for an `opus` turn. It breaks the flat Opus pricing the registry relied on ($4/$20 against Opus 5's $5/$25) and prices cache reads at 5% of input rather than 10%, so every alias session — the autoloop Planner, the ultraplan default — was costed at the old rate, the number `maxBudgetUsd` gates on. Codex 0.156.1 added GPT-6 Sol and Luna; all three models are registered from the vendors' published price tables, with reverse assertions. The sweep's own missing-model check is what named them. Its Codex upstream lookup then failed reproducibly with HTTP 504 — `releases?per_page=100` carries every release body, and that repo's payload is large enough to time the API out — so it now asks `gh release list` for three fields, and a failed lookup prints why instead of only reporting an empty result. Live turns pass on claude, agy, grok and opencode; Codex could not be exercised (account usage limit until 2026-09-25), which is an account fact rather than a wrapper regression. Read and needing nothing here: agy 1.2.8 is compaction and TUI work; 2.1.280 fixed a symlinked write being judged by its in-tree path, auto-mode retry storms, and a finished subagent's report being lost when its launching conversation compacted. |
|
|
10
11
|
| v7.5.1 | 2.1.278 | 2026-09-20 | **A vendor changed what a cost field covers, and the wrapper was reading the old meaning.** CC 2.1.274→2.1.278, Codex 0.154.0→0.155.1, agy 1.2.5→1.2.7; grok 1.0.34 and OpenCode 1.18.31 already latest. Every live turn passed through the real wrapper, the ACP and MCP handshakes are clean, registry 26 models / 0 drift, and no engine's flag surface changed — the whole week's findings came from the changelogs and from measuring what they describe. 2.1.277 made a headless process started with `--resume` restore the totals the resumed session saved at exit, where it used to begin at zero; measured on 2.1.278, a turn reported $0.363044 and the same session resumed in a new process reported $0.386463 for a turn whose own usage was $0.023419. `_applyReportedCost` advances spend by the difference between reports and had no earlier figure to subtract on a fresh process, so it billed the inherited total in full — on every model switch and every session recovered after a restart, against the number `maxBudgetUsd` gates on. A resumed process's first report is now a baseline and that turn keeps its registry estimate; mutation-verified. agy 1.2.6 changed the headless `-p` default timeout from five minutes to unlimited, which the wrapper already covers by deriving `--print-timeout` from the send timeout — the comments claiming agy would have timed out anyway are corrected. Also measured or read and needing nothing here: agy 1.2.6 now exits 3 with a structured `AGY_ERROR: {...}` line on stderr for an agent or model API failure, which the wrapper already fails the turn on (it compares against 0, never 1) and surfaces as the error message; agy 1.2.7 retired `find_by_name`, `grep_search` and `list_dir` from the default toolset, none of which this repo names; 2.1.277 fixed `claude -p` hanging with no result after an internal error, one of the failure modes the send timeout exists for; 2.1.275 fixed `--forward-subagent-text` dropping the messages of subagents spawned by a `context: fork` skill. Codex 0.155.x is TUI and Guardian work. |
|
|
11
12
|
| v7.5.0 | 2.1.274 | 2026-09-17 | **Engine updates, and three wrapper fixes measured against 2.1.274.** CC 2.1.271→2.1.274, agy 1.2.2→1.2.5, grok 1.0.30→1.0.34; Codex 0.154.0 and OpenCode 1.18.31 already latest. Every live turn passed through the real wrapper, the ACP and MCP handshakes are clean, registry 26 models / 0 drift, and no engine's flag surface changed. agy 1.2.4 and 1.2.5 re-probed on a refused `RunCommand`: the refusal still arrives as `permission_denials`, and 1.2.5's one new flag (`--remote-control`) is for people, not wrappers. Recorded streams from 2.1.274 settled three things the wrapper had wrong: with `--include-partial-messages` every `tool_use` arrives on `content_block_start` (empty input) and again as an `assistant` event (same id, full input), so tool calls were counted and emitted twice; tool results arrive inside `user` messages, so `toolErrors` never moved; and the `init` event names the model, which the ledger had recorded as `default`. A headless Workflow launch (`--settings '{"ultracode":true}'`) returns a first `result` at launch and a second one, tagged `origin: {kind: "task-notification"}`, when the workflow finishes; every result that answers a written message carries its id in `user_message_uuids` (including `/compact`), so sends now carry an id and a result resolves only its own send. From the changelogs, needing nothing here: stream-json sessions no longer hold the first turn for deferred MCP servers, a backgrounded subagent's final report is no longer dropped from stream-json, and a transcript stuck on "unexpected tool*use_id" now ends with an error; agy no longer ends a turn with `NO_TOOL_CALL` on a schema-invalid tool call. The sweep had gone blind on Codex — 26 prereleases since 0.154.0 filled its 15-release window and the upstream column read "?" without failing — and now fails on an empty upstream lookup and reads grok's upstream from `grok update --check --json`. |
|
|
12
13
|
| v7.4.1 | 2.1.271 | 2026-09-15 | **Short sweep: two Claude Code releases and one OpenCode release, nothing broken.** CC 2.1.269→2.1.271, OpenCode 1.18.30→1.18.31; Codex 0.154.0, agy 1.2.2 and grok 1.0.30 already latest by their own updaters. Every live turn passed through the real wrapper, registry 25 models / 0 drift, and no engine's flag surface changed. From the changelogs: 2.1.271 added `omitClaudeMd` to the `--agents` JSON (run a subagent without the user/project/local CLAUDE.md files). It already reached the CLI — the tool schema takes any object and the wrapper stringifies it verbatim, verified accepted by 2.1.271 — but the TypeScript type still named only `description` and `prompt`, while the CLI's schema has long carried `tools`, `model`, `maxTurns`, `background`, `memory`, `isolation` and `effort` too. The type is now `AgentDefinition`: `omitClaudeMd` named, the rest passed through, and a test pins the verbatim hand-over so a future allowlist cannot drop the next field silently. Needing nothing here: MCP-only `-p --resume` sessions now work, `--resume` keeps the `[1m]` tag across model families, Monitor watches get a 10-minute cap in `-p`. OpenCode 1.18.31's fixes are to its own ACP and TUI. Asked whether Opus 5.2 had shipped: it has not — Anthropic's pricing and model pages and the 2.1.271 binary all stop at `claude-opus-5`. That question exposed that the sweep would not have said so either: its missing-model check covered only GPT, and on inspection it had never run at all, because it resolved the engine binary against the working directory rather than `PATH` and an empty result is indistinguishable from "nothing new". Fixed, extended to Claude with retired rows excluded, and made loud when a binary cannot be scanned; mutation-verified by hiding `claude-opus-5` and `gpt-6-astra` from the registry, each of which it then named. Its first real run named `gpt-4.1`, now registered. |
|
|
@@ -209,7 +209,13 @@ The council system prompt is loaded from `configs/council-system-prompt.md` and
|
|
|
209
209
|
| §7 Action Over Words | Never ask permission, just work |
|
|
210
210
|
| §8 Efficient Tool Use | Minimum necessary principle |
|
|
211
211
|
|
|
212
|
-
Placeholders: `{{emoji}}`, `{{name}}`, `{{persona}}`, `{{workDir}}`, `{{otherBranches}}`
|
|
212
|
+
Placeholders: `{{emoji}}`, `{{name}}`, `{{persona}}`, `{{workDir}}`, `{{projectDir}}`, `{{otherBranches}}`
|
|
213
|
+
|
|
214
|
+
The charter is each seat's only instruction channel, and it reaches every engine through `appendSystemPrompt`:
|
|
215
|
+
natively on Claude Code and Grok, as the top of the seat's first message on Codex, Antigravity and OpenCode.
|
|
216
|
+
Nothing is written into the worktrees. Seats used to get their identity and workspace boundary from a
|
|
217
|
+
generated `<worktree>/.claude/CLAUDE.md`, which only Claude Code reads and which an agent could commit
|
|
218
|
+
into the project.
|
|
213
219
|
|
|
214
220
|
## Transcript Logging
|
|
215
221
|
|
|
@@ -103,7 +103,7 @@ In `~/.openclaw/openclaw.json`:
|
|
|
103
103
|
"enabled": true,
|
|
104
104
|
"config": {
|
|
105
105
|
"claudeBin": "claude",
|
|
106
|
-
"defaultModel": "claude-opus-5",
|
|
106
|
+
"defaultModel": "claude-opus-5-5",
|
|
107
107
|
"defaultPermissionMode": "acceptEdits",
|
|
108
108
|
"defaultEffort": "auto",
|
|
109
109
|
"maxConcurrentSessions": 5,
|
|
@@ -35,7 +35,7 @@ Key options:
|
|
|
35
35
|
| `effort` | `low`, `medium`, `high`, `max`, `auto` |
|
|
36
36
|
| `bare` | Skip hooks, LSP, auto-memory, CLAUDE.md |
|
|
37
37
|
| `worktree` | Run in isolated git worktree |
|
|
38
|
-
| `appendSystemPrompt` | Append custom instructions to the system prompt
|
|
38
|
+
| `appendSystemPrompt` | Append custom instructions to the system prompt. Claude Code and Grok take it natively; Codex, Antigravity and OpenCode have no such flag and receive it at the top of the first message of a conversation |
|
|
39
39
|
|
|
40
40
|
### Sending Messages
|
|
41
41
|
|
|
@@ -22,7 +22,7 @@ Start a persistent coding session with full CLI flag support.
|
|
|
22
22
|
| `maxTurns` | number | Max agent loop turns |
|
|
23
23
|
| `maxBudgetUsd` | number | Max API spend (USD). Enforced by the runtime on every engine: once the session's cumulative cost reaches the cap, further sends are refused before the engine is spawned. See [observability.md](observability.md) for the accuracy caveat on engines that estimate token counts. |
|
|
24
24
|
| `systemPrompt` | string | Replace system prompt |
|
|
25
|
-
| `appendSystemPrompt` | string | Append to system prompt
|
|
25
|
+
| `appendSystemPrompt` | string | Append custom instructions to the system prompt. Claude Code and Grok take it natively; Codex, Antigravity and OpenCode have no such flag and receive it at the top of the first message of a conversation |
|
|
26
26
|
| `agents` | object | Custom sub-agents JSON |
|
|
27
27
|
| `agent` | string | Default agent to use |
|
|
28
28
|
| `bare` | boolean | Skip hooks, LSP, auto-memory, CLAUDE.md |
|