image-skill 0.1.7 → 0.1.9
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/CHANGELOG.md +63 -0
- package/PROVENANCE.md +78 -0
- package/README.md +48 -10
- package/bin/image-skill.mjs +543 -8
- package/cli.md +336 -44
- package/llms.txt +45 -24
- package/package.json +22 -4
- package/skill.md +224 -23
- package/skills/image-skill/SKILL.md +561 -0
- package/skills/image-skill/references/cli.md +1259 -0
- package/skills/image-skill/references/llms.txt +248 -0
|
@@ -0,0 +1,1259 @@
|
|
|
1
|
+
# Image Skill CLI Contract
|
|
2
|
+
|
|
3
|
+
Status: preview hosted-product contract.
|
|
4
|
+
|
|
5
|
+
The `image-skill` thin CLI/client gives agents a stable way to call the hosted Image Skill service, parse JSON responses, receive artifacts, and leave feedback.
|
|
6
|
+
|
|
7
|
+
Public contract URLs:
|
|
8
|
+
|
|
9
|
+
- `https://image-skill.com`
|
|
10
|
+
- `https://image-skill.com/skill.md`
|
|
11
|
+
- `https://image-skill.com/llms.txt`
|
|
12
|
+
- `https://image-skill.com/cli.md`
|
|
13
|
+
- `https://api.image-skill.com`
|
|
14
|
+
|
|
15
|
+
## Global Rules
|
|
16
|
+
|
|
17
|
+
- Every command that agents use must support `--json`.
|
|
18
|
+
- JSON output must use the standard envelope from `https://image-skill.com/llms.txt`.
|
|
19
|
+
- Commands must have deterministic exit codes.
|
|
20
|
+
- Commands must emit service telemetry unless running in a documented no-telemetry test mode.
|
|
21
|
+
- Commands must not print secrets after initial creation.
|
|
22
|
+
- File-writing commands must avoid overwriting inputs unless `--overwrite` is explicit.
|
|
23
|
+
- Expensive commands must expose quota, claim, cost, and budget guard failures clearly.
|
|
24
|
+
- Public feedback commands submit to hosted product memory by default.
|
|
25
|
+
|
|
26
|
+
## Exit Codes
|
|
27
|
+
|
|
28
|
+
| Code | Meaning |
|
|
29
|
+
| ---- | -------------------------------------- |
|
|
30
|
+
| 0 | Success |
|
|
31
|
+
| 1 | Generic failure |
|
|
32
|
+
| 2 | Invalid arguments |
|
|
33
|
+
| 3 | Auth required or invalid token |
|
|
34
|
+
| 4 | Capability denied |
|
|
35
|
+
| 5 | Quota exceeded |
|
|
36
|
+
| 6 | Content policy denied |
|
|
37
|
+
| 7 | Provider failure |
|
|
38
|
+
| 8 | Timeout |
|
|
39
|
+
| 9 | Filesystem or artifact storage failure |
|
|
40
|
+
|
|
41
|
+
## Commands
|
|
42
|
+
|
|
43
|
+
### `image-skill doctor`
|
|
44
|
+
|
|
45
|
+
Checks thin CLI/client health, hosted service reachability, auth state, local output permissions, and telemetry status.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
image-skill doctor --json
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### `image-skill signup --agent`
|
|
52
|
+
|
|
53
|
+
Bootstraps restricted agent access.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
image-skill signup --agent \
|
|
57
|
+
--agent-contact agent-ops@example.com \
|
|
58
|
+
--agent-name creative-agent \
|
|
59
|
+
--runtime codex \
|
|
60
|
+
--save \
|
|
61
|
+
--json
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`--save` stores the returned `isk_r_` token in the public CLI config with 0600
|
|
65
|
+
permissions and redacts it from stdout. Use `--show-token` only when the agent
|
|
66
|
+
runtime has a separate secret store and needs the raw token once. Do not paste
|
|
67
|
+
tokens into prompts, logs, issue text, or feedback.
|
|
68
|
+
|
|
69
|
+
In this preview contract, `--agent-contact` is the accountable contact,
|
|
70
|
+
sponsor, operator, or agent inbox for the restricted agent identity. If no
|
|
71
|
+
individual human is in the loop, use a durable operator/team/agent inbox that
|
|
72
|
+
can receive future claim, billing, or abuse notices. Do not invent a person or
|
|
73
|
+
use a throwaway inbox.
|
|
74
|
+
`example.invalid` addresses are only appropriate inside documented harness or
|
|
75
|
+
proof runs. `--human-email` remains accepted as a compatibility alias for
|
|
76
|
+
`--agent-contact`.
|
|
77
|
+
|
|
78
|
+
For shell-based agent runtimes, store the token outside prompts and then expose
|
|
79
|
+
it as:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
export IMAGE_SKILL_TOKEN="isk_r_..."
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
If the agent runtime can hand secrets to a command over stdin, avoid exporting
|
|
86
|
+
the token and use `--token-stdin` instead:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
printf '%s\n' "$IMAGE_SKILL_TOKEN" | image-skill usage quota --token-stdin --json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`--api-base-url` is an advanced preview/test override; production public agents
|
|
93
|
+
should omit it.
|
|
94
|
+
|
|
95
|
+
### Local Config And Install
|
|
96
|
+
|
|
97
|
+
Prefer package execution in fresh agent sandboxes:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npm exec --yes --package image-skill@latest -- image-skill doctor --json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Global install is optional, not the primary path. If `npm install -g image-skill`
|
|
104
|
+
or `npx image-skill@latest ...` hits prefix/cache `EACCES`, retry with writable
|
|
105
|
+
package-manager paths instead of cloning private source:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
export npm_config_cache="${npm_config_cache:-$PWD/.npm-cache}"
|
|
109
|
+
export npm_config_prefix="${npm_config_prefix:-$PWD/.npm-global}"
|
|
110
|
+
export PATH="$npm_config_prefix/bin:$PATH"
|
|
111
|
+
npm exec --yes --package image-skill@latest -- image-skill doctor --json
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Saved auth state defaults to
|
|
115
|
+
`${XDG_CONFIG_HOME:-~/.config}/image-skill/config.json`. If that location is
|
|
116
|
+
read-only, set a writable config path before `signup --save`:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
export IMAGE_SKILL_CONFIG_PATH="$PWD/.image-skill/config.json"
|
|
120
|
+
npm exec --yes --package image-skill@latest -- image-skill signup --agent \
|
|
121
|
+
--agent-contact agent-ops@example.com \
|
|
122
|
+
--agent-name creative-agent \
|
|
123
|
+
--runtime codex \
|
|
124
|
+
--save \
|
|
125
|
+
--json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Config write failures return `PUBLIC_CLI_CONFIG_WRITE_FAILED` with a structured
|
|
129
|
+
`error.recovery.suggested_command`. Agents should follow that recovery field,
|
|
130
|
+
then continue with `whoami`, `usage quota`, `models list`, and the requested
|
|
131
|
+
creative flow.
|
|
132
|
+
|
|
133
|
+
### `image-skill whoami`
|
|
134
|
+
|
|
135
|
+
Shows current actor, organization, claim state, token class, and grants.
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
image-skill whoami --json
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### `image-skill usage quota`
|
|
142
|
+
|
|
143
|
+
Canonical pre-spend check. Shows remaining credits, job limits, model limits,
|
|
144
|
+
and reset windows before create/edit.
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
image-skill usage quota --json
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`image-skill quota --json` remains a compatibility alias.
|
|
151
|
+
|
|
152
|
+
Hosted API equivalent:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
curl -sS https://api.image-skill.com/v1/quota \
|
|
156
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### `image-skill credits methods`
|
|
160
|
+
|
|
161
|
+
Machine-readable payment rail discovery. Use this before quoting or buying so
|
|
162
|
+
agents can tell which rails are available, whether live money can move, whether
|
|
163
|
+
browser/human action is required, and which command to try next.
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
image-skill credits methods --json
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Minimum success data shape:
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"contract_version": "image-skill.payment-methods.v1",
|
|
174
|
+
"credit_unit_cents": 1,
|
|
175
|
+
"currency": "USD",
|
|
176
|
+
"quote_endpoint": "/v1/credit-quotes",
|
|
177
|
+
"packs_endpoint": "/v1/credit-packs",
|
|
178
|
+
"status_endpoint": "/v1/credit-purchases/status",
|
|
179
|
+
"methods": [
|
|
180
|
+
{
|
|
181
|
+
"method_id": "fake",
|
|
182
|
+
"available": true,
|
|
183
|
+
"live_money": false,
|
|
184
|
+
"buyer_modes": ["agent_only", "hybrid", "human_only"],
|
|
185
|
+
"requires_browser": false,
|
|
186
|
+
"purchase_endpoint": "/v1/credit-purchases"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"method_id": "stripe_checkout",
|
|
190
|
+
"available": true,
|
|
191
|
+
"live_money": true,
|
|
192
|
+
"buyer_modes": ["hybrid", "human_only"],
|
|
193
|
+
"requires_browser": true,
|
|
194
|
+
"default_pack_id": "starter-500",
|
|
195
|
+
"purchase_endpoint": "/v1/credit-purchases/stripe-checkout-sessions"
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
`available` is environment-dependent. `available:false` means the rail is known
|
|
202
|
+
but not currently usable in the queried environment; read `unavailable_reason`
|
|
203
|
+
and `recovery`.
|
|
204
|
+
|
|
205
|
+
Hosted API equivalent:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
curl -sS https://api.image-skill.com/v1/payment-methods
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### `image-skill credits packs list`
|
|
212
|
+
|
|
213
|
+
Lists the recommended Image Skill credit packs for Stripe Checkout. Packs are
|
|
214
|
+
the default live-money buying UX because agents get obvious starter choices and
|
|
215
|
+
Stripe Checkout avoids tiny card-fee traps. Exact custom quotes are still
|
|
216
|
+
supported when an agent already knows the required credit budget.
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
image-skill credits packs list --json
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Minimum success data:
|
|
223
|
+
|
|
224
|
+
```json
|
|
225
|
+
{
|
|
226
|
+
"credit_unit_cents": 1,
|
|
227
|
+
"credit_unit_usd": 0.01,
|
|
228
|
+
"currency": "USD",
|
|
229
|
+
"default_pack_id": "starter-500",
|
|
230
|
+
"packs": [
|
|
231
|
+
{
|
|
232
|
+
"pack_id": "starter-500",
|
|
233
|
+
"name": "Starter",
|
|
234
|
+
"credits": 500,
|
|
235
|
+
"amount_cents": 500,
|
|
236
|
+
"currency": "USD"
|
|
237
|
+
}
|
|
238
|
+
],
|
|
239
|
+
"custom_quotes": {
|
|
240
|
+
"supported": true,
|
|
241
|
+
"min_credits": 1,
|
|
242
|
+
"max_credits": 5000
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Hosted API equivalent:
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
curl -sS https://api.image-skill.com/v1/credit-packs
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### `image-skill credits quote`
|
|
254
|
+
|
|
255
|
+
Requests a bounded credit quote from the hosted service. By default this uses
|
|
256
|
+
the harness-safe fake/test settlement rail; agents can request Stripe Checkout
|
|
257
|
+
terms with `--payment-method stripe_checkout`. A quote never grants credits.
|
|
258
|
+
One Image Skill credit is a stable user-facing value unit worth `$0.01`.
|
|
259
|
+
Creative operations can consume more than one credit based on the selected
|
|
260
|
+
model's provider cost and Image Skill's margin policy; inspect
|
|
261
|
+
`models show MODEL_ID --json` and operation `cost.credit_pricing` for the exact
|
|
262
|
+
debit before spending.
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
image-skill credits quote --credits 10 --json
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
For retry-stable automation, provide an explicit non-secret idempotency key:
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
image-skill credits quote \
|
|
272
|
+
--credits 10 \
|
|
273
|
+
--idempotency-key quote-run-001 \
|
|
274
|
+
--json
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Idempotency keys are scoped to the current hosted agent identity and exact
|
|
278
|
+
quote request. Reusing a key with different credits, pack, or payment method
|
|
279
|
+
returns a structured `error.recovery.suggested_command` with a fresh
|
|
280
|
+
idempotency key for the attempted quote terms.
|
|
281
|
+
|
|
282
|
+
For Stripe Checkout terms, prefer a named pack:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
image-skill credits quote \
|
|
286
|
+
--pack starter-500 \
|
|
287
|
+
--payment-method stripe_checkout \
|
|
288
|
+
--idempotency-key stripe-pack-quote-run-001 \
|
|
289
|
+
--json
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
For exact custom Stripe Checkout terms, request the provider and bounded credit
|
|
293
|
+
amount explicitly:
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
image-skill credits quote \
|
|
297
|
+
--credits 137 \
|
|
298
|
+
--payment-method stripe_checkout \
|
|
299
|
+
--idempotency-key exact-quote-run-001 \
|
|
300
|
+
--json
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Minimum success data:
|
|
304
|
+
|
|
305
|
+
```json
|
|
306
|
+
{
|
|
307
|
+
"quote_id": "quote_...",
|
|
308
|
+
"state": "created",
|
|
309
|
+
"credits": 10,
|
|
310
|
+
"price_amount_cents": 10,
|
|
311
|
+
"currency": "USD",
|
|
312
|
+
"expires_at": "2026-05-08T20:00:00.000Z",
|
|
313
|
+
"accepted_payment_method": "fake",
|
|
314
|
+
"idempotency_key": "quote-run-001",
|
|
315
|
+
"pack_id": null,
|
|
316
|
+
"pack": null,
|
|
317
|
+
"live_money": false
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Hosted API equivalent:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
curl -sS https://api.image-skill.com/v1/credit-quotes \
|
|
325
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN" \
|
|
326
|
+
-H "content-type: application/json" \
|
|
327
|
+
-d '{"pack_id":"starter-500","payment_method":"stripe_checkout","idempotency_key":"stripe-pack-quote-run-001"}'
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### `image-skill credits buy`
|
|
331
|
+
|
|
332
|
+
Creates a live-provider payment action for a previously returned quote. Stripe
|
|
333
|
+
Checkout is the first supported provider. This creates a hosted Stripe Checkout
|
|
334
|
+
Session and returns an `action_required` response with
|
|
335
|
+
`checkout_handoff_url`; credits are granted only after verified Stripe webhook
|
|
336
|
+
fulfillment succeeds. Session creation itself must not mutate credit balances.
|
|
337
|
+
|
|
338
|
+
Agents should present or open `checkout_handoff_url` for humans. It is a short
|
|
339
|
+
Image Skill URL that redirects to Stripe Checkout and is safe to copy from
|
|
340
|
+
mobile terminals, SSH clients, and wrapped chat output. `checkout_url` remains
|
|
341
|
+
the Stripe compatibility fallback when `checkout_handoff_url` is absent. Do not
|
|
342
|
+
trim Stripe Checkout URLs: the long `#...` fragment is required by Stripe
|
|
343
|
+
Checkout in the browser. Present any fallback Stripe URL in a fenced code block
|
|
344
|
+
so terminal wrapping does not corrupt it.
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
image-skill credits buy \
|
|
348
|
+
--provider stripe \
|
|
349
|
+
--quote-id quote_... \
|
|
350
|
+
--idempotency-key stripe-buy-run-001 \
|
|
351
|
+
--json
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
Minimum success data:
|
|
355
|
+
|
|
356
|
+
```json
|
|
357
|
+
{
|
|
358
|
+
"state": "action_required",
|
|
359
|
+
"quote_id": "quote_...",
|
|
360
|
+
"payment_attempt_id": "payatt_...",
|
|
361
|
+
"provider": "stripe",
|
|
362
|
+
"accepted_payment_method": "stripe_checkout",
|
|
363
|
+
"checkout_session_id": "cs_...",
|
|
364
|
+
"checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
|
|
365
|
+
"checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
|
|
366
|
+
"checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
|
|
367
|
+
"credits": 500,
|
|
368
|
+
"amount_cents": 500,
|
|
369
|
+
"currency": "USD",
|
|
370
|
+
"live_money": true,
|
|
371
|
+
"next": {
|
|
372
|
+
"human_action": "open_checkout_url",
|
|
373
|
+
"checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
|
|
374
|
+
"checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
|
|
375
|
+
"fallback_checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
|
|
376
|
+
"after_payment": "open checkout_handoff_url, or the full checkout_url if only a Stripe URL is available, then poll image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json or image-skill usage quota --json; credits are granted only after verified webhook fulfillment"
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
Hosted API equivalent:
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
curl -sS https://api.image-skill.com/v1/credit-purchases/stripe-checkout-sessions \
|
|
385
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN" \
|
|
386
|
+
-H "content-type: application/json" \
|
|
387
|
+
-d '{"quote_id":"quote_...","idempotency_key":"stripe-buy-run-001"}'
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### `image-skill credits status`
|
|
391
|
+
|
|
392
|
+
Shows the durable state of a quote, Stripe Checkout attempt, Checkout Session,
|
|
393
|
+
or receipt. Use this after `credits buy` so agents do not have to infer payment
|
|
394
|
+
state from quota deltas or activity text.
|
|
395
|
+
|
|
396
|
+
```bash
|
|
397
|
+
image-skill credits status \
|
|
398
|
+
--payment-attempt-id payatt_... \
|
|
399
|
+
--json
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
Exactly one reference flag is required: `--quote-id`,
|
|
403
|
+
`--payment-attempt-id`, `--checkout-session-id`, or `--receipt-id`.
|
|
404
|
+
|
|
405
|
+
Minimum action-required data:
|
|
406
|
+
|
|
407
|
+
```json
|
|
408
|
+
{
|
|
409
|
+
"state": "action_required",
|
|
410
|
+
"quote": {
|
|
411
|
+
"quote_id": "quote_...",
|
|
412
|
+
"credits": 500,
|
|
413
|
+
"price_amount_cents": 500,
|
|
414
|
+
"accepted_payment_method": "stripe_checkout",
|
|
415
|
+
"pack_id": "starter-500"
|
|
416
|
+
},
|
|
417
|
+
"payment_attempt": {
|
|
418
|
+
"payment_attempt_id": "payatt_...",
|
|
419
|
+
"checkout_session_id": "cs_...",
|
|
420
|
+
"checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
|
|
421
|
+
"checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
|
|
422
|
+
"checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
|
|
423
|
+
"attempt_status": "requires_action"
|
|
424
|
+
},
|
|
425
|
+
"receipt": null,
|
|
426
|
+
"credit_event": null,
|
|
427
|
+
"next": {
|
|
428
|
+
"retry_after_seconds": 10,
|
|
429
|
+
"human_action": "open_checkout_url",
|
|
430
|
+
"checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
|
|
431
|
+
"checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...#fid..."
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
Minimum success data includes `state: "succeeded"`, `receipt`,
|
|
437
|
+
`credit_event`, and the updated hosted `limits`.
|
|
438
|
+
|
|
439
|
+
Hosted API equivalent:
|
|
440
|
+
|
|
441
|
+
```bash
|
|
442
|
+
curl -sS "https://api.image-skill.com/v1/credit-purchases/status?payment_attempt_id=payatt_..." \
|
|
443
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN"
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### `image-skill credits fake-purchase`
|
|
447
|
+
|
|
448
|
+
Confirms a previously returned fake/test quote and grants bounded
|
|
449
|
+
payment-backed credits in the hosted credit ledger. This command is deliberately
|
|
450
|
+
named `fake-purchase` because it is a harness-safe settlement precursor:
|
|
451
|
+
`live_money:false`, no live money moved, and no payment credential is accepted.
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
image-skill credits fake-purchase \
|
|
455
|
+
--quote-id quote_... \
|
|
456
|
+
--idempotency-key purchase-run-001 \
|
|
457
|
+
--json
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
`--idempotency-key` is required because the command mutates credit state even
|
|
461
|
+
though the settlement rail is fake/test-only.
|
|
462
|
+
|
|
463
|
+
Minimum success data:
|
|
464
|
+
|
|
465
|
+
```json
|
|
466
|
+
{
|
|
467
|
+
"state": "succeeded",
|
|
468
|
+
"quote_id": "quote_...",
|
|
469
|
+
"receipt_id": "receipt_...",
|
|
470
|
+
"credit_event_id": "credit_event_...",
|
|
471
|
+
"credits_granted": 10,
|
|
472
|
+
"amount_cents": 10,
|
|
473
|
+
"currency": "USD",
|
|
474
|
+
"accepted_payment_method": "fake",
|
|
475
|
+
"idempotency_key": "purchase-run-001",
|
|
476
|
+
"balance_after": 10,
|
|
477
|
+
"live_money": false
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
Hosted API equivalent:
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
curl -sS https://api.image-skill.com/v1/credit-purchases \
|
|
485
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN" \
|
|
486
|
+
-H "content-type: application/json" \
|
|
487
|
+
-d '{"quote_id":"quote_...","idempotency_key":"purchase-run-001"}'
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
Do not pass card data, wallet secrets, provider receipts, Stripe secrets, MPP
|
|
491
|
+
tokens, SPTs, or any payment credential to credits commands. Stripe Checkout
|
|
492
|
+
collects payment details only on Stripe-hosted pages. The public request fields
|
|
493
|
+
are `credits`, `pack_id`, `payment_method`, `quote_id`, status reference IDs,
|
|
494
|
+
and `idempotency_key`.
|
|
495
|
+
|
|
496
|
+
### `image-skill models`
|
|
497
|
+
|
|
498
|
+
First-run creative discovery. Lists public models and shows the full
|
|
499
|
+
capability-preserving schema for one model.
|
|
500
|
+
|
|
501
|
+
```bash
|
|
502
|
+
image-skill models --json
|
|
503
|
+
image-skill models list --json
|
|
504
|
+
image-skill models show MODEL_ID --json
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
Hosted API equivalents:
|
|
508
|
+
|
|
509
|
+
```bash
|
|
510
|
+
curl -sS https://api.image-skill.com/v1/models
|
|
511
|
+
curl -sS https://api.image-skill.com/v1/models/xai.grok-imagine-image
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
`models show` exposes operation support, media input/output types, parameter
|
|
515
|
+
schemas, defaults and fixed controls, cost and latency class, safety behavior,
|
|
516
|
+
and migration hints. Agents should inspect it before assuming a model supports
|
|
517
|
+
seeds, masks, reference images, transparent backgrounds, arbitrary aspect
|
|
518
|
+
ratios, image-size presets, output counts, resolution controls, safety
|
|
519
|
+
controls, or provider-native options.
|
|
520
|
+
|
|
521
|
+
Image Skill standardizes common controls so agents can work quickly, but it
|
|
522
|
+
must not flatten rich model capabilities into coarse universal categories.
|
|
523
|
+
Use `model_parameters` for rare or model-specific parameters advertised by the
|
|
524
|
+
capability schema.
|
|
525
|
+
|
|
526
|
+
Current executable provider-native controls include:
|
|
527
|
+
|
|
528
|
+
- Fal FLUX.1 dev: `model_parameters.image_size` for presets such as
|
|
529
|
+
`square_hd`, plus `seed`.
|
|
530
|
+
- Fal FLUX Pro 1.1 Ultra Create: `model_parameters.seed` and
|
|
531
|
+
`model_parameters.raw`; optional reference-image controls remain cataloged
|
|
532
|
+
for inspection but are not executable on the create-only path.
|
|
533
|
+
- Fal Z-Image Turbo Create/Edit: `model_parameters.image_size` for
|
|
534
|
+
`square_hd`, `square`, portrait/landscape presets, and `auto` on edit; costs
|
|
535
|
+
are quoted from requested megapixels when the output size is explicit.
|
|
536
|
+
- Fal Nano Banana 2 Edit: `model_parameters.resolution` for `0.5K`, `1K`,
|
|
537
|
+
`2K`, and `4K`, plus `seed`.
|
|
538
|
+
- Fal Ideogram V2 Edit: `model_parameters.expand_prompt`, `seed`, and
|
|
539
|
+
`style`; pass masks as top-level `--mask` / `mask_asset_id`, not as
|
|
540
|
+
provider `mask_url`.
|
|
541
|
+
- Fal Gemini 3 Pro Image Preview Create/Edit:
|
|
542
|
+
`model_parameters.resolution` for `1K`, `2K`, and `4K`, plus `seed`; 4K is
|
|
543
|
+
quoted as the higher-priced provider tier.
|
|
544
|
+
- Fal Nano Banana Pro Create/Edit: `model_parameters.resolution` for `1K`,
|
|
545
|
+
`2K`, and `4K`, plus `seed`; 4K is quoted as the higher-priced provider tier.
|
|
546
|
+
- Fal FLUX Pro Kontext Pro/Max Edit: `model_parameters.seed`; guidance scale
|
|
547
|
+
and aspect-ratio controls remain cataloged for inspection but are not
|
|
548
|
+
executable until their UX and receipt behavior are represented.
|
|
549
|
+
- Fal Bytedance Seedream 4.5 Create/Edit: `model_parameters.image_size` for
|
|
550
|
+
`square_hd`, `square`, portrait/landscape presets, `auto_2K`, and
|
|
551
|
+
`auto_4K`, plus `seed`; multi-output and multi-reference controls remain
|
|
552
|
+
cataloged but fixed for hosted accounting.
|
|
553
|
+
- Fal Bytedance Seedream 5.0 Lite Create/Edit:
|
|
554
|
+
`model_parameters.image_size` for `square_hd`, `square`, portrait/landscape
|
|
555
|
+
presets, `auto_2K`, and `auto_3K`; multi-output and multi-reference controls
|
|
556
|
+
remain cataloged but fixed for hosted accounting.
|
|
557
|
+
- xAI Grok Imagine Image Quality: `model_parameters.resolution` for `1k` and
|
|
558
|
+
`2k`; 2k is priced from the higher provider tier. Create supports top-level
|
|
559
|
+
`--output-count` up to the model's advertised `max_outputs_per_request`,
|
|
560
|
+
currently mapped to xAI's documented `n` batch parameter.
|
|
561
|
+
- GPT Image 1.5 create/edit: documented fixed sizes `1024x1024`,
|
|
562
|
+
`1024x1536`, and `1536x1024`, output format, compression, transparent or
|
|
563
|
+
opaque background, moderation, and the upstream provider-native quality
|
|
564
|
+
parameter. GPT Image 1.5 create quotes output-token estimates when quality
|
|
565
|
+
and concrete size are known; GPT Image 1.5 create supports top-level
|
|
566
|
+
`--output-count` up to the model's advertised `max_outputs_per_request`,
|
|
567
|
+
currently mapped to OpenAI's `n` parameter. GPT Image 1.5 edit accepts
|
|
568
|
+
low/high `input_fidelity` and remains preflight unknown-cost until usage is
|
|
569
|
+
returned.
|
|
570
|
+
- GPT Image 2 create/edit: size, output format, compression, background,
|
|
571
|
+
moderation, and the upstream provider-native quality parameter. GPT Image 2
|
|
572
|
+
create quotes request-aware output-token estimates when quality and concrete
|
|
573
|
+
size are known; GPT Image 2 create supports top-level `--output-count` up to
|
|
574
|
+
the model's advertised `max_outputs_per_request`, currently mapped to
|
|
575
|
+
OpenAI's `n` parameter. GPT Image 2 edit remains preflight unknown-cost, then
|
|
576
|
+
records usage-priced provider cost when OpenAI returns token usage.
|
|
577
|
+
|
|
578
|
+
Inspect each model before use; provider-native controls are available only
|
|
579
|
+
through validated `model_parameters`.
|
|
580
|
+
|
|
581
|
+
### `image-skill capabilities`
|
|
582
|
+
|
|
583
|
+
Schema-language view over the same capability catalog. Use this when you need
|
|
584
|
+
the capability abstraction directly rather than starting from a model.
|
|
585
|
+
|
|
586
|
+
```bash
|
|
587
|
+
image-skill capabilities --json
|
|
588
|
+
image-skill capabilities list --json
|
|
589
|
+
image-skill capabilities show CAPABILITY_ID --json
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
### `image-skill create`
|
|
593
|
+
|
|
594
|
+
Creates an image or plans a zero-cost dry run.
|
|
595
|
+
|
|
596
|
+
```bash
|
|
597
|
+
image-skill create \
|
|
598
|
+
--prompt "A compact field camera on a stainless workbench" \
|
|
599
|
+
--intent explore \
|
|
600
|
+
--aspect-ratio 1:1 \
|
|
601
|
+
--max-estimated-usd-per-image 0.05 \
|
|
602
|
+
--json
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
Hosted defaults are quality-first. If an agent does not choose a model, Image
|
|
606
|
+
Skill selects the strongest available create capability for the requested
|
|
607
|
+
intent and budget, then records the decision in `request.selection`. Explicit
|
|
608
|
+
`--provider`, `--model`, namespaced model ids, and validated
|
|
609
|
+
`model_parameters` always take precedence. For final/product/hero-style
|
|
610
|
+
intents, Image Skill may default an eligible quality-capability request to a
|
|
611
|
+
higher output tier only when `--max-estimated-usd-per-image` is high enough for
|
|
612
|
+
that tier; otherwise it stays on a lower-cost quality tier or chooses a cheaper
|
|
613
|
+
capability within the budget and tells agents what happened in the selection
|
|
614
|
+
receipt.
|
|
615
|
+
|
|
616
|
+
Preview-compatible richer shape:
|
|
617
|
+
|
|
618
|
+
```bash
|
|
619
|
+
image-skill create \
|
|
620
|
+
--prompt "Campaign-ready product image of a compact field camera" \
|
|
621
|
+
--intent finalize \
|
|
622
|
+
--model MODEL_ID \
|
|
623
|
+
--aspect-ratio 1:1 \
|
|
624
|
+
--output-count 2 \
|
|
625
|
+
--max-estimated-usd-per-image 0.07 \
|
|
626
|
+
--model-parameters-json '{"seed":1234}' \
|
|
627
|
+
--json
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
Use `--output-count N` only when `models show MODEL_ID --json` advertises
|
|
631
|
+
`media.output.max_outputs_per_request` greater than `1`. `--output-count` is a
|
|
632
|
+
top-level Image Skill create control; do not pass provider-native `n` through
|
|
633
|
+
`model_parameters` unless the selected model schema explicitly advertises that
|
|
634
|
+
field. Credit pricing and `cost.credit_pricing.credits_required` are total
|
|
635
|
+
operation debits across all requested outputs. `--max-estimated-usd-per-image`
|
|
636
|
+
and raw API `max_estimated_usd_per_image` remain per-image budget guards.
|
|
637
|
+
|
|
638
|
+
For create models with wired reference support, pass owned reference assets
|
|
639
|
+
with the model's advertised reference role. Kling element routes use
|
|
640
|
+
`--element-frontal IMAGE[@ELEMENT_INDEX]` and
|
|
641
|
+
`--element-reference IMAGE[@ELEMENT_INDEX[:REFERENCE_INDEX]]`; flat
|
|
642
|
+
reference-image routes use `--reference-image IMAGE[@INDEX]`; Fal DreamO also
|
|
643
|
+
accepts `:TASK` where `TASK` is `ip`, `id`, or `style`. The public CLI uploads
|
|
644
|
+
local paths and external URLs first, then
|
|
645
|
+
sends top-level `references[]` entries with Image Skill `asset_id` values to
|
|
646
|
+
`/v1/create`. Do not pass provider-native `elements`, `frontal_image_url`,
|
|
647
|
+
`reference_image_urls`, `first_image_url`, `second_image_url`, `images`, or
|
|
648
|
+
`*_reference_task` through `model_parameters`; provider-private URLs are
|
|
649
|
+
resolved server-side after ownership and media-policy validation.
|
|
650
|
+
|
|
651
|
+
```bash
|
|
652
|
+
image-skill create \
|
|
653
|
+
--model fal.kling-image-o3-text-to-image \
|
|
654
|
+
--prompt "Place the same character in a clean studio campaign" \
|
|
655
|
+
--element-frontal ./character-front.png@0 \
|
|
656
|
+
--element-reference ./character-side.webp@0:0 \
|
|
657
|
+
--output-count 2 \
|
|
658
|
+
--max-estimated-usd-per-image 0.06 \
|
|
659
|
+
--json
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
```bash
|
|
663
|
+
image-skill create \
|
|
664
|
+
--model fal.dreamo \
|
|
665
|
+
--prompt "Studio portrait preserving identity with a bolder editorial style" \
|
|
666
|
+
--reference-image ./identity.png@0:id \
|
|
667
|
+
--reference-image ./style.webp@1:style \
|
|
668
|
+
--model-parameters-json '{"image_size":{"width":1280,"height":720}}' \
|
|
669
|
+
--max-estimated-usd-per-image 0.06 \
|
|
670
|
+
--json
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
High-resolution examples:
|
|
674
|
+
|
|
675
|
+
```bash
|
|
676
|
+
image-skill create \
|
|
677
|
+
--prompt "Campaign-ready product image of a compact field camera" \
|
|
678
|
+
--intent final \
|
|
679
|
+
--max-estimated-usd-per-image 0.07 \
|
|
680
|
+
--json
|
|
681
|
+
|
|
682
|
+
image-skill create \
|
|
683
|
+
--prompt "Campaign-ready product image of a compact field camera" \
|
|
684
|
+
--model fal.gemini-3-pro-image-preview \
|
|
685
|
+
--model-parameters-json '{"resolution":"4K"}' \
|
|
686
|
+
--max-estimated-usd-per-image 0.30 \
|
|
687
|
+
--json
|
|
688
|
+
|
|
689
|
+
image-skill create \
|
|
690
|
+
--prompt "Campaign-ready product image of a compact field camera" \
|
|
691
|
+
--model xai.grok-imagine-image-quality \
|
|
692
|
+
--model-parameters-json '{"resolution":"2k"}' \
|
|
693
|
+
--max-estimated-usd-per-image 0.07 \
|
|
694
|
+
--json
|
|
695
|
+
|
|
696
|
+
image-skill edit \
|
|
697
|
+
--input-asset-id image_... \
|
|
698
|
+
--prompt "preserve the subject and make this campaign-ready" \
|
|
699
|
+
--model fal.nano-banana-2-edit \
|
|
700
|
+
--model-parameters-json '{"resolution":"4K"}' \
|
|
701
|
+
--accept-unknown-cost \
|
|
702
|
+
--json
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
`model_parameters` must be validated against the selected model/capability
|
|
706
|
+
schema before any provider call or paid reservation. Unknown fields fail closed
|
|
707
|
+
unless the capability explicitly allows additional properties. This is how
|
|
708
|
+
Image Skill preserves rare model controls without turning every
|
|
709
|
+
provider-specific parameter into a top-level flag.
|
|
710
|
+
In the current preview, Fal create/edit, xAI quality generation, and OpenAI GPT
|
|
711
|
+
Image 2 expose the executable provider-native controls listed in the selected
|
|
712
|
+
model schema. GPT Image 2 create has request-aware output-token credit quotes
|
|
713
|
+
for concrete quality/size requests; GPT Image 2 edit still requires
|
|
714
|
+
unknown-cost acceptance before execution, but records usage-priced provider cost
|
|
715
|
+
after execution when OpenAI returns token usage. Provider-native controls remain
|
|
716
|
+
visible for planning and fail closed until their capability schema marks them
|
|
717
|
+
executable. Hosted
|
|
718
|
+
`create --dry-run` validates `model_parameters` against the selected model,
|
|
719
|
+
returns accepted keys/provenance and request-aware credit pricing for planning,
|
|
720
|
+
and never executes provider controls or consumes credits.
|
|
721
|
+
For dry-run responses, `cost.credit_pricing.credits_required` is the planned
|
|
722
|
+
live execution debit for the selected model. The actual debit for the dry run is
|
|
723
|
+
`quota.consumed_credits: 0`.
|
|
724
|
+
|
|
725
|
+
Minimum success data:
|
|
726
|
+
|
|
727
|
+
```json
|
|
728
|
+
{
|
|
729
|
+
"job_id": "job_...",
|
|
730
|
+
"capability": {
|
|
731
|
+
"id": "is.image.generate.preview.v1"
|
|
732
|
+
},
|
|
733
|
+
"assets": [
|
|
734
|
+
{
|
|
735
|
+
"asset_id": "image_...",
|
|
736
|
+
"path": "https://media.image-skill.com/a/image_abc123.png",
|
|
737
|
+
"mime_type": "image/png",
|
|
738
|
+
"url": "https://media.image-skill.com/a/image_abc123.png",
|
|
739
|
+
"content_length": 333444,
|
|
740
|
+
"width": 1024,
|
|
741
|
+
"height": 1024
|
|
742
|
+
}
|
|
743
|
+
],
|
|
744
|
+
"cost": {
|
|
745
|
+
"estimated_usd": 0.05,
|
|
746
|
+
"credit_pricing": {
|
|
747
|
+
"credit_unit_usd": 0.01,
|
|
748
|
+
"credits_required": 9,
|
|
749
|
+
"estimated_provider_cost_usd": 0.05,
|
|
750
|
+
"estimated_revenue_usd": 0.09,
|
|
751
|
+
"pricing_confidence": "known"
|
|
752
|
+
}
|
|
753
|
+
},
|
|
754
|
+
"request": {
|
|
755
|
+
"output_count": 1,
|
|
756
|
+
"selection": {
|
|
757
|
+
"policy": "hosted_default_create_v1",
|
|
758
|
+
"reason": "hosted default selected the strongest currently available quality-first create model",
|
|
759
|
+
"intent": "explore",
|
|
760
|
+
"capability": {
|
|
761
|
+
"id": "is.image.generate.xai-grok-imagine-image-quality.v1"
|
|
762
|
+
},
|
|
763
|
+
"model_parameters": {
|
|
764
|
+
"keys": ["resolution"],
|
|
765
|
+
"defaults_applied": ["resolution=1k"],
|
|
766
|
+
"source": "default_policy"
|
|
767
|
+
},
|
|
768
|
+
"output": {
|
|
769
|
+
"resolution_class": "1k",
|
|
770
|
+
"expected_width": null,
|
|
771
|
+
"expected_height": null,
|
|
772
|
+
"expected_min_short_edge": 1024
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
},
|
|
776
|
+
"safety": {
|
|
777
|
+
"status": "allowed"
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
When hosted artifact storage is configured, `url` is an Image Skill-owned URL.
|
|
783
|
+
Agents should prefer `assets[].url` over provider-origin URLs and should not
|
|
784
|
+
need provider account access to fetch outputs.
|
|
785
|
+
|
|
786
|
+
Hosted create does not accept `--output-dir`. A future download/fetch command
|
|
787
|
+
may add CLI-side local file convenience while preserving hosted artifact URLs as
|
|
788
|
+
the source of truth.
|
|
789
|
+
|
|
790
|
+
If provider generation succeeds but artifact storage fails, the command returns
|
|
791
|
+
`ARTIFACT_STORAGE_WRITE_FAILED` with exit `9` and `retryable: false`. Agents
|
|
792
|
+
should not retry the whole create blindly, because that may duplicate paid
|
|
793
|
+
provider spend.
|
|
794
|
+
|
|
795
|
+
Hosted free-preview API equivalent:
|
|
796
|
+
|
|
797
|
+
```bash
|
|
798
|
+
curl -sS https://api.image-skill.com/v1/create \
|
|
799
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN" \
|
|
800
|
+
-H "content-type: application/json" \
|
|
801
|
+
-d '{
|
|
802
|
+
"prompt": "A compact field camera on a stainless workbench",
|
|
803
|
+
"intent": "explore",
|
|
804
|
+
"aspect_ratio": "1:1",
|
|
805
|
+
"output_count": 1,
|
|
806
|
+
"max_estimated_usd_per_image": 0.05,
|
|
807
|
+
"model_parameters": {
|
|
808
|
+
"seed": 1234
|
|
809
|
+
}
|
|
810
|
+
}'
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
Hosted free-preview create currently requires owned artifact storage and returns
|
|
814
|
+
one `assets[]` entry per output with `assets[].url` under
|
|
815
|
+
`https://media.image-skill.com/...` on success.
|
|
816
|
+
|
|
817
|
+
### `image-skill upload`
|
|
818
|
+
|
|
819
|
+
Normalizes a local image path or remote image URL into an Image Skill-owned
|
|
820
|
+
input asset for later edit workflows.
|
|
821
|
+
|
|
822
|
+
```bash
|
|
823
|
+
image-skill upload ./source.png --json
|
|
824
|
+
image-skill upload https://example.com/source.png --json
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
The CLI reads local files and remote URLs client-side, then sends image bytes to
|
|
828
|
+
`POST /v1/upload`. The hosted API does not fetch arbitrary remote URLs in this
|
|
829
|
+
preview. This keeps server-side URL fetching out of the public upload path.
|
|
830
|
+
|
|
831
|
+
Minimum success data:
|
|
832
|
+
|
|
833
|
+
```json
|
|
834
|
+
{
|
|
835
|
+
"request": {
|
|
836
|
+
"source_kind": "local_path",
|
|
837
|
+
"filename": "source.png",
|
|
838
|
+
"remote_origin": null
|
|
839
|
+
},
|
|
840
|
+
"asset": {
|
|
841
|
+
"asset_id": "image_...",
|
|
842
|
+
"job_id": "job_...",
|
|
843
|
+
"kind": "uploaded",
|
|
844
|
+
"url": "https://media.image-skill.com/a/image_abc123.png",
|
|
845
|
+
"mime_type": "image/png",
|
|
846
|
+
"content_length": 12345
|
|
847
|
+
},
|
|
848
|
+
"upload": {
|
|
849
|
+
"bytes": 12345,
|
|
850
|
+
"mime_type": "image/png",
|
|
851
|
+
"sha256": "...",
|
|
852
|
+
"policy": {
|
|
853
|
+
"status": "allowed"
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
Supported preview MIME types are `image/png`, `image/jpeg`, `image/webp`,
|
|
860
|
+
`image/gif`, and `image/avif`. Unsupported input returns
|
|
861
|
+
`INPUT_POLICY_DENIED` with exit `6`. Responses never include local paths, raw
|
|
862
|
+
bytes, base64 payloads, full remote URLs, bucket names, or object keys.
|
|
863
|
+
|
|
864
|
+
### `image-skill edit`
|
|
865
|
+
|
|
866
|
+
Edits an Image Skill-owned input asset or client-normalized local/remote image
|
|
867
|
+
with one hosted provider-backed edit model.
|
|
868
|
+
|
|
869
|
+
```bash
|
|
870
|
+
image-skill edit \
|
|
871
|
+
--input ASSET_ID_OR_PATH_OR_URL \
|
|
872
|
+
--mask MASK_ASSET_ID_OR_PATH_OR_URL \
|
|
873
|
+
--prompt "Remove the background and keep natural object shadows" \
|
|
874
|
+
--accept-unknown-cost \
|
|
875
|
+
--json
|
|
876
|
+
```
|
|
877
|
+
|
|
878
|
+
If `--input` is a local path or external URL, the public CLI first normalizes it
|
|
879
|
+
through the same upload resolver as `image-skill upload`, then sends only the
|
|
880
|
+
resulting `asset_id` to `POST /v1/edit`. If `--input` is an Image Skill asset id
|
|
881
|
+
or owned asset URL, edit uses that owned asset directly.
|
|
882
|
+
For models with wired mask support, `--mask` follows the same upload/asset-id
|
|
883
|
+
resolver and sends only `mask_asset_id`; never pass provider-native `mask_url`
|
|
884
|
+
through `model_parameters`.
|
|
885
|
+
For models with wired reference support, pass owned reference assets with the
|
|
886
|
+
model's advertised reference role. Kling element routes use
|
|
887
|
+
`--element-frontal IMAGE[@ELEMENT_INDEX]` and
|
|
888
|
+
`--element-reference IMAGE[@ELEMENT_INDEX[:REFERENCE_INDEX]]`; flat
|
|
889
|
+
reference-image routes use `--reference-image IMAGE[@INDEX[:TASK]]`. The
|
|
890
|
+
public CLI uploads local paths and external URLs first, then sends top-level
|
|
891
|
+
`references[]` entries with Image Skill `asset_id` values. For Kling element
|
|
892
|
+
routes, `--element-frontal ./front.png@0` becomes role `element_frontal` for
|
|
893
|
+
element index `0`, and `--element-reference ./side.webp@0:0` becomes role
|
|
894
|
+
`element_reference` for the same element with reference slot `0`. For DreamO
|
|
895
|
+
create, `--reference-image ./identity.png@0:id` becomes role
|
|
896
|
+
`reference_image`, index `0`, and `reference_task` `id`. For xAI edit,
|
|
897
|
+
`--reference-image ./reference.png@0` becomes the second ordered source image;
|
|
898
|
+
the primary `--input` asset remains the first source image. Do not pass
|
|
899
|
+
provider-native `elements`, `image_url`, `image_urls`, `frontal_image_url`,
|
|
900
|
+
`reference_image_urls`, `first_image_url`, `second_image_url`, `images`, or
|
|
901
|
+
`*_reference_task` through `model_parameters`; provider-private URLs are
|
|
902
|
+
resolved server-side after ownership and media-policy validation.
|
|
903
|
+
Current public `references[]` support covers Kling Image O1, Kling Image O3
|
|
904
|
+
image-to-image/text-to-image, Kling Image v3 image-to-image/text-to-image, and
|
|
905
|
+
Fal DreamO create plus xAI Grok Imagine image edit/quality edit. Kling requests
|
|
906
|
+
may contain at most 40 reference entries across at most 10 contiguous element
|
|
907
|
+
indexes starting at `0`; each referenced element requires one frontal image and
|
|
908
|
+
may include up to three additional reference images. DreamO accepts up to two
|
|
909
|
+
contiguous `reference_image` indexes starting at `0`, each with optional
|
|
910
|
+
`reference_task` `ip`, `id`, or `style`. xAI edit accepts up to two contiguous
|
|
911
|
+
`reference_image` indexes starting at `0` and does not accept `reference_task`.
|
|
912
|
+
Reference assets must be Image Skill-owned PNG, JPEG, or WebP images with
|
|
913
|
+
known non-empty byte length up to 10MB, known width and height of at least
|
|
914
|
+
300px, and aspect ratio from 0.40 to 2.50.
|
|
915
|
+
|
|
916
|
+
```bash
|
|
917
|
+
image-skill edit \
|
|
918
|
+
--model fal.kling-image-o3-image-to-image \
|
|
919
|
+
--input ./starting-frame.png \
|
|
920
|
+
--element-frontal ./character-front.png@0 \
|
|
921
|
+
--element-reference ./character-side.webp@0:0 \
|
|
922
|
+
--prompt "Place the same character in a clean studio product portrait" \
|
|
923
|
+
--accept-unknown-cost \
|
|
924
|
+
--json
|
|
925
|
+
```
|
|
926
|
+
|
|
927
|
+
Direct `/v1/edit` callers use the same owned-asset contract:
|
|
928
|
+
|
|
929
|
+
```json
|
|
930
|
+
{
|
|
931
|
+
"input_asset_id": "image_starting_frame",
|
|
932
|
+
"model": "fal.kling-image-o3-image-to-image",
|
|
933
|
+
"prompt": "Place the same character in a clean studio product portrait",
|
|
934
|
+
"references": [
|
|
935
|
+
{
|
|
936
|
+
"asset_id": "image_character_front",
|
|
937
|
+
"role": "element_frontal",
|
|
938
|
+
"index": 0
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
"asset_id": "image_character_side",
|
|
942
|
+
"role": "element_reference",
|
|
943
|
+
"index": 0,
|
|
944
|
+
"reference_index": 0
|
|
945
|
+
}
|
|
946
|
+
]
|
|
947
|
+
}
|
|
948
|
+
```
|
|
949
|
+
|
|
950
|
+
Preview hosted create/edit supports model-specific provider-backed paths such
|
|
951
|
+
as Fal Gemini 3 Pro Image Preview Create (`fal.gemini-3-pro-image-preview`),
|
|
952
|
+
Fal Nano Banana 2 Edit (`fal.nano-banana-2-edit`), Fal Ideogram V2 Edit
|
|
953
|
+
(`fal.ideogram-v2-edit`), Fal Gemini 3 Pro Image
|
|
954
|
+
Preview Edit (`fal.gemini-3-pro-image-preview-edit`), Fal FLUX Pro 1.1 Ultra
|
|
955
|
+
Create (`fal.flux-pro-v1-1-ultra`), Fal FLUX Pro Kontext Edit
|
|
956
|
+
(`fal.flux-pro-kontext`), Fal FLUX Pro Kontext Max Edit
|
|
957
|
+
(`fal.flux-pro-kontext-max`), Fal Seedream 5.0 Lite Create
|
|
958
|
+
(`fal.bytedance-seedream-v5-lite-text-to-image`), Fal Seedream 5.0 Lite Edit
|
|
959
|
+
(`fal.bytedance-seedream-v5-lite-edit`), Fal Seedream 4.5 Create
|
|
960
|
+
(`fal.bytedance-seedream-v4-5-text-to-image`), Fal Seedream 4.5 Edit
|
|
961
|
+
(`fal.bytedance-seedream-v4-5-edit`), Fal Nano Banana Pro Create
|
|
962
|
+
(`fal.nano-banana-pro`), Fal Nano Banana Pro Edit
|
|
963
|
+
(`fal.nano-banana-pro-edit`), GPT Image 1.5 Create
|
|
964
|
+
(`openai.gpt-image-1.5`), GPT Image 1.5 Edit
|
|
965
|
+
(`openai.gpt-image-1.5-edit`), and GPT Image 2 Edit
|
|
966
|
+
(`openai.gpt-image-2-edit`) when their provider credentials are configured.
|
|
967
|
+
Fal Gemini 3 Pro Image Preview create/edit has known per-image pricing: 1K/2K
|
|
968
|
+
requests quote `$0.15` provider cost and 4K quotes the doubled provider tier.
|
|
969
|
+
Fal Nano Banana Pro create/edit uses the same `$0.15` standard and doubled 4K
|
|
970
|
+
provider tier. Fal FLUX Pro 1.1 Ultra Create quotes `$0.06` provider cost per
|
|
971
|
+
image. Fal FLUX Pro Kontext Edit quotes `$0.04` provider cost per image, and
|
|
972
|
+
Fal FLUX Pro Kontext Max Edit quotes `$0.08` provider cost per image. Fal
|
|
973
|
+
Seedream 4.5 create/edit quotes `$0.04` provider cost per image.
|
|
974
|
+
Fal Seedream 5.0 Lite create/edit quotes `$0.035` provider cost per image. Fal
|
|
975
|
+
Z-Image Turbo create/edit quotes `$0.005/MP` when `image_size` is explicit or
|
|
976
|
+
derived from aspect ratio; edit `auto` remains unknown-cost. GPT Image 1.5
|
|
977
|
+
create quotes output-token estimates for concrete quality/size requests using
|
|
978
|
+
OpenAI's fixed-size token table; GPT Image 1.5 edit remains preflight
|
|
979
|
+
unknown-cost because edit input image/text tokens are provider-metered, then
|
|
980
|
+
records usage-priced provider cost when OpenAI returns token usage. GPT Image 2
|
|
981
|
+
create quotes output-token estimates for concrete quality/size requests. GPT
|
|
982
|
+
Image 2 edit remains preflight unknown-cost because edit input image/text tokens
|
|
983
|
+
are provider-metered, then records usage-priced provider cost when OpenAI
|
|
984
|
+
returns token usage. Other edit paths without machine-readable pricing require
|
|
985
|
+
`--accept-unknown-cost` until a stable price source is captured. Responses
|
|
986
|
+
include a new generated asset URL, job id, safety state, quota consumption, and
|
|
987
|
+
input asset metadata where
|
|
988
|
+
applicable. Responses do not include raw prompts, source bytes, base64
|
|
989
|
+
payloads, local paths, full external URLs, bucket names, or object keys.
|
|
990
|
+
|
|
991
|
+
Provider/model names in this paragraph are preview provenance, not the primary
|
|
992
|
+
public UX. The public selection surface should be Image Skill capabilities and
|
|
993
|
+
model-parameter schemas; provider/model details belong in explicit
|
|
994
|
+
provenance/debug output.
|
|
995
|
+
|
|
996
|
+
### `image-skill assets show`
|
|
997
|
+
|
|
998
|
+
Inspects an Image Skill-owned asset URL or hosted asset id.
|
|
999
|
+
|
|
1000
|
+
```bash
|
|
1001
|
+
image-skill assets show \
|
|
1002
|
+
https://media.image-skill.com/a/image_abc123.png \
|
|
1003
|
+
--json
|
|
1004
|
+
```
|
|
1005
|
+
|
|
1006
|
+
For asset-id lookup, use hosted auth:
|
|
1007
|
+
|
|
1008
|
+
```bash
|
|
1009
|
+
image-skill assets show image_... --json
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
Minimum success data:
|
|
1013
|
+
|
|
1014
|
+
```json
|
|
1015
|
+
{
|
|
1016
|
+
"request": {
|
|
1017
|
+
"reference": "image_...",
|
|
1018
|
+
"reference_type": "asset_id"
|
|
1019
|
+
},
|
|
1020
|
+
"asset": {
|
|
1021
|
+
"asset_id": "image_...",
|
|
1022
|
+
"job_id": "job_...",
|
|
1023
|
+
"url": "https://media.image-skill.com/a/image_abc123.png",
|
|
1024
|
+
"mime_type": "image/png",
|
|
1025
|
+
"content_length": 12345,
|
|
1026
|
+
"width": 1024,
|
|
1027
|
+
"height": 1024,
|
|
1028
|
+
"source": "hosted_metadata"
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
```
|
|
1032
|
+
|
|
1033
|
+
External URLs are rejected. Older assets created before hosted asset metadata
|
|
1034
|
+
was recorded may still be inspectable by Image Skill-owned URL.
|
|
1035
|
+
|
|
1036
|
+
### `image-skill assets get`
|
|
1037
|
+
|
|
1038
|
+
Downloads an Image Skill-owned asset URL or hosted asset id to a local file.
|
|
1039
|
+
|
|
1040
|
+
```bash
|
|
1041
|
+
image-skill assets get \
|
|
1042
|
+
https://media.image-skill.com/a/image_abc123.png \
|
|
1043
|
+
--output ./result.png \
|
|
1044
|
+
--json
|
|
1045
|
+
```
|
|
1046
|
+
|
|
1047
|
+
The command refuses to overwrite existing files unless `--overwrite` is
|
|
1048
|
+
explicit. It verifies byte length when the asset server provides a
|
|
1049
|
+
`content-length` header.
|
|
1050
|
+
|
|
1051
|
+
### `image-skill jobs show`
|
|
1052
|
+
|
|
1053
|
+
Inspects a hosted Image Skill job visible to the authenticated agent.
|
|
1054
|
+
|
|
1055
|
+
```bash
|
|
1056
|
+
image-skill jobs show job_... --json
|
|
1057
|
+
```
|
|
1058
|
+
|
|
1059
|
+
Output includes public job status, trace id, timestamps, capability id, cost
|
|
1060
|
+
summary, safety status, and Image Skill-owned asset metadata. Provider/model
|
|
1061
|
+
provenance is available only through explicit provenance/debug affordances for
|
|
1062
|
+
authorized actors. Default output does not include raw prompts, generated bytes, provider
|
|
1063
|
+
credentials, DB/storage keys, bucket names, or local paths.
|
|
1064
|
+
|
|
1065
|
+
### `image-skill jobs wait`
|
|
1066
|
+
|
|
1067
|
+
Waits for a hosted Image Skill job to reach a terminal status.
|
|
1068
|
+
|
|
1069
|
+
```bash
|
|
1070
|
+
image-skill jobs wait job_... --timeout-ms 30000 --poll-interval-ms 1000 --json
|
|
1071
|
+
```
|
|
1072
|
+
|
|
1073
|
+
Completed jobs return immediately. Non-terminal jobs poll until completion,
|
|
1074
|
+
failure, cancellation, or deterministic timeout.
|
|
1075
|
+
|
|
1076
|
+
### `image-skill activity list`
|
|
1077
|
+
|
|
1078
|
+
Lists recent hosted activity ledger events visible to the authenticated agent.
|
|
1079
|
+
|
|
1080
|
+
```bash
|
|
1081
|
+
image-skill activity list --limit 20 --json
|
|
1082
|
+
image-skill activity list --subject job_... --json
|
|
1083
|
+
```
|
|
1084
|
+
|
|
1085
|
+
Activity is the ledger, not the work queue. Use it to find recent event IDs,
|
|
1086
|
+
related job IDs, asset IDs, usage IDs, feedback IDs, trace IDs, status changes,
|
|
1087
|
+
and product-memory writes. Use `jobs show` or `jobs wait` when you need
|
|
1088
|
+
operational recovery, polling, retry judgment, or final job assets.
|
|
1089
|
+
|
|
1090
|
+
Minimum success data:
|
|
1091
|
+
|
|
1092
|
+
```json
|
|
1093
|
+
{
|
|
1094
|
+
"events": [
|
|
1095
|
+
{
|
|
1096
|
+
"event_id": "evt_...",
|
|
1097
|
+
"type": "job.completed",
|
|
1098
|
+
"occurred_at": "2026-05-05T19:00:23.000Z",
|
|
1099
|
+
"summary": "Create job completed",
|
|
1100
|
+
"operation": "create",
|
|
1101
|
+
"subject": {
|
|
1102
|
+
"type": "job",
|
|
1103
|
+
"id": "job_..."
|
|
1104
|
+
},
|
|
1105
|
+
"links": {
|
|
1106
|
+
"job_id": "job_...",
|
|
1107
|
+
"asset_ids": ["image_..."],
|
|
1108
|
+
"feedback_id": null,
|
|
1109
|
+
"usage_event_id": "usage_..."
|
|
1110
|
+
},
|
|
1111
|
+
"status": "completed",
|
|
1112
|
+
"cost": {
|
|
1113
|
+
"estimated_usd": 0.025
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
],
|
|
1117
|
+
"source": "hosted_activity_ledger"
|
|
1118
|
+
}
|
|
1119
|
+
```
|
|
1120
|
+
|
|
1121
|
+
The ledger hides provider and storage implementation details by default. It is
|
|
1122
|
+
safe to cite `evt_...`, `job_...`, `image_...`, `usage_...`, `feedback_id`,
|
|
1123
|
+
and `trace_id` values in feedback.
|
|
1124
|
+
|
|
1125
|
+
Hosted API equivalent:
|
|
1126
|
+
|
|
1127
|
+
```bash
|
|
1128
|
+
curl -sS "https://api.image-skill.com/v1/activity?limit=20&subject=job_..." \
|
|
1129
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN"
|
|
1130
|
+
```
|
|
1131
|
+
|
|
1132
|
+
### `image-skill activity show`
|
|
1133
|
+
|
|
1134
|
+
Shows one hosted activity event or the latest events related to one subject.
|
|
1135
|
+
|
|
1136
|
+
```bash
|
|
1137
|
+
image-skill activity show evt_... --json
|
|
1138
|
+
image-skill activity show job_... --json
|
|
1139
|
+
image-skill activity show image_... --json
|
|
1140
|
+
image-skill activity show sig_... --json
|
|
1141
|
+
```
|
|
1142
|
+
|
|
1143
|
+
`activity show` accepts activity event IDs plus job, asset, usage, feedback, and
|
|
1144
|
+
trace references. When the reference is a subject rather than one exact event,
|
|
1145
|
+
the response includes matching ledger events so an agent can cite the right
|
|
1146
|
+
event without reading telemetry logs.
|
|
1147
|
+
|
|
1148
|
+
Hosted API equivalent:
|
|
1149
|
+
|
|
1150
|
+
```bash
|
|
1151
|
+
curl -sS https://api.image-skill.com/v1/activity/evt_... \
|
|
1152
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN"
|
|
1153
|
+
```
|
|
1154
|
+
|
|
1155
|
+
### Activity Event Registry
|
|
1156
|
+
|
|
1157
|
+
Activity `type` values are stable public contract values. Do not infer new
|
|
1158
|
+
event names from provider responses or telemetry logs; use only the registry
|
|
1159
|
+
below.
|
|
1160
|
+
|
|
1161
|
+
| Event type | Subject | Operation | Emitted when | Stable links |
|
|
1162
|
+
| ------------------------------------------ | ---------- | ----------- | ----------------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
1163
|
+
| `job.completed` | `job` | create/edit | A hosted create or edit job reaches a terminal state. | `job_id`, `asset_ids`, `usage_event_id` |
|
|
1164
|
+
| `asset.created` | `asset` | create/edit | A hosted create or edit produces an output asset. | `job_id`, `asset_ids`, `usage_event_id` |
|
|
1165
|
+
| `asset.uploaded` | `asset` | upload | A public edit workflow uploads or imports input media. | `job_id`, `asset_ids`, `usage_event_id` |
|
|
1166
|
+
| `usage.credit_consumed` | `usage` | usage | A creative operation records a preview-credit entry. | `job_id`, `usage_event_id` |
|
|
1167
|
+
| `feedback.created` | `feedback` | feedback | Hosted agent feedback is accepted into product memory. | `feedback_id` |
|
|
1168
|
+
| `feedback.github_queue.processed` | `feedback` | feedback | Feedback is processed by the GitHub implementation queue handoff. | `feedback_id` |
|
|
1169
|
+
| `payment.checkout_session.created` | `payment` | payment | A Stripe Checkout session is created and awaits external action. | `quote_id`, `payment_attempt_id`, `checkout_session_id` |
|
|
1170
|
+
| `credits.payment_backed_granted` | `credit` | credits | Verified payment or fake-payment proof grants paid credits. | `quote_id`, `receipt_id`, `credit_event_id` |
|
|
1171
|
+
| `credits.payment_backed_refunded` | `credit` | credits | A Stripe refund debits payment-backed credits. | `quote_id`, `receipt_id`, `payment_reversal_id`, `credit_event_id` |
|
|
1172
|
+
| `credits.payment_backed_disputed` | `credit` | credits | A Stripe dispute debit applies to payment-backed credits. | `quote_id`, `receipt_id`, `payment_reversal_id`, `credit_event_id` |
|
|
1173
|
+
| `credits.payment_backed_reinstated` | `credit` | credits | Stripe dispute funds were reinstated and recorded. | `quote_id`, `receipt_id`, `payment_reversal_id` |
|
|
1174
|
+
| `credits.payment_backed_reversal_pending` | `credit` | credits | A reversal was recorded but could not be fully applied. | `quote_id`, `receipt_id`, `payment_reversal_id` |
|
|
1175
|
+
| `credits.payment_backed_reversal_rejected` | `credit` | credits | A reversal was rejected because it could not safely reconcile. | `quote_id`, `receipt_id`, `payment_reversal_id` |
|
|
1176
|
+
|
|
1177
|
+
`feedback.github_queue.processed` includes `details.github_queue` with
|
|
1178
|
+
machine-readable lifecycle fields such as `state`, `reason`, `issue_urls`,
|
|
1179
|
+
`issue_numbers`, `mode`, and `github_mutation`. Agents should use it to learn
|
|
1180
|
+
whether submitted feedback was promoted, skipped, deduped, blocked, or already
|
|
1181
|
+
mirrored without reading private repository artifacts.
|
|
1182
|
+
|
|
1183
|
+
If a response includes an event type outside this registry, treat it as a
|
|
1184
|
+
contract bug and submit `image-skill feedback create --json` with the event ID
|
|
1185
|
+
and trace ID.
|
|
1186
|
+
|
|
1187
|
+
### `image-skill feedback create`
|
|
1188
|
+
|
|
1189
|
+
Leaves structured product feedback in hosted Image Skill product memory.
|
|
1190
|
+
At minimum, provide `--title` and `--body`; Image Skill accepts narrative
|
|
1191
|
+
feedback and adds quality guidance server-side. Use the structured fields below
|
|
1192
|
+
when the agent already knows them.
|
|
1193
|
+
|
|
1194
|
+
```bash
|
|
1195
|
+
image-skill feedback create \
|
|
1196
|
+
--type user_feedback \
|
|
1197
|
+
--title "Short concrete title" \
|
|
1198
|
+
--body "What happened, what was expected, and why it matters" \
|
|
1199
|
+
--command "Command or workflow observed" \
|
|
1200
|
+
--expected "Expected result" \
|
|
1201
|
+
--actual "Actual result" \
|
|
1202
|
+
--proof-needed "What would prove this is handled" \
|
|
1203
|
+
--surface cli,docs \
|
|
1204
|
+
--evidence trace:TRACE_ID \
|
|
1205
|
+
--severity medium \
|
|
1206
|
+
--confidence high \
|
|
1207
|
+
--next-state watch \
|
|
1208
|
+
--json
|
|
1209
|
+
```
|
|
1210
|
+
|
|
1211
|
+
Hosted feedback requires `IMAGE_SKILL_TOKEN` and persists through
|
|
1212
|
+
`https://api.image-skill.com/v1/feedback`. The hosted API fails closed if
|
|
1213
|
+
durable hosted feedback storage is unavailable.
|
|
1214
|
+
|
|
1215
|
+
JSON errors may include `error.recovery` with machine-readable fields such as
|
|
1216
|
+
`required_flag`, `suggested_command`, `docs_url`, or `retry_after_seconds`.
|
|
1217
|
+
Agents should prefer those fields over parsing prose error messages. For
|
|
1218
|
+
example, `BUDGET_REQUIRES_CONFIRMATION` returns
|
|
1219
|
+
`required_flag: "--accept-unknown-cost"`.
|
|
1220
|
+
|
|
1221
|
+
`whoami`, `usage quota`, `quota`, `credits quote`, `credits buy`,
|
|
1222
|
+
`credits status`, `credits fake-purchase`, `create`, `activity list`,
|
|
1223
|
+
`activity show`, and `feedback create` accept `--token-stdin` for stdin-based
|
|
1224
|
+
secret handoff.
|
|
1225
|
+
`credits methods` and `credits packs list` do not require auth.
|
|
1226
|
+
|
|
1227
|
+
Feedback should avoid raw prompts, provider keys, generated image bytes, source
|
|
1228
|
+
image bytes, and private user data.
|
|
1229
|
+
|
|
1230
|
+
Hosted API equivalent:
|
|
1231
|
+
|
|
1232
|
+
```bash
|
|
1233
|
+
curl -sS https://api.image-skill.com/v1/feedback \
|
|
1234
|
+
-H "authorization: Bearer $IMAGE_SKILL_TOKEN" \
|
|
1235
|
+
-H "content-type: application/json" \
|
|
1236
|
+
-d '{
|
|
1237
|
+
"type": "user_feedback",
|
|
1238
|
+
"title": "Short concrete title",
|
|
1239
|
+
"body": "What happened, what was expected, and why it matters",
|
|
1240
|
+
"command": "Command or workflow observed",
|
|
1241
|
+
"expected": "Expected result",
|
|
1242
|
+
"actual": "Actual result",
|
|
1243
|
+
"proof_needed": "What would prove this is handled",
|
|
1244
|
+
"surface": ["cli", "docs"],
|
|
1245
|
+
"evidence": ["trace:TRACE_ID"],
|
|
1246
|
+
"severity": "medium",
|
|
1247
|
+
"confidence": "high",
|
|
1248
|
+
"next_state": "watch"
|
|
1249
|
+
}'
|
|
1250
|
+
```
|
|
1251
|
+
|
|
1252
|
+
### Planned Resource Commands
|
|
1253
|
+
|
|
1254
|
+
`jobs list`, `assets list`, `assets delete`, and async job cancellation are
|
|
1255
|
+
planned public resource commands. They are not part of the current public
|
|
1256
|
+
allowlist until the hosted service backs them and this contract lists their
|
|
1257
|
+
exact command shapes. `activity list/show` is available now for ledger
|
|
1258
|
+
readback, but it is not a substitute for future job listing, cancellation, or
|
|
1259
|
+
retry controls.
|