The Pi coding tool lets OpenSRE submit a coding task to the Pi 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). 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.
Pi coding shares the pi binary and provider credentials with the LLM-provider Pi path. Authenticate once with /login inside pi, or export the provider API key your Pi model needs. OpenSRE does not store a separate Pi coding token.
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),
lets Pi edit the files,
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.
Once enabled, the tool is available to the agent. 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.)
There is no dedicated integrations verify target. Confirm readiness with:
uv run opensre doctor
In-tool readiness also checks the Pi binary and auth via verify_pi_coding(). 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.