This walkthrough creates a local demo repo, registers it with Quay, enqueues a brief, and runs enough ticks to see Quay spawn a worker and ingest a blocker. It does not require Linear, Slack, GitHub, or a real coding agent.
- Bun 1.1 or newer to build from source.
git.tmux.
From this repo:
bun install
bun run build
./dist/quay --versionThe build includes the local packages/admin-ui bundle, so the resulting
binary can serve the Admin UI without a separate UI checkout.
For source-mode development, replace ./dist/quay below with:
bun run quay --export QUAY_DATA_DIR=/tmp/quay-demo/data
rm -rf /tmp/quay-demo
mkdir -p "$QUAY_DATA_DIR"Create a config file with a fake worker. The fake worker reads the prompt file, writes a blocker signal, and exits. The second tick ingests that blocker.
cat > "$QUAY_DATA_DIR/config.toml" <<'TOML'
max_concurrent = 1
agent_invocation = "cat {prompt_file} > .quay-demo-prompt.md; printf 'Need a real coding agent for this task.\n' > .quay-blocked.md"
TOMLmkdir -p /tmp/quay-demo/source
git init -b main /tmp/quay-demo/source
cd /tmp/quay-demo/source
printf 'hello\n' > README.md
git add README.md
git -c user.name='Quay Demo' -c user.email='quay-demo@example.com' commit -m init
mkdir -p "$QUAY_DATA_DIR/repos"
git clone --bare /tmp/quay-demo/source "$QUAY_DATA_DIR/repos/demo.git"cd /path/to/quay
./dist/quay repo add \
--id demo \
--url /tmp/quay-demo/source \
--base-branch main \
--package-manager demo \
--install-cmd trueThe command emits a JSON repo row.
cat > /tmp/quay-demo/brief.md <<'MD'
Add a short sentence to README.md.
MD
./dist/quay enqueue \
--repo demo \
--brief-file /tmp/quay-demo/brief.md \
--external-ref DEMO-1The command emits JSON containing task_id, state, branch_name,
tmux_id, worktree_path, and attempt_id.
Copy the task_id from the enqueue output:
export TASK_ID=<task_id_from_enqueue_output>First tick: promotes queued to running and starts the tmux worker.
./dist/quay tickSecond tick: observes that the fake worker exited and ingests
.quay-blocked.md.
./dist/quay tickInspect the task:
./dist/quay task get "$TASK_ID"
./dist/quay task events "$TASK_ID"
./dist/quay artifact get "$TASK_ID" blockerExpected end state for this demo is awaiting-next-brief, because the fake
worker deliberately blocked instead of opening a PR.
rm -rf /tmp/quay-demo