CLIco sub
DocsCLIco sub

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

code
# Subscribe to a publisher (first time needs the full 0x address) co sub sync 0xcd92510bb6cc090374ecc345ef8c19b9d3797624fd1fbf7e078a9372fc31bdc1 # Re-sync every publisher you follow (refresh after they push new versions) co sub # Show who you follow (local only, no relay calls) co sub list # Stop following co sub remove changxing

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:

ToolDestinationMechanism
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>.mdcFile copy with frontmatter rewritten
Kiro~/.kiro/steering/<alias>-<skill>.mdPlain 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

code
co sub sync 0xcd92510bb6cc090374ecc345ef8c19b9d3797624fd1fbf7e078a9372fc31bdc1
output
Fetching profile 0xcd92510bb6cc...
✓ Subscribed to changxing (0xcd92510bb6cc...)
mirrored 18 skill(s) → /Users/you/.co/subs/changxing
claude: installed 1 skill(s)
codex: installed 18 skill(s)
openclaw: installed 18 skill(s)
cursor: installed 17 skill(s)
 
→ Restart your coding agent to load the new skills.

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

Terminalbash
$co sub

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

code
co sub list
output
Subscriptions
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
┃ Alias ┃ Address ┃ Version ┃ Skills ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━┩
│ changxing │ 0xcd92510bb6cc0903… │ v0.1.0 │ 18 │
└───────────┴─────────────────────────────────┴─────────┴────────┘
 
Stored in: /Users/you/.co/subscriptions.txt

No network calls — pure local read.

co sub remove <alias|0xaddress>

Terminalbash
$co sub remove changxing

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/signature from profile responses, so the client trusts the relay. When the relay exposes the signature, co sub will 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-head relay 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

Star us on GitHub

If ConnectOnion saves you time, a ⭐ goes a long way — and earns you a coffee chat with our founder.