@bnbagent/studio-cli 0.0.6-alpha.7 → 0.0.6-alpha.8

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.
@@ -1,128 +1,76 @@
1
1
  ---
2
2
  name: bnbagent-studio-use-azure-foundry
3
- description: When the user wants to deploy or operate an A2A bnbagent-studio project on Azure AI Foundry Hosted Agents scaffold with `bag init --runtime azure-foundry --protocol A2A`, deploy with `bag deploy --provider azure` (container-only Invocations contract; ALL cloud execution is delegated to pinned `@bnbagent/deploy-cli@0.4.14`, SDK/REST with browser login no `az`/`azd` CLIs), and run lifecycle commands with `--provider azure` when multiple deployments exist. Native MCP deploy is not supported on Azure yet; use AgentCore for MCP.
3
+ description: When the user wants to deploy or operate an A2A bnbagent-studio project on Azure AI Foundry Hosted Agents - scaffold with `bag init --runtime azure-foundry --protocols A2A`, deploy with `bag deploy --provider azure` (container-only Invocations contract; all cloud lifecycle execution is delegated to pinned `@bnbagent/deploy-cli@0.4.14`, SDK/REST with browser login - no `az`/`azd` CLIs), and run lifecycle commands with `--provider azure` when multiple deployments exist. Native MCP deploy is not supported on Azure yet; use AgentCore for MCP.
4
4
  ---
5
5
 
6
- > **Reference file** of the `bnbagent-studio` router skill installed at `bnbagent-studio/references/` and loaded on demand (not a standalone skill). Route here via the router's decision tree.
6
+ > **Reference file** of the `bnbagent-studio` router skill - installed at `bnbagent-studio/references/` and loaded on demand (not a standalone skill). Route here via the router's decision tree.
7
7
 
8
8
  # bnbagent-studio-use-azure-foundry
9
9
 
10
- > **Preview not advertised in this release.** Azure Foundry support is fully wired but hidden from the `--runtime` menu and the deploy provider menu; these steps still work if you select `azure-foundry` / `--provider azure` explicitly. The most recent end-to-end live verification predates the TypeScript rewrite treat your first deploy as a verification run.
10
+ > **Preview - not advertised in this release.** Azure Foundry support is fully wired but hidden from the `--runtime` menu and the deploy provider menu; these steps still work if you select `azure-foundry` / `--provider azure` explicitly. The most recent end-to-end live verification predates the TypeScript rewrite - treat your first deploy as a verification run.
11
11
 
12
- Procedure for deploying and operating the seller Agent on **Azure AI
13
- Foundry Hosted Agents** (`[stack].runtime = "azure-foundry"`). ALL cloud
14
- execution — browser login, Foundry onboarding, the container registry image
15
- build/push, secret provisioning, and the RBAC self-grant — is **delegated to
16
- the pinned `@bnbagent/deploy-cli`** (run via `bunx --bun`; override with
17
- `BNBAGENT_DEPLOY_COMMAND`), whose Azure provider is **SDK/REST-only**. Studio
18
- never shells out to (or requires) the `az` / `azd` CLIs.
12
+ Procedure for deploying and operating the seller Agent on **Azure AI Foundry Hosted Agents** (`[stack].runtime = "azure-foundry"`). ALL cloud execution - browser login, Foundry onboarding, the container registry image build/push, secret provisioning, and the RBAC self-grant - is **delegated to the pinned `@bnbagent/deploy-cli`** (run via `bunx --bun`; override with `BNBAGENT_DEPLOY_COMMAND`), whose Azure provider is **SDK/REST-only**. Studio never shells out to (or requires) the `az` / `azd` CLIs.
19
13
 
20
14
  ```
21
15
  <workspace>/
22
16
  ├── app/agent/ # the deployed code (src/foundryMain.ts host + Dockerfile here)
23
17
  │ ├── studio.toml # [azure] block: location / account_name / subdomain / project_name / agent_endpoint
24
18
  │ └── Dockerfile # the container image bnbagent-deploy builds + pushes
25
- └── .studio/ # secrets + wallets (workspace root never in the image)
19
+ └── .studio/ # secrets + wallets (workspace root - never in the image)
26
20
  ```
27
21
 
