Agent Mode and Object Store
April 13, 2026 ยท View on GitHub
Agent mode
Agent mode is an alternative to the traditional callback mechanism. Instead of runners calling back to GARM via HTTP, they establish a persistent WebSocket connection through garm-agent. This enables:
- Bidirectional communication between GARM and runners
- Remote shell access to runner instances (when enabled)
- More reliable status reporting over unstable networks
Enabling agent tools sync
GARM can automatically sync garm-agent binaries from GitHub releases:
garm-cli controller update \
--garm-tools-url https://api.github.com/repos/cloudbase/garm-agent/releases \
--enable-tools-sync
Verify sync status:
garm-cli controller show
Enabling shell access on a pool
garm-cli pool update <POOL_ID> --enable-shell=true
Agent URL
The agent URL is initialized when installing the controller. Only change it if you want fine grained controll or if you plan to place a reverse proxy in front that differs from the rest of the URLs.
The agent URL must be reachable by runner instances:
garm-cli controller update --agent-url https://garm.example.com/agent
Object store
GARM includes a simple database-backed object storage system for storing files like provider binaries, agent binaries, and runner tools.
Upload a file
garm-cli object create \
--name garm-agent-linux-amd64 \
--description "Linux AMD64 garm-agent binary" \
--path /path/to/garm-agent \
--tags "binary,os_type=linux,arch=amd64"
List objects
# All objects
garm-cli object list
# Filter by tags
garm-cli object list --tags "binary,os_type=linux"
Download an object
garm-cli object download <OBJECT_ID>
Show object details
garm-cli object show <OBJECT_ID>
Update object metadata
garm-cli object update <OBJECT_ID> --name new-name --tags "new,tags"
Delete an object
garm-cli object remove <OBJECT_ID>