Skip to main content

Getting started

This page takes you from a fresh clone to a first verified tick. Every command works at any clone path — nothing here depends on a specific machine layout.

Prerequisites

Pi must be configured with a provider that can serve a coding agent stably (system prompt + tool schemas + long sessions). Verify the endpoint with one real call before dispatching work — do not assume the key or the model service works:
If this fails, fix the model endpoint first; the Runner will fail fast on every task otherwise.
The local-llm-kv-cache proxy is an optional enhancement (faster prefix reuse for local llama.cpp models), not a core prerequisite — see Optional components.

1. Clone the repository

2. Create the configuration

The repository ships a committed example; the real config is local state (gitignored). Copy it and edit it:
All fields (TOML, relative paths resolve against the config file’s directory): Minimal example:

3. Initialize the delivery labels

GitHub labels are external state: a commit never creates them, and a missing label makes the scan silently skip that state. Create them once per task-pool repository:

4. Run one tick manually

The manual command is for first verification and troubleshooting only — normal operation is scheduled by the timer (step 6):
One tick does at most one thing: resume an opened PR (review/fix/merge) or claim one ai-ready Issue (p0-labeled Issues are picked first, then bug-labeled Issues, then plain features), then it exits. With an empty ready queue it exits cleanly without claiming anything.

5. Smoke walkthrough (from zero)

The smallest end-to-end proof that your setup works. Run it in the clone directory from step 1; every command is relative to that directory.
You are done when: the Issue moves ai-ready → ai-in-progress → ai-pr-opened → ai-merged, a PR exists with Fixes #<issue> in its body, and the journal shows run_end ... result=pr_opened. If any step fails, the Issue is marked ai-blocked with the scene — see Operations for recovery.

6. Enable the timer

The committed units reference the author’s clone layout via %h specifiers (%h/Documents/muyan/muyan-pilot). Point WorkingDirectory, MUYAN_PILOT_CONFIG and ExecStart at your clone path, then:
The timer fires every 15 minutes, 24 hours a day (00:00–23:45). While a task is running, further timer starts are ignored by systemd; the next real start picks up the latest code (the service fast-forwards main before starting — see Operations).