28
- > **Deploy model: CONTAINER-ONLY.** The deploy-cli Azure provider rejects Node
29
- > zip artifacts, so every azure-foundry deploy builds the scaffolded
30
- > `app/agent/Dockerfile` **locally with Docker** (linux/amd64) and pushes it
31
- > to the auto-provisioned Azure Container Registry; Foundry Agent Service
32
- > pulls and runs the image. A running Docker daemon is required.
22
+ > **Deploy model: CONTAINER-ONLY.** The deploy-cli Azure provider rejects Node zip artifacts, so every azure-foundry deploy builds the scaffolded `app/agent/Dockerfile` **locally with Docker** (linux/amd64) and pushes it to the auto-provisioned Azure Container Registry; Foundry Agent Service pulls and runs the image. A running Docker daemon is required.
33
23
 
34
- > **Protocol: A2A projects only for now.** The deployed Node host speaks
35
- > Foundry's pass-through Invocations container contract on `:8088`
36
- > (`GET /readiness`, `POST /invocations`). That endpoint is not native MCP
37
- > streamable HTTP; `bag init` and provider selection reject azure-foundry +
38
- > MCP instead of deploying a container that can never become ready.
24
+ > **Protocol: A2A projects only for now.** The deployed Node host speaks Foundry's pass-through Invocations container contract on `:8088` (`GET /readiness`, `POST /invocations`). That endpoint is not native MCP streamable HTTP; `bag init` and provider selection reject azure-foundry + MCP instead of deploying a container that can never become ready.
39
25
 
40
- > **Auth is a browser login.** The first delegated run opens a browser to sign
41
- > in to the right tenant/subscription — there is no `az login` / `azd auth
42
- > login` step and no CLI to install.
26
+ > **Auth is a browser login.** The first delegated run opens a browser to sign in to the right tenant/subscription - there is no `az login` / `azd auth login` step and no CLI to install.
43
27
 
44
28
  ## Prerequisites
45
29
 
46
- 1. **Bun 1.3+ (`bunx`) on PATH** the pinned `@bnbagent/deploy-cli` runs
47
- through it.
48
- 2. **Docker running** the image is built locally (linux/amd64) before push.
49
- 3. **An Azure subscription** the operator may provision in (Foundry
50
- account/project, container registry, hosted agent); sign-in happens via
51
- the browser at deploy time.
30
+ 1. **Bun 1.3+ (`bunx`) on PATH** - the pinned `@bnbagent/deploy-cli` runs through it.
31
+ 2. **Docker running** - the image is built locally (linux/amd64) before push.
32
+ 3. **An Azure subscription** the operator may provision in (Foundry account/project, container registry, hosted agent); sign-in happens via the browser at deploy time.
52
33
 
53
34
  ## ⚠️ Foundry gotchas (read before deploying)
54
35
 
55
36
  `bag deploy prepare --runtime azure-foundry` encodes these as checks, but know them:
56
37
 
