From oo
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".
How this skill is triggered — by the user, by Claude, or both
Slash command
/oo:oo-acceptThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
When someone runs `oo-subscribe` against this user's address, the relay
When someone runs oo-subscribe against this user's address, the relay
holds a pending SUBSCRIBE request. This skill lists those requests and
sends signed accept (or reject) responses.
python -c "import connectonion; print(connectonion.__version__)"
ls ~/.co/keys/agent.key
If missing: pip install connectonion then co init.
python -c "
import httpx
from pathlib import Path
from connectonion import address
keys = address.load(Path.home() / '.co')
r = httpx.get(
f'https://oo.openonion.ai/api/relay/agents/{keys[\"address\"]}/subscriptions/pending',
timeout=15,
)
r.raise_for_status()
for sub in r.json().get('pending', []):
print(f' {sub[\"subscriber\"]} requested at {sub.get(\"timestamp\")}')
"
If the list is empty, tell the user "no pending requests" and stop.
For each pending subscriber, show their address and (if the relay returns it) their alias / bio. Ask the user to accept, reject, or skip. Don't auto-accept — the whole point of mutual handshake is human review.
For each accepted (or rejected) request, send a signed message:
python -c "
import json, time, httpx
from pathlib import Path
from connectonion import address
SUBSCRIBER = '<0xsubscriber>'
DECISION = 'accept' # or 'reject'
keys = address.load(Path.home() / '.co')
ts = int(time.time())
payload = {
'subscriber': SUBSCRIBER,
'publisher': keys['address'],
'decision': DECISION,
'timestamp': ts,
}
canonical = json.dumps(payload, sort_keys=True, separators=(',', ':')).encode()
sig = address.sign(keys, canonical).hex()
r = httpx.post(
f'https://oo.openonion.ai/api/relay/agents/{keys[\"address\"]}/subscribe/accept',
json={**payload, 'signature': sig},
timeout=15,
)
r.raise_for_status()
print(DECISION.upper(), SUBSCRIBER)
"
Tell the user how many requests were accepted vs rejected. Mention that
accepted subscribers will pull the bundle on their next run of
oo-subscribe and pick up future updates whenever they re-run it.
npx claudepluginhub openonion/oo --plugin ooProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.