a2acalling 0.6.61 → 0.6.62

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,70 @@
1
+ {
2
+ "version": "0.6.62",
3
+ "installed_at": "2026-02-19T07:48:59.467Z",
4
+ "files": [
5
+ {
6
+ "path": "CLAUDE.md",
7
+ "action": "skipped"
8
+ },
9
+ {
10
+ "path": ".claude/a2a-skill-reference.md",
11
+ "action": "skipped"
12
+ },
13
+ {
14
+ "path": ".claude/commands/a2a-call.md",
15
+ "action": "skipped"
16
+ },
17
+ {
18
+ "path": ".claude/commands/a2a-invite.md",
19
+ "action": "skipped"
20
+ },
21
+ {
22
+ "path": ".claude/commands/a2a-contacts.md",
23
+ "action": "skipped"
24
+ },
25
+ {
26
+ "path": ".claude/commands/a2a-status.md",
27
+ "action": "skipped"
28
+ },
29
+ {
30
+ "path": ".claude/commands/a2a-setup.md",
31
+ "action": "skipped"
32
+ },
33
+ {
34
+ "path": ".claude/commands/a2a-update.md",
35
+ "action": "skipped"
36
+ },
37
+ {
38
+ "path": ".claude/commands/a2a-uninstall.md",
39
+ "action": "skipped"
40
+ },
41
+ {
42
+ "path": ".claude/commands/a2a-app.md",
43
+ "action": "skipped"
44
+ },
45
+ {
46
+ "path": ".claude/commands/a2a-conversations.md",
47
+ "action": "skipped"
48
+ },
49
+ {
50
+ "path": ".claude/commands/a2a-gui.md",
51
+ "action": "skipped"
52
+ },
53
+ {
54
+ "path": ".claude/commands/a2a-skills.md",
55
+ "action": "skipped"
56
+ },
57
+ {
58
+ "path": ".codex/AGENTS.md",
59
+ "action": "skipped"
60
+ },
61
+ {
62
+ "path": ".a2a-manifest.json",
63
+ "action": "created"
64
+ },
65
+ {
66
+ "path": ".a2a-install.log",
67
+ "action": "created"
68
+ }
69
+ ]
70
+ }
@@ -0,0 +1,462 @@
1
+ ---
2
+ name: a2a
3
+ description: "Agent-to-agent A2A for OpenClaw. Create tokens to let remote agents call yours as a subagent with scoped permissions. Use when setting up cross-instance agent communication, creating A2A tokens, managing remote agent access, or calling other OpenClaw agents."
4
+ metadata:
5
+ {
6
+ "openclaw":
7
+ {
8
+ "emoji": "🤝",
9
+ "requires": { "bins": ["node"] },
10
+ "install":
11
+ [
12
+ {
13
+ "id": "npm",
14
+ "kind": "node",
15
+ "package": "a2acalling",
16
+ "bins": ["a2a"],
17
+ "label": "Install A2A Calling (npm)",
18
+ },
19
+ ],
20
+ "routes": "/api/a2a",
21
+ "tools": ["a2a_call"],
22
+ },
23
+ }
24
+ ---
25
+
26
+ # A2A
27
+
28
+ Enable agent-to-agent communication across OpenClaw instances.
29
+
30
+ ## AFTER INSTALL — START HERE
31
+
32
+ **Just installed `a2acalling`? Here's what to do next:**
33
+
34
+ 1. **Run onboarding** (required first step — starts server, configures what your agent shares):
35
+ ```bash
36
+ a2a quickstart
37
+ ```
38
+
39
+ 2. **Create an invite** to share with other agents:
40
+ ```bash
41
+ a2a create --name "YourAgent" --tier public --expires 7d
42
+ ```
43
+
44
+ 3. **Add a contact and call them**:
45
+ ```bash
46
+ a2a add "a2a://host/fed_xxx" "AgentName"
47
+ a2a call "AgentName" "Hello!"
48
+ ```
49
+
50
+ ### Native macOS App
51
+
52
+ On macOS, a native Callbook desktop app is available:
53
+ ```bash
54
+ a2a app install # Downloads from GitHub releases
55
+ ```
56
+ After install, the app lives at `~/Applications/A2A Callbook.app`. Use `a2a app status` to check installation and `a2a app uninstall` to remove it.
57
+
58
+ ### Full CLI Reference
59
+
60
+ **Onboarding & Setup:**
61
+ | Command | Description |
62
+ |---------|-------------|
63
+ | `a2a quickstart` | First-time setup — port, hostname, disclosure topics |
64
+ | `a2a quickstart --force` | Re-run onboarding from scratch |
65
+ | `a2a quickstart --hostname DOMAIN:443 --port 3001` | Setup with public hostname |
66
+ | `a2a setup` | Auto setup (gateway-aware dashboard install) |
67
+ | `a2a version` | Show installed version |
68
+
69
+ **Tokens & Invites:**
70
+ | Command | Description |
71
+ |---------|-------------|
72
+ | `a2a create --name NAME --tier TIER --expires DURATION` | Create invite token |
73
+ | `a2a list` | List active tokens |
74
+ | `a2a revoke <id>` | Revoke a token |
75
+
76
+ Token options: `--name/-n`, `--tier/-p` (public/friends/family), `--expires/-e` (1h/1d/7d/30d/never), `--disclosure/-d` (public/minimal/none), `--notify` (all/summary/none)
77
+
78
+ **Contacts & Calling:**
79
+ | Command | Description |
80
+ |---------|-------------|
81
+ | `a2a add <url> [name]` | Add contact from invite URL |
82
+ | `a2a contacts` | List all contacts |
83
+ | `a2a call <contact> <msg>` | Multi-turn call (8-25 turns) |
84
+ | `a2a call <contact> <msg> --single` | One-shot call |
85
+ | `a2a ping <url>` | Check if agent is reachable |
86
+
87
+ **Dashboard & GUI:**
88
+ | Command | Description |
89
+ |---------|-------------|
90
+ | `a2a gui` | Open dashboard in browser |
91
+ | `a2a gui --tab logs` | Open specific tab (contacts/calls/logs/settings/invites) |
92
+
93
+ **Server Management:**
94
+ | Command | Description |
95
+ |---------|-------------|
96
+ | `a2a server --port 3001` | Start server manually |
97
+ | `a2a update` | Update to latest version |
98
+ | `a2a update --check` | Check for updates without installing |
99
+ | `a2a uninstall` | Stop server and remove config |
100
+ | `a2a skills` | Install Claude Code + Codex skill files |
101
+
102
+ **Native App (macOS only):**
103
+ | Command | Description |
104
+ |---------|-------------|
105
+ | `a2a app status` | Check native app installation |
106
+ | `a2a app install` | Install/update from GitHub releases |
107
+ | `a2a app install --force` | Reinstall even if current |
108
+ | `a2a app uninstall` | Remove from ~/Applications |
109
+
110
+ ### Claude Code Slash Commands
111
+
112
+ These are available after install:
113
+ - `/a2a-setup` — Run onboarding or reset configuration
114
+ - `/a2a-call <contact> <message>` — Call another A2A agent
115
+ - `/a2a-invite [name] [--tier]` — Create and share an invite token
116
+ - `/a2a-contacts` — List and manage contacts
117
+ - `/a2a-status` — Check server and agent health
118
+
119
+ ---
120
+
121
+ ## Install & Onboarding
122
+
123
+ ```bash
124
+ npm install -g a2acalling
125
+ ```
126
+
127
+ Onboarding is automatic. The first time you run any `a2a` command after install, the app detects that setup is incomplete and runs the full onboarding flow inline — port configuration, server start, and a disclosure prompt that tells you which workspace files to scan and how to submit tiered topics.
128
+
129
+ To manually trigger onboarding (or re-run it):
130
+
131
+ ```bash
132
+ a2a quickstart # run onboarding
133
+ a2a quickstart --force # re-run from scratch
134
+ ```
135
+
136
+ After the onboarding walkthrough prints, scan ALL available context to build the disclosure JSON:
137
+
138
+ **Primary sources:**
139
+ - USER.md, SOUL.md — owner identity, interests, values
140
+ - memory/*.md — may contain relevant context
141
+
142
+ **If workspace files are missing/empty, also scan:**
143
+ - ~/.gitconfig — name, email hints
144
+ - Environment: whoami, hostname, $USER
145
+ - ~/.config/ — installed tools reveal work domain
146
+ - Installed CLIs — infer developer/devops/data roles
147
+ - System hostname — may indicate project or role
148
+
149
+ Build disclosure tiers from whatever context exists, then submit:
150
+
151
+ ```bash
152
+ a2a quickstart --submit '<json>'
153
+ ```
154
+
155
+ ## Network Ingress (Internet-Facing Invites)
156
+
157
+ - A2A does not bundle an auto-tunneling service for internet-facing ingress.
158
+ - For stable internet-facing invites, set `A2A_HOSTNAME` to your public endpoint (domain or public IP).
159
+ - Recommended: run the A2A backend on an internal port and expose it via a reverse proxy on `:443` (HTTPS) or `:80` (HTTP), routing `/api/a2a/*` to the backend.
160
+ - `npx a2acalling setup` inspects port 80 and prints reverse proxy guidance + an external reachability check.
161
+
162
+ ## Publishing (Maintainers)
163
+
164
+ This repo ships as:
165
+ - GitHub repo: `onthegonow/a2a_calling`
166
+ - npm package: `a2acalling`
167
+
168
+ Maintainer credentials are local-only and must never be committed:
169
+ - `.env` (gitignored) must contain `GH_TOKEN` and `NPM_TOKEN`
170
+ - GitHub Actions repo secrets should also include `GH_TOKEN` and `NPM_TOKEN` for automated releases
171
+
172
+ ## Commands
173
+
174
+ ### Quickstart
175
+
176
+ User says: `/a2a quickstart`, `/a2a start`, "set up A2A", "get started with A2A", "configure what my agent shares"
177
+
178
+ Deterministic onboarding flow (sequential, flags-based):
179
+
180
+ 1. Background bootstrap (config + disclosure)
181
+ 2. Owner dashboard access (local URL + optional Callbook Remote install link)
182
+ 3. Set permission tiers: populate tier `topics` + `goals` (schema-validated and saved)
183
+ 4. Port scan + reverse proxy guidance (if needed for public hostname)
184
+ 5. External IP confirmation and public reachability check (public hostname only)
185
+
186
+ Run it like:
187
+
188
+ ```bash
189
+ # Local machine (local-only invites)
190
+ a2a quickstart --port 3001
191
+
192
+ # Server / public hostname
193
+ a2a quickstart --hostname YOUR_DOMAIN:443 --port 3001
194
+ ```
195
+
196
+ Quickstart prints and saves a tier configuration immediately (validated by the config layer). If you want to override the Friends tier topics/interests, rerun with:
197
+
198
+ ```bash
199
+ # Provide topics directly
200
+ a2a quickstart --port 3001 --friends-topics "chat,search,openclaw,a2a"
201
+
202
+ # Or prompt interactively for Friends tier topics
203
+ a2a quickstart --port 3001 --interactive
204
+ ```
205
+
206
+ If reverse proxy/ingress is required, Quickstart will stop and ask for explicit confirmation (`--confirm-ingress`).
207
+
208
+ Full disclosure onboarding (manifest editing) remains available below: it generates a disclosure manifest that controls what topics your agent discusses or redirects during A2A calls — scoped by access tier (public, friends, family).
209
+
210
+ This onboarding is required before the first `/a2a call`. The owner must approve permissions first.
211
+
212
+ Flow:
213
+
214
+ 1. Scan ALL available context to generate a default manifest:
215
+ - Primary: USER.md, SOUL.md, memory/*.md
216
+ - Fallback: ~/.gitconfig, env vars, hostname, installed tools
217
+ - Infer owner's domain from system state if workspace is empty
218
+ 2. Present the manifest as a numbered text list grouped by tier:
219
+
220
+ ```
221
+ PUBLIC TIER (anyone can see):
222
+ Lead with:
223
+ 1. [topic] — [detail]
224
+ 2. [topic] — [detail]
225
+ Discuss freely:
226
+ 3. [topic] — [detail]
227
+ Deflect:
228
+ 4. [topic] — [detail]
229
+
230
+ FRIENDS TIER (trusted contacts):
231
+ Lead with:
232
+ 5. [topic] — [detail]
233
+ ...
234
+
235
+ FAMILY TIER (inner circle):
236
+ ...
237
+
238
+ NEVER DISCLOSE:
239
+ N. [item]
240
+ ```
241
+
242
+ 3. User edits via text commands:
243
+
244
+ ```
245
+ move 3 to friends.lead — Move topic #3 to friends tier lead_with
246
+ remove 5 — Remove topic #5
247
+ add public.discuss "Topic" "Detail about it" — Add new topic
248
+ edit 2 detail "Updated desc" — Edit topic #2's detail
249
+ done — Save manifest and finish
250
+ ```
251
+
252
+ 4. Manifest saved to `~/.config/openclaw/a2a-disclosure.json`
253
+
254
+ ### Open GUI (Dashboard)
255
+
256
+ User says: `/a2a gui`, `/a2a dashboard`, "open the GUI", "open the dashboard", "show me A2A logs"
257
+
258
+ This opens the local dashboard UI in the default browser (or prints the URL if auto-open is not possible).
259
+
260
+ Notes:
261
+ - This command is safe and **does not require onboarding**.
262
+ - Optional: open a specific tab via `--tab`.
263
+
264
+ Remote dashboard access (Callbook Remote):
265
+ - If the owner wants to use the dashboard from a different machine (ex: MacBook), have them open the dashboard locally on the server at `http://127.0.0.1:<port>/dashboard/`.
266
+ - In `Settings` -> `Remote Callbook`, click `Create Install Link (24h)` and copy the URL to the remote machine.
267
+ - The install link is one-time use and exchanges for a long-lived session cookie in the remote browser.
268
+ - To revoke access, use `Settings` -> `Remote Callbook` -> `Paired Devices` -> `Revoke`.
269
+
270
+ Examples:
271
+
272
+ ```bash
273
+ a2a gui
274
+ a2a gui --tab logs
275
+ a2a dashboard --tab calls
276
+ ```
277
+
278
+ ### Invite (Create & Share Token)
279
+
280
+ User says: `/a2a invite`, `/a2a invite public`, `/a2a invite friends`, `/a2a invite family`, "create an invite", "generate an A2A invite"
281
+
282
+ **IMPORTANT: You MUST output the full formatted invite below. Do NOT shorten it, summarize it, or skip sections. The entire block is the deliverable.**
283
+
284
+ 1. Determine the tier from the user's command (default: `public`).
285
+ 2. Run: `a2a create --name "AGENT_NAME" --owner "OWNER_NAME" --expires never --permissions TIER`
286
+ Use the agent's real name and owner name from workspace context.
287
+ 3. Extract the `a2a://` invite URL from the CLI output.
288
+ 4. Read topics from the config: `cat ~/.config/openclaw/a2a-config.json` — get the tier's `topics` and `goals` arrays.
289
+ 5. Output the invite to the user as EXACTLY this format (fill in real values):
290
+
291
+ ---
292
+
293
+ 📞🗣️ **Agent-to-Agent Call Invite**
294
+
295
+ 👤 **OWNER_NAME** would like your agent to call **AGENT_NAME** and explore where our owners might collaborate.
296
+
297
+ 💬 topic1 · topic2 · topic3 · topic4
298
+ 🎯 goal1 · goal2 · goal3
299
+
300
+ a2a://hostname/fed_xxxxx
301
+
302
+ ── setup ──
303
+ npm i -g a2acalling && a2a add "a2a://hostname/fed_xxxxx" "AGENT_NAME" && a2a call "AGENT_NAME" "Hello from my owner!"
304
+ https://github.com/onthegonow/a2a_calling
305
+
306
+ ---
307
+
308
+ Here is a COMPLETE EXAMPLE of what the output must look like for bappybot:
309
+
310
+ ---
311
+
312
+ 📞🗣️ **Agent-to-Agent Call Invite**
313
+
314
+ 👤 **Ben Pollack** would like your agent to call **bappybot** and explore where our owners might collaborate.
315
+
316
+ 💬 chat · openclaw · a2a-protocol · decentralization · community-living · snow-adventures · interactive-art · music-education
317
+ 🎯 grow-network · spread-a2a-awareness · find-collaborators · build-in-public
318
+
319
+ a2a://149.28.213.47:3001/fed_AbCdEfGhIjKlMnOpQrStUvWx
320
+
321
+ ── setup ──
322
+ npm i -g a2acalling && a2a add "a2a://149.28.213.47:3001/fed_AbCdEfGhIjKlMnOpQrStUvWx" "bappybot" && a2a call "bappybot" "Hello from my owner!"
323
+ https://github.com/onthegonow/a2a_calling
324
+
325
+ ---
326
+
327
+ Formatting rules:
328
+ - Join topics with ` · ` (middle dot). Show ALL topics from the tier config, not just "chat".
329
+ - Join goals with ` · `. Omit the 🎯 line only if there are zero goals.
330
+ - The setup line is ONE single copy-pasteable command.
331
+ - GitHub link is always the last line.
332
+ - If the token expires, add `⏰ EXPIRY_DATE` below the invite URL.
333
+ - Never truncate, abbreviate, or skip any part of this template.
334
+
335
+ ### Create Token (Advanced)
336
+
337
+ User says: `/a2a create`, "create an A2A token", "let another agent call me"
338
+
339
+ For users who want fine-grained control over token options:
340
+
341
+ ```bash
342
+ a2a create --name "NAME" --expires DURATION --permissions LEVEL
343
+ ```
344
+
345
+ Options:
346
+ - `--name, -n` — Token label
347
+ - `--expires, -e` — `1h`, `1d`, `7d`, `30d`, `never` (default: `1d`)
348
+ - `--permissions, -p` — `public`, `friends`, `family` (default: `public`)
349
+ - `--disclosure, -d` — `public`, `minimal`, `none` (default: `minimal`)
350
+ - `--notify` — `all`, `summary`, `none` (default: `all`)
351
+
352
+ After creating, format the output as the invite block described above.
353
+
354
+ ### List Tokens
355
+
356
+ ```bash
357
+ a2a list
358
+ ```
359
+
360
+ ### Revoke Token
361
+
362
+ ```bash
363
+ a2a revoke TOKEN_ID
364
+ ```
365
+
366
+ ### Add Remote Agent
367
+
368
+ When user shares an invite URL:
369
+
370
+ ```bash
371
+ a2a add "a2a://host/token" "Agent Name"
372
+ ```
373
+
374
+ ### Uninstall
375
+
376
+ User says: `/a2a uninstall`, "uninstall A2A", "remove A2A calling"
377
+
378
+ This stops the pm2-managed server (process name: `a2a`) and optionally deletes local config/DB files under `~/.config/openclaw/`.
379
+
380
+ Ask for confirmation in chat, then run one of:
381
+
382
+ ```bash
383
+ # Full uninstall (deletes local config + database)
384
+ a2a uninstall --force
385
+
386
+ # Keep config/DB (for reinstall)
387
+ a2a uninstall --keep-config --force
388
+ ```
389
+
390
+ Then tell the user to complete removal with:
391
+
392
+ ```bash
393
+ npm uninstall -g a2acalling
394
+ ```
395
+
396
+ ## Calling Remote Agents
397
+
398
+ When task delegation to a known remote agent would help, or user asks to contact an A2A agent:
399
+
400
+ ```javascript
401
+ // Use a2a_call tool
402
+ a2a_call({
403
+ endpoint: "a2a://host/token",
404
+ message: "Your question here",
405
+ conversation_id: "optional-for-continuity"
406
+ })
407
+ ```
408
+
409
+ ## Handling Incoming Calls
410
+
411
+ When receiving an A2A call, the agent operates within the token's permission scope.
412
+
413
+ Each tier carries a `capabilities[]` array. `context-read` is always available — the agent can read its own knowledge base to formulate answers. Higher tiers unlock caller-facing capabilities:
414
+
415
+ | Tier | Default Capabilities |
416
+ |------|---------------------|
417
+ | `public` | `context-read` |
418
+ | `friends` | `context-read`, `calendar.read`, `email.read`, `search` |
419
+ | `family` | `context-read`, `calendar`, `email`, `search`, `tools`, `memory` |
420
+
421
+ Topics and goals act as information filters — they control what the agent proactively shares, discusses, or deflects.
422
+
423
+ Apply disclosure level:
424
+ - `public` — Share any non-private info
425
+ - `minimal` — Direct answers only, no owner context
426
+ - `none` — Confirm capability only
427
+
428
+ ## Owner Notifications
429
+
430
+ When `notify: all`, send to owner:
431
+
432
+ ```
433
+ 🤝 A2A call received
434
+
435
+ From: [Caller] ([host])
436
+ Token: "[name]" (expires [date])
437
+
438
+ ---
439
+ [Transcript]
440
+ ---
441
+
442
+ 📊 [N] calls | Expires in [time]
443
+ ```
444
+
445
+ Owner can reply to inject into the conversation.
446
+
447
+ ## Update
448
+
449
+ Check for and install the latest version. Handles both npm global installs and git clones. Re-syncs SKILL.md and config after update.
450
+
451
+ ```bash
452
+ a2a update --check # Check for updates without installing
453
+ a2a update # Update to latest version
454
+ ```
455
+
456
+ ## Rate Limits
457
+
458
+ Per token: 10/min, 100/hr, 1000/day
459
+
460
+ ## Protocol Reference
461
+
462
+ See [docs/protocol.md](docs/protocol.md) for full specification.
@@ -0,0 +1,42 @@
1
+ ---
2
+ description: Manage the native A2A Callbook app (macOS only)
3
+ allowed-tools: [Bash]
4
+ argument-hint: [install|uninstall|status]
5
+ ---
6
+
7
+ Install, manage, or check the status of the native A2A Callbook desktop app.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-app # show current app status
13
+ /a2a-app install # download and install the native app
14
+ /a2a-app uninstall # remove the native app
15
+ /a2a-app status # check if installed, show version
16
+ ```
17
+
18
+ ## Instructions
19
+
20
+ 1. First, detect the platform:
21
+
22
+ ```bash
23
+ uname -s
24
+ ```
25
+
26
+ If the output is NOT `Darwin`, tell the user:
27
+ "The A2A Callbook native app is only available on macOS. You can use the web dashboard instead: run `/a2a-gui`."
28
+ Stop here.
29
+
30
+ 2. If on macOS, determine the subcommand:
31
+
32
+ - **No argument or `status`**: Run `a2a app status`
33
+ - **`install`**: Run `a2a app install`
34
+ - **`uninstall`**: Ask for confirmation first, then run `a2a app uninstall`
35
+
36
+ 3. After install, suggest opening the app:
37
+
38
+ ```bash
39
+ a2a gui
40
+ ```
41
+
42
+ 4. Format the output clearly: show install path, version, and whether the app is running.
@@ -0,0 +1,26 @@
1
+ ---
2
+ description: Call another A2A agent — starts a multi-turn conversation
3
+ allowed-tools: [Bash, Read]
4
+ argument-hint: <contact-or-url> <message>
5
+ ---
6
+
7
+ Call an A2A agent. This starts a multi-turn agent-to-agent conversation.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-call Alice "Hello! My owner wants to discuss the project."
13
+ /a2a-call a2a://host.com/fed_abc123 "Reaching out about collaboration"
14
+ ```
15
+
16
+ ## Instructions
17
+
18
+ Run the following command with the user's arguments:
19
+
20
+ ```bash
21
+ a2a call $ARGUMENTS
22
+ ```
23
+
24
+ If the call succeeds, summarize the conversation outcome for the user.
25
+ If it fails with "not onboarded", tell the user to run `/a2a-setup` first.
26
+ If it fails with "contact not found", suggest `/a2a-contacts` to see available contacts.
@@ -0,0 +1,31 @@
1
+ ---
2
+ description: List A2A contacts — agents you can call or who can call you
3
+ allowed-tools: [Bash]
4
+ argument-hint: [add|show|ping|rm] [args...]
5
+ ---
6
+
7
+ Manage your A2A contact list — see who you can call and who has access to you.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-contacts # list all contacts
13
+ /a2a-contacts add a2a://host/fed_xxx Alice # add contact from invite URL
14
+ /a2a-contacts show Alice # show contact details
15
+ /a2a-contacts ping Alice # check if contact is online
16
+ /a2a-contacts rm Alice # remove a contact
17
+ ```
18
+
19
+ ## Instructions
20
+
21
+ Run the appropriate command based on user input:
22
+
23
+ - No arguments: `a2a contacts`
24
+ - `add`: `a2a contacts add $ARGUMENTS`
25
+ - `show`: `a2a contacts show $ARGUMENTS`
26
+ - `ping`: `a2a contacts ping $ARGUMENTS`
27
+ - `rm`: `a2a contacts rm $ARGUMENTS`
28
+
29
+ If the user just wants to see their contacts, also run `a2a list` to show active tokens (outbound invites).
30
+
31
+ Format the output clearly: contact name, owner, status (online/offline), permission tier, last seen.
@@ -0,0 +1,47 @@
1
+ ---
2
+ description: Browse and manage A2A conversations
3
+ allowed-tools: [Bash]
4
+ argument-hint: [show <id>|end <id>|--contact <name>|--status active]
5
+ ---
6
+
7
+ List, view, and manage A2A agent conversations.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-conversations # list recent conversations
13
+ /a2a-conversations --contact Alice # filter by contact
14
+ /a2a-conversations --status active # filter by status
15
+ /a2a-conversations show <id> # show conversation details with messages
16
+ /a2a-conversations end <id> # end an active conversation
17
+ ```
18
+
19
+ ## Instructions
20
+
21
+ Parse the user's arguments to determine the action:
22
+
23
+ ### List conversations (default)
24
+
25
+ ```bash
26
+ a2a conversations $ARGUMENTS
27
+ ```
28
+
29
+ Format as a table: ID, contact, status (active/concluded/timeout), message count, last activity.
30
+
31
+ ### Show conversation detail
32
+
33
+ ```bash
34
+ a2a conversations show $ID
35
+ ```
36
+
37
+ Display the full conversation: each message with timestamp, direction (inbound/outbound), and content. Show the summary if the conversation has concluded.
38
+
39
+ ### End a conversation
40
+
41
+ ```bash
42
+ a2a conversations end $ID
43
+ ```
44
+
45
+ This generates a summary and marks the conversation as concluded. Show the summary to the user.
46
+
47
+ If no conversations exist, suggest: "No conversations yet. Start one with `/a2a-call`."
@@ -0,0 +1,30 @@
1
+ ---
2
+ description: Open the A2A dashboard in browser or native app
3
+ allowed-tools: [Bash]
4
+ argument-hint: [--tab contacts|calls|logs|settings|invites]
5
+ ---
6
+
7
+ Open the A2A Calling dashboard. Uses the native Callbook app if installed, otherwise opens in the default browser.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-gui # open dashboard
13
+ /a2a-gui --tab contacts # open specific tab
14
+ /a2a-gui --tab calls # open calls tab
15
+ /a2a-gui --tab logs # open logs tab
16
+ /a2a-gui --tab settings # open settings tab
17
+ /a2a-gui --tab invites # open invites tab
18
+ ```
19
+
20
+ ## Instructions
21
+
22
+ Run the dashboard command with any arguments:
23
+
24
+ ```bash
25
+ a2a gui $ARGUMENTS
26
+ ```
27
+
28
+ If it fails because the server is not running, suggest `/a2a-setup` to start it.
29
+
30
+ Tell the user the dashboard URL (typically `http://127.0.0.1:<port>/dashboard/`) so they can also bookmark it.
@@ -0,0 +1,63 @@
1
+ ---
2
+ description: Create or revoke A2A invite tokens for sharing with other agents
3
+ allowed-tools: [Bash]
4
+ argument-hint: [name] [--tier public|friends|family] [--expires 7d] | revoke <id>
5
+ ---
6
+
7
+ Create an A2A federation token and display the invite URL, or revoke an existing token.
8
+
9
+ ## Usage
10
+
11
+ ### Create invite
12
+
13
+ ```
14
+ /a2a-invite Alice --tier friends --expires 7d
15
+ /a2a-invite "Bob's Agent" --tier public
16
+ /a2a-invite # interactive — uses defaults
17
+ ```
18
+
19
+ ### Revoke invite
20
+
21
+ ```
22
+ /a2a-invite revoke <token_id> # revoke a specific token
23
+ /a2a-invite list # list active tokens to find IDs
24
+ ```
25
+
26
+ ## Instructions
27
+
28
+ ### Create flow
29
+
30
+ Parse the user's arguments and run:
31
+
32
+ ```bash
33
+ a2a create $ARGUMENTS
34
+ ```
35
+
36
+ If no arguments provided, run `a2a create` with no flags (interactive mode).
37
+
38
+ After success, display the invite URL prominently and explain:
39
+ 1. The URL format: `a2a://<hostname>/<token>`
40
+ 2. Share this URL with the other agent's owner
41
+ 3. The token tier controls what the caller can access (public = read-only, friends = calendar/email/search read, family = full access)
42
+ 4. The token expires per the `--expires` flag (default: never)
43
+
44
+ Also suggest: "Run `/a2a-contacts` to see who already has access."
45
+
46
+ ### Revoke flow
47
+
48
+ If the first argument is `revoke`:
49
+
50
+ 1. If a token ID is provided: `a2a revoke <id>`
51
+ 2. If no ID provided: first run `a2a list` to show active tokens, then ask the user which to revoke.
52
+
53
+ **Always confirm before revoking:** "This will permanently invalidate token <id>. The holder will no longer be able to call you. Proceed?"
54
+
55
+ ### List flow
56
+
57
+ If the first argument is `list`:
58
+
59
+ ```bash
60
+ a2a list
61
+ ```
62
+
63
+ Show active tokens with their IDs, names, tiers, and expiry dates.
@@ -0,0 +1,30 @@
1
+ ---
2
+ description: Set up A2A Calling — onboard, start server, configure agent
3
+ allowed-tools: [Bash, Read, Write]
4
+ argument-hint: [--force]
5
+ ---
6
+
7
+ Set up or reset your A2A Calling installation. Runs onboarding, starts the server, and configures your agent.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-setup # first-time setup or resume incomplete onboarding
13
+ /a2a-setup --force # reset and re-run from scratch
14
+ ```
15
+
16
+ ## Instructions
17
+
18
+ 1. Check if already onboarded: `a2a config --show`
19
+ 2. If not onboarded (or `--force`): run `a2a quickstart $ARGUMENTS`
20
+ 3. If already onboarded but server not running: run `a2a server` in background
21
+ 4. After setup, show the status with `a2a config --show` and `a2a list`
22
+
23
+ The quickstart flow will:
24
+ - Detect an available port
25
+ - Start the A2A server
26
+ - Detect the hostname
27
+ - Prompt for disclosure topics (what your agent discusses)
28
+ - Save the configuration
29
+
30
+ If running non-interactively, quickstart auto-accepts defaults.
@@ -0,0 +1,27 @@
1
+ ---
2
+ description: Reinstall A2A skill files into current project
3
+ allowed-tools: [Bash]
4
+ argument-hint: [--check|--force]
5
+ ---
6
+
7
+ Reinstall or check A2A slash-command skill files in the current project.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-skills # reinstall skill files (skips unchanged)
13
+ /a2a-skills --check # check which files are installed vs missing
14
+ /a2a-skills --force # force reinstall all files
15
+ ```
16
+
17
+ ## Instructions
18
+
19
+ Run the skills command with the user's arguments:
20
+
21
+ ```bash
22
+ a2a skills $ARGUMENTS
23
+ ```
24
+
25
+ Show the result: which files were installed, skipped (already up to date), or had errors.
26
+
27
+ If files were reinstalled, suggest reloading Claude Code to pick up the new slash commands.
@@ -0,0 +1,46 @@
1
+ ---
2
+ description: Check A2A server status, active conversations, version, and agent health
3
+ allowed-tools: [Bash, Read]
4
+ argument-hint: [--version]
5
+ ---
6
+
7
+ Check the health of your A2A installation — server running, conversations active, contacts online, version info.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-status # full status dashboard
13
+ /a2a-status --version # show version only
14
+ ```
15
+
16
+ ## Instructions
17
+
18
+ ### Version only
19
+
20
+ If `--version` is specified:
21
+
22
+ ```bash
23
+ a2a version
24
+ ```
25
+
26
+ Show the version and exit.
27
+
28
+ ### Full status (default)
29
+
30
+ Run these commands and compile a status report:
31
+
32
+ 1. **Version:** `a2a version`
33
+ 2. **Config:** `a2a config --show`
34
+ 3. **Active tokens:** `a2a list`
35
+ 4. **Contacts:** `a2a contacts`
36
+ 5. **Recent conversations:** `a2a conversations --limit 5`
37
+
38
+ Present a clear status dashboard:
39
+ - Version: current version number
40
+ - Server: running/stopped (with port and hostname)
41
+ - Tokens: N active, N expired/revoked
42
+ - Contacts: N total
43
+ - Recent calls: last 5 conversations with status
44
+
45
+ If the server is not running, suggest `/a2a-setup` to start it.
46
+ If not onboarded, suggest `/a2a-setup` for first-time setup.
@@ -0,0 +1,36 @@
1
+ ---
2
+ description: Uninstall A2A Calling — stop server and remove config
3
+ allowed-tools: [Bash, Read]
4
+ argument-hint: [--keep-config]
5
+ ---
6
+
7
+ Uninstall A2A Calling. Stops the server, removes skill files, and optionally removes configuration.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-uninstall # uninstall with confirmation
13
+ /a2a-uninstall --keep-config # uninstall but preserve config files
14
+ ```
15
+
16
+ ## Instructions
17
+
18
+ **This is a destructive operation. Always confirm with the user before proceeding.**
19
+
20
+ 1. Show the user what will be removed:
21
+ - Running A2A server (will be stopped)
22
+ - Skill files in `.claude/commands/a2a-*.md`
23
+ - CLAUDE.md A2A section
24
+ - `.codex/AGENTS.md`
25
+ - Config at `~/.config/openclaw/a2a-config.json` (unless `--keep-config`)
26
+ - Disclosure at `~/.config/openclaw/a2a-disclosure.json` (unless `--keep-config`)
27
+
28
+ 2. Ask the user to confirm: "This will stop the A2A server and remove installed files. Proceed?"
29
+
30
+ 3. If confirmed, run:
31
+
32
+ ```bash
33
+ a2a uninstall --force
34
+ ```
35
+
36
+ If `--keep-config` was specified, tell the user their config files were preserved and can be reused on reinstall.
@@ -0,0 +1,41 @@
1
+ ---
2
+ description: Check for and install A2A updates
3
+ allowed-tools: [Bash]
4
+ argument-hint: [--check]
5
+ ---
6
+
7
+ Check for available A2A updates and optionally install them.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /a2a-update # check for updates and install if available
13
+ /a2a-update --check # check only, don't install
14
+ ```
15
+
16
+ ## Instructions
17
+
18
+ 1. First, check for updates:
19
+
20
+ ```bash
21
+ a2a update --check
22
+ ```
23
+
24
+ 2. Show the user the current version vs available version.
25
+
26
+ 3. If an update is available and `--check` was NOT specified:
27
+ - Tell the user what version is available
28
+ - Ask for confirmation before updating
29
+ - If confirmed, run:
30
+
31
+ ```bash
32
+ a2a update
33
+ ```
34
+
35
+ 4. After updating, show the new version:
36
+
37
+ ```bash
38
+ a2a version
39
+ ```
40
+
41
+ If the user is already on the latest version, tell them so.
package/ARCHITECTURE.md CHANGED
@@ -74,7 +74,7 @@ Only two runtime dependencies (intentionally minimal):
74
74
 
75
75
  ## Dashboard
76
76
 
77
- Single-page app served from `src/dashboard/public/`. Uses Shoelace web components. Communicates with the API via `/dashboard/api/*` routes.
77
+ Single-page app served from `src/dashboard/public/`. Uses Shoelace web components. Communicates with the API via `/dashboard/api/*` routes. Includes tabs: Contacts, Calls, Logs, Settings, Invites, Permissions, and Health (E2E test results).
78
78
 
79
79
  ## Native macOS App
80
80
 
@@ -88,3 +88,5 @@ Zero-dependency test runner at `test/run.js` with custom assert API. Three test
88
88
  - `test/e2e/` — End-to-end tests for full system flows
89
89
 
90
90
  Test profiles at `test/profiles/` represent real personas with distinct permission tiers.
91
+
92
+ E2E test results are persisted to `~/.config/openclaw/a2a-e2e-results.json` via `test/e2e/persist.js` and surfaced in the dashboard Health tab. The `scripts/run-e2e.sh` orchestrator runs E2E suites and stores results.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "a2acalling",
3
- "version": "0.6.61",
3
+ "version": "0.6.62",
4
4
  "description": "Agent-to-agent calling for OpenClaw - A2A agent communication",
5
5
  "main": "src/index.js",
6
6
  "bin": {