Skip to content

Configuration

Bouquet is configured via a .bouquet.toml file in your repository root. Run bouquet init to generate a starter template.

Config search order: --config flag → .bouquet.toml in repo root → ~/.config/bouquet/config.toml → defaults.

Minimal Example

[project]
name = "my-project"

[agent]
command = "claude"

Full Example

[project]
name = "my-project"

[agent]
command = "claude"
default_profile = "claude"

[[agent.profiles]]
name = "claude"
command = "claude"

[[agent.profiles]]
name = "aider"
command = "aider"
args = ["--model", "claude-sonnet-4-20250514"]

[[services]]
name = "api"
command = "uv run uvicorn app.main:app --reload --port {{ 8000 + BOUQUET_WORKTREE_INDEX }}"

[[services]]
name = "frontend"
command = "npm run dev -- --port {{ 3000 + BOUQUET_WORKTREE_INDEX }}"

[tmux]
layout = "services-top"

[bootstrap]
python_version = "3.14"
setup_commands = ["echo 'hello'"]
copy_env_files = [".env"]
cow_clone_dirs = [".venv", "node_modules"]
install_commands = ["uv sync"]

[task_queue]
backend = "local"
auto_branch_prefix = "task/"
max_autopilot_concurrency = 3
autopilot_auto_complete = true

Sections

[project]

Key Type Description
name string Project name. Defaults to the repository directory name.

[agent]

Key Type Description
command string Agent CLI command (e.g. claude, aider, codex)
args list Additional arguments passed to the agent command
default_profile string Name of the default agent profile

[[agent.profiles]]

Named agent configurations so you can switch between agents per worktree.

Key Type Description
name string Profile name shown in the TUI selector
command string Agent CLI command
args list Additional arguments

[[services]]

Dev servers that run alongside the agent in each worktree window.

Key Type Description
name string Service name (shown in pane title)
command string Shell command to run the service. Supports template expressions.

[tmux]

Key Type Description
layout string Pane layout. "services-top" (default) puts services in a row at the top. Any other value is passed to tmux select-layout.

[bootstrap]

Key Type Description
python_version string Runs uv python pin <version> before dependency installation
setup_commands list Shell commands run before dependency installation. Each command supports {{ … }} template expressions and the same template vars are also exported as shell env vars (e.g. $BOUQUET_WORKTREE_INDEX). Env vars exported by the commands themselves are captured and propagated. A non-zero exit aborts the worktree bootstrap — captured stdout/stderr are written to bouquet's stderr and the worktree is marked ERROR.
post_deps_commands list Shell commands run AFTER python_deps_command/node_deps_command (so the venv / node_modules are available) and before direnv_allow. Same template-variable + env-capture + loud-failure semantics as setup_commands. Use for steps that need the project's tooling — e.g. uv run migrate upgrade head.
teardown_commands list Shell commands run when bouquet removes a worktree, BEFORE the tmux window is killed and the git worktree is removed (so user code can still reach the on-disk checkout). Same template variables. Best-effort: failures are logged but don't block tmux/git cleanup. Use to reclaim external per-worktree resources (DBs, queues, caches).
copy_env_files list Files copied from the main repo to the worktree (e.g. .env)
cow_clone_dirs list Directories cloned via Copy-on-Write (APFS) instead of full copy
install_commands list Dependency install commands (e.g. uv sync, pnpm install)

[task_queue]

Key Type Description
backend string "local" (SQLite, default) or "github" (GitHub Issues)
label_filter string For GitHub backend: only issues with this label appear as tasks (default "bouquet")
auto_branch_prefix string Prefix for auto-generated branch names when picking up tasks
max_autopilot_concurrency int Maximum worktrees autopilot will run in parallel (default 3)
autopilot_auto_complete bool Auto-complete tasks when their worktree goes IDLE (default true)

Template Variables

Template expressions use {{ expr }} syntax with arithmetic support. They are available in:

  • [[services]].command strings
  • [bootstrap].setup_commands strings

In setup_commands, the same variables are additionally exported into the bash subprocess as plain shell env vars (e.g. $BOUQUET_WORKTREE_INDEX), so you can use either form depending on what reads more naturally for your script.

Variable Type Example
BOUQUET_WORKTREE_INDEX int 1, 2, 3
BOUQUET_WORKTREE_BRANCH str feature/auth
BOUQUET_WORKTREE_PATH str /path/to/.bouquet-worktrees/feature-auth
BOUQUET_PROJECT_NAME str my-project

Examples:

[[services]]
name = "api"
command = "uv run uvicorn app.main:app --port {{ 8000 + BOUQUET_WORKTREE_INDEX }}"

[bootstrap]
setup_commands = [
    # Template form:
    "bash scripts/provision-worktree.sh {{ BOUQUET_WORKTREE_INDEX }}",
    # Shell-var form (equivalent):
    'echo "Worktree $BOUQUET_WORKTREE_INDEX on $BOUQUET_WORKTREE_BRANCH"',
]