Hive configuration reference

Every config.toml option with its type and default: general, terminal, daemon, notifications, integrations, worktrees, theme, keys, agents and layouts.

Hive reads ~/.config/hive/config.toml (or the file named by $HIVE_CONFIG) when hive starts. Every key is optional and a missing file means all defaults. Unknown keys are an error, so typos don't pass silently. After editing, run hive doctor to validate the file, then restart hive; running agents are not affected.

Integrations are the exception: Ctrl+Space I switches them on and off at once and writes enabled for you, keeping your comments. examples/config.toml is a complete, commented file to start from.

[general]

Defaults for new sessions and the look of the interface.

KeyTypeDefaultMeaning
default_agentstring"claude"Agent hive new starts when you don't name one.
themestring"hive-dark"hive-dark, hive-light, ansi (your terminal's 16 colours) or mono (no colour).

[branding]

Hive's own chrome.

KeyTypeDefaultMeaning
show_headerbooltrueShow the tab bar row above the panes.
show_taglinebooltrueShow the tagline on the start screen.

[terminal]

How agents' terminals behave.

KeyTypeDefaultMeaning
scrollback_linesinteger10000Lines of history the daemon keeps per session.
mouse_supportbooltrueClickable sidebar and tabs, wheel scrolling, and mouse input for agents that use it. Hold Shift to select text natively.

[daemon]

The background daemon, hived.

KeyTypeDefaultMeaning
auto_startbooltruehive starts the daemon when it isn't running. Off: run hive daemon start yourself.
kill_timeout_secsinteger3Seconds between asking a session to quit and forcing it.

[notifications]

How Hive gets your attention when an agent you aren't viewing needs input or finishes.

KeyTypeDefaultMeaning
bellbooltrueRing the terminal bell.

[integrations.*]

Optional tools, all off by default. Turn them on with Ctrl+Space I, which saves enabled here, or edit the file. Details and examples are on the integrations page. See integrations.

KeyTypeDefaultMeaning
integrations.obsidian.enabledboolfalseCtrl+Space N opens the workspace's Obsidian vault.
integrations.obsidian.agentstring""Agent that opens the vault; empty uses $VISUAL, then $EDITOR, then vi.
integrations.obsidian.open_in"tab" | "split""tab"Where the notes pane opens.
integrations.obsidian.journalboolfalseAppend a line to today's daily note when an agent finishes.
integrations.obsidian.journal_dirstring""Folder of daily notes inside the vault; empty is the vault root.
integrations.review.enabledboolfalseCtrl+Space G reviews changes in the session's directory.
integrations.review.commandstring array[]Program to run; empty picks lazygit, else tig status, else git diff.
integrations.review.open_in"tab" | "split""split"Where it opens.
integrations.github.enabledboolfalseCtrl+Space H shows pull request checks for the branch.
integrations.github.commandstring array[]Empty runs ["gh", "pr", "checks", "--watch"].
integrations.github.open_in"tab" | "split""split"Where it opens.
integrations.tasks.enabledboolfalseCtrl+Space T picks a just, package.json, make or cargo task to run.
integrations.tasks.open_in"tab" | "split""split"Where the task runs.
integrations.desktop_notify.enabledboolfalseA desktop notification when an agent you aren't viewing needs input or finishes.
integrations.desktop_notify.commandstring array["notify-send", "--app-name=Hive"]Program to run; the title and body are appended as two arguments.
integrations.git_status.enabledboolfalseChanged files and commits ahead/behind under each repository space.
integrations.usage.enabledboolfalseCtrl+Space U shows token usage and cost.
integrations.usage.commandstring array[]Empty runs ["ccusage", "blocks", "--live"].
integrations.usage.open_in"tab" | "split""split"Where it opens.

[worktrees]

Git worktrees Hive creates for agents.

KeyTypeDefaultMeaning
dirpath$XDG_DATA_HOME/hive/worktreesWhere new worktrees go (on most Linux systems ~/.local/share/hive/worktrees).

[theme]

Colour depth, glyphs and colour overrides on top of [general] theme.

KeyTypeDefaultMeaning
colorsstring"auto"auto, truecolor, 256, 16 or none. Auto reads NO_COLOR, COLORTERM and TERM.
glyphsstring"auto"auto, unicode or ascii. Auto picks ascii on the Linux console or without a UTF-8 locale.
accent#rrggbbtheme'sAccent colour. Also: accent_dim, surface, text, muted, success, warning, error.

[keys]

The leader key and bindings. Command names are on the keys page. See keys.

KeyTypeDefaultMeaning
leaderkey"ctrl+space"Pressed before every Hive command. Needs Ctrl, Alt or an F-key. Pressing it twice sends it to the agent.
jump_modifierstring"alt"Modifier for 1-9 to jump to agents without the leader: "alt", "ctrl+alt", or "" for off.
bindtabledefaultscommand = key or [keys], pressed after the leader. Replaces that command's defaults; [] unbinds it.
globaltableAlt+arrowscommand = key, active without the leader even while typing. Needs Ctrl or Alt; [] frees a key for the agent.

[agents.<name>]

Add an agent or override a built-in. Commands run directly, never through a shell.

KeyTypeDefaultMeaning
agents.<name>.commandstringrequiredProgram to run, by name on PATH or as an absolute path.
agents.<name>.argsstring array[]Arguments, passed as they are.
agents.<name>.envtable{}Extra environment variables. Never written to disk by Hive.

[layouts.<name>]

Panes opened together in a new tab with Ctrl+Space L. The first pane fills the tab; each next one splits the one before it.

KeyTypeDefaultMeaning
layouts.<name>.spacesstring array[]Spaces where Ctrl+Space L opens this layout without asking.
layouts.<name>.panesarray of tablesrequiredThe panes, in order. Each takes the keys below.
panes[].agentstring"shell"Agent to start.
panes[].runstring array[]A command to run instead of an agent, e.g. ["npm", "run", "dev"].
panes[].split"right" | "down""right"Where it goes relative to the previous pane.
panes[].labelstring""Session label; empty uses the agent's or command's name.

Examples

Your own agent, and a variant of a built-in

[agents.aider]
command = "aider"
args = ["--dark-mode"]
env = { AIDER_AUTO_COMMITS = "false" }

[agents.claude-opus]       # shows up as its own agent
command = "claude"
args = ["--model", "opus"]

Agents start with the environment of the hive command that launched them, plus env. Hive recognises a custom agent's status when its command is a known agent (here, Claude Code); otherwise see report-agent.

A layout for a web project

[layouts.web]
spaces = ["web"]           # opens without asking in the "web" space
panes = [
  { agent = "claude" },
  { run = ["npm", "run", "dev"], split = "right", label = "server" },
  { split = "down" },      # a terminal below the server
]

A layout with no panes or an unknown agent stops hive from starting, with the reason.

Light terminal, no mouse, quiet

[general]
theme = "hive-light"

[terminal]
mouse_support = false

[notifications]
bell = false

Something wrong or missing? Open an issue.