--- title: "Pi coding tasks" description: "Let OpenSRE hand a coding task to the Pi agent, which edits the working tree and returns a diff." --- The **Pi coding tool** lets OpenSRE submit a coding task to the [Pi](https://pi.dev) agent. Pi edits files in a workspace to implement the change and returns a summary plus the git diff. It **does not commit, push, or open a pull request** — it only edits the working tree so you can review the diff. This is different from using Pi as your LLM provider (`LLM_PROVIDER=pi`, see [LLM providers](/llm-providers)). There Pi is the reasoning engine; here Pi is the thing that actually changes code. This is a **mutating** tool — it changes files on disk. It is **disabled by default**: it only becomes available to the agent when `PI_CODING_ENABLED=1`. Enable it only when you want OpenSRE to make code changes. It never commits, pushes, or opens a PR, so you always review the diff. ## Quick reference | Env var | What it does | | --- | --- | | `PI_CODING_ENABLED` | Opt-in switch. Set to `1` to make the tool available. Off by default. | | `PI_CODING_MODEL` | Optional Pi model in `provider/model` form (e.g. `anthropic/claude-haiku-4-5`). | | `PI_CODING_WORKSPACE` | Default repository path Pi edits. Defaults to the current directory. | | `PI_CODING_TIMEOUT_SECONDS` | Per-task timeout (default 600, clamped 60–1800). | | `PI_BIN` | Optional explicit path to the `pi` binary. | ## Enable it 1. Install and authenticate the Pi CLI (same binary/credentials as the Pi provider): ```bash npm i -g @earendil-works/pi-coding-agent # then authenticate: run `pi` and use /login, or export a provider key such as GEMINI_API_KEY ``` 2. Turn the tool on: ```bash export PI_CODING_ENABLED=1 export PI_CODING_MODEL=anthropic/claude-haiku-4-5 # optional ``` 3. Confirm Pi is ready: ```bash uv run opensre doctor ``` ## How it works When the tool runs, it: 1. runs `pi` in headless mode inside the workspace with your task plus a fixed set of rules (follow `AGENTS.md`, do not commit or push, do not run destructive git commands, preserve unrelated changes, summarize what changed), 2. lets Pi edit the files, 3. returns `success`, a `summary`, the list of `changed_files`, and the `diff` (truncated if large). You review the diff and decide whether to keep, commit, or revert the changes. ## Example Once enabled, the tool is available to the agent (investigation surface). Describe a scoped coding task, for example: ``` add input validation to parse_config() in config/loader.py ``` If the agent calls the tool, Pi edits `PI_CODING_WORKSPACE`, and you get back a summary and the diff to review. Nothing is committed. (The agent decides whether to call the tool; for a deterministic run, invoke `pi_coding_task` directly — see the tests.) ## Notes - Nothing is committed or pushed. Opening a PR is out of scope for now. - It is **disabled by default**. Only when `PI_CODING_ENABLED=1` does the agent see it and get to choose to call it — enable it deliberately, since it edits files. - If `PI_CODING_ENABLED` is unset, or the Pi CLI is missing or unauthenticated, the tool stays unavailable and returns a clear message instead of running.