一键导入
oo-publish
// Use when the user wants to publish, share, ship, or release their agent so others can subscribe. Triggers on phrases like "publish my agent", "share my skills", "ship my agent", "announce my agent", "make my setup subscribable".
// Use when the user wants to publish, share, ship, or release their agent so others can subscribe. Triggers on phrases like "publish my agent", "share my skills", "ship my agent", "announce my agent", "make my setup subscribable".
| name | oo-publish |
| description | Use when the user wants to publish, share, ship, or release their agent so others can subscribe. Triggers on phrases like "publish my agent", "share my skills", "ship my agent", "announce my agent", "make my setup subscribable". |
| allowed-tools | Bash, Read, Edit |
Curate ~/.co/agent.json and run one command. The relay receives a signed
ANNOUNCE that carries the alias, bio, and every skill marked
publish: true (with its full SKILL.md body inlined). Skills marked
publish: false (or missing the flag) never leave the machine.
You orchestrate; co announce does the crypto and networking.
ls ~/.co/keys/agent.key ~/.co/agent.json >/dev/null \
|| { echo "Run the oo-init skill first (or co setup directly)."; exit 1; }
co announce --help >/dev/null \
|| { echo "MISSING: pip install -U connectonion"; exit 1; }
Read ~/.co/agent.json. Tell the user:
publish: true.cat ~/.co/agent.json
If the bio is a placeholder, block until the user supplies a real one — a vague bio is the most common reason a profile gets ignored.
Group agent.json.skills by purpose (writing / shipping / social / reviewers)
and ask the user which clusters to publish. First-time profiles should be
5–15 curated items, not the whole library.
~/.co/agent.json is a plain JSON file. Use the Edit tool (or $EDITOR)
to flip "publish": false → "publish": true on the chosen entries and
leave the rest alone. No script needed — it's a one-character edit per
skill, and keeping it manual means the user sees exactly what's going out.
co announce --dry-run is the validator. It reads ~/.co/agent.json,
inlines every publish: true SKILL.md, signs the payload, and prints what
would be sent — without sending. If a description is missing or a
SKILL.md is gone, it surfaces there. Run it, scan the list, then send:
co announce --dry-run # inspect the signed payload + skill list
co announce # send it
co announce does:
~/.co/agent.json.publish: true, inlines each SKILL.md body.{alias, bio, version, skills:[{name, description, body}]} and signs
the whole ANNOUNCE with the Ed25519 key at ~/.co/keys/agent.key.wss://oo.openonion.ai/ws/announce. Relay verifies the signature
and persists the profile + bodies to its database.✓ Published <alias> (<address>).
Friends can subscribe with the oo-subscribe skill:
"subscribe to <alias>" or "subscribe to <0xaddress>"
To re-publish after editing skills or the bio: bump version in
~/.co/agent.json for meaningful changes, then run co announce again.
Each announce overwrites the relay-side profile.
mkdir bundle/, mktemp, or write a publish dir. There is no
bundle directory. ~/.co/ is the source of truth; co announce reads
bodies from ~/.co/skills/<name>/SKILL.md directly.co announce signs once over the whole message.
Don't add a second signature on a per-body basis.gh pr create. Publishing is relay-based pub/sub, not a PR flow.~/.co/skills/ to curate. Curation lives in
agent.json.skills[].publish. The library stays intact.agent.json edits in a python script. It's a plain JSON
file; the user (or the Edit tool) flips publish flags directly.
co announce --dry-run does the validation — don't re-implement it in
bash or python.Use when the user wants to start, scaffold, or create their `oo` publishable identity. Triggers on phrases like "init my agent", "set up oo", "make my Claude/Codex setup publishable", "create agent.json", "start a new oo bundle".
Entry point for anything `oo` / ConnectOnion related. Use when the user says "oo", uses /oo, mentions a 0x... address, or expresses intent that could be init / publish / subscribe / accept / connect without naming the specific action. Routes to the right sub-skill.
Use when the user wants to review or accept incoming subscription requests for their published bundle. Triggers on phrases like "accept subscribers", "who's trying to follow me", "review subscription requests", "approve oo subscriptions".
Use when the user wants to subscribe, follow, or install someone else's published agent bundle. Triggers on phrases like "subscribe to alice", "follow @bob", "install alice's skills", "add 0x... as a subscription".