skill-management
Skill9 starsChanged 4 days agoMITView on GitHub
CharlieBot skill directory layout, sync rules, and CLI tool mappings. Use when creating, installing, or syncing skills across Claude Code, Codex, Gemini, OpenCode, and Antigravity.
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 44
Never overwrite non-symlink entries or dotfiles (e.g.
- Distinctive: line 45
Remove stale symlinks whose targets no longer exist
- Very specific: line 77
All CLIs require SKILL.md (exact name, case-sensitive) as the entry point file.
- Distinctive: line 81
When new lessons surface and a skill needs an update, follow these rules:
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Skill Management
Skill Sources (canonical)
| Location | Scope | Description |
<charlie-bot-repo>/skills/ | General (shared across hosts) | Integration skills, self-knowledge |
$CHARLIEBOT_HOME/skills/ | Host-specific (per-machine) | Domain skills tied to local repos/hardware |
CLI Tool Skill Directories
| CLI Tool | User Skills Path | Shared Standard | Notes |
| Claude Code | ~/.claude/skills/<name>/SKILL.md | Proprietary | Also reads .claude/skills/ at project level |
| Codex CLI | ~/.agents/skills/<name>/SKILL.md | Agent Skills (open standard) | .system/ in ~/.codex/skills/ is Codex built-in; user skills go in ~/.agents/skills/ |
| Gemini CLI | ~/.gemini/skills/<name>/SKILL.md OR ~/.agents/skills/<name>/SKILL.md | Agent Skills (open standard) | ~/.agents/skills/ takes precedence over ~/.gemini/skills/ |
| OpenCode | scans ~/.claude/ and ~/.agents/ | reuses both standards | No dedicated target — auto-discovers Claude Code + Agent Skills. Disable via OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 |
Antigravity (agy) | ~/.gemini/antigravity-cli/skills/<name>/SKILL.md | Agent Skills (open standard) | Global customizations root (also scans ~/.gemini/skills/); does NOT read ~/.claude/~/.agents |
| charlie-code | scans ~/.claude/skills/ and ~/.agents/skills/ | reuses both standards | No dedicated target. Also reads .claude/skills/ and .agents/skills/ at the git worktree root of its cwd; a repo skill wins a name collision. --skills-root DIR replaces the host roots for one run |
Deduplication
Four sync targets cover all five CLIs:
~/.claude/skills/— Claude Code~/.agents/skills/— Codex + Gemini (shared open standard)~/.gemini/antigravity-cli/skills/— Antigravity (agy)$CHARLIEBOT_HOME/.claude/skills/— Claude Code cwd-ancestor root. Claude Code collects.claude/skills/from every ancestor of its cwd up to$HOME, independent of the logged-in account, and a master session's cwd sits under$CHARLIEBOT_HOME/, so this one root reaches every Claude account's masters; the per-account config dirs get no target. The same file visible through two roots (this one and~/.claude/skills/) loads once.
OpenCode and charlie-code need no target: both auto-scan ~/.claude/skills/ and ~/.agents/skills/, already populated above.
Every real sync ends with a Claude discovery check (skipped under -n and when claude is not on PATH): sync-skills.sh starts claude once with an empty CLAUDE_CONFIG_DIR from the $CHARLIEBOT_HOME/sessions cwd — not logged in, zero API calls — and reads K, the project count on the last Loaded N unique skills (... project: K ...) line of its debug log, against N, the symlink count in target 4. It prints Claude discovery: K/N and exits 1 when the line is missing or K differs from N.
Sync Rules
- Each skill entry in target dirs is a symlink pointing to the canonical source
- Never overwrite non-symlink entries or dotfiles (e.g. Codex
.system/) - Remove stale symlinks whose targets no longer exist
- Sync script:
<charlie-bot-repo>/scripts/sync-skills.sh - Workers see skills through the backend CLI's skill dir — not directly from
$CHARLIEBOT_HOME/skills/.
Host-Specific Content Boundary
Repo-level shared files (<charlie-bot-repo>/skills/**, <charlie-bot-repo>/prompts/**) MUST NOT contain host-specific info — hostnames, local paths, GPU specs, per-host ports/IPs. Anything host-specific belongs in the memory store's host topic ($CHARLIEBOT_HOME/memory/entries/host/) or $CHARLIEBOT_HOME/skills/<name>/. Rules like "feature X is local-host only" must be flagged in the repo-level skill so that workers running anywhere see them.
Repo-level skills must also stay free of session-specific debug artifacts: dated transcripts (observed in D4, 2026-05-04 run), internal task IDs, specific bug strings (bytes-vs-str + train_ranges API mismatches), or any phrasing that reads like a LESSONS.md entry. Workers loading shared skills cannot see $CHARLIEBOT_HOME/LESSONS.md and have no context for those references. Keep shared skills as static principles; only promote a finding into a shared skill once the debug is closed and the lesson rewrites cleanly as a generic rule.
A local pre-commit hook enforces this boundary. One-time setup per clone:
git config --local core.hooksPath tools/git-hooksAdditional host-specific blocklist patterns (real names, internal project names, tenant identifiers, etc.) live at $CHARLIEBOT_HOME/skills_leak_patterns.local.txt — one regex per line, NEVER committed to this repo. The host patterns scan every tracked file, including decompressed gzip files. The hooks scan staged files, commit messages, and commit identities.
Person-Identifying Session Content Boundary
Repo-level shared files also carry no material that identifies a real person when read together with the repository's public authorship: names, orders, preferences, schedules, or other session-derived personal data. Examples in skills and docs are synthetic end to end, covering people, items, and quantities alike, even when a real session supplies the template. The authoring-time test: a reader who knows this repository's owner learns nothing about any real person from the content. tools/check-skills-host-leak.sh scans for host identifiers only, so this boundary rides on the author's judgment; a skill drafted from a live session applies the test to every example before it lands.
File Name Convention
All CLIs require SKILL.md (exact name, case-sensitive) as the entry point file.
Updating Existing Skills
When new lessons surface and a skill needs an update, follow these rules:
- Reorganize, don't append. If related content already lives in the skill, edit the existing section in place rather than tacking on a new paragraph. Skills must stay concise so they remain scannable; growing them by accretion (one new bullet per session) defeats the purpose. Re-read the whole skill first, then propose the smallest diff that captures the new lesson.
- Ask before modifying any local skill. Surface the intended edit to the user before writing it — never silently mutate a skill file, even when "just adding a clarifying line".
- Always present the change as a file diff. Show the actual before/after (or
Editpatch) so the user can see surrounding context and judge whether the edit fits. Don't summarize the change as "I'd add a note about X" — the user needs to see the literal lines being added/changed/removed to approve.
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- WncFht/agent-basic-skill★ 30same name
- ntaffzii/Skill-Agents★ 4same name
- dbosk/claude-skills★ 1same name
- paran-coder/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- charliebotSkill
- claude-versionSkill
- cli-tool-trapsSkill
- feishuSkill
- file-serverSkill
- gmailSkill
- google-docsSkill
- google-oauthSkill
- google-sheetsSkill
- improve-goalSkill
- improve-workerSkill
- language-portSkill
- linearSkill
- llm-context-guidelineSkill
- perfettoSkill
- plan-approvalSkill
- pytorch-gpu-trainingSkill
- slackSkill
- voice-notesSkill
- writing-styleSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

