Configuration
Config file: ~/.config/hive/config.yaml
Example
workspaces:
- ~/projects
agents:
default: claude
claude:
command: claude
flags: ["--model", "opus"]
aider:
command: /opt/bin/aider
flags: ["--model", "sonnet"]
tmux:
poll_interval: 1.5s
preview_window_matcher: ["claude", "aider"]
tui:
theme: tokyo-night
rules:
- pattern: ""
max_recycled: 5
windows:
- name: "{{ agentWindow }}"
command: '{{ agentCommand }} {{ agentFlags }}'
focus: true
- name: shell
commands:
- hive ctx init
- pattern: ".*/data-team/.*"
agent: aider
Tip
Run hive doctor to validate your configuration and check that all dependencies (git, tmux, plugins) are correctly set up.
Run hive config to dump the fully resolved configuration as JSON — useful for debugging which defaults and overrides are in effect.
General Settings
Hive watches configured workspace directories and rescans them when repositories are added, removed, or renamed. Run :WorkspaceRefresh from the command palette to rescan manually.
| Option | Type | Default | Description |
|---|---|---|---|
workspaces |
[]string |
[] |
Watched directories containing repositories |
git_path |
string |
git |
Git executable path |
copy_command |
string |
pbcopy (macOS) |
Command to copy to clipboard |
auto_delete_corrupted |
bool |
true |
Auto-delete corrupted sessions on prune |
history.max_entries |
int |
100 |
Max command palette history entries |
Environment Overrides
Use environment overrides for machine-specific paths and defaults without maintaining separate config files. Empty environment variables are ignored. Run hive config to inspect the resolved values.
| Environment variable | Overrides | Notes |
|---|---|---|
HIVE_DEFAULT_AGENT |
agents.default |
Must match an existing agent profile key |
HIVE_CONTEXT_BASE_DIR |
context.base_dir |
Supports the same path rules as config |
HIVE_GIT_PATH |
git_path |
Git executable path for this machine |
Agents
Agent profiles define the AI tools available for spawning in sessions. The default key selects which profile to use when creating a new session unless a matching rule sets agent, the session is created with --agent, or HIVE_DEFAULT_AGENT is set.
| Option | Type | Default | Description |
|---|---|---|---|
agents.default |
string |
"claude" |
Profile name to use by default |
agents.agent_selector |
bool |
false |
Show an inline agent picker in the new-session form; default profile pre-selected |
agents.<name>.command |
string |
profile name | CLI binary to run (defaults to profile name if empty) |
agents.<name>.flags |
[]string |
[] |
Extra CLI args appended to the command on spawn |
Set HIVE_DEFAULT_AGENT to override agents.default for a single machine or shell session. The value must match an existing profile key in agents.
export HIVE_DEFAULT_AGENT=codex
Agent resolution order is: CLI/session agent, then batch --agent, then the last matching rules[].agent, then HIVE_DEFAULT_AGENT, then agents.default. Sessions can run multiple agents by opening additional tmux windows — use tmux.preview_window_matcher to control which windows the TUI monitors.
Tmux
| Option | Type | Default | Description |
|---|---|---|---|
tmux.poll_interval |
duration |
1.5s |
Status check frequency |
tmux.preview_window_matcher |
[]string |
["claude", "aider", "codex", ...] |
Regex patterns for agent window names |
Terminal
Hive detects agent status in two stages: a stateless per-poll assessment of the visible pane content, then a debounce tracker (terminal.status) that turns those assessments into stable, published statuses. Debouncing exists because a single poll can catch a tool mid-redraw; requiring a status to repeat before it's published avoids flickering between active/ready/missing on transient noise.
| Option | Type | Default | Description |
|---|---|---|---|
terminal.status.confirm.idle.polls |
int |
2 |
Consecutive confirming polls required before leaving active for ready |
terminal.status.confirm.idle.min_duration |
duration |
2s |
Minimum wall-clock time the idle candidacy must also span |
terminal.status.confirm.idle.stable_content |
bool |
true |
Require the pane content to stay unchanged for the whole idle candidacy |
terminal.status.confirm.missing.polls |
int |
2 |
See below: governs list-panes failure tolerance, not a debounce policy |
terminal.status.confirm.approval.polls |
int |
1 |
Consecutive confirming polls required before leaving approval/question |
Entering active, approval, or question is always immediate (a busy indicator or a dialog is trusted the moment it's seen); only leaving those states is debounced, since a false positive there is a brief flash rather than a missed prompt.
terminal.status.confirm.missing.polls is not a status.Tracker debounce policy — it is consumed directly by the tmux transport as a list-panes failure tolerance: N polls tolerates N-1 consecutive tmux list-panes failures (serving the last-known cache) before a pane is published as missing. This keeps a single transient tmux hiccup from flashing every session missing.
Each polls/min_duration pair is combined, not alternative: the tracker requires max(polls, ceil(min_duration / tmux.poll_interval)) consecutive confirming polls. Setting min_duration shorter than tmux.poll_interval has no effect, since the poll-count floor already dominates — hive doctor warns about this combination.
terminal:
status:
confirm:
idle:
polls: 2
min_duration: 2s
stable_content: true
missing:
polls: 2
approval:
polls: 1
TUI
| Option | Type | Default | Description |
|---|---|---|---|
tui.theme |
string |
tokyo-night |
Built-in theme name (see Themes) |
tui.update_checker |
bool |
true |
Check for updates on startup |
tui.store |
bool |
false |
Enable KV store browser tab |
Messaging
| Option | Type | Default | Description |
|---|---|---|---|
messaging.topic_prefix |
string |
agent |
Default prefix for topic IDs |
messaging.max_messages |
int |
100 |
Messages kept per topic; older ones are deleted on publish. 0 keeps every message |
Context
| Option | Type | Default | Description |
|---|---|---|---|
context.symlink_name |
string |
.hive |
Symlink name created by hive ctx init |
context.base_dir |
string |
$HIVE_DATA_DIR/context/ |
Override the base directory for all context storage. Accepts ~ and absolute paths. Can be overridden with HIVE_CONTEXT_BASE_DIR. |
By default context documents are stored under hive's data directory (~/.local/share/hive/context/). Set context.base_dir or HIVE_CONTEXT_BASE_DIR to redirect them elsewhere — for example, into a git repository so plans and research are version-controlled alongside your code.
context:
base_dir: ~/notes/hive-context # store in a dedicated git repo
See Git-backed Context for a practical guide.
Todos
| Option | Type | Default | Description |
|---|---|---|---|
todos.actions |
map[string]string |
{} |
Custom enter handlers for URI schemes |
todos.limiter.max_pending |
int |
0 |
Global pending-todo cap (0 disables) |
todos.limiter.rate_limit_per_session |
duration |
0 |
Per-session add cooldown (0 disables) |
todos.notifications.toast |
bool |
true |
Show toast on todo creation |
Views
View-specific settings (keybindings, layout, behavior) are configured per-view under the views section.
Sessions View
| Option | Type | Default | Description |
|---|---|---|---|
views.sessions.keybindings |
map |
Key-to-command mappings | |
views.sessions.split_ratio |
int |
25 |
List/preview split percentage (1-80) |
views.sessions.refresh_interval |
duration |
15s |
Session list auto-refresh interval (0 to disable) |
views.sessions.preview_enabled |
bool |
true |
Enable tmux pane preview sidebar on startup |
views.sessions.preview_title |
string |
Go template for preview panel title | |
views.sessions.preview_status |
string |
Go template for preview status line | |
views.sessions.group_by |
string |
repo |
Tree view grouping: repo or group |
Tasks View
| Option | Type | Default | Description |
|---|---|---|---|
views.tasks.keybindings |
map |
Key-to-command mappings | |
views.tasks.split_ratio |
int |
30 |
Tree/detail split percentage (1-80) |
Messages View
| Option | Type | Default | Description |
|---|---|---|---|
views.messages.keybindings |
map |
Key-to-command mappings | |
views.messages.split_ratio |
int |
50 |
List/preview split percentage (1-80) |
Global
| Option | Type | Description |
|---|---|---|
views.global.keybindings |
map |
Keybindings available in all views |
See Keybindings for the full per-view configuration format and defaults.
More Configuration
- Rules — Repository-specific spawn, recycle, setup commands, and file copying
- User Commands — Custom commands for the vim-style command palette
- Keybindings — Per-view key mappings and palette commands
- Todo Configuration — Todo actions, limiter, notifications, and enter behavior
- Plugins — External service integrations (tmux, Claude, GitHub, etc.)
- Themes — Built-in color palettes and custom theme creation
Data Storage
All data is stored at ~/.local/share/hive/:
~/.local/share/hive/
├── hive.db # SQLite database (sessions, messages)
├── bin/ # Bundled scripts (auto-extracted)
│ ├── hive-tmux # Tmux session launcher
│ └── agent-send # Send text to agent in tmux
├── repos/ # Cloned repositories
│ └── myproject-feature1-abc123/
└── context/ # Per-repo context directories
├── {owner}/{repo}/ # Linked via .hive symlink
└── shared/ # Shared context