57
- - **Region must support Hosted Agents.** Default `eastus2`. `eastus` does NOT.
58
- Prepare refuses an unsupported `[azure].location` (else deploy fails with
59
- `Unsupported region for Foundry Hosted Agents`).
60
- - **Account name MUST equal the custom subdomain.** The runtime derives
61
- `https://{account_name}.services.ai.azure.com`; a mismatch resolves to
62
- NXDOMAIN and the agent returns HTTP 500. `bag init` sets them equal — keep them
63
- equal in `[azure]`.
64
- - **Empty `APPLICATIONINSIGHTS_CONNECTION_STRING` crashes the exporter.** The
65
- emitted entrypoint drops it when blank don't remove that guard.
66
- - **The hosted container contract is fixed.** Keep `AGENT_PORT=8088`,
67
- `GET /readiness` returning HTTP 200, and `POST /invocations`. Local A2A still
68
- runs on `:9000`; do not copy that local port into the Foundry Dockerfile.
69
- - **Prepare checks are local-only.** They validate the scaffold (region,
70
- subdomain, entrypoint + Dockerfile, an OpenAI-compatible `[llm]` provider,
71
- twak readiness) without any cloud call; Azure auth happens at deploy time.
72
-
73
- ## Runtime secrets — the delegated hand-off
74
-
75
- `bag deploy --provider azure` bundles the runtime secrets (provider/storage keys,
76
- `WALLET_PASSWORD`, the encrypted keystore as `WALLET_KEYSTORE_JSON` — plus the
77
- `BNBAGENT_LLM_*` wiring the Foundry host reads) and hands them to
78
- bnbagent-deploy as a private (mode 0600) tempdir envFile; the deploy CLI
79
- provisions them for the hosted agent as **Foundry CustomKeys**. No vault setup,
80
- no role assignments, and no cloud CLI on your side.
81
-
82
- > The encrypted keystore (`.studio/wallets/`) stays at the workspace root and
83
- > rides only that secret channel — never baked into the image.
84
-
85
- Provider-native overrides go in the optional `studio.toml [deploy.foundry]`
86
- table (verbatim deploy-spec keys; deploy-cli 0.4.14 consumes `account`, `cpu`,
87
- `location`, `memory`, `project`, `projectEndpoint`, `protocol`, `registry` and
88
- warns about anything else). The `[azure]` block's `account_name` /
89
- `project_name` / `project_endpoint` / `location` win over conflicting
90
- `[deploy.foundry]` keys.
38
+ - **Region must support Hosted Agents.** Default `eastus2`. `eastus` does NOT. Prepare refuses an unsupported `[azure].location` (else deploy fails with `Unsupported region for Foundry Hosted Agents`).
39
+ - **Account name MUST equal the custom subdomain.** The runtime derives `https://{account_name}.services.ai.azure.com`; a mismatch resolves to NXDOMAIN and the agent returns HTTP 500. `bag init` sets them equal - keep them equal in `[azure]`.
40
+ - **Empty `APPLICATIONINSIGHTS_CONNECTION_STRING` crashes the exporter.** The emitted entrypoint drops it when blank - don't remove that guard.
41
+ - **The hosted container contract is fixed.** Keep `AGENT_PORT=8088`, `GET /readiness` returning HTTP 200, and `POST /invocations`. Local A2A still runs on `:9000`; do not copy that local port into the Foundry Dockerfile.
42
+ - **Prepare checks are local-only.** They validate the scaffold (region, subdomain, entrypoint + Dockerfile, an OpenAI-compatible `[llm]` provider, twak readiness) without any cloud call; Azure auth happens at deploy time.
43
+
44
+ ## Runtime secrets - the delegated hand-off
45
+
46
+ `bag deploy --provider azure` bundles the runtime secrets (provider/storage keys, `WALLET_PASSWORD`, the encrypted keystore as `WALLET_KEYSTORE_JSON` - plus the `BNBAGENT_LLM_*` wiring the Foundry host reads) and hands them to bnbagent-deploy as a private (mode 0600) tempdir envFile; the deploy CLI provisions them for the hosted agent as **Foundry CustomKeys**. No vault setup, no role assignments, and no cloud CLI on your side.
47
+
48
+ > The encrypted keystore (`.studio/wallets/`) stays at the workspace root and rides only that secret channel - never baked into the image.
49
+
50
+ Provider-native overrides go in the optional `studio.toml [deploy.foundry]` table (verbatim deploy-spec keys; deploy-cli 0.4.14 consumes `account`, `cpu`, `location`, `memory`, `project`, `projectEndpoint`, `protocol`, `registry` and warns about anything else). The `[azure]` block's `account_name` / `project_name` / `project_endpoint` / `location` win over conflicting `[deploy.foundry]` keys.
91
51
 
92
52
  ## Typical workflow
93
53
 
94
54
  ### A. Scaffold
95
55
 
96
56
  ```bash
97
- bag init my-agent --runtime azure-foundry
57
+ bag init myagent --runtime azure-foundry
98
58
  ```
99
59
 
100
60
  `bag init` makes no Azure calls; all cloud onboarding happens at deploy time.
101
61
 
102
62
  ### B. Deploy
103
63
 
