warpmetal 0.8.12 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -41,11 +41,15 @@ x402api help --json
41
41
  Install the bundled skill for supported coding agents:
42
42
 
43
43
  ```sh
44
+ warpmetal agent install --target <codex|claude|all>
44
45
  warpmetal agent install --target codex
45
46
  warpmetal agent install --target claude
46
47
  warpmetal agent install --target all
47
48
  ```
48
49
 
50
+ `warpmetal agent install` installs only the bundled WarpMetal skill; it does
51
+ not install sandbox tools or select a sandbox tool profile.
52
+
49
53
  Use `--scope project` to install into the current repository instead of the
50
54
  user-level agent directory.
51
55
 
@@ -58,7 +62,7 @@ integration.
58
62
 
59
63
  The repository also contains a skills-only WarpMetal plugin for the public
60
64
  Plugins Directory shared by Codex and ChatGPT. The plugin remains a separate
61
- artifact from the npm CLI and requires `warpmetal` CLI version 0.8.1 or newer.
65
+ artifact from the npm CLI and requires `warpmetal` CLI version 0.9.0 or newer.
62
66
 
63
67
  To test the repository marketplace after the plugin lands on `main`:
64
68
 
@@ -80,9 +84,13 @@ the repo marketplace is only for development, testing, and direct distribution.
80
84
  ## First commands
81
85
 
82
86
  ```sh
87
+ warpmetal login
88
+ warpmetal auth status
83
89
  warpmetal health
84
90
  warpmetal catalog
91
+ warpmetal models --auth-mode chatgpt_subscription
85
92
  warpmetal order prepare \
93
+ --account --without-agent-boxes \
86
94
  --plan agent \
87
95
  --hostname codex-workspace \
88
96
  --os '<exact name from warpmetal catalog>' \
@@ -90,11 +98,54 @@ warpmetal order prepare \
90
98
  --json
91
99
  ```
92
100
 
101
+ `warpmetal login` starts WarpMetal account authorization before any SSH key or
102
+ order configuration is needed. It opens the browser approval page by default;
103
+ use `--no-browser` to print the page and user code without opening it. The
104
+ default session requests `cli:read cli:write`; `--read-only` requests only
105
+ `cli:read`. Check the current account with `warpmetal auth status` and revoke
106
+ the CLI session with `warpmetal logout`.
107
+
108
+ The CLI stores only its own rotating account session under the private
109
+ WarpMetal state directory. Account sessions are separate from browser sessions,
110
+ legacy order owner tokens and SSH credentials, and are bound to the exact
111
+ Identity and account origins that issued them. `--identity-url` and
112
+ `--account-url` accept explicit origins for testing or alternate deployments;
113
+ credentials are never sent after an HTTP redirect or reused for other origins.
114
+ If a refresh response is lost, the CLI clears the local session and requires a
115
+ new login rather than risking reuse of a rotated credential. Logout always
116
+ clears the matching local session, and reports when remote revocation could not
117
+ be confirmed.
118
+
119
+ Use `warpmetal account orders` and `warpmetal account devices` for your account's
120
+ order history and active servers; add `--task <id>` or `--server <id>` for one
121
+ item. `order prepare --account` binds the unpaid order to the signed-in account
122
+ and uses its verified contact. It never issues an owner token. Login and account
123
+ creation do not require SSH keys or order configuration.
124
+
125
+ New account preparation defaults to Agent Boxes and an Agent team. Supply the
126
+ selected team in `--runtime-file`; no provider or model is silently selected.
127
+ Use `--without-team` for a single small persistent box, or
128
+ `--without-agent-boxes` for a VPS without boxes. An explicit runtime file keeps
129
+ its existing selections. `warpmetal models --json` supplies published model and
130
+ authentication choices; server readiness checks still apply.
131
+
132
+ Without `--account`, order preparation retains the existing owner-token
133
+ workflow, including payment and SSH automation. This release adds account order
134
+ preparation and inventory, not a new account payment or runtime-execution grant.
135
+ The account scopes do not authorize charges, renewals, deletion or Fleet access.
136
+
137
+ `warpmetal catalog` lists VPS plans. `warpmetal models` reads the separate,
138
+ public Agent Teams model catalog. It never signs in to a model provider or
139
+ creates an order. Use `--provider` or `--auth-mode api_key|chatgpt_subscription`
140
+ to filter published entries; JSON preserves the catalog snapshot, provenance,
141
+ freshness state and published authentication modes.
142
+
93
143
  The generated key defaults to
