AI tooling
Claude Code, its agents and skills, Serena, RTK, and the inactive OpenCode setup.
modules/home/ai/
configures AI coding tools. It is part of the
development profile.
Claude Code
Home Manager installs and configures Claude Code:
- Settings default to medium reasoning effort and disable the commit and
pull request attribution lines.
settings.jsonstays writable (mutableSettings), so changes made with/configpersist; the declared keys are merged over it on every activation. - Global rules (
~/.claude/CLAUDE.md) come from the sharedagentRulesset indefault.nix, described under Shared rules. - MCP integration shares the MCP servers declared in
programs.mcp. - RTK hook. A
PreToolUsehook on the Bash tool runs RTK's rewrite script, which compresses command output before it reaches the model.
Agents
| Agent | Purpose |
|---|---|
dennis | Designs, implements, visually inspects, and iteratively improves web interfaces |
write-commit-msg | Writes a commit message from a supplied diff. Runs on Haiku with no tools and no permission prompts; used by the commit-message hook |
The prompts are Markdown files in agents/; Nix wraps them with frontmatter for
each tool.
Skills
Everything in skills/ is installed as Claude Code skills, including:
idiomatic-jj: Jujutsu mental models and safe command choices.group-unstaged-commits: splitting working-copy changes into coherent commits.- A set of front-end design skills (brand kits, image-to-code, minimalist,
brutalist, motion, and web interface guidelines) used together with
dennis.
Shared rules
agentRules is a single attribute set of instruction sections. Claude Code
receives it as rules, and OpenCode's context is the same sections joined
with newlines, so both tools read one source.
| Rule | Effect |
|---|---|
code-style | Use consistent formatting, follow language conventions, and obey an .editorconfig or other defined standard |
collaboration | Act as a critical collaborator: raise risks, tradeoffs, and missing requirements before a nontrivial change, propose a plan and wait for approval, separate facts from assumptions, and restate the risk before proceeding if the request is repeated |
jj-first | Check whether a repository is jj-managed before running Git commands and prefer jj. In a colocated repository Git shows a detached HEAD, which is expected, and the idiomatic-jj skill should be loaded instead of falling back to Git habits |
subagents | Read-only search, exploration, or planning subagents may start without asking for broad sweeps or independent investigations; small lookups are done directly. Ask before starting any subagent that can edit files, run builds or other consequential commands, or act outside the repository, and report when subagents were used |
Serena
The Serena MCP server provides
symbol-level code navigation and editing. It is declared once in
programs.mcp and runs over stdio in IDE context, picking the project from the
working directory, without opening its web dashboard.
RTK
RTK is built locally from a pinned source (see
Flake inputs). Besides the
Claude Code hook, its OpenCode plugin is linked into ~/.config/opencode by
Home Manager rather than with rtk init.
Playwright
playwright and playwright-test are installed for browser-based workflows,
such as dennis inspecting a page it built.
OpenCode (inactive)
OpenCode is fully declared but disabled. Its configuration, including a theme
generated from the shared palette, the same agents and skills, and a session
picker (opencode-fzf) in the shell, is kept so it can be switched back on.
Last updated on