@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.
- package/dist/cli.js +311 -306
- package/dist/mcp-server/index.js +148 -148
- package/dist/skills/pair-visa-agent/RUNTIMES.md +79 -0
- package/dist/skills/pair-visa-agent/SKILL.md +16 -6
- package/native/bin/win32-x64/visa-keychain-win.exe +0 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -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.
|
|
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
|
-
|
|
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
|
-
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
|
|
Binary file
|
package/package.json
CHANGED
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.
|
|
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.
|
|
12
|
+
"version": "4.1.0-rc.23",
|
|
13
13
|
"transport": {
|
|
14
14
|
"type": "stdio"
|
|
15
15
|
},
|