Reference
Files & state
The CLI keeps state in two places: a global config directory under your home folder, and a per-folder .brainbase/ directory in each linked agent.
Global: ~/.brainbase/
Override the location with BRAINBASE_HOME.
~/.brainbase/
├── auth.json # signed-in session (mode 0600)
├── token.json # long-lived CLI PAT (bbpat_…), mode 0600
├── installed.json # registry of every installed template on this machine
├── registry/ # packed templates available to install
│ └── <creator>/<slug>/<version>/
└── cache/ # transient caches
| File | Purpose |
|---|---|
auth.json | Browser-login session (JWT + user). Mode 0600. |
token.json | PAT issued by token create. Mode 0600. Format bbpat_…. |
installed.json | Index of every template install across folders. Used by template list --all and template remove. |
registry/ | Locally available templates, each a self-contained <creator>/<slug>/<version>/ bundle. |
cache/ | Transient caches. |
Per-folder: <your-folder>/.brainbase/
Created when you link or pull an agent into a folder. Holds cloud-derived content and per-checkout state. An auto-generated .gitignore (containing * and !.gitignore) keeps the entire .brainbase/ directory out of source control — only brainbase.agent.yaml at the folder root is meant to be committed.
<linked-folder>/
├── brainbase.agent.yaml # the committed manifest (source of truth)
└── .brainbase/ # entire directory is gitignored
├── state.json # cached cloud metadata (slug, url, org/team, tracking)
├── sync-state.json # per-checkout drift / hashes
├── secrets.env # agent secrets, .env format
├── instructions.md # pulled instructions body
├── playbooks/ # pulled playbook bodies (<slug>.md)
├── entrypoint.sh # resolved entrypoint script (chmod 0755)
├── entrypoint.log # entrypoint run log
├── link.json # LEGACY — read once for migration, never written
├── orchestration-link.json # set when the folder is part of an orchestration
└── .gitignore # auto-created: `*` + `!.gitignore`
| File | Purpose |
|---|---|
state.json | Cached cloud metadata for the claimed agent (org/team, slug, url, tracking). Not the source of truth — regenerated from the cloud. Together with the manifest's id, this is what records which agent the folder is linked to. |
sync-state.json | Per-checkout last-sync revision + per-component hashes. |
secrets.env | Agent secrets in .env format. Written by agent pull; read by agent push and run. Never commit it. |
instructions.md / playbooks/ | Bodies written by pull; unpack lays them into the harness's expected paths. |
entrypoint.sh / entrypoint.log | The resolved sandbox entrypoint script and its run log. |
link.json | Legacy. Read once for a one-time migration into state.json, then never written. The "which agent is this folder linked to" role now belongs to state.json + the manifest's id. |
orchestration-link.json | Present when the folder is a member of an orchestration. |
Keep secrets out of git
The whole
.brainbase/ directory is gitignored automatically (the generated .brainbase/.gitignore is * + !.gitignore), so secrets.env and everything beside it stays out of source control. Only brainbase.agent.yaml at the folder root is committed. Don't move secret values into that committed manifest — store them as agent secrets instead.