104
- > **Preview, live E2E verified 2026-07-20.** The A2A azure-foundry path was
105
- > verified through container build/push, CustomKeys wallet injection, hosted
106
- > agent create/update, cold-start smoke, status, invoke, logs, a signed
107
- > `negotiate`, and destroy. Foundry itself remains a preview service.
64
+ > **Preview, live E2E verified 2026-07-20.** The A2A azure-foundry path was verified through container build/push, CustomKeys wallet injection, hosted agent create/update, cold-start smoke, status, invoke, logs, a signed `negotiate`, and destroy. Foundry itself remains a preview service.
108
65
 
109
- > ⚠️ **First deploy: relay the Azure-resource notice to the user.** `bag deploy
110
- > --provider azure` prints a notice that the delegated deploy CREATES billable Azure
111
- > resources (Foundry account/project, container registry, hosted agent
112
- > container) under the signed-in subscription. Show it, get consent, then
113
- > deploy.
66
+ > ⚠️ **First deploy: relay the Azure-resource notice to the user.** `bag deploy --provider azure` prints a notice that the delegated deploy CREATES billable Azure resources (Foundry account/project, container registry, hosted agent container) under the signed-in subscription. Show it, get consent, then deploy.
114
67
 
115
68
  ```bash
116
69
  bag deploy prepare --runtime azure-foundry # local readiness gate (region/subdomain/Dockerfile)
117
70
  bag deploy --provider azure # delegated: login → onboard → build+push → CustomKeys → deploy [--smoke]
118
71
  ```
119
72
 
120
- `bag deploy --provider azure` runs an HTTP contract smoke by default (pass
121
- `--skip-smoke` to omit it) and captures the Foundry endpoint into
122
- `app/agent/studio.toml [azure].agent_endpoint`. If Foundry creates the resource
123
- but that post-create check fails, Studio still records the discovered endpoint
124
- so `status`, `logs`, and `destroy` can manage the resource; the deploy command
125
- continues to return non-zero.
73
+ `bag deploy --provider azure` runs an HTTP contract smoke by default (pass `--skip-smoke` to omit it) and captures the Foundry endpoint into `app/agent/studio.toml [azure].agent_endpoint`. If Foundry creates the resource but that post-create check fails, Studio still records the discovered endpoint so `status`, `logs`, and `destroy` can manage the resource; the deploy command continues to return non-zero.
126
74
 
127
75
  ### C. Validate / operate
128
76
 
@@ -131,10 +79,7 @@ bag deploy status # all recorded providers + live sta
131
79
  bag deploy logs --provider azure --limit 50 # delegated Hosted Agent logs
132
80
  ```
133
81
 
134
- The built-in smoke proves the container contract, not the seller signature.
135
- For a release E2E, invoke with a complete `negotiate` envelope and require
136
- `response.accepted=true`, a non-empty `negotiation_hash`, and `provider_sig`.
137
- The Invocations body is `{"input":"<serialized skill JSON>"}`.
82
+ The built-in smoke proves the container contract, not the seller signature. For a release E2E, invoke with a complete `negotiate` envelope and require `response.accepted=true`, a non-empty `negotiation_hash`, and `provider_sig`. The Invocations body is `{"input":"<serialized skill JSON>"}`.
138
83
 
139
84
  ### D. Tear down
140
85
 
@@ -144,21 +89,15 @@ bag deploy destroy --provider azure --execute # delegates `destroy --yes`
144
89
  bag deploy destroy --provider azure --execute --purge # retained resources too
145
90
  ```
146
91
 
147
- `--purge` also removes the retained resources the deploy record tracks
148
- including the soft-deleted Cognitive Services account, freeing the custom
149
- subdomain immediately (otherwise held ~48h). A successful teardown clears the
150
- recorded `[azure].agent_endpoint`.
92
+ `--purge` also removes the retained resources the deploy record tracks - including the soft-deleted Cognitive Services account, freeing the custom subdomain immediately (otherwise held ~48h). A successful teardown clears the recorded `[azure].agent_endpoint`.
151
93
 
152
94
  ## Scope note
153
95
 
154
- Azure Foundry is an alternate runtime for the whole seller agent. There is no
155
- separate keyless Layer B service to keep in sync; ERC-8183 seller delivery still
156
- runs through the single signer runtime selected in `studio.toml [stack].runtime`.
96
+ Azure Foundry is an alternate runtime for the whole seller agent. There is no separate keyless Layer B service to keep in sync; ERC-8183 seller delivery still runs through the single signer runtime selected in `studio.toml [stack].runtime`.
157
97
 
