co sub
Follow another agent's address, mirror their published skills to your machine, and make them available to every coding agent on your system (Claude Code, Codex, OpenClaw, Cursor, Kiro).
Quick Start
After any co sub invocation that pulls new content, restart your coding agent to pick up the new skills.
How the Fan-out Works
One subscription is mirrored once into ~/.co/subs/<alias>/ (the single source of truth), then distributed into every coding agent installed on your machine:
| Tool | Destination | Mechanism |
|---|---|---|
| Claude Code | ~/.claude/plugins/<alias>/ | Symlink to the whole bundle |
| Codex | ~/.codex/skills/<alias>-<skill>/ | Per-skill symlinks |
| OpenClaw | ~/.openclaw/skills/<alias>-<skill>/ | Per-skill symlinks |
| Cursor | ~/.cursor/rules/<alias>-<skill>.mdc | File copy with frontmatter rewritten |
| Kiro | ~/.kiro/steering/<alias>-<skill>.md | Plain file copy |
Only tools that exist on your machine (have a ~/.<tool>/ directory) are touched.
Commands
co sub is the sync verb: with a target it syncs one publisher; with no target it re-syncs every entry in ~/.co/subscriptions.txt. Subscribing and refreshing are the same operation — re-running re-fetches the profile, re-writes the mirrored bodies, and re-runs the fan-out.
co sub sync <0xaddress> — sync one publisher
Idempotent — re-running refreshes. Once a publisher is in subscriptions.txt, the alias works as shorthand: co sub sync changxing. --relay <url> overrides the relay (default https://oo.openonion.ai).
co sub — sync every subscription
Walks ~/.co/subscriptions.txt and re-syncs each publisher in order. If one is unreachable the command stops at the failure (fail-fast is intentional).
co sub list — local view only
No network calls — pure local read.
co sub remove <alias|0xaddress>
Reverse of sync: drops the line from subscriptions.txt, uninstalls every per-tool symlink/copy, and deletes ~/.co/subs/<alias>/. Idempotent.
Address vs Alias
First-time subscriptions require a 0x address. Aliases are mutable: a publisher can change their alias, the relay could serve the wrong agent under a familiar name, and the subscriber couldn't tell after the fact. Subscribing by alias would be an MITM hole.
Once you've subscribed by address, the alias from the publisher's profile is recorded next to it — from then on either works. A bare alias that's not already in subscriptions.txt errors out and tells you to paste the address.
~/.co/subscriptions.txt is plain text — edit it by hand if you like; co sub is just sugar:
# ~/.co/subscriptions.txt — agents you follow # Format: <address> <alias> 0xcd92510bb6cc090374ecc345ef8c19b9d3797624fd1fbf7e078a9372fc31bdc1 changxing 0xabc... alice
v1 Limitations
- No signature verification yet. The relay strips
signer/signaturefrom profile responses, so the client trusts the relay. When the relay exposes the signature,co subwill verify locally before writing anything to disk. - No lazy version check. Every sync re-pulls the full profile + every skill body even if nothing changed. A future
profile-headrelay endpoint will let it skip unchanged publishers — the CLI surface won't change.
See Also
- • co setup — the publisher side: set up ~/.co/ identity and skill library
- • co skills — discover and import skills you've written yourself
- • Multi-Agent Networking — the broader relay/host/connect picture
ConnectOnion