Skip to content

Make the bullpen home directory overridable (BULLPEN_HOME) #8

Description

@Steel-tech

Everything bullpen persists is resolved from the process's home directory: Store::default_path() returns home_dir()/.bullpen/bullpen.db, and the credential store sits beside it at ~/.bullpen/auth.json. There is no way to point either somewhere else.

That is fine for a human at a terminal and fatal for anything that supervises bullpen.

Why now

Scoping a jig runtime adapter for bullpen surfaced this as a hard blocker. jig composes the complete subprocess environment for each agent phase — a role's env allowlist plus an ephemeral HOME — deliberately, so a phase cannot reach the operator's environment.

Run bullpen under that and every phase gets a brand new, empty store. Resume — the entire reason to wrap bullpen instead of a stateless CLI — silently stops working.

Worse, it fails late. The first send succeeds and mints a session id. The second send passes that id to run -r against a store that has never seen it. The error surfaces two phases into a run, nowhere near the cause.

What

Resolve the bullpen home from BULLPEN_HOME when set, falling back to $HOME/.bullpen when not.

Scope it to the whole directory, not just the database — auth.json has the same problem, and one concept is easier to reason about than two:

  • BULLPEN_HOME=/path → store at /path/bullpen.db, credentials at /path/auth.json
  • unset → today's behaviour exactly, $HOME/.bullpen/…

Notes

  • Env var rather than a flag, chosen for the supervising-process case: jig injects environment, and threading a --store flag through every subcommand is more surface for the same result. A flag can come later if a human wants one; the env var is what unblocks the adapter.
  • Purely additive. With BULLPEN_HOME unset nothing changes, so no existing store moves and no migration is needed.
  • Worth a test that asserts the fallback still lands on $HOME/.bullpen, so a future refactor cannot quietly relocate everyone's sessions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions