agentleFS
chnlichchnlich/charlie-bot/skills/skill-management/SKILL.md

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
  1. Very specific:

    Never overwrite non-symlink entries or dotfiles (e.g.

    line 44
  2. Distinctive:

    Remove stale symlinks whose targets no longer exist

    line 45
  3. Very specific:

    All CLIs require SKILL.md (exact name, case-sensitive) as the entry point file.

    line 77
  4. Distinctive:

    When new lessons surface and a skill needs an update, follow these rules:

    line 81

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Skill Management

Skill Sources (canonical)

LocationScopeDescription
<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 ToolUser Skills PathShared StandardNotes
Claude Code~/.claude/skills/<name>/SKILL.mdProprietaryAlso reads .claude/skills/ at project level
Codex CLI~/.agents/skills/<name>/SKILL.mdAgent 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.mdAgent Skills (open standard)~/.agents/skills/ takes precedence over ~/.gemini/skills/
OpenCodescans ~/.claude/ and ~/.agents/reuses both standardsNo dedicated target — auto-discovers Claude Code + Agent Skills. Disable via OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1
Antigravity (agy)~/.gemini/antigravity-cli/skills/<name>/SKILL.mdAgent Skills (open standard)Global customizations root (also scans ~/.gemini/skills/); does NOT read ~/.claude/~/.agents
charlie-codescans ~/.claude/skills/ and ~/.agents/skills/reuses both standardsNo 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:

  1. ~/.claude/skills/ — Claude Code
  2. ~/.agents/skills/ — Codex + Gemini (shared open standard)
  3. ~/.gemini/antigravity-cli/skills/ — Antigravity (agy)
  4. $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-hooks

Additional 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 Edit patch) 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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.