Configuration
Everything hoocode keeps lives in ~/.hoocode. Set HOOCODE_CODING_AGENT_DIR
to move it.
Files
| File or folder | What it holds |
|---|---|
~/.hoocode/settings.json |
Global settings (/settings edits it) |
~/.hoocode/auth.json |
Logins and keys saved by /login |
~/.hoocode/models.json |
Your own providers and models, for example a local OpenAI-compatible server |
~/.hoocode/hoo-config.json |
Agent modes and tool approval rules, written on first run (below) |
~/.hoocode/skills/ |
Skills |
~/.hoocode/themes/ |
Custom themes |
~/.hoocode/sessions/ |
Saved sessions |
Per project
| File or folder | What it holds |
|---|---|
.hoocode/settings.json |
Project settings, merged over the global ones |
.hoocode/skills/ |
Project skills |
AGENTS.md or CLAUDE.md |
Project instructions, read from the working folder and its parents |
MCP servers
Declared in ~/.agents/mcp.json (yours) and .agents/mcp.json (the project’s).
hoocode asks before it starts servers a project declares. /mcp shows each server’s
state, and /mcp login <server> signs in to one that needs it.
Plugins
Plugins add skills, subagents and MCP servers. They live in ~/.agents/plugins/
(yours) and .agents/plugins/ (the project’s). Manage them with /plugin in a
session: add a marketplace, then install from it.
/plugin marketplace add <git-url-or-owner/repo>
/plugin install <plugin>@<marketplace>
The same commands work from the shell, without a session: hoocode install,
hoocode remove, hoocode list and hoocode plugin .... See
Commands.
hoocode config opens a list for turning skills, prompts and other resources on
or off.
Herdr
Run hoocode in a Herdr pane and it tells Herdr what it is doing. Nothing to set up: it turns on by itself inside Herdr, and does nothing anywhere else.
- The sidebar shows working during a turn, idle when hoocode waits for you, and blocked when it needs a decision (an approval card or a question).
- Herdr stores the command that reopens your session. After a Herdr restart, the
pane opens the same session again (
hoocode --session <id>). - When you quit hoocode, it releases the pane.
To show the hoocode icon in Herdr desktop, save an icon (an SVG) as
~/.config/herdr-app/my-icons/hoocode.svg and add this to
~/.config/herdr-app/programs.json:
{ "programs": {
"hoocode": { "name": "hoocode", "icon": "my-icons/hoocode.svg",
"tint": false, "tile": "#09090B", "color": "#ffffff",
"match": ["hoo"], "run": ["hoocode"] } } }
Modes and approvals
~/.hoocode/hoo-config.json is written the first time hoocode runs:
{
"active_mode": "build",
"safe_shell": true,
"skip_permissions": false,
"modes": {
"ask": { "denied_tools": ["Write", "Edit"] },
"debug": { "denied_tools": ["Write", "Edit"] },
"plan": { "allowed_write_paths": [".hoocode/*"], "auto_allow": ["Write", "Edit"] },
"build": {}
}
}
safe_shell: read-only commands (ls,cat,head,grep,rg,wc,git status,git diff,git log, and similar, joined by pipes or&&) run in every mode without asking. A redirect to a file,$(…),$VAR, a flag that writes or runs a program (sort -o,rg --pre,git diff --output),tail -f, or any other program asks as usual. Set it tofalseto be asked for every command.skip_permissions:trueruns every tool without asking, likehoocode --skip-permissionsorHOOCODE_SKIP_PERMISSIONS=1. The mode rules still apply (ask mode still blocks Edit). Only the global file can turn it on; a project’s.hoocode/hoo-config.jsoncannot.- Per mode:
denied_toolsblocks tools,enabled_toolsallows only the listed ones,allowed_write_pathslimits Edit and Write to matching paths,auto_allowruns tools without asking, andallowed_bash_commands/denied_bash_commandstake regexes. A key you leave out takes the shipped value above; set it (even to[]) to override. - Always on an approval card: for Shell it lasts for the session and covers that
program; for other tools it adds the tool to the mode’s
auto_allowin this file. - A project can add rules in
.hoocode/hoo-config.json: itsdenied_toolsanddenied_bash_commandsadd to yours. It cannot make anything run without asking:auto_allow,safe_shellandskip_permissionscome from your file only, and so doesallowed_write_pathswhen your file sets it. - A write to hoocode’s own project config (
.hoocode/*.json, such as.hoocode/hoo-config.jsonor.hoocode/settings.json) always asks, in every mode and even withskip_permissions.