Skip to main content
The Sentry issue-fix tool lets you point OpenSRE at a Sentry issue and have the Pi coding agent propose a fix. OpenSRE fetches the issue context, runs Pi in your current repository, and returns a summary plus the git diff. By default it only edits the working tree so you can review the diff. When you ask it to open_pr (and enable the ship switch), it also commits the fix to a fresh branch, pushes it, and opens a pull request — it never pushes to your base/main branch.
This is a mutating tool — it changes files on disk and can open a PR. It is disabled by default: the fix step needs PI_ISSUE_FIX_ENABLED=1, Sentry configured, and the Pi CLI installed. Opening a PR needs a second switch, PI_ISSUE_FIX_SHIP_ENABLED=1, plus a GitHub token. Enable each deliberately.

Quick reference

Env varWhat it does
PI_ISSUE_FIX_ENABLEDOpt-in switch for the fix step. Set to 1 to enable. Off by default.
PI_ISSUE_FIX_SHIP_ENABLEDSecond opt-in required to open a PR (open_pr). Off by default.
GITHUB_TOKEN / GH_TOKENGitHub token used to open the pull request (needs repo/pull_request write).
SENTRY_ORG_SLUG / SENTRY_AUTH_TOKENSentry org + token used to fetch the issue (SENTRY_URL for self-hosted).
PI_CODING_MODELPi model used for the fix (shared with the Pi coding tool).
PI_CODING_WORKSPACERepository Pi edits. Defaults to the current directory.
PI_CODING_TIMEOUT_SECONDSPer-run timeout (default 600, clamped 60–1800).
ParameterWhat it does
sentry_urlThe Sentry issue URL to fix (required).
open_prWhen true, commit the fix to a fresh branch and open a PR. Defaults to false (diff only).

Enable it

  1. Configure Sentry (org + token) and install/authenticate the Pi CLI:
    export SENTRY_ORG_SLUG=your-org
    export SENTRY_AUTH_TOKEN=...           # token with issue read access
    npm i -g @earendil-works/pi-coding-agent
    
  2. Turn the tool on:
    export PI_ISSUE_FIX_ENABLED=1
    export PI_CODING_MODEL=anthropic/claude-haiku-4-5   # optional
    
  3. (Optional) Let OpenSRE open the fix as a pull request:
    export PI_ISSUE_FIX_SHIP_ENABLED=1
    export GITHUB_TOKEN=...        # token with PR-create access to the repo
    

Using it from the interactive shell

Once enabled, just ask in plain language in opensre — the action agent recognizes the intent and runs the tool:
fix this sentry issue https://your-org.sentry.io/issues/12345/ and open a pull request
Say “open a pull request” (or “ship it”) to open a PR; leave it out to only get the diff. Use a fix verb — “investigate”/“diagnose” routes to the read-only investigation pipeline instead.

How it works

  1. You paste a Sentry issue URL (e.g. https://your-org.sentry.io/issues/12345/) and ask OpenSRE to fix it.
  2. OpenSRE resolves the issue from Sentry and builds a short, masked task (title, error, culprit, location) — your Sentry token is never sent to Pi.
  3. Pi edits the current repository to implement the fix.
  4. You get back success, a summary, changed_files, and the diff to review.
  5. If you asked for open_pr (and shipping is enabled), OpenSRE commits the change to a fresh opensre/sentry-fix-<id>-<sha> branch, pushes it, opens a PR into your base branch, and returns the branch_name, pr_url, and pr_number.

Opening a pull request

Ask OpenSRE to fix the issue and open a PR. The fix always lands on a new namespaced branch and is proposed via PR:
  • OpenSRE never commits to or pushes your base/main branch, and never force-pushes.
  • The PR is opened into the repo’s default branch from the new branch, with a body linking the Sentry issue and listing the changed files.
  • If the fix succeeds but the PR can’t be opened (e.g. missing token, push rejected), you still get the diff and changed_files back, plus the error_kind, so you can ship it manually.

Supported URLs

  • https://<org>.sentry.io/issues/<id>/
  • https://sentry.io/organizations/<org>/issues/<id>/
  • self-hosted https://sentry.<company>.com/organizations/<org>/issues/<id>/

Notes

  • Without open_pr, nothing is committed or pushed; you review the diff and decide what to do.
  • If the tool is disabled, the URL is unsupported, Sentry is unconfigured, Pi is missing, or a PR can’t be opened, it returns a clear error_kind instead of silently doing the wrong thing.