M
McBrideMusings/kennel
Route directories to coding-agent profiles and share skills and instructions across Claude Code, Codex and Pi
View on GitHub ↗Link checked 2026-11-14 · HTTP 200 · opens the vendor's own site
Install & config
Install command from the repository
go install github.com/McBrideMusings/kennel@latest
Parsed from the README we fetched on 2026-11-13; we have not executed it.
This is the install method the repository states, not an MCP client config, so no JSON is generated.
Key names differ by client: Clients & CLI
- Star count
- 0 ★ · McBrideMusings/kennel · read from the GitHub search API · (checked 2026-11-13 20:00:50)
- Source
- read directly from its GitHub page · type: open-source project
- Harvest history
- first seen 2026-11-14 · last seen 2026-11-14 · seen 1× · listed by 1 sources
- Score
- score 103 · 1 sources · repo
- Install
go install github.com/McBrideMusings/kennel@latest
FAQ (answers come from our records)
How do I install it?
The repository provides this install command:
go install github.com/McBrideMusings/kennel@latest. It comes from the repository itself; we cannot guarantee it runs as-is in your client.Who is it for?
We filed it under these tags: 开源项目. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository
McBrideMusings/kennel;first catalogued 2026-11-14;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.# kennel
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
Routes directories to profiles for coding-agent CLIs. A profile gives each tool its own home
directory, and with it its own login, so claude and codex started anywhere under ~/Work
use the work accounts while everything else uses the personal ones.
Each CLI reads its home from one environment variable, read once at startup:
| Tool | Variable | Default home |
| Claude Code | CLAUDE_CONFIG_DIR | ~/.claude |
| Codex | CODEX_HOME | ~/.codex |
| Pi | PI_CODING_AGENT_DIR | ~/.pi/agent |
A shell hook (zsh, bash or fish) runs kennel env on every cd and exports or unsets those
variables for the new directory, so a CLI started from that shell, or from anything it
launches, gets the right home. bash has no directory-change hook, so kennel init bash wraps
cd, pushd and popd (leaving alone any you already define as functions) and checks
$PWD from PROMPT_COMMAND for every other way of changing directory.
## Install
sh
go install github.com/McBrideMusings/kennel@latest # or go install . in a checkout
echo 'command -v kennel >/dev/null && eval "$(kennel init zsh)"' >> ~/.zshrc
# bash: echo 'command -v kennel >/dev/null && eval "$(kennel init bash)"' >> ~/.bashrc
# fish: echo 'command -q kennel; and kennel init fish | source' >> ~/.config/fish/config.fish
## Config
~/.config/kennel/config.toml (KENNEL_CONFIG_DIR moves the directory):
toml
[tools.claude]
# env = "CLAUDE_CONFIG_DIR" built in for claude, codex and pi; set it to override
base = "~/.claude"
shared = ["skills", "CLAUDE.md", "settings.json"]
[tools.codex]
base = "~/.codex"
shared = ["skills", "AGENTS.md", "config.toml"]
[profiles.personal] # no homes: every tool uses its default
[profiles.work]
claude = "~/.claude-work"
codex = { home = "~/.codex-work", shared = ["skills"] }
base and shared are required for every tool. env is required only for a tool
kennel has no built-in variable for.
A tool left out of a profile gets its variable unset, so it runs on its default home.
shared names items inside base. kennel link creates each profile home and
symlinks every shared item in it back to the base, so skills, instructions and settings
are edited once. Everything not shared stays per profile: the login and the account's
own state.
A profile's tool is a home path, which links the tool's shared items, or a table with
home and its own shared, which replaces the tool's list for that home: above,
~/.codex-work links only skills and keeps its own AGENTS.md. When an item leaves the
list a home uses, kennel link and kennel doctor report its link to the base as
unshared and exit 1; kennel never removes it, so delete it by hand to give the profile
its own copy.
## Shares
An optional [shares] table links one tool's files into another tool's home. Nothing is
shared until you add an entry; with none, every share command does nothing.
toml
[shares.instructions] # a file share: one real file, linked from each path
source = "~/.claude/AGENTS.md"
links = ["~/.codex/AGENTS.md", "~/.pi/agent/AGENTS.md"]
[shares.skills] # a folder share: one link per named item
source = "~/.claude/skills"
into = "~/.agents/skills"
items = ["diagnose", "research"]
A share has source and either links or into and items, never both. Each item is one
directory, and with it its own login, so claude and codex started anywhere under ~/Work
use the work accounts while everything else uses the personal ones.
Each CLI reads its home from one environment variable, read once at startup:
| Tool | Variable | Default home |
| Claude Code | CLAUDE_CONFIG_DIR | ~/.claude |
| Codex | CODEX_HOME | ~/.codex |
| Pi | PI_CODING_AGENT_DIR | ~/.pi/agent |
A shell hook (zsh, bash or fish) runs kennel env on every cd and exports or unsets those
variables for the new directory, so a CLI started from that shell, or from anything it
launches, gets the right home. bash has no directory-change hook, so kennel init bash wraps
cd, pushd and popd (leaving alone any you already define as functions) and checks
$PWD from PROMPT_COMMAND for every other way of changing directory.
## Install
sh
go install github.com/McBrideMusings/kennel@latest # or go install . in a checkout
echo 'command -v kennel >/dev/null && eval "$(kennel init zsh)"' >> ~/.zshrc
# bash: echo 'command -v kennel >/dev/null && eval "$(kennel init bash)"' >> ~/.bashrc
# fish: echo 'command -q kennel; and kennel init fish | source' >> ~/.config/fish/config.fish
## Config
~/.config/kennel/config.toml (KENNEL_CONFIG_DIR moves the directory):
toml
[tools.claude]
# env = "CLAUDE_CONFIG_DIR" built in for claude, codex and pi; set it to override
base = "~/.claude"
shared = ["skills", "CLAUDE.md", "settings.json"]
[tools.codex]
base = "~/.codex"
shared = ["skills", "AGENTS.md", "config.toml"]
[profiles.personal] # no homes: every tool uses its default
[profiles.work]
claude = "~/.claude-work"
codex = { home = "~/.codex-work", shared = ["skills"] }
base and shared are required for every tool. env is required only for a tool
kennel has no built-in variable for.
A tool left out of a profile gets its variable unset, so it runs on its default home.
shared names items inside base. kennel link creates each profile home and
symlinks every shared item in it back to the base, so skills, instructions and settings
are edited once. Everything not shared stays per profile: the login and the account's
own state.
A profile's tool is a home path, which links the tool's shared items, or a table with
home and its own shared, which replaces the tool's list for that home: above,
~/.codex-work links only skills and keeps its own AGENTS.md. When an item leaves the
list a home uses, kennel link and kennel doctor report its link to the base as
unshared and exit 1; kennel never removes it, so delete it by hand to give the profile
its own copy.
## Shares
An optional [shares] table links one tool's files into another tool's home. Nothing is
shared until you add an entry; with none, every share command does nothing.
toml
[shares.instructions] # a file share: one real file, linked from each path
source = "~/.claude/AGENTS.md"
links = ["~/.codex/AGENTS.md", "~/.pi/agent/AGENTS.md"]
[shares.skills] # a folder share: one link per named item
source = "~/.claude/skills"
into = "~/.agents/skills"
items = ["diagnose", "research"]
A share has source and either links or into and items, never both. Each item is one
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/mcbridemusings-kennel/)
- Source
- github · https://github.com/McBrideMusings/kennel
- Browse by field
- Open source
- added
- today
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.