94
144
  `${WARPMETAL_HOME:-~/.config/warpmetal}/ssh/warpmetal-codex-workspace`. A
95
145
  collision receives a random suffix; existing keys are never overwritten. Once
96
146
  checkout returns `serverId`, the CLI binds that ID to the identity so
97
- `warpmetal server login` and `warpmetal runtime install` can select it without
147
+ `warpmetal server login` is the distinct SSH challenge flow for one server.
148
+ It and `warpmetal runtime install` can select the generated identity without
98
149
  an `--identity` flag. Use `--ssh-public-key-file` instead when supplying a
99
150
  user-managed public key.
100
151
 
@@ -340,6 +391,19 @@ compatible external signer.
340
391
  and reports an owner-host-key refresh opens one new managed trust epoch;
341
392
  failed or ambiguous reloads retain the old pin and never permit replacement.
342
393
  Erased workspaces are never described as recoverable.
394
+ - New agent-enabled candidate orders and Runtime-enabled reloads pass the
395
+ closed nested-sandbox opt-in inside verified provider cloud-init. The signed
396
+ Runtime bundle installs the exact-path AppArmor policy for the neutral
397
+ image's immutable Bubblewrap helper; this needs no follow-up customer SSH
398
+ key and adds no public order field or CLI flag. VPS-only cloud-init is
399
+ unchanged. Existing enrolled hosts use reload/reprovision; the CLI does not
400
+ claim a silent in-place policy repair command.
401
+ - Runtime reports a new or replaced sandbox generation as running only after a
402
+ fixed, credential-free inner-Bubblewrap oracle proves nested namespaces, an
403
+ inherited read-only view of the outer Agent Box's already isolated procfs,
404
+ an allowed workspace write, empty Linux capability sets,
405
+ `no-new-privileges`, and protected-root write denial. Failure stops the
406
+ container before access grants or tool setup advance.
343
407
 
344
408
  For a Runtime-enabled reload, no separate installation command is part of the
345
409
  successful path:
@@ -387,6 +451,61 @@ warpmetal sandbox access keygen \
387
451
  --json
