Bootstrap botfile
Skill listfold/botfile/examples/botfile_example/botfile/skills/bootstrap-botfile
This is a mirror, active development happens on codeberg: https://codeberg.org/botfile/botfile
npx -y skills add listfold/botfile --skill bootstrap-botfileAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 15 stars15 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Drive the botfile CLI to manage AI-agent skills, instructions, and commands. Use when asked to sync, plan, adopt, or check the status of agent components managed by botfile.
SKILL.md
5.4 KB, as published. Nobody here has run it
botfile
botfile manages AI-agent skills, instructions, and commands as symlinks from source repositories you control.
This skill carries botfile's operator guide. The CLI prints the same guide: run botfile guide (or botfile guide --format markdown|json); it is also published at botfile.org/agents.html. If botfile is not on PATH, install it first (with the user's agreement) per botfile.org.
Model
- source: A local directory, often a git checkout, holding curated components. botfile reads it in place; git does any fetching.
- plugin: A named bundle inside a source. Even a single-bundle source has an explicit plugin directory:
<source>/<plugin>/. - component: A typed artifact under a plugin. Kinds today: a skill (a directory with a SKILL.md), an instruction (a .md file), and a command (a .md file the agent exposes as a slash command).
- selection: A config rule mapping a source (and optionally one plugin or component) to one or more agents that should receive it.
Config
Path: ~/.config/botfile/config.toml
[[sources]]
name = "personal"
location = "~/botfiles/personal"
[[selections]]
source = "personal"
agents = ["claude-code"]
Scope
- botfile operates at user scope only: the per-user paths under your home directory. It never writes into a project checkout (a repo's .claude/ or an in-repo AGENTS.md); project-scoped components belong to the project.
- Selections fan out: one component reaches every agent its selections name, one symlink per agent's native path, and agents reading the shared ~/.agents/skills pool are served by a single link. Symlinks, not copies, so an edit to the source is live through every agent at once.
- The kinds differ in how they reach the model: an instruction is ambient (the harness injects it into every session), so it matters that instructions can be scoped to all, some, or one agent; a skill is on-demand: its name and description always sit in context and its body loads when the model matches it to the task or the user invokes it; a command is a prompt file the user runs explicitly (/name). On-demand kinds are cheap when idle, not free. Not every agent supports commands; the agents table shows a dash where a kind has no native surface.
- A selection picks any depth of source > plugin > component: omit plugin and component for the whole source, set plugin for one bundle, set both for a single component (component is
<kind>/<name>, likeskill/review). - An omitted plugin or component is a wildcard; an unknown config key is rejected rather than ignored, so a typo cannot silently widen a selection.
Workflow
Run in this order; only run sync after the user agrees.
- botfile status: See what is managed, out of sync, and adoptable. Read-only, safe to run anytime.
- botfile plan: Preview the exact symlinks a sync would create or remove. Read-only; changes nothing.
- confirm with the user: Show the plan and get the user's agreement before changing anything on disk.
- botfile sync: Apply the plan only after the user agrees: create and remove symlinks to match the config.
- botfile adopt <path> --into <source>/<plugin>: If sync reports a conflict (a real file where botfile wants a link), adopt that file into a source instead of overwriting it. botfile never clobbers.
Commands
| Command | Does |
|---|---|
botfile plan | show what a sync would change |
botfile sync | reconcile your agents to match your config |
botfile status | show what is managed, out of sync, and adoptable |
botfile adopt <path> --into <source>/<plugin> | bring an agent-created component under management |
botfile guide | print this guide (text, markdown, or json) |
botfile version | print the version |
botfile upgrade [--check] | replace this binary with the latest release, checksum-verified (--check: report only) |
Agents
| Agent | Skills | Instructions | Commands |
|---|---|---|---|
claude-code | ~/.claude/skills/<name>/ | ~/.claude/rules/<name>.md | ~/.claude/commands/<name>.md |
codex-cli | ~/.agents/skills/<name>/ | ~/.codex/AGENTS.md | ~/.codex/prompts/<name>.md |
copilot-cli | ~/.agents/skills/<name>/ | ~/.copilot/copilot-instructions.md | - |
copilot-vscode | ~/.agents/skills/<name>/ | ~/.copilot/instructions/<name>.instructions.md | - |
crush | ~/.agents/skills/<name>/ | ~/.config/crush/CRUSH.md | - |
opencode | ~/.agents/skills/<name>/ | ~/.config/opencode/AGENTS.md | ~/.config/opencode/commands/<name>.md |
pi.dev | ~/.agents/skills/<name>/ | ~/.pi/agent/AGENTS.md | ~/.pi/agent/prompts/<name>.md |
JSON for agents
- Every command accepts --format json. Prefer it: parse the structured report rather than scraping text.
- The JSON envelope carries schemaVersion, command, phase, outcome, exitCode, plus ops, notes, issues, and summary counts.
- exitCode is authoritative: 0 ok, 1 blocked (a conflict or broken config refused the change), 2 a usage or effect error.
- plan and status never modify anything; only sync and adopt change the filesystem, and upgrade replaces botfile's own binary (checksum-verified, never in the background).