Bundles
A bundle is a single external directory containing all your personal agentihooks customizations – custom profiles, MCP configs, skills, agents, commands, and rules. Agentihooks is the engine; the bundle is your data.
Quick Start
# Link your bundle and install (one command)
agentihooks init --bundle ~/dev/my-tools
# See everything available
agentihooks --list-profiles
# Use a bundle profile
agentihooks init --profile my-custom-profile
# Per-repo config
agentihooks init --repo ~/dev/some-project
Bundle Layout
my-tools/ <- the bundle directory
├── .claude/ # Bundle-global assets (layer 2 of 3-layer merge)
│ ├── .mcp.json # Bundle MCP servers
│ ├── skills/ # Bundle-global skills
│ ├── agents/ # Bundle-global agents
│ ├── commands/ # Bundle-global commands
│ └── rules/ # Bundle-global rules
└── profiles/
├── infra-ops/ # Custom profile
│ ├── CLAUDE.md # System prompt (at profile ROOT)
│ ├── profile.yml # name, description, mcp_categories, claude launch config
│ └── .claude/
│ ├── settings.overrides.json # Per-profile settings overrides
│ ├── .mcp.json # Profile MCP servers
│ ├── skills/ # Profile-specific skills
│ ├── agents/ # Profile-specific agents
│ ├── commands/ # Profile-specific commands
│ └── rules/ # Profile-specific rules
└── restricted/
└── ... # Same structure
How It Works
agentihooks init --bundle <path>stores the bundle path in~/.agentihooks/state.jsonand runs the global install- On subsequent
agentihooks initruns, the linked bundle is automatically used - Profiles inside
profiles/are auto-discovered by--list-profiles agentihooks init --profile <name>checks built-in profiles first, then bundle
Only one bundle can be linked at a time.
3-Layer Merge
When agentihooks init runs, skills, agents, commands, rules, and MCP servers are merged from three layers:
| Layer | Source | Description |
|---|---|---|
| 1 (base) | agentihooks .claude/ | Built-in assets from the agentihooks repo |
| 2 (bundle) | bundle .claude/ | Bundle-global customizations |
| 3 (profile) | profiles/<name>/.claude/ | Profile-specific overrides |
Later layers override earlier ones. This lets you start with the agentihooks base, add team customizations via the bundle, and fine-tune per profile.
For settings, the merge order is: _base/settings.base.json -> profile .claude/settings.overrides.json -> OTEL.
For MCP servers: hooks-utils + bundle .claude/.mcp.json + profile .claude/.mcp.json.
Profile Resolution Order
When you run agentihooks init --profile X:
- Check
profiles/Xin the agentihooks repo (built-in) - Check
profiles/Xin the linked bundle - Error if not found
Built-in profiles always take precedence. Name your bundle profiles to avoid conflicts.
Per-Repo Config
After linking a bundle and setting a global profile, you can configure per repo:
agentihooks init --repo ~/dev/my-project
Permission Tiers
Built-in profiles define escalating permission tiers:
| Profile | Mode | Deny | Ask |
|---|---|---|---|
| default | default | – | git push, rm -rf, docker rm, kubectl delete |
| coding | acceptEdits | Protected branch pushes, merge, gh CLI | git push, rm -rf, docker, kubectl |
| admin | auto | – | force push, rm -rf / |
Evaluation order: deny > ask > allow (first match wins).
New Machine Setup
# 1. Install agentihooks
git clone https://github.com/The-Cloud-Clock-Work/agentihooks
cd agentihooks
uv venv ~/.agentihooks/.venv
uv pip install --python ~/.agentihooks/.venv/bin/python -e ".[all]"
# 2. Clone your tools repo and install with bundle
git clone https://github.com/you/my-tools ~/dev/my-tools
agentihooks init --bundle ~/dev/my-tools --profile default
# 3. Reload shell
source ~/.bashrc
# Done -- all profiles, skills, agents, commands, rules, and MCPs active