158
98
  ## Reference
159
99
 
160
100
  - `bag deploy --help` / `bag deploy <command> --help` (authoritative for commands + flags)
161
- - `app/agent/studio.toml [azure]` location / account_name / subdomain /
162
- project_name / agent_endpoint
163
- - `app/agent/studio.toml [deploy.foundry]` provider-native deploy-spec passthrough
164
- - `BNBAGENT_DEPLOY_COMMAND` — override the pinned `bunx --bun @bnbagent/deploy-cli@<pin>` invocation (E2E/dev)
101
+ - `app/agent/studio.toml [azure]` - location / account_name / subdomain / project_name / agent_endpoint
102
+ - `app/agent/studio.toml [deploy.foundry]` - provider-native deploy-spec passthrough
103
+ - `BNBAGENT_DEPLOY_COMMAND` - override the pinned `bunx --bun @bnbagent/deploy-cli@<pin>` invocation (E2E/dev)
@@ -3,18 +3,13 @@ name: bnbagent-studio-use-bnb-trial
3
3
  description: Use when deploying or operating a bnbagent-studio seller on the BNB Chain managed 48h testnet trial, including GitHub device login, trial eligibility/expiry, staging verification, status, logs, verify, and destroy.
4
4
  ---
5
5
 
6
- > **Reference file** of the `bnbagent-studio` router skill. Load it only for
7
- > provider `bnb` deployment work.
6
+ > **Reference file** of the `bnbagent-studio` router skill. Load it only for provider `bnb` deployment work.
8
7
 
9
8
  # Use the BNB Chain 48h trial
10
9
 
11
- Treat this provider as a temporary testnet sandbox. Require a throwaway wallet,
12
- keep `bsc-testnet`, and explain that the runtime signing material is transmitted
13
- to the operator's managed secret store for the trial. Never use a mainnet key.
10
+ Treat this provider as a temporary testnet sandbox. Require a throwaway wallet, keep `bsc-testnet`, and explain that the runtime signing material is transmitted to the operator's managed secret store for the trial. Never use a mainnet key.
14
11
 
15
- All auth and cloud lifecycle work must cross the pinned
16
- `@bnbagent/deploy-cli@0.4.14` boundary. Do not call the AWS CLI or platform
17
- REST routes directly.
12
+ All auth and cloud lifecycle work must cross the pinned `@bnbagent/deploy-cli@0.4.14` boundary. Do not call the AWS CLI or platform REST routes directly.
18
13
 
19
14
  ## Select and authenticate
20
15
 
@@ -26,27 +21,18 @@ bag platform credit
26
21
  bag deploy --provider bnb
27
22
  ```
28
23
 
29
- `bag platform login` must print the GitHub verification URL and device code. It
30
- must not open a browser. Give both values to the user and wait for them to
31
- complete verification.
24
+ `bag platform login` must print the GitHub verification URL and device code. It must not open a browser. Give both values to the user and wait for them to complete verification.
32
25
 
33
26
  Before offering BNB, inspect the trial result:
34
27
 
35
28
  - `available`: selectable; explain that the 48h clock starts on first success.
36
29
  - `active`: selectable; show remaining time and expiry immediately.
37
- - `expired`: show the row and expiry, but mark it unavailable and do not select
38
- it. AWS remains independently available when compatible with the
39
- project scaffold.
40
- - unknown/auth required: explain that eligibility cannot be confirmed until
41
- login; the delegated deploy rechecks before building.
30
+ - `expired`: show the row and expiry, but mark it unavailable and do not select it. AWS remains independently available when compatible with the project scaffold.
31
+ - unknown/auth required: explain that eligibility cannot be confirmed until login; the delegated deploy rechecks before building.
42
32
 
43
- Every deploy/redeploy uses scheme C. Never silently reuse `[deploy].destination`
44
- or the last provider. A sole active BNB record may produce an explicit “update
45
- BNB” action. Switching to another compatible provider creates a coexisting
46
- deployment; it does not destroy BNB automatically.
33
+ Every deploy/redeploy uses scheme C. Never silently reuse `[deploy].destination` or the last provider. A sole active BNB record may produce an explicit “update BNB” action. Switching to another compatible provider creates a coexisting deployment; it does not destroy BNB automatically.
47
34
 
48
- Automation requires `--provider bnb --yes`. When another provider remains
49
- active, also require `--allow-multiple`.
35
+ Automation requires `--provider bnb --yes`. When another provider remains active, also require `--allow-multiple`.
50
36
 
51
37
  ## Operate
52
38
 
@@ -58,13 +44,9 @@ bag deploy destroy --provider bnb # dry-run
58
44
  bag deploy destroy --provider bnb --execute # destructive confirmation
59
45
  ```
