@visa/cli 4.1.0-rc.21 → 4.1.0-rc.23

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.
@@ -0,0 +1,79 @@
1
+ # Running the Visa pairing skill in OpenClaw **and** Hermes
2
+
3
+ `@visa/visa-cli-openclaw` is packaged for OpenClaw, but the v4 **pairing** capability
4
+ (`skills/pair-visa-agent/`) is deliberately runtime-agnostic: one skill works in OpenClaw,
5
+ [Hermes](https://github.com/NousResearch/hermes-agent), or any runtime that can run the
6
+ `visa` CLI or mount its MCP server. This doc is the map of how the two runtimes differ and
7
+ why a single skill suffices.
8
+
9
+ ## The blunt fact: plugins are NOT portable
10
+
11
+ | Axis | OpenClaw | Hermes (NousResearch) |
12
+ | --------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
13
+ | Language | **JavaScript/TypeScript** | **Python** |
14
+ | Plugin manifest | `openclaw.plugin.json` + `definePluginEntry` (`index.ts`) | `~/.hermes/plugins/<name>/plugin.yaml` + `__init__.py`, `ctx.register_tool(...)` |
15
+ | Config file | `~/.openclaw/openclaw.json` | `~/.hermes/config.yaml` |
16
+ | Skills | markdown `SKILL.md` (+ optional UV scripts) | markdown `~/.hermes/skills/<name>/` (agent-authored + curated Skills Hub) |
17
+ | MCP | `openclaw.json` → `mcp.servers.*` | `config.yaml` → `mcp_servers.*` |
18
+ | Persona | `SOUL.md` | `SOUL.md` |
19
+ | Migration | — | `hermes claw migrate` (v0.3.0+): imports SOUL, memory, **skills → `~/.hermes/skills/openclaw-imports/`**, allowlists, and **MCP servers** |
20
+
21
+ You cannot ship one plugin binary for both — the OpenClaw JS `pair_agent_*` tools in this
22
+ package do not load in Hermes. **Do not try.**
23
+
24
+ ## What IS portable: markdown skills + MCP
25
+
26
+ Both runtimes (a) read markdown skills natively and (b) mount MCP servers via an
27
+ equivalent config block (`mcp.servers.*` ↔ `mcp_servers.*`, same `command`/`args`/`env`,
28
+ same tool include/exclude). So the cross-runtime bridge is:
29
+
30
+ 1. **The `visa` CLI** — `visa agent enroll|enroll-claim --format json` (piped, load-bearing
31
+ exit codes). Any runtime that can execute a command can pair.
32
+ 2. **The `visa` MCP server** — the bundled `dist/mcp-server/index.js` entrypoint (there is
33
+ **no `visa mcp` subcommand**; `visa-cli install <client>` registers it, or configure it
34
+ by hand). Mount it identically in either runtime:
35
+
36
+ **OpenClaw** (`~/.openclaw/openclaw.json`):
37
+
38
+ ```json
39
+ {
40
+ "mcp": {
41
+ "servers": {
42
+ "visa-cli": {
43
+ "command": "node",
44
+ "args": ["<npm root -g>/@visa/cli/dist/mcp-server/index.js"]
45
+ }
46
+ }
47
+ }
48
+ }
49
+ ```
50
+
51
+ **Hermes** (`~/.hermes/config.yaml`):
52
+
53
+ ```yaml
54
+ mcp_servers:
55
+ visa-cli:
56
+ command: node
57
+ args: ['<npm root -g>/@visa/cli/dist/mcp-server/index.js']
58
+ ```
59
+
60
+ 3. **One `pair-visa-agent/SKILL.md`** — runtime-agnostic. It tells the agent to use
61
+ whichever pairing surface is present (`pair_agent_*` OpenClaw tools → `enroll_agent`
62
+ MCP tool → raw `visa agent …` CLI), all wrapping the same on-device hand-off.
63
+
64
+ ## So: how each runtime gets the capability
65
+
66
+ | Runtime | How it pairs |
67
+ | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
68
+ | **OpenClaw** | Install this package → the JS `pair_agent_start`/`pair_agent_poll` tools + the skill. (Or just the `visa` MCP server + the skill, no plugin.) |
69
+ | **Hermes** | Mount the `visa` MCP server in `config.yaml` (→ `enroll_agent`) and drop `pair-visa-agent/SKILL.md` into `~/.hermes/skills/`. `hermes claw migrate` will also import the skill from an existing OpenClaw install. No Python plugin required. |
70
+ | **Anything else** | `visa` on PATH + the skill. The skill's raw-CLI path is the universal fallback. |
71
+
72
+ ## Optional: a symmetric Hermes plugin
73
+
74
+ Not required — Hermes users get the full capability via the MCP server + skill above. If
75
+ you want the _same named tools_ (`pair_agent_start`/`pair_agent_poll`) in Hermes, a thin
76
+ `~/.hermes/plugins/visa-cli/` Python plugin (`plugin.yaml` + `__init__.py`) that shells out
77
+ to `visa agent enroll|enroll-claim --format json` and registers the tools via
78
+ `ctx.register_tool(...)` would mirror the OpenClaw plugin. Tracked as a fast-follow; the
79
+ CLI + MCP + skill already make pairing "just work" in Hermes.
@@ -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.5.0'
9
+ version: '0.6.0'
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
@@ -222,13 +222,23 @@ returns the same as a `done`/`status` object. Then, based on the result:
222
222
  ### Step 4 — Confirm the identity is bound
223
223
 
224
224
  On `claimed`, tell the user their `name` (e.g. `alec.visa`) is paired to this device. Read
225
- `keyBound`:
225
+ the three booleans the claim returns — a single enrollment can bind identity **and** sign
226
+ the CLI in **and** provision a spendable wallet, so report what actually happened:
226
227
 
227
228
  - `keyBound: true` → the agent key was generated on THIS device; its private half never
228
- left it. Highest assurance.
229
- - `keyBound: false` an existing agent was connected from a returning sign-in; no agent
230
- key is held locally. Normal and expected for returning users the credential is fully
231
- valid.
229
+ left it. Highest assurance. `keyBound: false` → an existing agent connected from a
230
+ returning sign-in; no agent key held locally. Normal + expected for returning users.
231
+ - `sessionSaved: true` the CLI is now signed in under this identity's email. **Do NOT run
232
+ `visa-cli setup`** — discovery (`visa find`) and catalog calls work as-is. (Absent/false on
233
+ an older deploy → the CLI falls back to its existing session behavior.)
234
+ - `walletProvisioned: true` → the x402 spending wallet is **live on this device** (Turnkey
235
+ delegated signer + on-device key + spend policy); the agent can `wallet_discover` →
236
+ `wallet_pay` and `visa find`/`pay` **right now** — the only remaining step is funding the
237
+ wallet address. `walletProvisioned: false` → identity + card only (older deploy or
238
+ identity-only enrollment); x402 wallet spend is deferred, everything else works.
239
+
240
+ There is **no separate `visa agent create/claim` wallet ceremony and no `visa-cli setup`** —
241
+ this one hand-off is the whole setup.
232
242
 
233
243
  ## What you can do once paired
234
244
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visa/cli",
3
- "version": "4.1.0-rc.21",
3
+ "version": "4.1.0-rc.23",
4
4
  "description": "AI-powered payments for Claude Code",
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.21",
4
+ "version": "4.1.0-rc.23",
5
5
  "title": "Visa CLI",
6
6
  "description": "AI-powered payments and creative tools for coding agents. Generate images, music, video, query crypto prices, and make purchases — all 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.21",
12
+ "version": "4.1.0-rc.23",
13
13
  "transport": {
14
14
  "type": "stdio"
15
15
  },