Your instance is a folder

Work, identity, and state.

The Docker install is not a black box. It is a first-class coordinator runtime and single folder on your machine, bind-mounted into a container. The image is replaceable — you swap it on every upgrade. What is yours is the six folders and the .env beside that compose file. Know those on day one and nothing about the container is mysterious or opaque afterward.

What lives where — click a row

You touch three of these on day one: .env to add one key, operator-config to become your practice instead of the starter examples, and coo-filesystem to see the first real file. The rest you can ignore until you need them.

Your machine (the live bundle folder)
mounted at
Inside the container

./coo-filesystem

Your artifact tree: projects, plans, drafts, work logs. Every file an agent makes for you lands here, and every harness you open later reads the same tree.

What you do with itDay one: watch the first real file land here, and open it. Week one: make a project folder for the thing you are actually working on. This is the folder to back up.

When it appears
First start copies an empty skeleton in — but only if the folder is empty. Once you have work, it is never re-seeded.
Who writes it
Operator runtime, your agents, and you. Open it in any editor; it is just files.
If you lose it
You lose the work itself. This is the folder to back up.

Two things this picture explains

Why the unzip is not the install

Every mount in the compose file is relative — ./coo-filesystem, not an absolute path. So the folder you run compose from is your instance. Run it in Downloads and your instance lives in Downloads.

Move the unzipped folder to where it will keep running first, then compose there. On upgrades, copy the new image and compose file into that same live folder. Commands stay in INSTALL.md.

Where the starter examples come from

On first start the container copies its bundled defaults into ./operator-config — one file at a time, only if missing:

northstar_docs.json   work_catalog.json
cadence.json          jobs_config.json

That is what “the starter examples” means. They are on your disk now. Replace their contents with your practice and your edit persists; delete one and the starter comes back on restart.

What stays in the image

Replaceable, and not your data

Everything else ships inside the image and is swapped out whole on the next version. None of it is where your practice lives:

Day-one consequences

Upgrading is a swap, not a migration

New image into the same live folder. Your six folders and .env stay exactly where they were, so identity, queue, and work survive the version change. Back them up first anyway.

Your keys are not on the network

The UI publishes to loopback by default — 127.0.0.1:4040. This container holds your provider keys, so it is not on your LAN unless you deliberately change the bind.

Secrets never sit with artifacts

.env is read as environment, not mounted into the tree. Per-agent overrides go in agent-env/<agent_id>.env. Nothing an agent writes into coo-filesystem should ever contain a key.

The container is not the clock

State lives in .dal-docker, including the scheduled queue — but something on your host has to call wake for it to drain. The folder remembers; your machine decides when.