388
452
  ```
389
453
 
454
+ ### Registered sandbox tools
455
+
456
+ WarpMetal can apply only registered, immutable tool profiles. These commands use
457
+ the owner credential already stored in the private WarpMetal state file; they do
458
+ not accept a bearer token on the command line or permit a caller-supplied URL,
459
+ shell command, environment, or artifact override.
460
+
461
+ ```sh
462
+ warpmetal tools list --server <serverId> --json
463
+ warpmetal tools install --server <serverId> --sandbox <sandboxId> --profile <profileId> \
464
+ [--idempotency-key <key>] [--wait] [--timeout-seconds <n>] --json
465
+ warpmetal tools status --server <serverId> [--wait] [--timeout-seconds <n>] --json
466
+ ```
467
+
468
+ `tools install` posts only the selected registered `profileId`. Waiting is
469
+ bounded: `ready` exits 0, `failed` or `cancelled` exits 5, and a timeout exits 8.
470
+ JSON output contains public profile, operation, and receipt metadata only.
471
+ Successful non-wait installs and status inspections exit 0 while reporting the
472
+ accepted or current state; exit 8 is reserved for an actual `--wait` deadline
473
+ timeout.
474
+
475
+ Codex is a released automatic tool profile when the public
476
+ `/agent-tool-profiles` endpoint advertises it as `available`. WarpMetal installs
477
+ the exact registered artifacts when selected at order time or through
478
+ `tools install`. Claude Code uses the released `claude-code` automatic tool
479
+ profile under the same public availability gate. Claude Managed Agents are separate:
480
+ `claude-managed-ant` is an install-only CLI profile. Installing `ant` does not
481
+ authenticate a worker and does not activate Managed Agents. Cursor CLI remains
482
+ manual and unavailable as an automatic profile until separately qualified later.
483
+ Gemini CLI remains manual.
484
+
485
+ An order `--runtime-file` may add the closed optional setup intent beside its
486
+ `sandboxes` array:
487
+
488
+ ```json
489
+ {
490
+ "sandboxes": [
491
+ { "name": "codex-worker", "size": "small" },
492
+ { "name": "claude-worker", "size": "small" },
493
+ { "name": "managed-worker", "size": "small" }
494
+ ],
495
+ "setup": {
496
+ "version": 1,
497
+ "sandboxProfiles": [
498
+ { "sandboxName": "codex-worker", "profileId": "codex" },
499
+ { "sandboxName": "claude-worker", "profileId": "claude-code" },
500
+ { "sandboxName": "managed-worker", "profileId": "claude-managed-ant" }
501
+ ]
502
+ }
503
+ }
504
+ ```
505
+
506
+ Only those fields are accepted. Each setup entry must name a sandbox in the
507
+ same file and a registered profile ID.
508
+
390
509
  ### Install a standard sandbox SSH alias
391
510
 
392
511
  Use a separate keypair and access grant for each sandbox. After the grant is
@@ -410,10 +529,16 @@ ssh -t <alias> gemini
410
529
  ssh <alias> gemini -p '<task>'
411
530
  ```
412
531
 
413
- Install and authenticate Codex, Claude Code, Cursor CLI, or Gemini CLI inside
414
- the sandbox first. Provider credentials are sandbox-owned and remain in its
415
- persistent home; WarpMetal does not install these tools, perform their login,
416
- or receive their credentials.
532
+ Authenticate Codex or Claude Code inside the sandbox after its selected profile
533
+ is ready. The public `/agent-tool-profiles` response is authoritative for
534
+ availability and checkout selection. Claude Code uses the `claude-code`
535
+ automatic tool profile. Claude Managed Agents are
536
+ separate: `claude-managed-ant` is an install-only CLI profile. Installing `ant`
537
+ does not authenticate a worker and does not activate Managed Agents. Cursor CLI
538
+ remains manual and unavailable as an automatic profile until separately
539
+ qualified later. Install and authenticate Cursor CLI or Gemini CLI inside the
540
+ sandbox. Provider credentials are sandbox-owned and remain in its
541
+ persistent home; WarpMetal does not perform provider login or receive them.
417
542
 
418
543
  The alias is local-only. It prepends a managed include to `~/.ssh/config` and
419
544
  uses the profile's pinned host key plus the sandbox identity. It never uses or
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "warpmetal",
3
- "version": "0.8.12",
3
+ "version": "0.9.0",
4
4
  "description": "Agent-safe CLI and skill for purchasing, renewing, and managing WarpMetal VPS servers",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,7 @@
16
16
  "node": ">=20.0.0"
17
17
  },
