co setup
One command to set up everything in ~/.co/ that you need to publish an agent: identity keypair, agent.json profile, and a populated skill library scanned from every coding agent on your machine.
Quick Start: co setup --name my-alias --bio "One-line description of what I do"
What ~/.co/ Looks Like After
~/.co/
├── keys/
│ ├── agent.key # Ed25519 private key (signing identity)
│ ├── agent.pub # Public key
│ └── recovery.txt # 12-word recovery phrase
├── keys.env # OPENONION_API_KEY (after `co auth`)
├── agent.json # your publishable profile
│ # {address, alias, name, bio, skills:[...], version}
└── skills/ # populated from claude/codex/cursor/kiro
├── index.json # discovery cache (where each skill came from)
└── <name>/SKILL.md # one dir per discovered skillThere is no separate "bundle" directory — ~/.co/ itself is what the publish workflow reads from at publish time.
What It Does (in order)
- Identity. If
~/.co/keys/agent.keyis missing, bootstraps one (in a temp directory, so noagent.pypollution). ~/.co/agent.json. Writes the profile with your signing address, alias, bio, andskills[]. Skipped if the file already exists unless you pass--force(backs up toagent.json.bak).- Skill library. Runs
co skills discover && co skills copy --all && co skills manifest. Idempotent — existing skills are not overwritten without--force. - Auth check. Reports whether
OPENONION_API_KEYis present. Publishing works without it; only theco/*managed models require it.
code
output
Options
| Option | Short | Description |
|---|---|---|
| --name | -n | Alias for agent.json (default $USER lowercased) |
| --bio | -b | One-line bio for agent.json |
| --force | -f | Overwrite existing agent.json (backs up to .bak) |
| --no-skills | Skip the skill library refresh |
Safe to Re-run
- Identity is never regenerated if
~/.co/keys/agent.keyexists. agent.jsonis skipped if it exists (use--forceto overwrite — it backs up first).- Skill library is refreshed — new skills are added, existing ones skipped. You can also just edit
~/.co/agent.jsondirectly; it's normal JSON.
How co setup relates to co init
| Command | Scope | What it creates |
|---|---|---|
| co init | Project (cwd) | agent.py, .env, .co/host.yaml, vibe-coding docs |
| co setup | Global (~/.co/) | agent.json, skills/, keys/ (if missing) |
They're orthogonal. Use co init to scaffold a new agent project; use co setup to prepare your identity for publishing.
ConnectOnion