Skip to content

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"]
  capture_recording:
    enabled: false

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

Option Type Default Description
workspaces []string [] Directories to scan for 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
tmux.capture_recording.enabled bool false Record changed agent-pane captures for training

Pane capture recording

Pane capture recording is disabled by default. When explicitly enabled, Hive records only fresh captures it already reads from classified agent panes; it does not install agent hooks or trigger extra tmux captures.

Recordings are individual JSON files under $HIVE_DATA_DIR/recordings/tmux (normally ~/.local/share/hive/recordings/tmux). Each filename is the SHA-256 hash of the complete visible pane capture, so identical content is stored only once across panes and Hive processes. Metadata and the weak label come from the first observation of those exact bytes; later identical observations are skipped. Hive stores the whole visible pane; capture-pane does not include tmux scrollback history. Directories use mode 0700 and files use mode 0600. Each record contains the terminal content, an opaque session/pane key, detected tool, and the Stage 2 published terminal.Status as its weak label (hive_assess_v1). The separate rule ID and matched signals describe the Stage 1 assessment evidence that fed the tracker. Weak labels are useful for bootstrapping a training corpus but are not human-verified ground truth. A private .identity.key keeps opaque grouping keys stable across Hive processes; exclude that key from any corpus export.

Warning

Terminal panes can contain source code, prompts, command output, file paths, and secrets. Hive does not redact, upload, rotate, or delete these recordings. Review and remove local files yourself when they are no longer needed. Enabling recording is an explicit privacy opt-in.

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

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 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