@visa/cli 4.1.0-rc.65 → 4.1.0-rc.67

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.
@@ -6,7 +6,7 @@ allowed-tools: Bash(visa:*) Bash(visa-cli:*) Bash(node:*) Bash(npm:*) Bash(npx:*
6
6
  metadata:
7
7
  author: visa
8
8
  homepage: https://visacli.sh/agents
9
- version: '0.6.6'
9
+ version: '0.6.7'
10
10
  # OpenClaw-namespaced extension (agentskills.io keeps `metadata` free-form, so
11
11
  # non-standard runtime config lives here — `user-invocable` is not a standard
12
12
  # top-level field). OpenClaw auto-installs `install[]` when `requires.bins` are
@@ -165,15 +165,20 @@ possible (re-pairing an existing identity silently dead-ends). Do this instead:
165
165
  Read the name from the response. Do **not** start another hand-off. `--new` /
166
166
  `force:true` exists only if they explicitly want a _second, separate_ agent.
167
167
  2. **Report status honestly — "connected" is five separate things**, not one. Never
168
- imply the agent can spend just because it's connected:
168
+ imply the agent can spend just because it's connected. Don't guess from prose —
169
+ read it live from tools: `agent_capabilities` returns the DERIVED capability map
170
+ (the identity + wallet + mail base plus card/tap/subway availability),
171
+ `get_status` reports enrollment / account / version, and `agent_login` establishes
172
+ or confirms the account session that spending grants require.
169
173
  - **Identity** — connected (`.visa` name bound to _this user's_ account). ✓ once `already_connected`.
170
- - **Spending** — a _separate human approval_, and there are two rails. For the
171
- Turnkey **wallet** (x402 stablecoin), the owner approves a wallet grant in
172
- **account settings agent wallet → Spend** (see "What you can do once paired"
173
- below). For **card** checkout, the owner approves in **account settings → agent
174
- card Spend**. You **cannot** self-grant either; never tell the user to run
175
- `visa agent add-rail` (it refuses identity-only agents), and never self-mint a
176
- wallet with `wallet_init` on mainnet it throws until the owner's delegation lands.
174
+ - **Spending** — a _separate human approval_, and there are two rails, each
175
+ approved on the **v4 agent dashboard** (`app.visacli.sh/agent/enroll`) not any
176
+ account-settings page (that legacy surface is retired). The Turnkey
177
+ **wallet:x402** rail (stablecoin) is approved with the owner's **sign-in session**
178
+ (the Google/email auth-proxy) **no passkey**. The **card:vic** rail is approved
179
+ with a **passkey**. You **cannot** self-grant either; there is no
180
+ `visa agent add-rail` command, and never self-mint a wallet with `wallet_init` on
181
+ mainnet — it throws until the owner's delegation lands.
177
182
  - **Mesh (`.visa` messaging)** — with `SUBWAY_MESH=visa`, a returning device now
178
183
  registers on `pair`; if `meshRegistered` is false, `visa register <name>` joins it.
179
184
  - **Trusted (TAP)** — follows spend/provisioning; don't promise it before then.
@@ -193,24 +198,40 @@ never self-mints it. On mainnet (production) `wallet_init` throws
193
198
  setup step. Follow this sequence:
194
199
 
195
200
  - [ ] **Pair** the identity (the flow above). Identity only — no wallet yet.
201
+ - [ ] **Sign in the account session FIRST.** Wallet delegation is an account
202
+ operation, so this runtime needs a live owner session before `grant-wallet`:
203
+ `agent_login` (MCP) or `visa agent login` (CLI). Without a session the grant has
204
+ no account to delegate from.
196
205
  - [ ] **Resolve the next step** with `setup_agent` (`{"rail":"wallet"}`), or drive the
197
- raw `visa agent grant-wallet <agentId>` ceremony. `setup_agent` reports
198
- `needs_wallet` and points at the owner-approval grant — it does not tell you to
199
- self-mint.
200
- - [ ] **Owner approves the wallet.** The human runs / confirms the wallet grant and
201
- approves it in the account UI (**account settings agent wallet → Spend**),
202
- confirming caps and passkey. That approval registers the delegated signer + caps
203
- and writes the delegated Turnkey credential (`turnkey.json`) to this runtime.
204
- You cannot approve on their behalf.
206
+ raw `visa agent grant-wallet <agentId>` ceremony. `setup_agent` sequences
207
+ identity → wallet → policy → ready and points at the owner-approval grant — it
208
+ does not tell you to self-mint.
209
+ - [ ] **Owner approves the wallet.** The human confirms the wallet grant on the **v4
210
+ agent dashboard** (`app.visacli.sh/agent/enroll`), approving with their **sign-in
211
+ session no passkey** — and confirming the caps. That approval registers the
212
+ delegated Turnkey signer + caps and writes the delegated Turnkey credential
213
+ (`turnkey.json`) to this runtime. You cannot approve on their behalf.
205
214
  - [ ] **Confirm the real wallet** with `wallet_status` (or `visa wallet show`). Only a
206
215
  provisioned/delegated credential — not the served tool list — means the wallet is
207
216
  usable; `agent_capabilities.wallet.available` reflects this.
217
+ - [ ] **Set the spend policy** with `wallet_policy_set` — per-transaction / daily /
218
+ session USD caps (plus optional network and merchant allow/deny lists) that refuse
219
+ any x402 payment BEFORE it is signed. This is the `policy` step in the
220
+ `setup_agent` chain, between a delegated wallet and spending.
208
221
  - [ ] **Spend** with `wallet_pay` (x402), enforced by the owner-approved local policy
209
222
  caps. Never raise a human-approved limit yourself.
210
223
 
211
- Card checkout is a separate upgrade on top of this Turnkey-only base approve a card
212
- in **account settings agent card Spend**, then `start_card_mandate` / `pay_merchant`
213
- draw against it. Neither rail is enabled by pairing.
224
+ Once the wallet is delegated and a policy is set, these are the served wallet tools this
225
+ agent can actually call: `wallet_discover` (search the public x402 Bazaar),
226
+ `wallet_probe` (read a challenge without paying), `wallet_pay` / `wallet_directory_pay`
227
+ (pay, policy-enforced), `wallet_history` / `wallet_reconcile` (local ledger + resolve
228
+ `reconciling` holds), `wallet_fund` (funding address + faucet), and `wallet_export`
229
+ (export key material — dangerous). All spending is gated by the owner-approved local
230
+ policy caps.
231
+
232
+ Card checkout is a separate upgrade on top of this Turnkey-only base — approve a card on
233
+ the **v4 agent dashboard** (`app.visacli.sh/agent/enroll`) with a **passkey**, then
234
+ `start_card_mandate` / `pay_merchant` draw against it. Neither rail is enabled by pairing.
214
235
 
215
236
  ## Core flow
216
237
 
@@ -300,6 +321,31 @@ a reachable `SUBWAY_RELAY_MULTIADDR`. If those tools or the relay are unavailabl
300
321
  that clearly and stop. Do not imply that identity pairing alone granted directory or
301
322
  messaging authority, and do not improvise another transport.
302
323
 
324
+ ## Optional agent mailbox (separate from pairing)
325
+
326
+ Pairing does not provision an email address or inbox. If the agent needs a
327
+ mailbox — e.g. to receive a merchant's account-signup or one-time-code email —
328
+ connect one explicitly, from the paired runtime, with the raw CLI:
329
+
330
+ ```
331
+ visa agent mail-connect <agentId>
332
+ ```
333
+
334
+ This is CLI-only; no pairing step or MCP tool connects a mailbox. It requires an
335
+ already-paired stable-agent identity on this runtime — it reads the local agent
336
+ record and proves the Ed25519 identity to the service. It issues the stable
337
+ agent mailbox if one does not exist, then stores an inbox-scoped credential in an
338
+ owner-only `0600` runtime file so this runtime can read that one inbox.
339
+
340
+ Be honest about scope. A mailbox grants an email address and the ability to read
341
+ that inbox — nothing more. It is **not** identity, a wallet, spend authority, a
342
+ card, or a `.visa` name, and it never authorizes a payment. Do not claim pairing
343
+ set up mail. Once connected, the MCP `wallet_mail_status`, `wallet_mail_read`,
344
+ and `wallet_mail_await_otp` tools read the inbox (e.g. to await a sender-checked
345
+ one-time code); without the scoped credential those reads fail closed. Keep the
346
+ org-wide AgentMail key off the runtime — provisioning happens only through
347
+ `mail-connect` under operator control.
348
+
303
349
  ## Optional checkout profile (separate from pairing)
304
350
 
305
351
  Pairing does not enable card checkout. If the operator has separately provisioned card
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visa/cli",
3
- "version": "4.1.0-rc.65",
3
+ "version": "4.1.0-rc.67",
4
4
  "description": "Visa CLI runtime for stable agent identity and separately authorized payment capabilities",
5
5
  "bin": {
6
6
  "visa-cli": "./bin/visa-cli.js",
package/server.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
3
3
  "name": "io.github.visa-crypto-labs/visa-cli",
4
- "version": "4.1.0-rc.65",
4
+ "version": "4.1.0-rc.67",
5
5
  "title": "Visa CLI",
6
6
  "description": "Pair a human-approved agent identity, configure payment capabilities separately, and discover and pay x402 services from your AI coding assistant.",
7
7
  "websiteUrl": "https://github.com/Visa-Crypto-Labs/Visa-mono/tree/main/packages/cli#readme",
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "registryType": "npm",
11
11
  "identifier": "@visa/cli",
12
- "version": "4.1.0-rc.65",
12
+ "version": "4.1.0-rc.67",
13
13
  "transport": {
14
14
  "type": "stdio"
15
15
  },