60
46
 
61
- `status` lists every recorded provider and includes the live trial countdown.
62
- Use `--no-probe` only when local records are desired. With multiple deployments,
63
- logs/verify/destroy must select a provider interactively or pass `--provider`.
47
+ `status` lists every recorded provider and includes the live trial countdown. Use `--no-probe` only when local records are desired. With multiple deployments, logs/verify/destroy must select a provider interactively or pass `--provider`.
64
48
 
65
- Destroy clears only the BNB lifecycle record after the delegated delete
66
- succeeds. It does not delete the local keystore or the on-chain ERC-8004
67
- identity. Destroyed BNB slugs are retired; choose a fresh slug before redeploy.
49
+ Destroy clears only the BNB lifecycle record after the delegated delete succeeds. It does not delete the local keystore or the on-chain ERC-8004 identity. Destroyed BNB slugs are retired; choose a fresh slug before redeploy.
68
50
 
69
51
  ## Manual staging verification
70
52
 
@@ -81,12 +63,6 @@ bag deploy verify --provider bnb --skip-register
81
63
  bag deploy destroy --provider bnb
82
64
  ```
83
65
 
84
- Do not execute the final destructive step until the user explicitly approves
85
- `bag deploy destroy --provider bnb --execute`. For headless verification, use
86
- `BNBAGENT_API_TOKEN`, `BNBAGENT_API_URL`, `--provider bnb`, and `--yes`.
66
+ Do not execute the final destructive step until the user explicitly approves `bag deploy destroy --provider bnb --execute`. For headless verification, use `BNBAGENT_API_TOKEN`, `BNBAGENT_API_URL`, `--provider bnb`, and `--yes`.
87
67
 
88
- Treat both artifact channels as required release coverage. The 2026-07-20
89
- staging baseline passed ZIP and linux/arm64 container through deploy, status,
90
- OAuth-authenticated signed A2A negotiation, logs, and destroy. Do not infer
91
- funded delivery or durable-storage coverage from that smoke; those require the
92
- separate commerce flow in `docs/guides/verification.md`.
68
+ Treat both artifact channels as required release coverage. The 2026-07-20 staging baseline passed ZIP and linux/arm64 container through deploy, status, OAuth-authenticated signed A2A negotiation, logs, and destroy. Do not infer funded delivery or durable-storage coverage from that smoke; those require the separate commerce flow in `docs/guides/verification.md`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bnbagent-studio-using-altana-wallet
3
- description: Use when a bnbagent-studio project selects wallet.kind = "altana" and needs the encrypted admin keystore, bounded runtime session lifecycle, ERC-8183 quote checker, x402 allowance, local dev, or deployment limitation.
3
+ description: Use when a bnbagent-studio project selects wallet.kind = "altana" and needs the encrypted admin keystore, bounded runtime session lifecycle, ERC-8183 quote checker, x402 allowance, local dev, or session-only deployment and renewal.
4
4
  ---
5
5
 
6
6
  # Using the Altana wallet
@@ -8,17 +8,11 @@ description: Use when a bnbagent-studio project selects wallet.kind = "altana" a
8
8
  Altana separates trusted administration from runtime authority:
9
9
 
10
10
  - `.studio/wallets/<address>.json` is the encrypted admin keystore.
11
- - `.studio/wallets/altana-session.json` is the one bounded, expiring runtime
12
- session and must stay mode `0600`.
13
- - `WALLET_PASSWORD` is admin-only. The Agent gets `ALTANA_SESSION`, never the
14
- password or admin keystore.
15
- - Generic signing is refused. ERC-8183 uses `sessionQuoteSigner()` and the
16
- approved quote checker.
17
- - Deployment is deferred; `bag deploy --provider <provider>` hard-blocks before side effects.
18
- - Altana refuses generic message signing, so Pieverse SIWE cannot authenticate
19
- either `bag llm activate` or runtime credit renewal. An existing Pieverse key
20
- is usable only with `auto/free`; use OpenRouter, OpenAI, or Anthropic for paid
21
- models.
11
+ - `.studio/wallets/altana-session.json` is the one bounded, expiring runtime session and must stay mode `0600`.
12
+ - `WALLET_PASSWORD` is admin-only. The Agent gets `ALTANA_SESSION`, never the password or admin keystore.
13
+ - Generic signing is refused. ERC-8183 uses `sessionQuoteSigner()` and the approved quote checker.
14
+ - Deployment ships ONLY the serialized session as the `ALTANA_SESSION` runtime secret; the admin keystore and `WALLET_PASSWORD` never leave the operator machine. Renewal after expiry: `bag wallet session grant --force`, then re-run `bag deploy` (readiness warns under 7 days remaining). `bag deploy verify` needs `--skip-register` (no generic signing for the ERC-8004 register).
15
+ - Altana refuses generic message signing, so Pieverse SIWE cannot authenticate either `bag llm activate` or runtime credit renewal. An existing Pieverse key is usable only with `auto/free`; use OpenRouter, OpenAI, or Anthropic for paid models.
22
16
 
23
17
  ## Procedure
24
18
 
@@ -37,20 +31,15 @@ bag doctor
37
31
  bag dev
38
32
  ```