18
18
  "scripts": {
19
- "check": "node --check bin/warpmetal.js && node --check src/api.js && node --check src/args.js && node --check src/cli.js && node --check src/connection.js && node --check src/errors.js && node --check src/host-trust.js && node --check src/install-skill.js && node --check src/installer.js && node --check src/payment.js && node --check src/runtime.js && node --check src/ssh-alias.js && node --check src/ssh.js && node --check src/state.js && node --check src/version.js",
19
+ "check": "node --check bin/warpmetal.js && node --check src/account-gateway.js && node --check src/account-session.js && node --check src/api.js && node --check src/args.js && node --check src/cli.js && node --check src/connection.js && node --check src/customer-auth.js && node --check src/errors.js && node --check src/host-trust.js && node --check src/install-skill.js && node --check src/installer.js && node --check src/models.js && node --check src/payment.js && node --check src/runtime.js && node --check src/ssh-alias.js && node --check src/ssh.js && node --check src/state.js && node --check src/version.js",
20
20
  "plugin:check": "node --test test/plugin.test.js",
21
21
  "test": "node --test",
22
22
  "prepack": "npm run check && npm test"
@@ -11,7 +11,7 @@ with ad hoc HTTP commands.
11
11
 
12
12
  ## Start safely
13
13
 
14
- 1. Run `warpmetal --version` and require version `0.8.1` or newer for this
14
+ 1. Run `warpmetal --version` and require version `0.9.0` or newer for this
15
15
  plugin. If it is missing or older, explain the compatibility requirement,
16
16
  ask before installing or upgrading software, and use only the official npm
17
17
  package from `https://www.npmjs.com/package/warpmetal`.
@@ -44,8 +44,14 @@ Run:
44
44
  ```sh
45
45
  warpmetal health --json
46
46
  warpmetal catalog --json
47
+ warpmetal models --json
47
48
  ```
48
49
 
50
+ `catalog` is the live VPS plan catalog. `models` is the separate public Agent
51
+ Teams model catalog; it makes one read-only request and never infers model
52
+ availability, credentials, entitlement, or provider support. Filter only with
53
+ published `--provider` or `--auth-mode api_key|chatgpt_subscription` values.
54
+
49
55
  Stop the current purchase if `purchasingReady` is false. In unattended
50
56
  scheduling, recheck after 60 seconds, then double the delay after each failed
51
57
  check up to 15 minutes and honor a longer `Retry-After`; never hot-loop. In an
@@ -3,6 +3,7 @@
3
3
  ## Contents
4
4
 
5
5
  - Discovery
6
+ - Account authentication
6
7
  - Purchase and provisioning
7
8
  - SSH identities
8
9
  - Renewal and notifications
@@ -17,11 +18,106 @@
17
18
  ```sh
18
19
  warpmetal health --json
19
20
  warpmetal catalog [--plan <planId>] --json
21
+ warpmetal models [--provider <id>] [--auth-mode <api_key|chatgpt_subscription>] [--json]
20
22
  ```
21
23
 
24
+ ## Public model catalog
25
+
26
+ `warpmetal models` performs a read-only `GET /agent-team-model-catalog` request.
27
+ It preserves the published snapshot metadata, source provenance, freshness state
28
+ and authentication modes. `--provider` and `--auth-mode` filter entries and
29
+ remove recommendations whose published entry is no longer present. The command
30
+ does not infer eligibility or contact a model provider. `catalog` remains the
31
+ VPS plan catalog.
32
+
22
33
  `health` exits with code 3 when the service responds but purchasing is paused.
23
34
  The catalog remains useful for read-only discovery.
24
35
 
36
+ ## Account authentication
37
+
38
+ ```sh
39
+ warpmetal login [--no-browser] [--read-only] --json
40
+ warpmetal auth status --json
41
+ warpmetal logout --json
42
+ ```
43
+
44
+ `login` uses the public `warpmetal-customer-cli` device client. It requests
45
+ `cli:read cli:write` by default or only `cli:read` with `--read-only`, prints the
46
+ bounded verification page and user code to stderr, and opens that page unless
47
+ `--no-browser` is present. Polling follows the server interval and treats
48
+ pending, slow-down, denial, expiry and cancellation as distinct outcomes. JSON
49
+ stdout contains only safe account identity and scope fields; access, refresh
50
+ and device credentials are never output.
51
+
52
+ The rotating CLI refresh family is independent of browser sessions, legacy
53
+ owner tokens and SSH credentials. It is stored in an owner-only, atomic session
54
+ file under the private WarpMetal state directory. Concurrent commands serialize
55
+ refresh. If refresh completion is ambiguous, the saved session is cleared and a
56
+ new login is required rather than replaying the old credential.
57
+
58
+ Sessions are bound to the exact Identity and account origins. Defaults are
59
+ `https://identity.warpmetal.com` and `https://warpmetal.com`; explicit
60
+ `--identity-url` and `--account-url` values must be HTTPS origins (localhost may
61
+ use HTTP). Redirects are refused, and credentials for one origin pair are never
62
+ sent to another. `logout` attempts remote family revocation and always clears
63
+ the matching local session, reporting whether revocation was confirmed.
64
+
65
+ Account login does not grant server SSH access. `warpmetal server login` remains
66
+ the separate, server-specific SSH challenge command.
67
+
68
+ ## Account orders and devices
69
+
70
+ ```sh
71
+ warpmetal account orders [--task <taskId>] --json
72
+ warpmetal account devices [--server <serverId>] --json
73
+ warpmetal order prepare --account --without-agent-boxes \
74
+ --plan <planId> --hostname <name> --os '<exact catalog OS>' \
75
+ --generate-ssh-key [--idempotency-key <key>] --json
76
+ ```
77
+
78
+ Reads require `cli:read`; unpaid preparation requires `cli:write`. Only these
79
+ allowlisted operations are granted. Account scope never authorizes a payment,
80
+ renewal, server deletion, credential change or runtime execution. Collections
81
+ return the server's bounded page and `nextCursor`; order history is distinct from
82
+ active devices and can include released or cancelled orders.
83
+
84
+ Account mode signs in before checking order fields. It derives contact and
85
+ ownership from the signed-in principal, rejects `--email`, uses the private
86
+ account gateway, and records `ownershipMode: account` plus principal/origin in
87
+ private local state without an owner token. Use the same idempotency key and
88
+ unchanged payload to retry an ambiguous preparation. Do not retry a charge.
89
+ Existing owner-token checkout commands do not become account payment commands.
90
+
91
+ Boxes/team are selected by default for new account preparation: provide
92
+ `--runtime-file` with your chosen team, `--without-team` for one persistent small
93
+ `main` box, or `--without-agent-boxes` for no runtime. Explicit runtime files keep
94
+ their box/team choices, and older scripts without `--account` retain their
95
+ defaults. Server model/runtime readiness gates remain binding.
96
+
97
+ The optional `teams` sibling of `sandboxes` uses the deployed team-v1 schema:
98
+
99
+ ```json
100
+ {
101
+ "sandboxes": [{"name":"manager","size":"small"},{"name":"builder","size":"small"}],
102
+ "teams": {"version":1,"teams":[{
103
+ "name":"Build team",
104
+ "members":[
105
+ {"sandboxName":"manager","role":"manager","providerId":"openai"},
106
+ {"sandboxName":"builder","role":"worker","providerId":"anthropic"}
107
+ ],
108
+ "links":[{"from":"manager","to":"builder","capability":"task.delegate"}],
109
+ "startPolicy":"manual"
110
+ }]}
111
+ }
112
+ ```
113
+
114
+ Provider names in this example are preferences, not qualification proof. Optional
115
+ `modelId` and `authMode` must reflect the selected published entry; omitted values
116
+ mean choose later, never automatic credentials. A team has one manager and 2–8
117
+ distinct declared boxes. Credentials, unknown fields, automatic start and
118
+ cross-team links are rejected. Team/setup files are for order preparation;
119
+ `sandbox create --file` accepts a sandbox batch only.
120
+
25
121
  ## Purchase and provisioning
26
122
 
27
123
  ```sh
@@ -221,6 +317,13 @@ process listings.
221
317
 
222
318
  ## Agent Runtime and sandboxes
223
319
 
320
+ Agent-enabled first boot and Runtime-enabled reload automatically carry the
321
+ closed nested-sandbox opt-in inside verified provider cloud-init. The signed
322
+ Runtime bundle installs the exact-path policy for the image's immutable
323
+ Bubblewrap helper without a later customer SSH key. This is not a public order
324
+ field or CLI flag; VPS-only cloud-init remains unchanged, and existing enrolled
325
+ hosts use reload/reprovision. There is no silent in-place policy repair.
326
+
224
327
  ```sh
225
328
  warpmetal runtime enable --server <serverId> [--idempotency-key <key>] --json
226
329
  warpmetal runtime get --server <serverId> [--wait] [--timeout-seconds <n>] --json
@@ -243,6 +346,11 @@ warpmetal sandbox action \
243
346
  [--wait] --json
244
347
  warpmetal sandbox delete \
245
348
  --server <serverId> --sandbox <sandboxId> --confirm DELETE [--wait] --json
349
+
350
+ warpmetal tools list --server <serverId> --json
351
+ warpmetal tools install --server <serverId> --sandbox <sandboxId> --profile <profileId> \
352
+ [--idempotency-key <key>] [--wait] [--timeout-seconds <n>] --json
353
+ warpmetal tools status --server <serverId> [--wait] [--timeout-seconds <n>] --json
246
354
  ```
247
355
 
248
356
  CLI 0.8.8 manages owner-facing VPS host trust during `runtime install`. With no
@@ -256,7 +364,52 @@ reloads never replace trust. This TOFU step cannot detect an active attacker on
256
364
  the first connection. Provider-console pre-enrollment is optional and stronger.
257
365
 
258
366
  See [runtime.md](runtime.md) for capacity, lifetime, cleanup, polling, and
259
- installation safety. Exit 8 means accepted or pending, never applied.
367
+ installation safety. Exit 8 is reserved for an actual bounded `--wait`
368
+ deadline timeout; a successful non-wait inspection exits 0 while reporting an
369
+ accepted, pending, applying, ready, or empty current state.
370
+
371
+ The `tools` commands use only the owner token already stored for the named
372
+ server. They do not accept token argv or `--token-file`. `tools list` returns
373
+ the registered immutable profiles. `tools install` sends only `{profileId}`
374
+ with an idempotency key; callers cannot supply download URLs, shell commands,
375
+ argv, environment variables, or artifacts. With `--wait`, `ready` exits 0,
376
+ `failed` or `cancelled` exits 5, and a bounded timeout exits 8. JSON contains
377
+ only the public profile/setup-operation fields returned by WarpMetal.
378
+
379
+ Codex is a released automatic tool profile when the public
380
+ `/agent-tool-profiles` endpoint advertises it as `available`. WarpMetal installs
381
+ the exact registered artifacts when selected at order time or through
382
+ `tools install`. Claude Code uses the released `claude-code` automatic tool
383
+ profile under the same public availability gate. Claude Managed Agents are separate:
384
+ `claude-managed-ant` is an install-only CLI profile. Installing `ant` does not
385
+ authenticate a worker and does not activate Managed Agents. Cursor CLI remains
386
+ manual and unavailable as an automatic profile until separately qualified later.
387
+ Gemini CLI remains manual.
388
+
389
+ For order-time setup, the runtime JSON file may contain the exact optional
390
+ shape below in addition to `sandboxes`:
391
+
392
+ ```json
393
+ {
394
+ "sandboxes": [
395
+ { "name": "codex-worker", "size": "small" },
396
+ { "name": "claude-worker", "size": "small" },
397
+ { "name": "managed-worker", "size": "small" }
398
+ ],
399
+ "setup": {
400
+ "version": 1,
401
+ "sandboxProfiles": [
402
+ { "sandboxName": "codex-worker", "profileId": "codex" },
403
+ { "sandboxName": "claude-worker", "profileId": "claude-code" },
404
+ { "sandboxName": "managed-worker", "profileId": "claude-managed-ant" }
405
+ ]
406
+ }
407
+ }
408
+ ```
409
+
410
+ Every selection must reference a sandbox name in the same file. Unknown fields,
411
+ including URL, shell, command, argv, environment, or artifact overrides, are
412
+ rejected before an API request.
260
413
 
261
414
  ## Per-agent access
262
415
 
@@ -315,9 +468,16 @@ ssh -t <alias> gemini
315
468
  ssh <alias> gemini -p '<task>'
316
469
  ```
317
470
 
318
- Install and authenticate Codex, Claude Code, Cursor CLI, or Gemini CLI inside
319
- the sandbox first. WarpMetal does not install, authenticate, configure, or
320
- receive credentials for those tools.
471
+ Authenticate each selected provider tool inside the sandbox after setup is
472
+ ready. The public `/agent-tool-profiles` response is authoritative for
473
+ availability and checkout selection. Claude Code uses the `claude-code`
474
+ automatic tool profile. Claude Managed Agents are
475
+ separate: `claude-managed-ant` is an install-only CLI profile. Installing `ant`
476
+ does not authenticate a worker and does not activate Managed Agents. Cursor CLI
477
+ remains manual and unavailable as an automatic profile until separately
478
+ qualified later. Install and authenticate Cursor CLI or Gemini CLI inside the
479
+ sandbox. WarpMetal does not perform provider login or receive provider
480
+ credentials.
321
481
 
322
482
  [Codex Desktop](https://learn.chatgpt.com/docs/remote-connections) reads
323
483
  the concrete alias from `~/.ssh/config` and starts Codex through the sandbox
@@ -341,6 +501,9 @@ warpmetal agent install --target <codex|claude|all> [--scope user|project]
341
501
  warpmetal state list --json
342
502
  ```
343
503
 
504
+ `warpmetal agent install` installs only the bundled WarpMetal skill; it does
505
+ not install sandbox tools or select a sandbox tool profile.
506
+
344
507
  `state list` returns identifiers, public runtime metadata, and
345
508
  credential-presence booleans only. Never
346
509
  open the underlying state file from an agent session.
@@ -46,6 +46,20 @@ Pass it to `warpmetal order prepare --runtime-file <path>`. If it contains a
46
46
  temporary sandbox, pass `--confirm TEMPORARY`. Preparing remains unpaid; keep
47
47
  the existing separate interactive-or-autonomous payment authority check.
48
48
 
49
+ For released Codex and Claude Code automatic profiles, an agent-enabled first
50
+ boot passes a closed nested-sandbox opt-in through verified
51
+ provider cloud-init. The signed Runtime bundle owns the exact-path AppArmor
52
+ policy for the neutral image's immutable Bubblewrap helper. No later customer
53
+ SSH key is used. No public order field or CLI flag exists; VPS-only cloud-init
54
+ remains unchanged. Existing enrolled hosts require reload/reprovision for this policy
55
+ because no silent in-place repair command is claimed.
56
+ Runtime does not report a new or replaced sandbox generation as running until a
57
+ fixed, credential-free inner-Bubblewrap oracle proves nested namespaces, an
58
+ inherited read-only view of the outer Agent Box's already isolated procfs, an
59
+ allowed workspace write, empty Linux capability sets, `no-new-privileges`, and
60
+ protected-root write denial; failure stops the container before access grants
61
+ or tool setup advance.
62
+
49
63
  For an existing ready server:
50
64
 
51
65
  Use the WarpMetal owner account `root` for every supported host image; do not
@@ -300,10 +314,15 @@ ssh -t <alias> gemini
300
314
  ssh <alias> gemini -p '<task>'
301
315
  ```
302
316
 
303
- Install and authenticate Codex, Claude Code, Cursor CLI, or Gemini CLI inside
304
- the sandbox first. Provider authentication and credentials are sandbox-owned
305
- and persist only in the sandbox home. WarpMetal does not install, authenticate,
306
- configure, or receive credentials for those tools.
317
+ Authenticate each selected provider tool inside the sandbox after setup is
318
+ ready. The public `/agent-tool-profiles` endpoint is authoritative for profile
319
+ availability. Claude Code uses the released `claude-code` automatic tool
320
+ profile. Claude Managed Agents are separate: `claude-managed-ant` is an
321
+ install-only CLI profile. Installing `ant` does not authenticate a worker and
322
+ does not activate Managed Agents. Cursor CLI remains manual and unavailable as
323
+ an automatic profile until separately qualified later. Provider authentication
324
+ and credentials are sandbox-owned and persist only in the sandbox home;
325
+ WarpMetal does not perform provider login or receive those credentials.
307
326
 
308
327
  [Codex Desktop](https://learn.chatgpt.com/docs/remote-connections)
309
328
  discovers a concrete alias through `~/.ssh/config`, requires ordinary