@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.
Files changed (145) hide show
  1. package/README.md +162 -135
  2. package/configs/autoloop-reviewer-prompt.md +1 -1
  3. package/configs/engines/README.md +31 -11
  4. package/dist/bin/acp-server.js +7 -12
  5. package/dist/bin/acp-server.js.map +1 -1
  6. package/dist/bin/cli.js +84 -46
  7. package/dist/bin/cli.js.map +1 -1
  8. package/dist/bin/mcp-server.js +2 -54
  9. package/dist/bin/mcp-server.js.map +1 -1
  10. package/dist/src/acp-server.d.ts +17 -9
  11. package/dist/src/acp-server.js +149 -30
  12. package/dist/src/acp-server.js.map +1 -1
  13. package/dist/src/autoloop/agent-tools.d.ts +2 -0
  14. package/dist/src/autoloop/agent-tools.js +7 -0
  15. package/dist/src/autoloop/agent-tools.js.map +1 -1
  16. package/dist/src/autoloop/dispatcher.d.ts +6 -0
  17. package/dist/src/autoloop/dispatcher.js +72 -9
  18. package/dist/src/autoloop/dispatcher.js.map +1 -1
  19. package/dist/src/autoloop/planner-tools.js +2 -0
  20. package/dist/src/autoloop/planner-tools.js.map +1 -1
  21. package/dist/src/claude-goal-session.d.ts +147 -0
  22. package/dist/src/claude-goal-session.js +355 -0
  23. package/dist/src/claude-goal-session.js.map +1 -0
  24. package/dist/src/council.d.ts +8 -0
  25. package/dist/src/council.js +45 -12
  26. package/dist/src/council.js.map +1 -1
  27. package/dist/src/dashboard/index.html +28 -14
  28. package/dist/src/embedded-server.js +27 -8
  29. package/dist/src/embedded-server.js.map +1 -1
  30. package/dist/src/engine-spawn.js +3 -1
  31. package/dist/src/engine-spawn.js.map +1 -1
  32. package/dist/src/fanout.d.ts +13 -3
  33. package/dist/src/fanout.js +10 -0
  34. package/dist/src/fanout.js.map +1 -1
  35. package/dist/src/inbox-manager.d.ts +9 -0
  36. package/dist/src/inbox-manager.js +8 -2
  37. package/dist/src/inbox-manager.js.map +1 -1
  38. package/dist/src/index.d.ts +2 -0
  39. package/dist/src/index.js +135 -53
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/kernel/agent-step.d.ts +6 -0
  42. package/dist/src/kernel/agent-step.js.map +1 -1
  43. package/dist/src/kernel/conditions.d.ts +1 -1
  44. package/dist/src/kernel/conditions.js +1 -1
  45. package/dist/src/kernel/engine.d.ts +28 -8
  46. package/dist/src/kernel/engine.js +93 -19
  47. package/dist/src/kernel/engine.js.map +1 -1
  48. package/dist/src/kernel/nodes/agent.js +2 -0
  49. package/dist/src/kernel/nodes/agent.js.map +1 -1
  50. package/dist/src/kernel/nodes/council.js +9 -4
  51. package/dist/src/kernel/nodes/council.js.map +1 -1
  52. package/dist/src/kernel/nodes/fanout.js +5 -0
  53. package/dist/src/kernel/nodes/fanout.js.map +1 -1
  54. package/dist/src/kernel/nodes/goal.d.ts +19 -5
  55. package/dist/src/kernel/nodes/goal.js +81 -34
  56. package/dist/src/kernel/nodes/goal.js.map +1 -1
  57. package/dist/src/kernel/nodes/subflow.js +9 -1
  58. package/dist/src/kernel/nodes/subflow.js.map +1 -1
  59. package/dist/src/kernel/nodes/ultraapp.d.ts +1 -0
  60. package/dist/src/kernel/nodes/ultraapp.js +1 -0
  61. package/dist/src/kernel/nodes/ultraapp.js.map +1 -1
  62. package/dist/src/kernel/nodes/verifier.js +5 -1
  63. package/dist/src/kernel/nodes/verifier.js.map +1 -1
  64. package/dist/src/kernel/projections.d.ts +1 -0
  65. package/dist/src/kernel/projections.js +7 -1
  66. package/dist/src/kernel/projections.js.map +1 -1
  67. package/dist/src/kernel/templates/index.d.ts +16 -11
  68. package/dist/src/kernel/templates/index.js +14 -8
  69. package/dist/src/kernel/templates/index.js.map +1 -1
  70. package/dist/src/kernel/types.d.ts +37 -13
  71. package/dist/src/kernel/types.js.map +1 -1
  72. package/dist/src/logger.d.ts +6 -0
  73. package/dist/src/logger.js +14 -0
  74. package/dist/src/logger.js.map +1 -1
  75. package/dist/src/mcp-annotations.d.ts +13 -0
  76. package/dist/src/mcp-annotations.js +100 -0
  77. package/dist/src/mcp-annotations.js.map +1 -0
  78. package/dist/src/models.d.ts +7 -0
  79. package/dist/src/models.js +9 -0
  80. package/dist/src/models.js.map +1 -1
  81. package/dist/src/openai-compat.d.ts +11 -5
  82. package/dist/src/openai-compat.js +55 -54
  83. package/dist/src/openai-compat.js.map +1 -1
  84. package/dist/src/persistent-acp-session.d.ts +7 -0
  85. package/dist/src/persistent-acp-session.js +26 -2
  86. package/dist/src/persistent-acp-session.js.map +1 -1
  87. package/dist/src/persistent-codex-app-session.d.ts +2 -0
  88. package/dist/src/persistent-codex-app-session.js +18 -9
  89. package/dist/src/persistent-codex-app-session.js.map +1 -1
  90. package/dist/src/persistent-codex-session.d.ts +14 -3
  91. package/dist/src/persistent-codex-session.js +22 -19
  92. package/dist/src/persistent-codex-session.js.map +1 -1
  93. package/dist/src/persistent-custom-session.d.ts +9 -0
  94. package/dist/src/persistent-custom-session.js +41 -21
  95. package/dist/src/persistent-custom-session.js.map +1 -1
  96. package/dist/src/persistent-grok-session.js +1 -1
  97. package/dist/src/persistent-grok-session.js.map +1 -1
  98. package/dist/src/persistent-session.d.ts +9 -0
  99. package/dist/src/persistent-session.js +23 -0
  100. package/dist/src/persistent-session.js.map +1 -1
  101. package/dist/src/run-ledger.d.ts +3 -3
  102. package/dist/src/session-manager.d.ts +45 -1
  103. package/dist/src/session-manager.js +199 -34
  104. package/dist/src/session-manager.js.map +1 -1
  105. package/dist/src/types.d.ts +34 -11
  106. package/dist/src/types.js.map +1 -1
  107. package/dist/src/ultraapp/build.d.ts +5 -11
  108. package/dist/src/ultraapp/build.js +5 -11
  109. package/dist/src/ultraapp/build.js.map +1 -1
  110. package/dist/src/ultraapp/council-adapter.d.ts +5 -2
  111. package/dist/src/ultraapp/council-adapter.js +6 -6
  112. package/dist/src/ultraapp/council-adapter.js.map +1 -1
  113. package/dist/src/ultraapp/files.d.ts +7 -0
  114. package/dist/src/ultraapp/files.js +7 -1
  115. package/dist/src/ultraapp/files.js.map +1 -1
  116. package/dist/src/ultraapp/manager.d.ts +23 -3
  117. package/dist/src/ultraapp/manager.js +170 -72
  118. package/dist/src/ultraapp/manager.js.map +1 -1
  119. package/dist/src/ultraapp/narrator.js +1 -1
  120. package/dist/src/ultraapp/narrator.js.map +1 -1
  121. package/dist/src/ultraapp/versions.d.ts +27 -5
  122. package/dist/src/ultraapp/versions.js +58 -13
  123. package/dist/src/ultraapp/versions.js.map +1 -1
  124. package/openclaw.plugin.json +4 -13
  125. package/package.json +13 -6
  126. package/skills/SKILL.md +52 -24
  127. package/skills/references/acp.md +140 -61
  128. package/skills/references/autoloop.md +148 -38
  129. package/skills/references/claude-cli-tracking.md +9 -6
  130. package/skills/references/cli.md +139 -108
  131. package/skills/references/council.md +44 -22
  132. package/skills/references/dashboard.md +37 -21
  133. package/skills/references/getting-started.md +49 -15
  134. package/skills/references/inbox.md +13 -8
  135. package/skills/references/mcp.md +25 -17
  136. package/skills/references/multi-engine.md +161 -145
  137. package/skills/references/observability.md +90 -58
  138. package/skills/references/openai-compat.md +172 -82
  139. package/skills/references/sessions.md +101 -65
  140. package/skills/references/tools.md +217 -158
  141. package/skills/references/ultra.md +7 -7
  142. package/skills/references/ultraapp.md +101 -56
  143. package/skills/references/verification.md +112 -56
  144. package/skills/references/workflow.md +275 -97
  145. package/assets/banner.jpg +0 -0
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * Version snapshot + swap mechanics.
3
3
  *
