co skills
Scan skill files across your AI coding agents (Claude Code, Codex, Cursor, Kiro) and import the ones you want into ~/.co/skills/ so ConnectOnion can use them.
Quick Start
Why
Skills you've written for one tool (for example Claude Code) are usually stored in that tool's own directory, such as ~/.claude/skills/. co skills gives ConnectOnion a normal import path — co ai loads skills from .co/skills/ and ~/.co/skills/, and importing makes publishing and manifest generation consistent.
~/.claude/skills/<name>/SKILL.md ─┐
~/.codex/skills/<name>/SKILL.md ─┤
~/.cursor/rules/<name>.mdc ─┼─→ co skills discover → ~/.co/skills/index.json
~/.kiro/steering/<name>.md ─┤ │
~/.co/skills/<name>/SKILL.md ─┘ ▼
co skills copy <name>
│
▼
~/.co/skills/<name>/SKILL.md
(now visible to co ai, skills plugin, publishing)Commands
co skills discover
Walks every known skill root, parses YAML frontmatter (name, description), and writes an index to ~/.co/skills/index.json. Plugin-namespaced entries (names containing :) are filtered out by default (--include-namespaced keeps them). --no-save prints without writing; --json prints the raw index.
The index is a cache, not a database — regenerated on every run, so stale entries disappear automatically.
co skills copy <name>
Copy a discovered skill into ~/.co/skills/<name>/ — sibling files alongside SKILL.md (READMEs, helper scripts) come with it.
If the same skill name exists in multiple sources, a single copy refuses and asks you to disambiguate with --source. With --all, collisions resolve automatically by priority: co-project > co-user > claude > codex > cursor > kiro.
co skills link
The other direction. discover/copy pull skills in from your agent tools; link pushes ConnectOnion's bundled skills out to them — into ~/.claude/skills/ and ~/.codex/skills/ — so Claude Code and Codex can use co browser, co gmail, co gdrive and the rest without you writing anything.
Idempotent — safe to re-run, and it's how you pick up skills added by a ConnectOnion upgrade. It will not overwrite a directory you own: if ~/.claude/skills/co-browser/ is a real directory rather than a link, that's your own skill of the same name and it's left alone (reported as exists, not ours — skipped). Pass --force to replace it.
On macOS and Linux these are symlinks, so an upgrade updates the skills in place. On Windows, where symlinks need Developer Mode or elevation, the files are copied instead — re-run co skills link after upgrading.
co skills manifest
Build skill metadata from a skills directory and merge it into agent.json["skills"] — the shape publishing needs.
Defaults: --path ~/.co/skills/, merges into ~/.co/agent.json. When merging, any prior signature / signer fields are removed (content changed, must re-sign). Each entry gets publish: false by default; existing values are preserved on refresh.
co skills list
List skills currently installed in ~/.co/skills/. Runs by default if you type co skills with no subcommand.
Sources
| Source ID | Root | Layout |
|---|---|---|
| co-project | ./.co/skills/ | <name>/SKILL.md |
| co-user | ~/.co/skills/ | <name>/SKILL.md |
| claude | ~/.claude/skills/ | <name>/SKILL.md |
| codex | ~/.codex/skills/ | <name>/SKILL.md |
| cursor | ~/.cursor/rules/ | <name>.mdc |
| kiro | ~/.kiro/steering/ | <name>.md |
Missing roots are silently skipped.
How It Composes
co skills discover ← scan agent dirs → index.json co skills copy --all ← materialize ~/.co/skills/ co skills link ← push bundled skills out to ~/.claude/ and ~/.codex/ co skills manifest ← merge skill metadata into ~/.co/agent.json co ai ← auto-loads .co/skills/ and ~/.co/skills/ co setup ← runs the full setup sequence publish workflow ← sign + announce ~/.co/agent.json
ConnectOnion