Claude Code
The first host. Bundled hooks, mods and MCP server, the status line, the sandbox and permission model, memory routing, and running homes on separate accounts.
Claude Code is where Kevin was built and where every feature is exercised first. The plugin manifest registers the skills, the four hooks, the mods module, and the kevin MCP server, so a session launched from a home gets all of it with no per-home wiring.
| Requires | Claude Code 2.1.314 or newer (claude update) |
| Launch | claude from the home, or agent for an agent on its own subscription |
| Skills | /agent-kevin:<skill> |
| Manual | AGENTS.md through the @-imports in .claude/CLAUDE.md |
| Hooks, mods and MCP server | Bundled with the plugin |
| Settings | .claude/settings.json (permissions) and .claude/settings.local.json (env, gitignored) |
| Reload after a plugin update | /reload-plugins; new hooks need a full relaunch |
Hooks
The four hooks ship in the plugin's hooks/claude.json. Claude Code runs a plugin's hooks only for sessions started where the plugin is enabled, so a session can only ever be captured by the agent whose home it launched in. See Hooks for what each one does.
Do not add capture hooks to ~/.claude/settings.json
Earlier versions recommended machine-wide hooks routed by a KEVIN_HOME variable. That hands every session on the box to one brain. Plugin hooks are the only supported path.
Mods
Beside the command hooks, the plugin loads one module that runs inside Claude Code: /capture, /lesson, /done, /today and /manuals answer without a model turn, /queue holds a prompt until the current task ends, a repo's CLAUDE.md or AGENTS.md is attached the first time a session touches that repo, sync shows its progress above the prompt, and the top upgrade or sync notice sits there with a button that runs it. Mods need 2.1.293 or newer; the plugin as a whole needs 2.1.314. See Mods.
Status line
init sets the home's footer to the plugin's status line (kevin statusline). Line one is the model with its effort level, the folder as a clickable link, and the git branch; line two is a context bar, the session cost with its hourly rate, the elapsed time, and your plan's five-hour and weekly limits when Claude Code reports them, each with the time left until it resets (16% ↻ 2h · 56% ↻ 3d: minutes under an hour, then hours, then days). The agent's emoji leads it, and the agent panel gets its own rows for subagents.
It follows your theme. A light Claude Code theme switches it to colours that read on a light background; with the theme on auto, or none set, it follows the macOS appearance. Dark output is unchanged.
The entry lives in .claude/settings.local.json, since it runs a program by an absolute path on this machine. upgrade repoints it after a plugin move and keeps a status line you set yourself.
Permissions and the sandbox
Init pre-grants the always-on core tools in settings.json. Pack tools land there only when you activate the pack through configure-skills, so the file stays an accurate audit trail. A few entries sit in permissions.ask (git push, gh pr create, curl_run, seed_import): an ask rule is evaluated before Claude Code's auto-mode classifier and cannot be approved past, which makes it the one durable form of "nothing leaves this machine without a human".
The Bash tool runs under a sandbox that denies reads of .state/secrets/ and every .env. The MCP server runs outside that sandbox, which is how the GitHub tools, worktree setup, and the upgrade scripts do the writes the seatbelt blocks. See MCP tools.
Memory routing
Claude Code ships an auto-memory directory under ~/.claude/projects/. Kevin does not use it. The .claude/CLAUDE.md bridge overrides that instruction so every correction, preference, project fact, and reference routes into the knowledge/ tree, which is what stays portable across hosts and what every other tool in the home reads.
Multiple accounts
/login is a single slot per OS user, so on its own it cannot keep two homes on two subscriptions. CLAUDE_CODE_OAUTH_TOKEN can: it sits above the login slot in credential precedence. A token from claude setup-token lives in each home's .state/secrets/.env.claude.json, and the agent shell command starts Claude Code with --settings <that file> when the current folder has one, so each agent runs on its own account.
Since 2.1.312 Claude Code ignores the token in a home's own settings.local.json, which is where it used to go; the 0.9.0 upgrade moves it. A file passed with --settings still applies. Claude Code keeps the token out of hook environments, so the file also sets AGENT_SUBSCRIPTION, and the session banner warns when a home has the file but the session started without it.
Step-by-step setup, verification, and troubleshooting: Billing per agent.
Verifying subscription billing
The host does the thinking, so nothing bills the API. To see it: open Anthropic Console → Usage and note the API cost, run the knowledge-compile skill, refresh. API cost should not change. Subscription usage should increment. If it does change, open an issue.
Recommended settings
CLAUDE_CODE_NO_FLICKER=1in your user-level env block turns on the fullscreen renderer: click-to-position in the prompt, no flicker, flat memory in long sessions. See Terminal.- Model training off in your Claude account. The home already turns telemetry, crash reports and transcript uploads off. See Privacy.