4
- * Each successful patcher / spec-delta / structural-rerun bumps a version.
5
- * Versions live under `<runDir>/versions/v1/`, `v2/`, ..., each with their
6
- * own `artifact.json` carrying worktreePath + (optionally) deploy info.
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` atomically retargets the router: deregister current slug,
9
- * stop current container, start new container, register slug to new port.
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 successful patcher / spec-delta / structural-rerun bumps a version.
5
- * Versions live under `<runDir>/versions/v1/`, `v2/`, ..., each with their
6
- * own `artifact.json` carrying worktreePath + (optionally) deploy info.
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` atomically retargets the router: deregister current slug,
9
- * stop current container, start new container, register slug to new port.
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.mkdirSync(versionsDir, { recursive: true });
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 next;
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;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAiBlC,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAGvF,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAClF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,IAA8C;IACjG,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACzC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAC/B,IAAI,CAAC,SAAS,CACZ;QACE,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,IAAI,CAAC,SAAS,qBAAqB,EAAE,CAAC;IACrF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7D,iBAAiB;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/ultraapp/versions.ts"],"names":[],"mappings":"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"}
@@ -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 workflows.",
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": false,
60
- "description": "Enable built-in multi-model proxy"
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.14.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, install as an OpenClaw plugin, or run standalone. Persistent sessions, multi-agent council, ultraplan, ultrareview, autoloop, tool orchestration.",
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 OpenCode engines. Use when orchestrating multi-engine coding agents, starting/sending/stopping sessions, 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, 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".
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 | 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 |
47
- | `agy` | `agy -p` | Per-message spawn | Google Antigravity; plain-text, auto conversation resume |
48
- | `grok` | `grok -p` | Per-message spawn | xAI Grok Build; engine-reported cost, resumable session |
49
- | `opencode` | `opencode run` | Per-message spawn | Provider-agnostic (`provider/model`) |
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 | Description |
80
- | ---------------- | --------------------------------------------------------------------------------------------------------------- |
81
- | `engine` | `claude` (default), `codex`, `agy`, `grok`, `opencode`, `custom` |
82
- | `model` | Model name or alias (`fable`, `opus` → claude-opus-5-5, `sonnet`, `haiku`, `gpt-5.5`, `agy-pro`) |
83
- | `permissionMode` | `acceptEdits`, `auto`, `plan`, `bypassPermissions`, `manual`, `dontAsk` (`default` = legacy alias for `manual`) |
84
- | `effort` | `low`, `medium`, `high`, `xhigh`, `max`, `ultra`, `auto` (each engine clamps to its own ceiling) |
85
- | `maxBudgetUsd` | Cost limit in USD |
86
- | `allowedTools` | List of allowed tool names |
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 (up to 30 min), produces detailed implementation plan
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 are supplied only at start (or HTTP resume), never by Planner output. The Reviewer runs in a restaged sandbox and returns advance/hold/rollback verdicts; push policy and SSE keep long runs observable.
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` / `autoloop` / `ultraapp_synth` /
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 → verify → repair-until-green →
224
- review), `council`, `fanout`, and `goal` (a Codex `/goal` on one `codex-app` thread, run
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