39
33
 
40
- Interactive grant recommendations are 10 U/day, 30 days, register=yes. In a
41
- non-TTY, pass `--budget-u`, `--expiry-days`, optional `--no-register`, and
42
- `--yes`. Stdout from a successful grant is only the session public key.
34
+ Interactive grant recommendations are 10 U/day, 30 days, register=yes. In a non-TTY, pass `--budget-u`, `--expiry-days`, optional `--no-register`, and `--yes`. Stdout from a successful grant is only the session public key.
43
35
 
44
- If quote-checker approval fails after the paid grant, the owner-only session
45
- file is preserved. Repair it with:
36
+ If quote-checker approval fails after the paid grant, the owner-only session file is preserved. Repair it with:
46
37
 
47
38
  ```bash
48
39
  bag wallet session grant --approve-only
49
40
  ```
50
41
 
51
- Replace with `grant --force`; the old on-chain revoke must succeed before the
52
- new grant begins. Revoke with `bag wallet session revoke --yes`; the file is
53
- deleted only after chain success.
42
+ Replace with `grant --force`; the old on-chain revoke must succeed before the new grant begins. Revoke with `bag wallet session revoke --yes`; the file is deleted only after chain success.
54
43
 
55
44
  x402 buying remains separate and exact-bounded:
56
45
 
@@ -58,12 +47,6 @@ x402 buying remains separate and exact-bounded:
58
47
  bag wallet session x402-setup --allowance-u <U> --yes
59
48
  ```
60
49
 
61
- Altana cannot be the b402 **seller** payout wallet for a positive price (paid
62
- mode allows `evm-local` and `twak` only); init, `bag x402 sell init`, and
63
- deploy readiness reject that paid combination. Explicit
64
- `price_usd = "0"` is allowed because FREE passthrough performs no payout and
65
- bypasses B402. The outbound buying authority above remains a separate feature.
50
+ Altana cannot be the b402 **seller** payout wallet for a positive price (paid mode allows `evm-local` and `twak` only); init, `bag x402 sell init`, and deploy readiness reject that paid combination. Explicit `price_usd = "0"` is allowed because FREE passthrough performs no payout and bypasses B402. The outbound buying authority above remains a separate feature.
66
51
 
67
- For troubleshooting, run `bag doctor` and `bag wallet session status`. Do not
68
- print, parse, or copy the `signer` portion of the serialized session, and never
69
- move `.studio/wallets/` under `app/agent/`.
52
+ For troubleshooting, run `bag doctor` and `bag wallet session status`. Do not print, parse, or copy the `signer` portion of the serialized session, and never move `.studio/wallets/` under `app/agent/`.