@enderfga/claw-orchestrator 7.14.0 → 7.16.0
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 +162 -135
- package/configs/autoloop-reviewer-prompt.md +1 -1
- package/configs/engines/README.md +31 -11
- package/dist/bin/acp-server.js +7 -12
- package/dist/bin/acp-server.js.map +1 -1
- package/dist/bin/cli.js +84 -46
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/mcp-server.js +2 -54
- package/dist/bin/mcp-server.js.map +1 -1
- package/dist/src/acp-server.d.ts +17 -9
- package/dist/src/acp-server.js +149 -30
- package/dist/src/acp-server.js.map +1 -1
- package/dist/src/autoloop/agent-tools.d.ts +2 -0
- package/dist/src/autoloop/agent-tools.js +7 -0
- package/dist/src/autoloop/agent-tools.js.map +1 -1
- package/dist/src/autoloop/dispatcher.d.ts +6 -0
- package/dist/src/autoloop/dispatcher.js +72 -9
- package/dist/src/autoloop/dispatcher.js.map +1 -1
- package/dist/src/autoloop/planner-tools.js +2 -0
- package/dist/src/autoloop/planner-tools.js.map +1 -1
- package/dist/src/claude-goal-session.d.ts +147 -0
- package/dist/src/claude-goal-session.js +355 -0
- package/dist/src/claude-goal-session.js.map +1 -0
- package/dist/src/council.d.ts +8 -0
- package/dist/src/council.js +45 -12
- package/dist/src/council.js.map +1 -1
- package/dist/src/dashboard/index.html +28 -14
- package/dist/src/embedded-server.js +27 -8
- package/dist/src/embedded-server.js.map +1 -1
- package/dist/src/engine-spawn.js +3 -1
- package/dist/src/engine-spawn.js.map +1 -1
- package/dist/src/fanout.d.ts +13 -3
- package/dist/src/fanout.js +10 -0
- package/dist/src/fanout.js.map +1 -1
- package/dist/src/inbox-manager.d.ts +9 -0
- package/dist/src/inbox-manager.js +8 -2
- package/dist/src/inbox-manager.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +135 -53
- package/dist/src/index.js.map +1 -1
- package/dist/src/kernel/agent-step.d.ts +6 -0
- package/dist/src/kernel/agent-step.js.map +1 -1
- package/dist/src/kernel/conditions.d.ts +1 -1
- package/dist/src/kernel/conditions.js +1 -1
- package/dist/src/kernel/engine.d.ts +28 -8
- package/dist/src/kernel/engine.js +93 -19
- package/dist/src/kernel/engine.js.map +1 -1
- package/dist/src/kernel/nodes/agent.js +2 -0
- package/dist/src/kernel/nodes/agent.js.map +1 -1
- package/dist/src/kernel/nodes/council.js +9 -4
- package/dist/src/kernel/nodes/council.js.map +1 -1
- package/dist/src/kernel/nodes/fanout.js +5 -0
- package/dist/src/kernel/nodes/fanout.js.map +1 -1
- package/dist/src/kernel/nodes/goal.d.ts +19 -5
- package/dist/src/kernel/nodes/goal.js +81 -34
- package/dist/src/kernel/nodes/goal.js.map +1 -1
- package/dist/src/kernel/nodes/subflow.js +9 -1
- package/dist/src/kernel/nodes/subflow.js.map +1 -1
- package/dist/src/kernel/nodes/ultraapp.d.ts +1 -0
- package/dist/src/kernel/nodes/ultraapp.js +1 -0
- package/dist/src/kernel/nodes/ultraapp.js.map +1 -1
- package/dist/src/kernel/nodes/verifier.js +5 -1
- package/dist/src/kernel/nodes/verifier.js.map +1 -1
- package/dist/src/kernel/projections.d.ts +1 -0
- package/dist/src/kernel/projections.js +7 -1
- package/dist/src/kernel/projections.js.map +1 -1
- package/dist/src/kernel/templates/index.d.ts +16 -11
- package/dist/src/kernel/templates/index.js +14 -8
- package/dist/src/kernel/templates/index.js.map +1 -1
- package/dist/src/kernel/types.d.ts +37 -13
- package/dist/src/kernel/types.js.map +1 -1
- package/dist/src/logger.d.ts +6 -0
- package/dist/src/logger.js +14 -0
- package/dist/src/logger.js.map +1 -1
- package/dist/src/mcp-annotations.d.ts +13 -0
- package/dist/src/mcp-annotations.js +100 -0
- package/dist/src/mcp-annotations.js.map +1 -0
- package/dist/src/models.d.ts +7 -0
- package/dist/src/models.js +9 -0
- package/dist/src/models.js.map +1 -1
- package/dist/src/openai-compat.d.ts +11 -5
- package/dist/src/openai-compat.js +55 -54
- package/dist/src/openai-compat.js.map +1 -1
- package/dist/src/persistent-acp-session.d.ts +7 -0
- package/dist/src/persistent-acp-session.js +26 -2
- package/dist/src/persistent-acp-session.js.map +1 -1
- package/dist/src/persistent-codex-app-session.d.ts +2 -0
- package/dist/src/persistent-codex-app-session.js +18 -9
- package/dist/src/persistent-codex-app-session.js.map +1 -1
- package/dist/src/persistent-codex-session.d.ts +14 -3
- package/dist/src/persistent-codex-session.js +22 -19
- package/dist/src/persistent-codex-session.js.map +1 -1
- package/dist/src/persistent-custom-session.d.ts +9 -0
- package/dist/src/persistent-custom-session.js +41 -21
- package/dist/src/persistent-custom-session.js.map +1 -1
- package/dist/src/persistent-grok-session.js +1 -1
- package/dist/src/persistent-grok-session.js.map +1 -1
- package/dist/src/persistent-session.d.ts +9 -0
- package/dist/src/persistent-session.js +23 -0
- package/dist/src/persistent-session.js.map +1 -1
- package/dist/src/run-ledger.d.ts +3 -3
- package/dist/src/session-manager.d.ts +45 -1
- package/dist/src/session-manager.js +199 -34
- package/dist/src/session-manager.js.map +1 -1
- package/dist/src/types.d.ts +34 -11
- package/dist/src/types.js.map +1 -1
- package/dist/src/ultraapp/build.d.ts +5 -11
- package/dist/src/ultraapp/build.js +5 -11
- package/dist/src/ultraapp/build.js.map +1 -1
- package/dist/src/ultraapp/council-adapter.d.ts +5 -2
- package/dist/src/ultraapp/council-adapter.js +6 -6
- package/dist/src/ultraapp/council-adapter.js.map +1 -1
- package/dist/src/ultraapp/files.d.ts +7 -0
- package/dist/src/ultraapp/files.js +7 -1
- package/dist/src/ultraapp/files.js.map +1 -1
- package/dist/src/ultraapp/manager.d.ts +23 -3
- package/dist/src/ultraapp/manager.js +170 -72
- package/dist/src/ultraapp/manager.js.map +1 -1
- package/dist/src/ultraapp/narrator.js +1 -1
- package/dist/src/ultraapp/narrator.js.map +1 -1
- package/dist/src/ultraapp/versions.d.ts +27 -5
- package/dist/src/ultraapp/versions.js +58 -13
- package/dist/src/ultraapp/versions.js.map +1 -1
- package/openclaw.plugin.json +4 -13
- package/package.json +13 -6
- package/skills/SKILL.md +52 -24
- package/skills/references/acp.md +140 -61
- package/skills/references/autoloop.md +148 -38
- package/skills/references/claude-cli-tracking.md +9 -6
- package/skills/references/cli.md +139 -108
- package/skills/references/council.md +44 -22
- package/skills/references/dashboard.md +37 -21
- package/skills/references/getting-started.md +49 -15
- package/skills/references/inbox.md +13 -8
- package/skills/references/mcp.md +25 -17
- package/skills/references/multi-engine.md +161 -145
- package/skills/references/observability.md +90 -58
- package/skills/references/openai-compat.md +172 -82
- package/skills/references/sessions.md +101 -65
- package/skills/references/tools.md +217 -158
- package/skills/references/ultra.md +7 -7
- package/skills/references/ultraapp.md +101 -56
- package/skills/references/verification.md +112 -56
- package/skills/references/workflow.md +275 -97
- package/assets/banner.jpg +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Version snapshot + swap mechanics.
|
|
3
3
|
*
|
|
4
|
-
* Each
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Each build and each successful patch takes a new version. Versions live under
|
|
5
|
+
* `<runDir>/versions/v1/`, `v2/`, ..., each with its own `codebase/` and an
|
|
6
|
+
* `artifact.json` carrying worktreePath + (once deployed) deploy info.
|
|
7
7
|
*
|
|
8
|
-
* `swapVersion`
|
|
9
|
-
* stop current container, start
|
|
8
|
+
* `swapVersion` retargets the router between two deployed versions: deregister
|
|
9
|
+
* the slug, stop the current container, start the target, register the slug to
|
|
10
|
+
* the target's port.
|
|
10
11
|
*/
|
|
11
12
|
export interface DeployInfoLite {
|
|
12
13
|
url: string;
|
|
@@ -20,9 +21,30 @@ export interface VersionEntry {
|
|
|
20
21
|
builtAt: string;
|
|
21
22
|
source?: string;
|
|
22
23
|
deploy?: DeployInfoLite;
|
|
24
|
+
deployedAt?: string;
|
|
23
25
|
}
|
|
24
26
|
export declare function listVersions(versionsDir: string): VersionEntry[];
|
|
27
|
+
/**
|
|
28
|
+
* The next free version slot.
|
|
29
|
+
*
|
|
30
|
+
* Counts every `vN` directory, recorded or not, so a slot a failed build or patch
|
|
31
|
+
* left behind is skipped rather than written into.
|
|
32
|
+
*/
|
|
33
|
+
export declare function nextVersion(versionsDir: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Copy a version's codebase into the next slot, so a change can be made to the
|
|
36
|
+
* copy while the original keeps serving.
|
|
37
|
+
*
|
|
38
|
+
* The copy is not listed until {@link snapshotVersion} records it, so a change
|
|
39
|
+
* that fails leaves nothing that could be promoted.
|
|
40
|
+
*/
|
|
41
|
+
export declare function forkVersion(versionsDir: string, fromWorktree: string): {
|
|
42
|
+
version: string;
|
|
43
|
+
worktreePath: string;
|
|
44
|
+
};
|
|
45
|
+
/** Record a forked version, which makes it listed and promotable. */
|
|
25
46
|
export declare function snapshotVersion(versionsDir: string, args: {
|
|
47
|
+
version: string;
|
|
26
48
|
worktreePath: string;
|
|
27
49
|
source: string;
|
|
28
50
|
}): string;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Version snapshot + swap mechanics.
|
|
3
3
|
*
|
|
4
|
-
* Each
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Each build and each successful patch takes a new version. Versions live under
|
|
5
|
+
* `<runDir>/versions/v1/`, `v2/`, ..., each with its own `codebase/` and an
|
|
6
|
+
* `artifact.json` carrying worktreePath + (once deployed) deploy info.
|
|
7
7
|
*
|
|
8
|
-
* `swapVersion`
|
|
9
|
-
* stop current container, start
|
|
8
|
+
* `swapVersion` retargets the router between two deployed versions: deregister
|
|
9
|
+
* the slug, stop the current container, start the target, register the slug to
|
|
10
|
+
* the target's port.
|
|
10
11
|
*/
|
|
11
12
|
import * as fs from 'node:fs';
|
|
12
13
|
import * as path from 'node:path';
|
|
@@ -30,18 +31,55 @@ function parseVersionNumber(version) {
|
|
|
30
31
|
const m = /^v(\d+)$/.exec(version);
|
|
31
32
|
return m ? parseInt(m[1], 10) : Number.MAX_SAFE_INTEGER;
|
|
32
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* The next free version slot.
|
|
36
|
+
*
|
|
37
|
+
* Counts every `vN` directory, recorded or not, so a slot a failed build or patch
|
|
38
|
+
* left behind is skipped rather than written into.
|
|
39
|
+
*/
|
|
40
|
+
export function nextVersion(versionsDir) {
|
|
41
|
+
let max = 0;
|
|
42
|
+
try {
|
|
43
|
+
for (const d of fs.readdirSync(versionsDir)) {
|
|
44
|
+
const m = /^v(\d+)$/.exec(d);
|
|
45
|
+
if (m)
|
|
46
|
+
max = Math.max(max, parseInt(m[1], 10));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
/* no versions yet */
|
|
51
|
+
}
|
|
52
|
+
return `v${max + 1}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Not copied by a fork: every validation and deploy runs `npm install` first.
|
|
56
|
+
* Build output is copied, since a source directory can share its name.
|
|
57
|
+
*/
|
|
58
|
+
const NOT_FORKED = new Set(['node_modules']);
|
|
59
|
+
/**
|
|
60
|
+
* Copy a version's codebase into the next slot, so a change can be made to the
|
|
61
|
+
* copy while the original keeps serving.
|
|
62
|
+
*
|
|
63
|
+
* The copy is not listed until {@link snapshotVersion} records it, so a change
|
|
64
|
+
* that fails leaves nothing that could be promoted.
|
|
65
|
+
*/
|
|
66
|
+
export function forkVersion(versionsDir, fromWorktree) {
|
|
67
|
+
const version = nextVersion(versionsDir);
|
|
68
|
+
const worktreePath = path.join(versionsDir, version, 'codebase');
|
|
69
|
+
fs.cpSync(fromWorktree, worktreePath, {
|
|
70
|
+
recursive: true,
|
|
71
|
+
filter: (src) => !NOT_FORKED.has(path.relative(fromWorktree, src)),
|
|
72
|
+
});
|
|
73
|
+
return { version, worktreePath };
|
|
74
|
+
}
|
|
75
|
+
/** Record a forked version, which makes it listed and promotable. */
|
|
33
76
|
export function snapshotVersion(versionsDir, args) {
|
|
34
|
-
fs.
|
|
35
|
-
const existing = listVersions(versionsDir);
|
|
36
|
-
const next = `v${existing.length + 1}`;
|
|
37
|
-
const dir = path.join(versionsDir, next);
|
|
38
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
39
|
-
fs.writeFileSync(path.join(dir, 'artifact.json'), JSON.stringify({
|
|
77
|
+
fs.writeFileSync(path.join(versionsDir, args.version, 'artifact.json'), JSON.stringify({
|
|
40
78
|
worktreePath: args.worktreePath,
|
|
41
79
|
builtAt: new Date().toISOString(),
|
|
42
80
|
source: args.source,
|
|
43
81
|
}, null, 2));
|
|
44
|
-
return
|
|
82
|
+
return args.version;
|
|
45
83
|
}
|
|
46
84
|
export async function swapVersion(args) {
|
|
47
85
|
const versions = listVersions(args.versionsDir);
|
|
@@ -57,8 +95,15 @@ export async function swapVersion(args) {
|
|
|
57
95
|
});
|
|
58
96
|
}
|
|
59
97
|
const r = await args.startContainer(to.deploy.containerName);
|
|
60
|
-
if (!r.ok)
|
|
98
|
+
if (!r.ok) {
|
|
99
|
+
// Leave the app on the version it was serving rather than on nothing.
|
|
100
|
+
if (from?.deploy) {
|
|
101
|
+
const back = await args.startContainer(from.deploy.containerName).catch(() => ({ ok: false }));
|
|
102
|
+
if (back.ok)
|
|
103
|
+
args.router.register(args.slug, from.deploy.port);
|
|
104
|
+
}
|
|
61
105
|
return { ok: false, error: r.error };
|
|
106
|
+
}
|
|
62
107
|
args.router.register(args.slug, to.deploy.port);
|
|
63
108
|
return { ok: true };
|
|
64
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/ultraapp/versions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/ultraapp/versions.ts"],"names":[],"mappings":"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"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "claw-orchestrator",
|
|
3
3
|
"name": "Claw Orchestrator",
|
|
4
|
-
"description": "Run Claude Code, Codex, Antigravity, Grok Build, OpenCode, any ACP agent and custom coding CLIs as one unified runtime. Persistent sessions, multi-engine orchestration, multi-agent council, worktree isolation, multi-model proxy, structured output, plan mode
|
|
4
|
+
"description": "Run Claude Code, Codex, Antigravity, Grok Build, OpenCode, any ACP agent and custom coding CLIs as one unified runtime. Persistent sessions, multi-engine orchestration, multi-agent council, worktree isolation, durable workflows with acceptance contracts, multi-model proxy, structured output, plan mode.",
|
|
5
5
|
"enabledByDefault": false,
|
|
6
6
|
"configSchema": {
|
|
7
7
|
"type": "object",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"high",
|
|
37
37
|
"xhigh",
|
|
38
38
|
"max",
|
|
39
|
+
"ultra",
|
|
39
40
|
"auto"
|
|
40
41
|
],
|
|
41
42
|
"default": "auto"
|
|
@@ -56,18 +57,8 @@
|
|
|
56
57
|
"properties": {
|
|
57
58
|
"enabled": {
|
|
58
59
|
"type": "boolean",
|
|
59
|
-
"default":
|
|
60
|
-
"description": "
|
|
61
|
-
},
|
|
62
|
-
"bigModel": {
|
|
63
|
-
"type": "string",
|
|
64
|
-
"default": "gemini-2.5-pro",
|
|
65
|
-
"description": "Default model for complex requests"
|
|
66
|
-
},
|
|
67
|
-
"smallModel": {
|
|
68
|
-
"type": "string",
|
|
69
|
-
"default": "gemini-2.5-flash",
|
|
70
|
-
"description": "Default model for fast requests"
|
|
60
|
+
"default": true,
|
|
61
|
+
"description": "Register the multi-model proxy routes on the gateway. The proxy routes each request by the model it names"
|
|
71
62
|
}
|
|
72
63
|
}
|
|
73
64
|
},
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enderfga/claw-orchestrator",
|
|
3
|
-
"version": "7.
|
|
4
|
-
"description": "Claw Orchestrator — run Claude Code, Codex, Antigravity, Grok Build, OpenCode, any ACP agent and custom coding CLIs as one unified runtime. Drop into Hermes Agent, Claude Desktop, Cursor, Cline, Continue, Zed, Windsurf, Goose or any Model Context Protocol (MCP) host, install as an OpenClaw plugin, or run standalone. Persistent sessions, multi-agent council, ultraplan, ultrareview,
|
|
3
|
+
"version": "7.16.0",
|
|
4
|
+
"description": "Claw Orchestrator — run Claude Code, Codex, Antigravity, Grok Build, OpenCode, any ACP agent and custom coding CLIs as one unified runtime. Drop into Hermes Agent, Claude Desktop, Cursor, Cline, Continue, Zed, Windsurf, Goose or any Model Context Protocol (MCP) host, serve editors as an ACP agent, install as an OpenClaw plugin, or run standalone. Persistent sessions, durable resumable workflows, acceptance checks the runtime runs itself, fan-out, multi-agent council, Codex /goal runs, autoloop, ultraplan, ultrareview, and a per-turn cost ledger with spend caps.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
7
7
|
"types": "./dist/src/index.d.ts",
|
|
@@ -22,8 +22,7 @@
|
|
|
22
22
|
"skills/",
|
|
23
23
|
"openclaw.plugin.json",
|
|
24
24
|
"README.md",
|
|
25
|
-
"LICENSE"
|
|
26
|
-
"assets/banner.jpg"
|
|
25
|
+
"LICENSE"
|
|
27
26
|
],
|
|
28
27
|
"scripts": {
|
|
29
28
|
"build": "rm -rf dist && tsc && node scripts/postbuild.mjs",
|
|
@@ -48,8 +47,10 @@
|
|
|
48
47
|
"claude-code",
|
|
49
48
|
"codex",
|
|
50
49
|
"cursor",
|
|
51
|
-
"cursor-agent",
|
|
52
50
|
"opencode",
|
|
51
|
+
"grok",
|
|
52
|
+
"grok-build",
|
|
53
|
+
"kimi-code",
|
|
53
54
|
"coding-agent",
|
|
54
55
|
"ai-agent",
|
|
55
56
|
"agent-orchestration",
|
|
@@ -85,7 +86,13 @@
|
|
|
85
86
|
"neovim",
|
|
86
87
|
"antigravity",
|
|
87
88
|
"coding-agent-protocol",
|
|
88
|
-
"deepseek-harness"
|
|
89
|
+
"deepseek-harness",
|
|
90
|
+
"durable-workflow",
|
|
91
|
+
"verification",
|
|
92
|
+
"acceptance-tests",
|
|
93
|
+
"fan-out",
|
|
94
|
+
"codex-goal",
|
|
95
|
+
"cost-tracking"
|
|
89
96
|
],
|
|
90
97
|
"author": "enderfga",
|
|
91
98
|
"repository": {
|
package/skills/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: claw-orchestrator
|
|
3
|
-
description: Manage persistent coding sessions across Claude Code, Codex, Antigravity (agy), Grok Build, and
|
|
3
|
+
description: Manage persistent coding sessions across Claude Code, Codex, Antigravity (agy), Grok Build, OpenCode, any Agent Client Protocol agent (Kimi Code, dsh) and custom CLIs. Use when orchestrating multi-engine coding agents, starting/sending/stopping sessions, running durable, resumable workflows (solve / fanout / council / Codex goal) and having the runtime verify the result against an acceptance contract, fanning one task out to several engines, running multi-agent council collaborations, cross-session messaging, ultraplan deep planning, ultrareview parallel code review, autoloop autonomous workspace iteration, ultraapp building deployable web apps from a structured Q&A interview, switching models/tools at runtime, tracking per-turn cost and spend caps across engines, exposing the orchestrator's 78 tools as an MCP server to Hermes Agent / Claude Desktop / Cursor / Cline / Continue / Zed / Windsurf / Goose, or running as an Agent Client Protocol (ACP) agent that Zed / JetBrains / Neovim / Emacs / VS Code / dsh can drive directly. Triggers on "start a session", "send to session", "run council", "ultraplan", "ultrareview", "autoloop", "ultraapp", "Forge tab", "build a web app", "one-click app", "AppSpec", "autonomous iteration", "iterate until goal", "auto research", "switch model", "hand off a session", "session handoff", "switch engine", "continue on codex", "continue on claude", "move this session to another engine", "multi-agent coding", "coding session", "session inbox", "grok session", "grok build", "opencode", "mcp server", "clawo-mcp", "hermes mcp", "model context protocol", "ultracode", "dynamic workflow", "fanout", "fan-out", "best-of-N", "steer turn", "interrupt turn", "fork thread", "rollback turns", "acp", "agent client protocol", "clawo acp", "zed agent", "jetbrains agent", "external agent", "dsh subagent", "deepseek harness", "acp engine", "acp agent", "kimi code", "kimi acp", "dsh acp", "any acp agent", "clawo runs", "run ledger", "session cost", "coding-agent token usage", "spend cap", "budget limit", "maxBudgetUsd", "durable workflow", "resume a run", "verify a coding run", "acceptance contract", "evidence bundle", "did the agent's tests actually pass", "protected tests", "agent edited the tests", "human gate", "repair loop", "clawo workflow", "clawo verify", "clawo solve", "clawo fanout", "fix and verify", "solve from the terminal", "codex goal", "/goal", "clawo goal", "long-horizon goal", "unattended codex run", "goal node", "run codex in a sandbox", "launcher".
|
|
4
4
|
metadata:
|
|
5
5
|
{
|
|
6
6
|
'openclaw':
|
|
@@ -36,17 +36,20 @@ metadata:
|
|
|
36
36
|
|
|
37
37
|
# Claw Orchestrator Skill
|
|
38
38
|
|
|
39
|
-
Claw Orchestrator — persistent multi-engine coding session manager for claw-style agent systems. Runs as a standalone CLI/server, with first-class OpenClaw plugin support. Wraps Claude Code, Codex, Antigravity, Grok Build, OpenCode, and custom CLIs into headless agentic engines with 78 tools.
|
|
39
|
+
Claw Orchestrator — persistent multi-engine coding session manager for claw-style agent systems. Runs as a standalone CLI/server, with first-class OpenClaw plugin support. Wraps Claude Code, Codex, Antigravity, Grok Build, OpenCode, any Agent Client Protocol agent, and custom CLIs into headless agentic engines with 78 tools.
|
|
40
40
|
|
|
41
41
|
## Engine Quick Reference
|
|
42
42
|
|
|
43
|
-
| Engine
|
|
44
|
-
|
|
|
45
|
-
| `claude`
|
|
46
|
-
| `codex`
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
43
|
+
| Engine | CLI | Session Type | Best For |
|
|
44
|
+
| ----------- | ---------------------------- | --------------------- | ---------------------------------------------------------------------------------- |
|
|
45
|
+
| `claude` | `claude` | Persistent subprocess | Multi-turn, complex tasks |
|
|
46
|
+
| `codex` | `codex exec` | Per-message spawn | One-shot execution; the thread is resumed on each send |
|
|
47
|
+
| `codex-app` | `codex app-server` | Persistent subprocess | Codex `/goal`, plus interrupt / steer / fork / rollback of turns |
|
|
48
|
+
| `agy` | `agy -p` | Per-message spawn | Google Antigravity; reported token usage, conversation resumed by id |
|
|
49
|
+
| `grok` | `grok -p` | Per-message spawn | xAI Grok Build; engine-reported cost, resumable session |
|
|
50
|
+
| `opencode` | `opencode run` | Per-message spawn | Provider-agnostic (`provider/model`) |
|
|
51
|
+
| `acp` | the agent's own command | Persistent subprocess | Any Agent Client Protocol agent, named by `acpAgent` (presets: `kimi-code`, `dsh`) |
|
|
52
|
+
| `custom` | yours (`CustomEngineConfig`) | Either (`persistent`) | Any other coding CLI, described by a config or a bundled preset |
|
|
50
53
|
|
|
51
54
|
## Core Workflow
|
|
52
55
|
|
|
@@ -62,6 +65,7 @@ session_start({
|
|
|
62
65
|
engine: 'opencode',
|
|
63
66
|
model: 'anthropic/claude-sonnet-5',
|
|
64
67
|
});
|
|
68
|
+
session_start({ name: 'kimi-task', cwd: '/path/to/project', engine: 'acp', acpAgent: 'kimi-code' });
|
|
65
69
|
|
|
66
70
|
// 2. Send messages
|
|
67
71
|
session_send({ name: 'myproject', message: 'Fix the auth bug' });
|
|
@@ -76,14 +80,18 @@ session_stop({ name: 'myproject' });
|
|
|
76
80
|
|
|
77
81
|
## Session Options
|
|
78
82
|
|
|
79
|
-
| Parameter
|
|
80
|
-
|
|
|
81
|
-
| `engine`
|
|
82
|
-
| `model`
|
|
83
|
-
| `permissionMode`
|
|
84
|
-
| `effort`
|
|
85
|
-
| `maxBudgetUsd`
|
|
86
|
-
| `allowedTools`
|
|
83
|
+
| Parameter | Description |
|
|
84
|
+
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
85
|
+
| `engine` | `claude` (default), `codex`, `codex-app`, `agy`, `grok`, `opencode`, `acp`, `custom` |
|
|
86
|
+
| `model` | Model name or alias (`fable`, `opus` → claude-opus-5-5, `sonnet`, `haiku`, `gpt-5.5`, `agy-pro`) |
|
|
87
|
+
| `permissionMode` | `acceptEdits`, `auto`, `plan`, `bypassPermissions`, `manual`, `dontAsk` (`default` = legacy alias for `manual`) |
|
|
88
|
+
| `effort` | `low`, `medium`, `high`, `xhigh`, `max`, `ultra`, `auto` (each engine clamps to its own ceiling) |
|
|
89
|
+
| `maxBudgetUsd` | Cost limit in USD, enforced by the runtime on every engine |
|
|
90
|
+
| `allowedTools` | List of allowed tool names |
|
|
91
|
+
| `sandboxMode` | `read-only`, `workspace-write`, `danger-full-access`. Codex applies all three; claude, agy, grok and opencode enforce `read-only` through their own plan/read-only modes; a custom engine must map it through `permissionModes` or refuses to start; `acp` refuses it |
|
|
92
|
+
| `acpAgent` | With `engine: 'acp'`: a bundled preset id (`clawo engines`), or an inline `{ name, command, args, env }` from a local caller |
|
|
93
|
+
| `customEngine` | With `engine: 'custom'`: a bundled preset id, or an inline `CustomEngineConfig` from a local caller |
|
|
94
|
+
| `resumeSessionId` | Resume an earlier conversation by the engine's own id (session, thread or conversation id) |
|
|
87
95
|
|
|
88
96
|
### Claude-engine options
|
|
89
97
|
|
|
@@ -152,14 +160,14 @@ team_send({ name: 'myproject', teammate: 'teammate', message: 'Review this' });
|
|
|
152
160
|
|
|
153
161
|
## Ultraplan & Ultrareview
|
|
154
162
|
|
|
155
|
-
- **Ultraplan**: Opus deep planning session (
|
|
156
|
-
- **Ultrareview**: 1-20 read-only reviewer agents (default 5) running in parallel, each from one angle (security, logic, perf, types, etc.), merged by a synthesis pass
|
|
163
|
+
- **Ultraplan**: Opus deep planning session (default timeout 30 min), produces detailed implementation plan
|
|
164
|
+
- **Ultrareview**: 1-20 read-only reviewer agents (default 5) running in parallel, each from one angle (security, logic, perf, types, etc.), merged by a synthesis pass. Reviewers can be spread across engines; `custom` and `acp` are refused because they cannot be held read-only
|
|
157
165
|
|
|
158
166
|
Both are async — start then poll status.
|
|
159
167
|
|
|
160
168
|
## Autoloop (autonomous workspace iteration)
|
|
161
169
|
|
|
162
|
-
Autoloop uses three persistent roles. You chat with the Planner to define `plan.md` and `goal.json`; after explicit approval it starts a Coder/Reviewer iteration loop. Each role may use a different engine.
|
|
170
|
+
Autoloop uses three persistent roles. You chat with the Planner to define `plan.md` and `goal.json`; after explicit approval it starts a Coder/Reviewer iteration loop. Each role may use a different engine (any engine except `acp`).
|
|
163
171
|
|
|
164
172
|
```javascript
|
|
165
173
|
autoloop_start({
|
|
@@ -175,7 +183,7 @@ autoloop_status({ run_id: 'fix-parser' });
|
|
|
175
183
|
autoloop_stop({ run_id: 'fix-parser', reason: 'done' });
|
|
176
184
|
```
|
|
177
185
|
|
|
178
|
-
Claude roles default to Planner `opus` and Coder/Reviewer `sonnet`. A non-Claude role with no model uses that engine's own default. Custom engine configs
|
|
186
|
+
Claude roles default to Planner `opus` and Coder/Reviewer `sonnet`. A non-Claude role with no model uses that engine's own default. Custom engine configs come from a local caller at start or resume — or, on an HTTP resume, by reference (`plannerCustomEngineRef` etc., resolved from a `CLAWO_CUSTOM_ENGINE_<NAME>` variable on the host) — never from Planner output. The Reviewer runs in a restaged sandbox and returns advance/hold/rollback verdicts; push policy and SSE keep long runs observable.
|
|
179
187
|
|
|
180
188
|
For the full control protocol, registry/resume behavior, and ledger layout, see [references/autoloop.md](references/autoloop.md).
|
|
181
189
|
|
|
@@ -214,14 +222,15 @@ For setup, the dsh YAML block, and the cancellation/permission limits: see [refe
|
|
|
214
222
|
## Durable workflows
|
|
215
223
|
|
|
216
224
|
`workflow_start` runs a declarative graph of `agent` / `fanout` / `council` / `goal` /
|
|
217
|
-
`verifier` / `human_gate` / `router` / `subflow`
|
|
225
|
+
`verifier` / `human_gate` / `router` / `subflow` nodes; autoloop runs (`autoloop_start`) and
|
|
226
|
+
UltraApp builds use the same kernel through their own `autoloop` / `ultraapp_synth` /
|
|
218
227
|
`ultraapp_deploy` nodes. Every state transition is checkpointed to
|
|
219
228
|
`~/.claw-orchestrator/wf/<runId>/`, so a run survives a process restart and `workflow_resume`
|
|
220
229
|
picks it up at the node boundary — nodes already succeeded are not re-run, and the one that
|
|
221
230
|
was in flight is retried because a half-finished node left no result to trust.
|
|
222
231
|
|
|
223
|
-
Four built-in templates: `solve` (triage → implement →
|
|
224
|
-
|
|
232
|
+
Four built-in templates: `solve` (triage → implement → optional review → verify →
|
|
233
|
+
repair until green), `council`, `fanout`, and `goal` (a Codex `/goal` on one `codex-app` thread, run
|
|
225
234
|
unattended for as long as it takes — reattached on resume, resumed after usage limits and
|
|
226
235
|
stalls within a bound, optionally under a sandbox `launcher` — then verify → repair on the
|
|
227
236
|
same thread; `clawo goal` from the terminal). Retry, per-node timeout, cancel, steer, human gates, and
|
|
@@ -267,6 +276,24 @@ at all means no contract was declared — not that it failed. `clawo runs --veri
|
|
|
267
276
|
For the row schema, the query surfaces, and which engines report real token usage versus
|
|
268
277
|
estimating it: see [references/observability.md](references/observability.md)
|
|
269
278
|
|
|
279
|
+
## From the terminal
|
|
280
|
+
|
|
281
|
+
With `clawo serve` running, the same runtime is scriptable from a shell. Commands that fail exit
|
|
282
|
+
with status 1. Full list: [references/cli.md](references/cli.md).
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
clawo session-start fix -e codex -d /path/to/project
|
|
286
|
+
clawo session-send fix --message-file task.md --json # the whole result as one JSON line
|
|
287
|
+
clawo session-status fix --json
|
|
288
|
+
clawo solve "The test fails. Fix it." -e claude --check "npm test" --wait # exit 0 only if it completes
|
|
289
|
+
clawo fanout "Review this design" --engines claude,codex,grok --synthesize --wait
|
|
290
|
+
clawo goal --objective-file GOAL.md --check "npm test" --wait
|
|
291
|
+
clawo workflow list # then: clawo workflow show <runId>
|
|
292
|
+
clawo verify <runId> # the evidence bundle
|
|
293
|
+
clawo runs --since 24h # the per-turn ledger
|
|
294
|
+
clawo engines # bundled community presets
|
|
295
|
+
```
|
|
296
|
+
|
|
270
297
|
## Authentication Prerequisites
|
|
271
298
|
|
|
272
299
|
Each engine requires its own auth before use:
|
|
@@ -276,3 +303,4 @@ Each engine requires its own auth before use:
|
|
|
276
303
|
- **Antigravity**: run `agy` once and complete the Google OAuth login
|
|
277
304
|
- **Grok**: run `grok` once and sign in (grok.com account or `XAI_API_KEY`)
|
|
278
305
|
- **OpenCode**: `opencode auth login` (provider-agnostic; use `provider/model` form for `model`)
|
|
306
|
+
- **ACP agents**: log in with the agent's own CLI first; the session runs no ACP authentication step
|