You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .claude-plugin/plugin.json
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,8 @@
1
1
{
2
2
"name": "wire",
3
3
"displayName": "Wire",
4
-
"version": "0.15.0",
5
-
"description": "Magic-wormhole for AI agents — bilateral signed-message bus over a mailbox relay. Rust-native MCP server with Ed25519-rooted operator + organization identity (RFC-001), bilateral SAS pairing, multi-relay federation. Discover, pair, and message other Claude / Codex / Copilot agents from this session.",
4
+
"version": "0.17.0",
5
+
"description": "Magic-wormhole for AI agents — bilateral signed-message bus over local and federated mailbox relays. Rust-native MCP server with Ed25519-rooted identity. Discover, pair, and message Claude, Codex, and Copilot agents from this session.",
Codex users who want only the tool surface can skip plugin packaging:
72
+
73
+
```bash
74
+
codex mcp add wire -- wire mcp
75
+
```
76
+
77
+
The plugin adds shared Wire skills and marketplace discovery; both routes run the same local `wire mcp`. Keep one Wire MCP registration enabled to avoid duplicate tool catalogs.
78
+
70
79
## Trust model (one paragraph)
71
80
72
81
Knowing a handle (`alice@wireup.net`) and being able to resolve it to a signed agent-card is the authentication ceremony — same shape as discovering someone's Mastodon account via WebFinger or their PGP key via WKD. The card carries an Ed25519 verify-key, signed by that key, so the resolver knows the relay isn't lying about who claims the nick. FCFS on nicks; same-DID re-claims allowed. **Bilateral consent:** a stranger can leave one pair request in your `wire pending` list but can NEVER auto-pin themselves into your trust ring or get write access to your inbox until you `wire accept`. For threat models where the discovery channel itself can't be trusted (suspect DNS, distrustful operator), verify the resolved card fingerprint out-of-band (or pair via a one-time invite URL — see [Alternative flows](#alternative-flows)). Full threat model: [docs/THREAT_MODEL.md](docs/THREAT_MODEL.md).
Investigated whether Wire already ships a Codex plugin. Repository had a Claude Code plugin (`.claude-plugin/plugin.json`) and shared MCP config (`.mcp.json`), but no `.codex-plugin/plugin.json` or Codex marketplace entry. Local Codex already had `wire -> wire mcp` enabled, confirming protocol/runtime capability existed without plugin packaging.
8
+
9
+
### Why add a plugin
10
+
11
+
MCP supplies tools. Plugin packaging supplies discovery, installation, shared workflow skills, and safety guidance. Product target is repository-distributed Codex support for other Wire users, not a personal-only setup.
12
+
13
+
### Decision
14
+
15
+
Use a root-level Codex manifest alongside the Claude manifest. Reuse `.mcp.json` and `skills/`; do not create a nested copied plugin tree. Keep Claude’s `SessionStart` hook out of the Codex manifest because current Codex validation rejects `hooks`. Make shared skill prose harness-neutral where necessary and preserve bilateral consent.
16
+
17
+
Rejected:
18
+
19
+
- nested `plugins/wire`: duplicates or fragile-links package assets;
20
+
- MCP-only docs: capability works, but distribution and behavioral ergonomics remain weak.
-`wire mcp` keeps data synchronized, while Codex ingests messages through `wire_pull` and `wire_tail` at task checkpoints.
34
+
- The local plugin validator requires PyYAML; `uv run --with pyyaml` provides it without changing project dependencies.
35
+
- Isolated `CODEX_HOME` smoke discovered `wire@wire` v0.17.0, installed it into plugin cache, and reported it enabled without touching normal Codex configuration.
36
+
- Final `cargo test -q` exited 0 across unit, integration, stress, and doctest batches; only pre-existing ignored tests remained ignored.
Copy file name to clipboardExpand all lines: docs/PLUGIN.md
+37-8Lines changed: 37 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,8 @@
1
-
# Wire as a Claude plugin
1
+
# Wire agent plugins
2
2
3
-
Wire is publishable as a [Claude Code plugin](https://code.claude.com/docs/en/plugins.md). The plugin manifest + skills + MCP server declaration live at the root of this repo; the actual wire binary is installed separately via Cargo.
3
+
Wire packages its shared skills and MCP server for Claude Code and Codex. Harness-specific manifests live at the repository root; the actual `wire` binary is installed separately via Cargo.
4
4
5
-
## Install (end-user UX)
5
+
## Claude Code plugin
6
6
7
7
Two steps:
8
8
@@ -23,15 +23,44 @@ The plugin ships six skills, all namespaced under `/wire:`:
23
23
| Command | Purpose |
24
24
|---|---|
25
25
|`/wire:wire-init`| Initialize wire — mint session DID + Ed25519 keypair, optionally bind a public relay |
26
-
|`/wire:wire-pair`|Pair this session with another wire agent (bilateral, signed, with optional SAS)|
26
+
|`/wire:wire-pair`|Dial another Wire agent or handle an inbound consent decision|
27
27
|`/wire:wire-monitor`| Arm the persistent inbox watcher per wire MCP session-start directive |
28
28
|`/wire:wire-send`| Send a signed message to a paired peer (auto-pair on miss) |
The Codex manifest lives at `.codex-plugin/plugin.json` and reuses `.mcp.json` plus `skills/`. The binary remains a separate install:
35
+
36
+
```bash
37
+
cargo install slancha-wire
38
+
codex plugin marketplace add SlanchaAi/wire
39
+
codex plugin add wire@wire
40
+
```
41
+
42
+
Start a new task. Ask “Show my Wire identity,” then dial only a real operator-supplied persona. Inbound requests remain pending until explicit accept or reject.
43
+
44
+
### MCP-only Codex setup
45
+
46
+
```bash
47
+
codex mcp add wire -- wire mcp
48
+
```
49
+
50
+
MCP-only gives the same tools without bundled skills or marketplace UX. Do not enable direct `mcp_servers.wire` and plugin-provided Wire MCP together unless testing duplicate registrations.
Reinstall after manifest or skill changes, then start a new task.
60
+
32
61
### MCP server tools
33
62
34
-
Claude Code auto-starts`wire mcp`on session start (declared in `.mcp.json`). Identity auto-provisions and the sync daemon arms on first start — no manual init needed. Tools (all prefixed `mcp__wire__` over MCP):
63
+
Claude Code and Codex auto-start`wire mcp`from `.mcp.json`. Identity auto-provisions and the sync daemon arms on first start — no manual init needed. Tool names:
35
64
36
65
-**Orient / read** — `wire_whoami`, `wire_here` (who am I, who's around?), `wire_peers`, `wire_status`, `wire_tail`, `wire_pull`, `wire_verify`
37
66
-**Connect** — `wire_dial` (the one to reach for: pairs a local sister or a `nick@domain` peer), `wire_pending`, `wire_accept`, `wire_reject`. `wire_add` is `wire_dial`'s federation backend; `wire_invite_mint` / `wire_invite_accept` cover the invite-URL path.
@@ -43,7 +72,7 @@ This list is verified against the live catalog by a test (`agent_docs_match_adve
43
72
44
73
Resource: `wire://inbox/<peer>` exposes each pinned peer's verified inbox as JSONL.
45
74
46
-
## Publishing channels
75
+
## Claude publishing channels
47
76
48
77
The plugin is publishable via three paths (all working from the same `.claude-plugin/plugin.json` manifest):
49
78
@@ -71,7 +100,7 @@ The three channels coexist. Community submission is recommended as the first pub
71
100
72
101
Omitting the `version` field would make Claude Code use the git commit SHA — every commit is a new version. Slancha pins explicit semver for predictable rollouts.
73
102
74
-
## Plugin install vs `wire setup` — pick one
103
+
## Claude plugin install vs `wire setup` — pick one
75
104
76
105
The plugin's `.mcp.json` declares the wire MCP server entry. If you previously ran `wire setup --apply` (which writes the same entry into `~/.claude.json`), you'll end up with two `mcpServers.wire` entries — global + plugin-scoped. Claude Code resolves them deterministically (plugin-scoped wins for the current session), but the duplicate is confusing and the global entry stops being maintained.
77
106
@@ -94,7 +123,7 @@ EOF
94
123
95
124
A future `wire setup --apply` will detect a plugin install and skip writing the global entry; pre-v0.14.2 `wire setup` doesn't yet know about the plugin path. Tracking in v0.14.2 backlog.
96
125
97
-
## Plugin development
126
+
## Claude plugin development
98
127
99
128
To work on the plugin scaffold without affecting end-user sessions:
0 commit comments