kitout

A dynamic skill loader for AI coding harnesses. Configure a list of git repos and kitout clones them at session startup, registering their SKILL.md skills with the active harness.
Supported harnesses: OpenCode · GitHub Copilot CLI · Claude Code
⚠️ Security — context injection: Skills are injected directly into your AI session context. Only add repos you have personally reviewed and trust. Use ref to pin repos to a specific tag or commit SHA so unexpected upstream changes cannot affect your session.
Config format
Create kitout.json in .opencode/, .claude/, or .agents/ (project) or under ~/ in any of the same dirs (global):
{
"$schema": "https://raw.githubusercontent.com/gliptak/kitout/main/kitout.schema.json",
"version": "1",
"repos": [
{
"url": "https://github.com/obra/superpowers",
"ref": "v2.0.0"
},
{
"url": "https://github.com/my-org/my-skills",
"skills": [{ "skill": "code-review" }]
}
]
}
ref — pin to a branch, tag, or full commit SHA (recommended for security)
skills — select specific skills; omit to load all skills from the repo
- No config file = nothing loaded
See kitout.example1.json and kitout.example2.json for copy-paste starting points. Validate with kitout.schema.json.
OpenCode plugin
Install
Add kitout to your opencode.json (project) or ~/.config/opencode/opencode.json (global):
{
"$schema": "https://opencode.ai/config.json",
"plugin": [
"kitout@git+https://github.com/gliptak/kitout.git"
]
}
OpenCode clones the plugin repo automatically on first run — no manual git clone needed.
Configure
Place kitout.json in any of these locations (all are optional and merged additively):
| Scope | Paths checked |
|---|
| Project | .opencode/kitout.json · .claude/kitout.json · .agents/kitout.json |
| Global | ~/.opencode/kitout.json · ~/.claude/kitout.json · ~/.agents/kitout.json · $XDG_CONFIG_HOME/opencode/kitout.json |
How it works
At each OpenCode session startup:
- Reads all config files listed above — all optional, repos deduplicated by URL across all sources
- Shallow-clones each repo to
$XDG_CACHE_HOME/kitout/repos/<host>/<org>/<repo> (or pulls/checks out pinned ref if already cached)
- Registers the
skills/ directory of each repo with OpenCode's native config.skills.paths
- OpenCode discovers all
SKILL.md files and makes them available in the session
Copilot CLI plugin
Install
copilot plugin marketplace add gliptak/kitout
copilot plugin install kitout@kitout
Or from a local clone (development):
copilot plugin install ./path/to/kitout
Configure
Place kitout.json in any of these locations (all optional, merged additively):
| Scope | Paths checked |
|---|
| Project | .opencode/kitout.json · .claude/kitout.json · .agents/kitout.json |
| Global | ~/.opencode/kitout.json · ~/.claude/kitout.json · ~/.agents/kitout.json |
Known issues — implementation blocked
❌ Plugin hooks do not fire in Copilot CLI. Two open bugs block this integration:
- #2540 — Plugin-defined
hooks.json is silently ignored for all hook types (macOS, CLI 1.0.x, filed April 2026, open)
- #1730 —
sessionStart does not fire from .github/hooks/ either (filed Feb 2026, open)
The plugin installs correctly and skills declared statically in plugin.json load fine, but the sync.js hook that clones repos and creates symlinks never runs. No configuration workaround exists — these are confirmed CLI bugs.
Manual workaround until the bugs are fixed — run sync before starting a session:
node ~/.copilot/installed-plugins/kitout/kitout/sync.js
Or add a shell wrapper to your ~/.zshrc:
copilot() {
node ~/.copilot/installed-plugins/kitout/kitout/sync.js 2>/dev/null
command copilot "$@"
}
Claude Code plugin
Install
claude plugin marketplace add gliptak/kitout
claude plugin install kitout@kitout
Or from a local clone (development):
claude plugin install ./path/to/kitout
Configure
Place kitout.json in any of these locations (all optional, merged additively):