Quickstart

Run the runtime end to end

This guide runs a mock agent turn in Docker. It does not require a model API key, and it verifies the core path: config, SQLite, scheduler, Docker backend, runner, HTTP API, and WebUI.

Prerequisites

RequirementWhy it is neededCheck
Node.js 24+CLI, server, runner build, built-in SQLite module.node --version
npmInstall TypeScript and runtime dependencies.npm --version
DockerEvery agent turn runs in a container.docker ps
GitClone repository and manage local changes.git --version

1. Clone and Build

git clone git@github.com:OmegaCombinator/suzumio.git
cd suzumio
npm install
npm run build

2. Build the Runner Image

docker build -t suzumio-runner:dev .

The example configs use suzumio-runner:dev. If you use a different tag, set backend.image in the project config.

3. Choose a Runtime Root

export SUZUMIO_ROOT=/tmp/suzumio-root
mkdir -p "$SUZUMIO_ROOT"

SUZUMIO_ROOT stores project databases, turn files, workspaces, and artifacts. Keep it outside the Git repository.

4. Inspect the Config

suzumio config render examples/demo.yaml

Rendering config before running is recommended. It shows imported content, default values, and the final shape stored in SQLite.

5. Initialize the Project

suzumio init examples/demo.yaml
suzumio status demo

After initialization, the project is not scheduled yet. Start it explicitly when the server is running.

6. Start the Server

suzumio serve --host 0.0.0.0 --port 39400

This starts the HTTP API, ToolHost, WebUI, SSE stream, and scheduler loop. Open http://127.0.0.1:39400 in a browser.

7. Send the First Message

Open another terminal with the same SUZUMIO_ROOT.

export SUZUMIO_ROOT=/tmp/suzumio-root
suzumio start demo
suzumio send demo pm P1 "Start the mock demo and report status."

The scheduler will see an unread message for pm, create one turn, and start one Docker container.

8. Inspect Results

suzumio turns demo --limit 5
suzumio messages demo --limit 10
suzumio events demo --limit 20

A successful mock run shows a completed turn with text similar to:

Mock turn completed for pm.

This container runner is wired correctly. In AI mode, the same runner calls the configured model and Suzumio ToolHost.

9. Verify Non-preemptive Behavior

If an agent is already running, sending another message does not interrupt the current turn. The new message remains unread until the current turn completes. This is the expected default behavior.

10. Optional AI Runner Test

examples/ai-demo.yaml is sanitized. Copy it to a local untracked file before adding private endpoints.

cp examples/ai-demo.yaml /tmp/suzumio-ai-demo.yaml
# edit /tmp/suzumio-ai-demo.yaml locally
export SUZUMIO_GATEWAY_API_KEY=...
suzumio init /tmp/suzumio-ai-demo.yaml

Do not commit real API keys, private gateway URLs, or private provider names. Keep them in local config and environment variables.

Troubleshooting

SymptomCauseAction
Turn fails before writing output.Runner image not built, wrong image name, or container startup failure.Run docker build -t suzumio-runner:dev . and inspect docker logs <container>.
Tool call connection refused.Container cannot reach Suzumio server.Run server with --host 0.0.0.0 and use http://host.docker.internal:39400.
Agent does not start.Project is not running or agent has no unread inbound message.Run suzumio start project and send a direct message to the agent.
GitHub Pages custom domain is HTTP only.Certificate is still provisioning.Wait for GitHub Pages certificate issuance, then enable HTTPS enforcement.