Skip to content

Separate bin/ from state/: capture the active state as a single shareable profile #223

@WiggidyW

Description

@WiggidyW

Layout split

~/.objectiveai (overridable via OBJECTIVEAI_DIR) splits into two trees:

<OBJECTIVEAI_DIR>                          default: $HOME/.objectiveai
├── bin/                                   ── machine-wide, shared by every state ──
│   ├── objectiveai[.exe]                  (cli moves here from the root)
│   ├── objectiveai-api / -viewer / -mcp / -db [.exe]
│   ├── pg-bin/                            (postgres install; was db-bin/)
│   ├── plugins/<owner>/<name>/<version>/
│   └── tools/<owner>/<name>/<version>/
└── state/<OBJECTIVEAI_STATE>/             default state: "default"
    ├── config.json
    ├── db/  .pgpass  db.lock              (the postgres cluster, per state)
    ├── logs/
    └── instances/agents/
  • bin = executables only: the five shipped binaries, the embedded-postgres install, installed plugins and tools.
  • state = everything the runtime accumulates: config, the database (agents, agent instances, continuations, message queues, logs, tasks/schedules), function/profile caches — the works.

CONFIG_BASE_DIR is removed. Two env vars remain:

  • OBJECTIVEAI_DIR — root override, default $HOME/.objectiveai
  • OBJECTIVEAI_STATE — state name, default default, restricted to [A-Za-z0-9_-]+

Switching OBJECTIVEAI_STATE switches the entire world (database cluster included) while sharing one set of binaries — states are cheap, isolated, and coexist.

Why: states as profiles

The active state — database AND plugin/tool state, agents, agent instances, queues, schedules — is captured in one directory: a single self-contained profile. That unlocks:

  • Snapshotting (future): freeze state/<name>/ (cluster + config + registry) as an artifact; restore or fork it later.
  • Sharing (future): hand a prepared state to someone else — a state that comes pre-loaded with tools and plugin state and agents and agent instances and whatnot, ready to run.
  • Per-project / per-experiment states without container gymnastics; the test suite itself runs one shared OBJECTIVEAI_DIR with a state per test.

Status

The layout split + env model is being implemented now (filesystem resolution, objectiveai-db pg-bin/cluster split, spawn env forwarding, installers, test harness). Snapshot/share tooling is follow-up work tracked by this issue.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions