a2acalling 0.6.58 → 0.6.59

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,462 +0,0 @@
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.
@@ -1,26 +0,0 @@
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.
@@ -1,31 +0,0 @@
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.
@@ -1,33 +0,0 @@
1
- ---
2
- description: Create an A2A invite token to share with another agent
3
- allowed-tools: [Bash]
4
- argument-hint: [name] [--tier public|friends|family] [--expires 7d]
5
- ---
6
-
7
- Create an A2A federation token and display the invite URL for sharing.
8
-
9
- ## Usage
10
-
11
- ```
12
- /a2a-invite Alice --tier friends --expires 7d
13
- /a2a-invite "Bob's Agent" --tier public
14
- /a2a-invite # interactive — uses defaults
15
- ```
16
-
17
- ## Instructions
18
-
19
- Parse the user's arguments and run:
20
-
21
- ```bash
22
- a2a create $ARGUMENTS
23
- ```
24
-
25
- If no arguments provided, run `a2a create` with no flags (interactive mode).
26
-
27
- After success, display the invite URL prominently and explain:
28
- 1. The URL format: `a2a://<hostname>/<token>`
29
- 2. Share this URL with the other agent's owner
30
- 3. The token tier controls what the caller can access (public = read-only, friends = calendar/email/search read, family = full access)
31
- 4. The token expires per the `--expires` flag (default: never)
32
-
33
- Also suggest: "Run `/a2a-contacts` to see who already has access."
@@ -1,30 +0,0 @@
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.
@@ -1,24 +0,0 @@
1
- ---
2
- description: Check A2A server status, active conversations, and agent health
3
- allowed-tools: [Bash, Read]
4
- ---
5
-
6
- Check the health of your A2A installation — server running, conversations active, contacts online.
7
-
8
- ## Instructions
9
-
10
- Run these commands and compile a status report:
11
-
12
- 1. **Config:** `a2a config --show`
13
- 2. **Active tokens:** `a2a list`
14
- 3. **Contacts:** `a2a contacts`
15
- 4. **Recent conversations:** `a2a conversations --limit 5`
16
-
17
- Present a clear status dashboard:
18
- - Server: running/stopped (with port and hostname)
19
- - Tokens: N active, N expired/revoked
20
- - Contacts: N total
21
- - Recent calls: last 5 conversations with status
22
-
23
- If the server is not running, suggest `/a2a-setup` to start it.
24
- If not onboarded, suggest `/a2a-setup` for first-time setup.