Skillbox is a local package manager for AI-agent skill folders. Sources are paths already on your machine. It has no background fetcher or remote-catalog install path, but the explicit update and default sync commands do contact configured Git remotes.
- Skill names are a single safe path segment: letters, digits,
._-, max 64 chars. Names with/,.., or absolute paths are refused (require_name). - Mounts are absolute symlinks from each runtime root leaf to the resolved source directory. Skillbox has no symlink-provenance registry:
addandsyncmay replace any symlink occupying a configured<root>/<name>slot when its target differs. skillbox rm <name>unlinks any symlink at that named slot, even if another tool created it. A real file or directory in the slot is refused and left untouched.syncmay prune a dangling symlink only when its target is inside a configured source and the target’s parent still exists. Dangling links outside configured sources are preserved. Source skill folders are never deleted by mount/unmount verbs.
- The fleet map is
~/.skillbox/skills.toml(override with$SKILLBOX_MANIFESTfor tests). [sources.*]entries are local filesystem paths only — your repos and any clone already on disk. There is no remote “install from URL” path in the CLI.- A malformed or missing manifest fails closed before fleet commands run. The identity-only
--versionpath deliberately does not read a manifest.
updateand the defaultsyncrungit pull --ff-onlyfor each distinct configured Git checkout. They therefore contact the checkout’s configured remote and may change its working tree through a fast-forward.update --dry-runstill runsgit fetch. It can update remote-tracking refs, but it does not update the source working tree.sync --no-pullskips the Git update and performs only local resolution, relinking, and pruning.- A mounted skill becomes immediately visible to the configured agent runtimes. Review the local source and its Git remote before mounting or updating it.
skillbox uibinds to127.0.0.1only (not0.0.0.0).- Mutations are POST-only. Plain GET routes never change mounts.
- Each server process embeds a CSRF token. POSTs without the matching token return
403. - Same-origin and Host checks reject cross-origin POSTs and DNS-rebinding Hosts that are not
127.0.0.1/localhost.
Treat the UI as a convenience for the same trust boundary as your shell user. Do not expose the port through a reverse proxy or tunnel.
Before a skill leaves a private source, Skillbox blocks promote leaks:
| Marker | Meaning |
|---|---|
KEEP-PRIVATE (or related markers) in SKILL.md |
must not promote to shared/org |
.keep-private file in the skill folder |
same |
name ending in -leo |
private overlay suffix |
skillbox scrublists would-leak skills and paths; without--dry-runit exits1when findings exist.skillbox promote … --to <shared-id>andpromote … --to orgrefuse private-boundary skills.promote --to orgonly writes a local plugin manifest and prints a draft PR command; it never sends, pushes, or publishes.
If you find a mount, path, or UI boundary bug, open an issue on the canonical repository once it is public: https://github.com/firstbitelabsllc/skillbox. Do not attach private skill contents in the report.