Quickstart
This page is the shortest honest path from a fresh checkout to:- one working daemon
- one created session
- one completed run
- Local binary: fastest when you are already working from source
- Docker: same daemon model, but with the container boundary and file-backed secrets from the start
What you need first
Run the commands from the repository root. For the examples below, you need one provider credential in your shell. The examples use OpenAI plusgpt-5.4.
If you keep credentials in a repository-local .env, load it before either path:
Path A: local binary
Use this when you want the fastest path from a checkout to one real daemon.1. Build the daemon
2. Create isolated local directories
3. Start the daemon
- one explicit provider
- one explicit model
- one explicit API key
- no ambient MCP import from
$HOME/.codex
4. Verify the daemon is healthy
In another terminal:127.0.0.1, so the daemon can stay in --http-auth-mode auto without explicit bearer tokens. Treat that as a localhost-only bootstrap path. If you expose the control plane beyond loopback, configure auth explicitly instead of copying this shape unchanged.
5. Create one session
6. Submit one run and wait for it
gpt-5.4<route_id>/<model>
<route_id>/<model> form is the better quickstart default because the selected route stays obvious in logs and saved requests.
Path B: Docker
Use this when you want the same daemon flow, but with the container image built from this repository’s Docker assets, file-backed secrets, probes, and the container boundary from the start. The repository ships the container assets used below:1. Build the image
2. Prepare secret files
/run/secrets/.
3. Bootstrap the route secret into the daemon state volume
4. Start the daemon container
5. Verify the daemon is healthy
127.0.0.1:4000 and keeps bearer auth enabled. That is a better container default than relying on localhost-only auth auto-detection.
It also wires the same admin token into the in-container CLI client, so the docker compose exec daemon kheish-daemon ... commands below authenticate against the daemon without extra flags.
6. Create one session
7. Submit one run and wait for it
Inspect the result
Whichever path you used, these are the first commands to reach for after a successful run:- approvals with
approvals list --session-id demo - tasks with
tasks list demo - session state with
sessions get demo
docker compose -f docker/compose.yaml down -v only when you intentionally want to delete the quickstart state.
For the full container topology, guardrails, secret handling, and probe behavior, continue with Docker and containers.
After the first successful run
Once the basic flow works, the next useful steps are:- Overview for the product model
- Providers and routing for
route_id,auth_ref, and selector behavior - Running the daemon for real operator workflows
- Security and auth before exposing the control plane beyond localhost
- Connectors and reply targets if you want daemon-managed ingress and egress
- Channels and public conversations if you want shared discussion across multiple agent-backed sessions
- Projects and project tasks if you want durable coordination and assignment
- Personas if you want reusable identity instructions bound into sessions
- Assets and multimodal input if you want to move beyond text-only runs
