@clawops/cli 1.7.0 → 1.7.2
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 +62 -0
- package/dist/{apply-BTZFFGAD.js → apply-PZ5IIU7Z.js} +5 -4
- package/dist/{aws-D7Y6LCGK.js → aws-L4RR2LSE.js} +1 -1
- package/dist/{azure-JQAMNVHN.js → azure-7OXQENQL.js} +1 -1
- package/dist/{bootstrap-RY4VOSDJ.js → bootstrap-HL4DNUNG.js} +13 -4
- package/dist/bootstrap.sh.tmpl +204 -0
- package/dist/chunk-2YOP6N7X.js +126 -0
- package/dist/{chunk-GJEF6UQA.js → chunk-3XK66DKK.js} +100 -16
- package/dist/{chunk-ISFHLA4G.js → chunk-5SPESD5N.js} +8 -6
- package/dist/{chunk-YTH4L2GN.js → chunk-6X45DDGH.js} +5 -4
- package/dist/{chunk-XKT42M34.js → chunk-C5X375RO.js} +14 -1
- package/dist/{chunk-LCKD7L7X.js → chunk-DQDAWNGB.js} +1 -1
- package/dist/{chunk-CG3Y7Y2R.js → chunk-FSUWPL7Q.js} +9 -9
- package/dist/{chunk-ZFNPM2WG.js → chunk-O3F7OGH7.js} +40 -3
- package/dist/{chunk-3MFZ7E74.js → chunk-P5LKWRPL.js} +3 -3
- package/dist/chunk-PVUVI35Y.js +29 -0
- package/dist/{chunk-7KLLWDBA.js → chunk-SEABO2UU.js} +7 -4
- package/dist/cli.js +122 -68
- package/dist/{context-ALSJMTHE.js → context-5LCUG2QR.js} +1 -1
- package/dist/{gcp-6FT2A45S.js → gcp-UG6AWPIZ.js} +1 -1
- package/dist/{generate-ZTD4BVVI.js → generate-NIF6IBZC.js} +4 -3
- package/dist/{harden-BDVYW567.js → harden-URPXLSVF.js} +2 -2
- package/dist/{mcp-wire-ZWIYMLEW.js → mcp-wire-SLL4TLSC.js} +1 -1
- package/dist/{package-7WOZMHSO.js → package-TZ2HYF5C.js} +3 -2
- package/dist/{pool-JZGKPP6K.js → pool-QGFQRMGU.js} +2 -2
- package/dist/{remote-config-QF5TT7GU.js → remote-config-PFB66RPY.js} +3 -1
- package/dist/{server-EXBOOIEP.js → server-WM3AY4PJ.js} +19 -18
- package/dist/{ssh-E2AMBPZY.js → ssh-CNJNLM3E.js} +1 -1
- package/dist/{validate-T5M5EHSJ.js → validate-CFQ4FH2T.js} +2 -1
- package/dist/version-guard-MZAO4KHS.js +25 -0
- package/dist/versions-OEPAS2EL.js +24 -0
- package/package.json +3 -2
- package/spec/_gen-schemas.md +136 -0
- package/spec/deploy-plan.schema.json +193 -0
- package/spec/errors.yaml +175 -0
- package/spec/integrations.yaml +97 -0
- package/spec/invariants.yaml +81 -0
- package/spec/mcp-tools.yaml +532 -0
- package/spec/models.yaml +113 -0
- package/spec/openclaw-versions.yaml +67 -0
- package/spec/providers.schema.json +120 -0
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
# MCP Tool Catalog — Single source of truth for clawops's MCP server.
|
|
2
|
+
# Generates src/mcp/tools/_generated.ts via scripts/gen-schemas.ts.
|
|
3
|
+
# Every tool MUST follow R1–R25 (see DESIGN_RULES.md).
|
|
4
|
+
#
|
|
5
|
+
# Key rules enforced in this file:
|
|
6
|
+
# R1 — clawops_ prefix, toolset assignment, ≤30 tools total
|
|
7
|
+
# R3 — descriptions include "Use when" and "Do NOT use when"
|
|
8
|
+
# R5 — stackName optional with default; no hidden state
|
|
9
|
+
# R6 — no credentials in inputs
|
|
10
|
+
# R7 — paths are absolute
|
|
11
|
+
# R8 — enums for closed sets
|
|
12
|
+
# R10 — all four annotation hints set
|
|
13
|
+
# R11 — annotations bound to safety modes (--read-only, --no-destructive)
|
|
14
|
+
|
|
15
|
+
version: 1
|
|
16
|
+
|
|
17
|
+
toolsets:
|
|
18
|
+
- id: cli
|
|
19
|
+
description: 1:1 mappings of clawops CLI commands. Default toolset.
|
|
20
|
+
- id: workflow
|
|
21
|
+
description: Composite agent workflows (R2). Encode user intent.
|
|
22
|
+
- id: read
|
|
23
|
+
description: Read-only tools, the ONLY toolset enabled in --read-only mode (R18).
|
|
24
|
+
- id: admin
|
|
25
|
+
description: Stack management and multi-stack ops. Requires admin profile.
|
|
26
|
+
|
|
27
|
+
# ────────────────────────────────────────────────────────────────────────────
|
|
28
|
+
# READ-ONLY TOOLS
|
|
29
|
+
# ────────────────────────────────────────────────────────────────────────────
|
|
30
|
+
|
|
31
|
+
tools:
|
|
32
|
+
- name: clawops_status
|
|
33
|
+
toolset: [cli, read]
|
|
34
|
+
description: |
|
|
35
|
+
Get current status of a clawops-managed stack: gateway health, OpenClaw
|
|
36
|
+
version, agent count, uptime.
|
|
37
|
+
|
|
38
|
+
Use when: the user asks about the health of a deployed instance, whether
|
|
39
|
+
the gateway is responding, or wants a quick overview.
|
|
40
|
+
|
|
41
|
+
Do NOT use when: the user asks for live logs (use clawops_logs) or wants
|
|
42
|
+
to see specific configuration values (use clawops_config_get).
|
|
43
|
+
annotations:
|
|
44
|
+
title: Get Stack Status
|
|
45
|
+
readOnlyHint: true
|
|
46
|
+
destructiveHint: false
|
|
47
|
+
idempotentHint: true
|
|
48
|
+
openWorldHint: true
|
|
49
|
+
input:
|
|
50
|
+
stackName:
|
|
51
|
+
type: string
|
|
52
|
+
optional: true
|
|
53
|
+
description: Stack name. Defaults to active stack from config.
|
|
54
|
+
output:
|
|
55
|
+
health: { type: enum, values: [healthy, degraded, down, unknown] }
|
|
56
|
+
gatewayUrl: { type: string, format: uri }
|
|
57
|
+
uptimeSec: { type: integer }
|
|
58
|
+
openclawVersion: { type: string }
|
|
59
|
+
agentCount: { type: integer }
|
|
60
|
+
provider: { type: enum, values: [aws, gcp, azure, local] }
|
|
61
|
+
region: { type: string }
|
|
62
|
+
|
|
63
|
+
- name: clawops_logs_tail
|
|
64
|
+
toolset: [cli, read]
|
|
65
|
+
description: |
|
|
66
|
+
Tail recent gateway logs from a clawops-managed instance.
|
|
67
|
+
|
|
68
|
+
Use when: the user wants to investigate recent activity or errors, or
|
|
69
|
+
asks "what's been happening" on the gateway.
|
|
70
|
+
|
|
71
|
+
Do NOT use when: the user wants real-time streaming logs (those are not
|
|
72
|
+
well-suited to tool calls; suggest the user run `clawops logs -f` directly
|
|
73
|
+
in their terminal). Do NOT use for instance-level system logs (use
|
|
74
|
+
clawops_ssh with `journalctl`).
|
|
75
|
+
annotations:
|
|
76
|
+
title: Tail Gateway Logs
|
|
77
|
+
readOnlyHint: true
|
|
78
|
+
destructiveHint: false
|
|
79
|
+
idempotentHint: true
|
|
80
|
+
openWorldHint: true
|
|
81
|
+
input:
|
|
82
|
+
stackName: { type: string, optional: true }
|
|
83
|
+
tailLines: { type: integer, optional: true, default: 100, max: 1000 }
|
|
84
|
+
sinceMin: { type: integer, optional: true, description: "Lines since N minutes ago" }
|
|
85
|
+
output:
|
|
86
|
+
lines: { type: array, items: { type: string }, description: "Trimmed log lines (R14: hard cap 8KB)" }
|
|
87
|
+
truncated: { type: boolean }
|
|
88
|
+
fullLogResource: { type: string, format: uri, description: "clawops:// URI for full log" }
|
|
89
|
+
|
|
90
|
+
- name: clawops_monitor
|
|
91
|
+
toolset: [cli, read]
|
|
92
|
+
description: |
|
|
93
|
+
Take a live snapshot of a running clawops stack: gateway health, container
|
|
94
|
+
status, resource usage (CPU, memory, disk), and recent log lines.
|
|
95
|
+
|
|
96
|
+
Use when: the user wants to know if the gateway is running, how much
|
|
97
|
+
memory or CPU it is using, what recent log activity looks like, or
|
|
98
|
+
wants a quick health overview richer than clawops_status.
|
|
99
|
+
|
|
100
|
+
Do NOT use when: the user wants real-time streaming logs (use
|
|
101
|
+
clawops_logs_tail or suggest `clawops logs -f`). Do NOT use for
|
|
102
|
+
configuration queries (use clawops_config_get).
|
|
103
|
+
annotations:
|
|
104
|
+
title: Monitor Stack Health
|
|
105
|
+
readOnlyHint: true
|
|
106
|
+
destructiveHint: false
|
|
107
|
+
idempotentHint: true
|
|
108
|
+
openWorldHint: true
|
|
109
|
+
input:
|
|
110
|
+
stackName: { type: string, optional: true, description: "Stack name. Defaults to active stack." }
|
|
111
|
+
tailLines: { type: integer, optional: true, default: 5, description: "Log lines to include in snapshot." }
|
|
112
|
+
output:
|
|
113
|
+
gateway:
|
|
114
|
+
reachable: { type: boolean }
|
|
115
|
+
version: { type: string }
|
|
116
|
+
authMode: { type: string }
|
|
117
|
+
container:
|
|
118
|
+
status: { type: string }
|
|
119
|
+
image: { type: string }
|
|
120
|
+
restartCount: { type: integer }
|
|
121
|
+
memUsage: { type: string }
|
|
122
|
+
cpuPct: { type: string }
|
|
123
|
+
uptime: { type: string }
|
|
124
|
+
disk: { type: string }
|
|
125
|
+
logLines: { type: array, items: { type: string } }
|
|
126
|
+
capturedAt: { type: string, format: date-time }
|
|
127
|
+
|
|
128
|
+
- name: clawops_stacks_list
|
|
129
|
+
toolset: [admin, read]
|
|
130
|
+
description: |
|
|
131
|
+
List all clawops-managed stacks across all configured providers.
|
|
132
|
+
|
|
133
|
+
Use when: the user wants an overview of their deployments, asks "what
|
|
134
|
+
stacks do I have", or wants to compare stacks before an operation.
|
|
135
|
+
|
|
136
|
+
Do NOT use when: the user named a specific stack — use clawops_status
|
|
137
|
+
directly with that name.
|
|
138
|
+
annotations:
|
|
139
|
+
title: List Stacks
|
|
140
|
+
readOnlyHint: true
|
|
141
|
+
destructiveHint: false
|
|
142
|
+
idempotentHint: true
|
|
143
|
+
openWorldHint: false
|
|
144
|
+
input: {}
|
|
145
|
+
output:
|
|
146
|
+
stacks:
|
|
147
|
+
type: array
|
|
148
|
+
items:
|
|
149
|
+
type: object
|
|
150
|
+
properties:
|
|
151
|
+
name: { type: string }
|
|
152
|
+
provider: { type: enum, values: [aws, gcp, azure, local] }
|
|
153
|
+
region: { type: string }
|
|
154
|
+
health: { type: enum, values: [healthy, degraded, down, unknown] }
|
|
155
|
+
|
|
156
|
+
- name: clawops_config_get
|
|
157
|
+
toolset: [cli, read]
|
|
158
|
+
description: |
|
|
159
|
+
Read a configuration value from the remote OpenClaw gateway.
|
|
160
|
+
|
|
161
|
+
Use when: the user wants to inspect current OpenClaw config (e.g., which
|
|
162
|
+
model provider is active, which channels are enabled).
|
|
163
|
+
|
|
164
|
+
Do NOT use when: the user wants to change the config — use
|
|
165
|
+
clawops_config_set instead.
|
|
166
|
+
annotations:
|
|
167
|
+
title: Get OpenClaw Config Value
|
|
168
|
+
readOnlyHint: true
|
|
169
|
+
destructiveHint: false
|
|
170
|
+
idempotentHint: true
|
|
171
|
+
openWorldHint: true
|
|
172
|
+
input:
|
|
173
|
+
stackName: { type: string, optional: true }
|
|
174
|
+
key: { type: string, optional: true, description: "Dot-path config key, e.g., gateway.auth.mode. Omit to dump the full config." }
|
|
175
|
+
output:
|
|
176
|
+
value: { type: string, description: "Stringified value; complex objects are JSON-encoded" }
|
|
177
|
+
|
|
178
|
+
- name: clawops_agents_list
|
|
179
|
+
toolset: [cli, read]
|
|
180
|
+
description: |
|
|
181
|
+
List agents currently registered on the remote OpenClaw gateway.
|
|
182
|
+
|
|
183
|
+
Use when: the user wants to see which agents are running, debug agent
|
|
184
|
+
routing, or count active workspaces.
|
|
185
|
+
|
|
186
|
+
Do NOT use when: the user wants agent logs (use clawops_agents_logs).
|
|
187
|
+
annotations:
|
|
188
|
+
title: List OpenClaw Agents
|
|
189
|
+
readOnlyHint: true
|
|
190
|
+
destructiveHint: false
|
|
191
|
+
idempotentHint: true
|
|
192
|
+
openWorldHint: true
|
|
193
|
+
input:
|
|
194
|
+
stackName: { type: string, optional: true }
|
|
195
|
+
output:
|
|
196
|
+
agents:
|
|
197
|
+
type: array
|
|
198
|
+
items:
|
|
199
|
+
type: object
|
|
200
|
+
properties:
|
|
201
|
+
id: { type: string }
|
|
202
|
+
name: { type: string }
|
|
203
|
+
status: { type: enum, values: [running, paused, errored, stopped] }
|
|
204
|
+
channels: { type: array, items: { type: string } }
|
|
205
|
+
|
|
206
|
+
# ────────────────────────────────────────────────────────────────────────────
|
|
207
|
+
# MUTATING CLI TOOLS (destructive flagged per R10/R11; elicitation per R19)
|
|
208
|
+
# ────────────────────────────────────────────────────────────────────────────
|
|
209
|
+
|
|
210
|
+
- name: clawops_up
|
|
211
|
+
toolset: [cli]
|
|
212
|
+
description: |
|
|
213
|
+
Provision and deploy a clawops stack. Idempotent — re-running with no spec
|
|
214
|
+
change produces no diff. Long-running (median 3min, p99 8min) so emits
|
|
215
|
+
progress notifications per R12.
|
|
216
|
+
|
|
217
|
+
Use when: the user explicitly asks to deploy, provision, create, or "spin
|
|
218
|
+
up" a stack. Always after the user has reviewed a plan
|
|
219
|
+
(clawops_plan first when in doubt).
|
|
220
|
+
|
|
221
|
+
Do NOT use when: the user has not yet generated a plan and is in
|
|
222
|
+
exploratory/discovery mode — use clawops_plan first. Do NOT use for an
|
|
223
|
+
existing stack you only need to update; refresh first.
|
|
224
|
+
annotations:
|
|
225
|
+
title: Provision and Deploy Stack
|
|
226
|
+
readOnlyHint: false
|
|
227
|
+
destructiveHint: true
|
|
228
|
+
idempotentHint: true
|
|
229
|
+
openWorldHint: true
|
|
230
|
+
input:
|
|
231
|
+
stackName: { type: string, optional: true }
|
|
232
|
+
provider:
|
|
233
|
+
type: enum
|
|
234
|
+
values: [aws, gcp, azure, local]
|
|
235
|
+
optional: true
|
|
236
|
+
description: Defaults to provider configured for this stack
|
|
237
|
+
region: { type: string, optional: true }
|
|
238
|
+
instanceType:
|
|
239
|
+
type: enum
|
|
240
|
+
values: [micro, small, medium, large, gpu]
|
|
241
|
+
optional: true
|
|
242
|
+
default: small
|
|
243
|
+
openclawVersion: { type: string, optional: true, description: "semver or 'stable'/'dev'" }
|
|
244
|
+
dryRun: { type: boolean, optional: true, default: false }
|
|
245
|
+
output:
|
|
246
|
+
taskId: { type: string, description: "For >60s ops; poll clawops_task_status" }
|
|
247
|
+
stackName: { type: string }
|
|
248
|
+
gatewayUrl: { type: string, format: uri }
|
|
249
|
+
resourceCount: { type: integer }
|
|
250
|
+
|
|
251
|
+
- name: clawops_destroy
|
|
252
|
+
toolset: [cli]
|
|
253
|
+
description: |
|
|
254
|
+
Destroy a clawops stack. Removes ALL provisioned resources. Triggers
|
|
255
|
+
elicitation confirmation showing the resource diff before execution
|
|
256
|
+
(R19). Cannot be undone.
|
|
257
|
+
|
|
258
|
+
Use when: the user explicitly asks to destroy, tear down, delete, or
|
|
259
|
+
remove a stack. Always confirm the stack name.
|
|
260
|
+
|
|
261
|
+
Do NOT use when: the user wants to stop the gateway temporarily — use
|
|
262
|
+
clawops_gateway_stop instead. Do NOT use when in doubt about which stack;
|
|
263
|
+
list first with clawops_stacks_list.
|
|
264
|
+
annotations:
|
|
265
|
+
title: Destroy Stack (DESTRUCTIVE)
|
|
266
|
+
readOnlyHint: false
|
|
267
|
+
destructiveHint: true
|
|
268
|
+
idempotentHint: true
|
|
269
|
+
openWorldHint: true
|
|
270
|
+
input:
|
|
271
|
+
stackName: { type: string }
|
|
272
|
+
yes: { type: boolean, optional: true, default: false, description: "Skip elicitation; CI/scripted use only" }
|
|
273
|
+
output:
|
|
274
|
+
taskId: { type: string }
|
|
275
|
+
destroyedResourceCount: { type: integer }
|
|
276
|
+
|
|
277
|
+
- name: clawops_apply
|
|
278
|
+
toolset: [cli]
|
|
279
|
+
description: |
|
|
280
|
+
Apply a previously-generated Maker plan (deploy-plan.schema.json).
|
|
281
|
+
Deterministic — the plan describes exactly what will be created.
|
|
282
|
+
|
|
283
|
+
Use when: the user has a plan file path and wants to apply it. This is
|
|
284
|
+
the agent-friendly path for any deploy/destroy operation.
|
|
285
|
+
|
|
286
|
+
Do NOT use when: there's no plan file — generate one first with
|
|
287
|
+
clawops_plan.
|
|
288
|
+
annotations:
|
|
289
|
+
title: Apply Maker Plan
|
|
290
|
+
readOnlyHint: false
|
|
291
|
+
destructiveHint: true
|
|
292
|
+
idempotentHint: false
|
|
293
|
+
openWorldHint: true
|
|
294
|
+
input:
|
|
295
|
+
planPath: { type: string, description: "Absolute path to plan JSON (R7)" }
|
|
296
|
+
yes: { type: boolean, optional: true, default: false }
|
|
297
|
+
output:
|
|
298
|
+
taskId: { type: string }
|
|
299
|
+
summary: { type: string, description: "Trimmed; full output as resource (R14)" }
|
|
300
|
+
|
|
301
|
+
- name: clawops_plan
|
|
302
|
+
toolset: [cli, read]
|
|
303
|
+
description: |
|
|
304
|
+
Generate a Maker deploy plan (does NOT apply). Plan is JSON conforming to
|
|
305
|
+
deploy-plan.schema.json — review before applying.
|
|
306
|
+
|
|
307
|
+
Use when: the user wants to see what would be created before committing,
|
|
308
|
+
or you (the agent) need a reviewable artifact for the user to approve.
|
|
309
|
+
|
|
310
|
+
Do NOT use when: the user has explicitly asked to deploy and you already
|
|
311
|
+
have their approval — go directly to clawops_up.
|
|
312
|
+
annotations:
|
|
313
|
+
title: Generate Deploy Plan
|
|
314
|
+
readOnlyHint: true
|
|
315
|
+
destructiveHint: false
|
|
316
|
+
idempotentHint: true
|
|
317
|
+
openWorldHint: true
|
|
318
|
+
input:
|
|
319
|
+
stackName: { type: string, optional: true }
|
|
320
|
+
provider: { type: enum, values: [aws, gcp, azure, local], optional: true }
|
|
321
|
+
region: { type: string, optional: true }
|
|
322
|
+
instanceType: { type: enum, values: [micro, small, medium, large, gpu], optional: true }
|
|
323
|
+
outPath: { type: string, optional: true, description: "Absolute path to write plan; if omitted, plan returned inline" }
|
|
324
|
+
output:
|
|
325
|
+
planPath: { type: string, description: "Absolute path; only set if outPath provided" }
|
|
326
|
+
summary:
|
|
327
|
+
type: object
|
|
328
|
+
description: "Trimmed; full plan available at the planPath or inline"
|
|
329
|
+
|
|
330
|
+
- name: clawops_config_set
|
|
331
|
+
toolset: [cli]
|
|
332
|
+
description: |
|
|
333
|
+
Set a configuration value on the remote OpenClaw gateway. Optionally
|
|
334
|
+
restarts the gateway after.
|
|
335
|
+
|
|
336
|
+
Use when: the user wants to change OpenClaw configuration (model
|
|
337
|
+
provider, channel auth, gateway port).
|
|
338
|
+
|
|
339
|
+
Do NOT use when: the user is reading config — use clawops_config_get.
|
|
340
|
+
Do NOT bulk-edit; one key at a time so changes are auditable (R21).
|
|
341
|
+
annotations:
|
|
342
|
+
title: Set OpenClaw Config Value
|
|
343
|
+
readOnlyHint: false
|
|
344
|
+
destructiveHint: true
|
|
345
|
+
idempotentHint: true
|
|
346
|
+
openWorldHint: true
|
|
347
|
+
input:
|
|
348
|
+
stackName: { type: string, optional: true }
|
|
349
|
+
key: { type: string }
|
|
350
|
+
value: { type: string, description: "Stringified; JSON for complex values" }
|
|
351
|
+
restart: { type: boolean, optional: true, default: false }
|
|
352
|
+
output:
|
|
353
|
+
message: { type: string, description: "Confirmation of the change applied" }
|
|
354
|
+
|
|
355
|
+
- name: clawops_config_unset
|
|
356
|
+
toolset: [cli]
|
|
357
|
+
description: |
|
|
358
|
+
Remove a configuration key from the remote OpenClaw gateway config, reverting
|
|
359
|
+
it to the OpenClaw default.
|
|
360
|
+
|
|
361
|
+
Use when: the user wants to delete a config key entirely (e.g., remove a
|
|
362
|
+
channel, clear an override).
|
|
363
|
+
|
|
364
|
+
Do NOT use when: the user wants to set the key to a new value — use
|
|
365
|
+
clawops_config_set instead.
|
|
366
|
+
annotations:
|
|
367
|
+
title: Unset OpenClaw Config Key
|
|
368
|
+
readOnlyHint: false
|
|
369
|
+
destructiveHint: true
|
|
370
|
+
idempotentHint: true
|
|
371
|
+
openWorldHint: true
|
|
372
|
+
input:
|
|
373
|
+
stackName: { type: string, optional: true }
|
|
374
|
+
key: { type: string, description: "Dot-path config key to remove" }
|
|
375
|
+
restart: { type: boolean, optional: true, default: false }
|
|
376
|
+
output:
|
|
377
|
+
message: { type: string, description: "Confirmation of the key removed" }
|
|
378
|
+
|
|
379
|
+
- name: clawops_config_validate
|
|
380
|
+
toolset: [cli, read]
|
|
381
|
+
description: |
|
|
382
|
+
Validate the remote OpenClaw gateway config against the known schema. Checks
|
|
383
|
+
for structural errors (wrong types, unknown top-level keys) that would cause
|
|
384
|
+
OpenClaw to fail on startup.
|
|
385
|
+
|
|
386
|
+
Use when: the user wants to verify config before restarting the gateway, or
|
|
387
|
+
after editing openclaw.json manually.
|
|
388
|
+
|
|
389
|
+
Do NOT use when: the user wants to change config — use clawops_config_set.
|
|
390
|
+
annotations:
|
|
391
|
+
title: Validate OpenClaw Config
|
|
392
|
+
readOnlyHint: true
|
|
393
|
+
destructiveHint: false
|
|
394
|
+
idempotentHint: true
|
|
395
|
+
openWorldHint: true
|
|
396
|
+
input:
|
|
397
|
+
stackName: { type: string, optional: true }
|
|
398
|
+
output:
|
|
399
|
+
valid: { type: boolean }
|
|
400
|
+
issues: { type: array, items: { type: string } }
|
|
401
|
+
|
|
402
|
+
- name: clawops_agents_restart
|
|
403
|
+
toolset: [cli]
|
|
404
|
+
description: |
|
|
405
|
+
Restart a specific OpenClaw agent on the remote gateway.
|
|
406
|
+
|
|
407
|
+
Use when: the user reports an agent is stuck, errored, or unresponsive;
|
|
408
|
+
or after a config change that the agent needs to pick up.
|
|
409
|
+
|
|
410
|
+
Do NOT use when: the issue is gateway-wide — use clawops_gateway_restart.
|
|
411
|
+
annotations:
|
|
412
|
+
title: Restart OpenClaw Agent
|
|
413
|
+
readOnlyHint: false
|
|
414
|
+
destructiveHint: true
|
|
415
|
+
idempotentHint: true
|
|
416
|
+
openWorldHint: true
|
|
417
|
+
input:
|
|
418
|
+
stackName: { type: string, optional: true }
|
|
419
|
+
agentId: { type: string }
|
|
420
|
+
output:
|
|
421
|
+
previousStatus: { type: string }
|
|
422
|
+
newStatus: { type: string }
|
|
423
|
+
|
|
424
|
+
- name: clawops_gateway_restart
|
|
425
|
+
toolset: [cli]
|
|
426
|
+
description: |
|
|
427
|
+
Restart the OpenClaw gateway daemon on the remote instance.
|
|
428
|
+
|
|
429
|
+
Use when: a gateway-wide config change requires reload, or the gateway is
|
|
430
|
+
reported as unresponsive.
|
|
431
|
+
|
|
432
|
+
Do NOT use when: only a specific agent is affected — use
|
|
433
|
+
clawops_agents_restart. Brief downtime (~10s).
|
|
434
|
+
annotations:
|
|
435
|
+
title: Restart Gateway Daemon
|
|
436
|
+
readOnlyHint: false
|
|
437
|
+
destructiveHint: true
|
|
438
|
+
idempotentHint: true
|
|
439
|
+
openWorldHint: true
|
|
440
|
+
input:
|
|
441
|
+
stackName: { type: string, optional: true }
|
|
442
|
+
output:
|
|
443
|
+
restartedAt: { type: string, format: date-time }
|
|
444
|
+
previousUptimeSec: { type: integer }
|
|
445
|
+
|
|
446
|
+
# ────────────────────────────────────────────────────────────────────────────
|
|
447
|
+
# COMPOSITE WORKFLOW TOOLS (R2: encode user intent, not API sequences)
|
|
448
|
+
# ────────────────────────────────────────────────────────────────────────────
|
|
449
|
+
|
|
450
|
+
- name: clawops_workflow_deploy_app
|
|
451
|
+
toolset: [workflow]
|
|
452
|
+
description: |
|
|
453
|
+
Single-tool workflow that takes a user from "I want to deploy OpenClaw
|
|
454
|
+
to <provider>" to a verified, healthy gateway. Internally: plan → user
|
|
455
|
+
confirms (elicitation) → up → wait for healthy → return URL.
|
|
456
|
+
|
|
457
|
+
Use when: the user expresses end-to-end deployment intent ("deploy to
|
|
458
|
+
AWS", "spin up an OpenClaw on GCP for me").
|
|
459
|
+
|
|
460
|
+
Do NOT use when: the user is mid-deployment and only needs one step
|
|
461
|
+
(e.g., they already have a plan; use clawops_apply). Do NOT use for
|
|
462
|
+
destroying or updating — separate workflows.
|
|
463
|
+
annotations:
|
|
464
|
+
title: Deploy OpenClaw (End-to-End Workflow)
|
|
465
|
+
readOnlyHint: false
|
|
466
|
+
destructiveHint: true
|
|
467
|
+
idempotentHint: true
|
|
468
|
+
openWorldHint: true
|
|
469
|
+
input:
|
|
470
|
+
provider: { type: enum, values: [aws, gcp, azure, local] }
|
|
471
|
+
region: { type: string, optional: true }
|
|
472
|
+
stackName: { type: string, optional: true, default: "default" }
|
|
473
|
+
instanceType: { type: enum, values: [micro, small, medium, large, gpu], optional: true, default: small }
|
|
474
|
+
output:
|
|
475
|
+
taskId: { type: string }
|
|
476
|
+
gatewayUrl: { type: string, format: uri }
|
|
477
|
+
stackName: { type: string }
|
|
478
|
+
|
|
479
|
+
- name: clawops_workflow_recover
|
|
480
|
+
toolset: [workflow, read]
|
|
481
|
+
description: |
|
|
482
|
+
Diagnostic workflow for an unhealthy stack. Internally: status check →
|
|
483
|
+
gateway logs → agent logs → systemd service status → produces a structured
|
|
484
|
+
diagnostic report with suggested remediation.
|
|
485
|
+
|
|
486
|
+
Use when: the user reports any "not working" symptom and you don't know
|
|
487
|
+
where to start. Best entry point for troubleshooting.
|
|
488
|
+
|
|
489
|
+
Do NOT use when: the user has already identified the problem and asks for
|
|
490
|
+
a specific fix.
|
|
491
|
+
annotations:
|
|
492
|
+
title: Recover/Diagnose Stack
|
|
493
|
+
readOnlyHint: true
|
|
494
|
+
destructiveHint: false
|
|
495
|
+
idempotentHint: true
|
|
496
|
+
openWorldHint: true
|
|
497
|
+
input:
|
|
498
|
+
stackName: { type: string, optional: true }
|
|
499
|
+
output:
|
|
500
|
+
report:
|
|
501
|
+
type: object
|
|
502
|
+
properties:
|
|
503
|
+
gatewayHealth: { type: string }
|
|
504
|
+
gatewayLogsExcerpt: { type: array, items: { type: string } }
|
|
505
|
+
systemdStatus: { type: string }
|
|
506
|
+
suggestedActions: { type: array, items: { type: string } }
|
|
507
|
+
|
|
508
|
+
- name: clawops_task_status
|
|
509
|
+
toolset: [cli, read]
|
|
510
|
+
description: |
|
|
511
|
+
Poll the status of a long-running clawops task (returned by clawops_up,
|
|
512
|
+
clawops_destroy, clawops_apply, etc.). Per R12 streaming model.
|
|
513
|
+
|
|
514
|
+
Use when: the user is waiting on a long-running deploy/destroy and wants
|
|
515
|
+
progress, OR you need to check whether a previously-started operation
|
|
516
|
+
finished.
|
|
517
|
+
|
|
518
|
+
Do NOT use when: there is no active taskId — start the operation first.
|
|
519
|
+
annotations:
|
|
520
|
+
title: Get Task Status
|
|
521
|
+
readOnlyHint: true
|
|
522
|
+
destructiveHint: false
|
|
523
|
+
idempotentHint: true
|
|
524
|
+
openWorldHint: false
|
|
525
|
+
input:
|
|
526
|
+
taskId: { type: string }
|
|
527
|
+
output:
|
|
528
|
+
status: { type: enum, values: [working, input_required, completed, failed, cancelled] }
|
|
529
|
+
progress: { type: number, minimum: 0, maximum: 1 }
|
|
530
|
+
message: { type: string, optional: true }
|
|
531
|
+
result: { type: object, optional: true, description: "Present when status=completed" }
|
|
532
|
+
error: { type: string, optional: true, description: "Present when status=failed" }
|
package/spec/models.yaml
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# spec/models.yaml — LLM provider catalog for the clawops setup wizard.
|
|
2
|
+
# Read at runtime by src/cli/commands/setup.ts — not compiled or code-generated.
|
|
3
|
+
#
|
|
4
|
+
# credentialSource:
|
|
5
|
+
# api-key — wizard prompts for how the key is stored (env var, file, cloud SM)
|
|
6
|
+
# aws-profile — no key; uses AWS SDK credential chain (IAM role / IMDS / profile)
|
|
7
|
+
# none — no credentials (e.g. local Ollama)
|
|
8
|
+
|
|
9
|
+
providers:
|
|
10
|
+
- id: openai
|
|
11
|
+
displayName: OpenAI
|
|
12
|
+
credentialSource: api-key
|
|
13
|
+
envDefault: OPENAI_API_KEY
|
|
14
|
+
models:
|
|
15
|
+
- { id: gpt-4o, displayName: "GPT-4o" }
|
|
16
|
+
- { id: gpt-4o-mini, displayName: "GPT-4o Mini" }
|
|
17
|
+
- { id: gpt-4-turbo, displayName: "GPT-4 Turbo" }
|
|
18
|
+
- { id: gpt-3.5-turbo, displayName: "GPT-3.5 Turbo" }
|
|
19
|
+
defaultModel: gpt-4o
|
|
20
|
+
configPath: models.providers.openai
|
|
21
|
+
|
|
22
|
+
- id: anthropic
|
|
23
|
+
displayName: Anthropic
|
|
24
|
+
credentialSource: api-key
|
|
25
|
+
envDefault: ANTHROPIC_API_KEY
|
|
26
|
+
models:
|
|
27
|
+
- { id: claude-opus-4-7, displayName: "Claude Opus 4.7" }
|
|
28
|
+
- { id: claude-sonnet-4-6, displayName: "Claude Sonnet 4.6" }
|
|
29
|
+
- { id: claude-haiku-4-5-20251001, displayName: "Claude Haiku 4.5" }
|
|
30
|
+
defaultModel: claude-sonnet-4-6
|
|
31
|
+
configPath: models.providers.anthropic
|
|
32
|
+
|
|
33
|
+
- id: deepseek
|
|
34
|
+
displayName: DeepSeek
|
|
35
|
+
credentialSource: api-key
|
|
36
|
+
envDefault: DEEPSEEK_API_KEY
|
|
37
|
+
models:
|
|
38
|
+
- { id: deepseek-chat, displayName: "DeepSeek Chat (V3)" }
|
|
39
|
+
- { id: deepseek-reasoner, displayName: "DeepSeek Reasoner (R1)" }
|
|
40
|
+
defaultModel: deepseek-chat
|
|
41
|
+
configPath: models.providers.deepseek
|
|
42
|
+
|
|
43
|
+
- id: kimi
|
|
44
|
+
displayName: Kimi (Moonshot AI)
|
|
45
|
+
credentialSource: api-key
|
|
46
|
+
envDefault: MOONSHOT_API_KEY
|
|
47
|
+
models:
|
|
48
|
+
- { id: moonshot-v1-8k, displayName: "Moonshot v1 8K" }
|
|
49
|
+
- { id: moonshot-v1-32k, displayName: "Moonshot v1 32K" }
|
|
50
|
+
- { id: moonshot-v1-128k, displayName: "Moonshot v1 128K" }
|
|
51
|
+
defaultModel: moonshot-v1-8k
|
|
52
|
+
configPath: models.providers.kimi
|
|
53
|
+
|
|
54
|
+
- id: bedrock
|
|
55
|
+
displayName: AWS Bedrock
|
|
56
|
+
credentialSource: aws-profile
|
|
57
|
+
# No API key — uses EC2 instance role (AmazonBedrockFullAccess) via IMDS.
|
|
58
|
+
# The Pulumi program attaches AmazonBedrockFullAccess to the instance profile
|
|
59
|
+
# and passes AWS_PROFILE=default into the container via --env-file.
|
|
60
|
+
iamPolicy: AmazonBedrockFullAccess
|
|
61
|
+
iamNote: >
|
|
62
|
+
Credentials are provided by the EC2 instance role. clawops attaches
|
|
63
|
+
AmazonBedrockFullAccess to the instance profile automatically when you
|
|
64
|
+
select Bedrock. No API key is needed.
|
|
65
|
+
models:
|
|
66
|
+
# Anthropic Claude (recommended for agents)
|
|
67
|
+
- { id: claude-sonnet-46, displayName: "Claude Sonnet 4.6", modelId: "anthropic.claude-sonnet-4-6", family: Anthropic, recommended: true }
|
|
68
|
+
- { id: claude-haiku-45, displayName: "Claude Haiku 4.5", modelId: "anthropic.claude-haiku-4-5-20251001-v1:0", family: Anthropic }
|
|
69
|
+
- { id: claude-opus-46, displayName: "Claude Opus 4.6", modelId: "anthropic.claude-opus-4-6-v1", family: Anthropic }
|
|
70
|
+
# Amazon Nova
|
|
71
|
+
- { id: nova-pro, displayName: "Amazon Nova Pro", modelId: "amazon.nova-pro-v1:0", family: Amazon }
|
|
72
|
+
- { id: nova-lite, displayName: "Amazon Nova Lite", modelId: "amazon.nova-lite-v1:0", family: Amazon }
|
|
73
|
+
# Meta Llama
|
|
74
|
+
- { id: llama33-70b, displayName: "Llama 3.3 70B Instruct", modelId: "meta.llama3-3-70b-instruct-v1:0", family: Meta }
|
|
75
|
+
- { id: llama31-70b, displayName: "Llama 3.1 70B Instruct", modelId: "meta.llama3-1-70b-instruct-v1:0", family: Meta }
|
|
76
|
+
# Mistral
|
|
77
|
+
- { id: mistral-large-3, displayName: "Mistral Large 3 (675B)", modelId: "mistral.mistral-large-3-675b-instruct", family: Mistral }
|
|
78
|
+
- { id: mixtral-8x7b, displayName: "Mixtral 8x7B Instruct", modelId: "mistral.mixtral-8x7b-instruct-v0:1", family: Mistral }
|
|
79
|
+
# DeepSeek
|
|
80
|
+
- { id: deepseek-r1, displayName: "DeepSeek-R1", modelId: "deepseek.r1-v1:0", family: DeepSeek }
|
|
81
|
+
defaultModel: claude-sonnet-46
|
|
82
|
+
configPath: models.providers.amazon-bedrock
|
|
83
|
+
|
|
84
|
+
- id: ollama
|
|
85
|
+
displayName: Ollama (self-hosted)
|
|
86
|
+
credentialSource: none
|
|
87
|
+
# OpenClaw runs in a container, so `localhost` is the container, not the host.
|
|
88
|
+
# Reaching a host-side Ollama needs the host.docker.internal alias, which clawops
|
|
89
|
+
# provides via --add-host=host.docker.internal:host-gateway at every run site.
|
|
90
|
+
baseUrlDefault: http://host.docker.internal:11434
|
|
91
|
+
# Model ID is the string passed to `ollama pull <id>` and used in API calls.
|
|
92
|
+
# The model must be pulled on the instance before OpenClaw starts.
|
|
93
|
+
# Wizard outputs the pull command as a post-setup step.
|
|
94
|
+
models:
|
|
95
|
+
- { id: llama3.1, displayName: "Llama 3.1 (8B/70B/405B tags)", family: Meta, recommended: true, pullSuffix: ":8b" }
|
|
96
|
+
- { id: llama3.2, displayName: "Llama 3.2 (1B/3B tags)", family: Meta, pullSuffix: ":3b" }
|
|
97
|
+
- { id: qwen3, displayName: "Qwen 3 (0.6B–235B tags)", family: Alibaba, pullSuffix: ":8b" }
|
|
98
|
+
- { id: qwen2.5, displayName: "Qwen 2.5 (0.5B–72B tags)", family: Alibaba, pullSuffix: ":7b" }
|
|
99
|
+
- { id: deepseek-r1, displayName: "DeepSeek-R1 (reasoning)", family: DeepSeek, pullSuffix: ":7b" }
|
|
100
|
+
- { id: gemma3, displayName: "Gemma 3 (1B–27B tags)", family: Google, pullSuffix: ":9b" }
|
|
101
|
+
- { id: mistral, displayName: "Mistral 7B", family: Mistral, pullSuffix: "" }
|
|
102
|
+
- { id: phi4, displayName: "Phi-4 (14B)", family: Microsoft, pullSuffix: "" }
|
|
103
|
+
- { id: codellama, displayName: "CodeLlama (7B–70B tags)", family: Meta, pullSuffix: ":7b" }
|
|
104
|
+
defaultModel: llama3.1
|
|
105
|
+
configPath: models.providers.ollama
|
|
106
|
+
postSetupNote: >
|
|
107
|
+
Ollama runs on the host; OpenClaw runs in a container and reaches it at
|
|
108
|
+
http://host.docker.internal:11434. After deployment, SSH into the host and run:
|
|
109
|
+
ollama pull <model><tag>
|
|
110
|
+
e.g. ollama pull llama3.1:8b
|
|
111
|
+
Ollama must also listen on an address the container can reach:
|
|
112
|
+
OLLAMA_HOST=0.0.0.0:11434 ollama serve
|
|
113
|
+
OpenClaw will fail to start until the model is available.
|