Quick start
From an empty directory to a running agent in about five minutes.
This guide takes you from an empty directory to a running agent in about five minutes: you write one file, validate it, and run it. Everything runs through Docker, so there is nothing else to install.
0. Prerequisites
- Docker - agents run from the published base image,
ghcr.io/loopedautomation/agent - An API key for an OpenAI-compatible or Anthropic endpoint - or a local model via Ollama, no key required
1. Write the agent file
An agent is defined entirely by a single file. Create a project directory, then add the definition as agent.yaml:
mkdir time-bot && cd time-bot# agent.yaml
handle: time-bot
description: Answers questions, and knows what time it is.
model:
provider: openai-compatible
id: gpt-5.4-mini
purpose: |
You are a concise assistant. When asked about the current date or time,
use the current_time tool rather than guessing.# agent.yaml
handle: time-bot
description: Answers questions, and knows what time it is.
model:
provider: anthropic
id: claude-haiku-4-5
purpose: |
You are a concise assistant. When asked about the current date or time,
use the current_time tool rather than guessing.- The
handleis the identifier you use to refer to the agent. The agent chooses its own display name on first boot and announces it in a startup banner. - Unknown keys are validation errors, so a misspelled key such as
permisions:fails immediately instead of being silently ignored. - To use a local model instead, use the
openai-compatibleprovider and addbase_url: http://host.docker.internal:11434/v1undermodel:- no API key is needed. (localhostwould resolve to the container itself; on Linux, also add--add-host=host.docker.internal:host-gatewayto the commands below.)
Every block is explained in Agent config.
2. Validate it
Validation is the same for both providers:
docker run --rm -v ./agent.yaml:/agent/agent.yaml:ro \
ghcr.io/loopedautomation/agent:latest validate /agent/agent.yamlPrints the parsed identity, compiled sandbox flags and every env var the config references, with a warning for any that aren't set.
3. Run it
export OPENAI_API_KEY=sk-...
docker run --rm -it \
-v ./agent.yaml:/agent/agent.yaml:ro \
-e OPENAI_API_KEY \
-v time-bot-data:/data \
ghcr.io/loopedautomation/agent:latestexport ANTHROPIC_API_KEY=sk-ant-...
docker run --rm -it \
-v ./agent.yaml:/agent/agent.yaml:ro \
-e ANTHROPIC_API_KEY \
-v time-bot-data:/data \
ghcr.io/loopedautomation/agent:latestMeridian (time-bot) is listening (model: gpt-5.4-mini; ctrl-d to exit)
you> what time is it?
Meridian> It's 21:14 UTC on July 3, 2026.
[ok · 2 steps · 743in/41out tokens · $0.000136]Your first agent is now running locally. The image's default command runs the mounted config, and the /data volume holds the agent's memory and identity - persist it and the agent keeps the name it chose. Every run reports its status, step count and token usage.
What's next
Without triggers:, running the agent starts an interactive REPL, which is the fastest way to iterate on a purpose. From here you can:
- Give it triggers and the same image runs a long-lived service: Discord · Webhook · Cron
- Teach it skills and wire up tools: Skills · Tools
- Grant it capability safely: Permissions
- Ship it for real, from the base image to fleets and PaaS: Docker run · Docker compose
- Generate a complete project instead of writing the files by hand -
af initscaffolds the agent, secrets and deployment shape: CLI - Start from a complete, runnable agent: the gh-issues-cli example uses the same file shape, adds triggers, skills and permissions, and deploys with
docker compose up
Are you an AI? Visit llms.txt — these docs as plain markdown.