pi-pr-session-title
Names PR-review sessions after the pull request's real subject, so the session list and terminal tab read "PR review 1234: <PR title>".
Package details
Install pi-pr-session-title from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-pr-session-title- Package
pi-pr-session-title- Version
0.1.0- Published
- Aug 25, 2026
- Downloads
- 137/mo · 137/wk
- Author
- petec
- License
- MIT
- Types
- extension
- Size
- 11.6 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./extensions"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-pr-session-title
Session titles for PR reviews that say what the PR actually is.
Ask your agent to review a pull request and the auto-generated session title is a paraphrase of your own prompt — Review pull request 4271. The title model only ever sees your first message, so it cannot know the subject. This extension looks the PR up with gh and names the session from the real title instead:
before: Review pull request 4271
after: PR review 4271: fix(scheduler): stop retrying cancelled jobs
The session name drives the session picker and the terminal/tab title, so a stack of review tabs becomes readable at a glance.
Works with pi and with the oh-my-pi (omp) fork.
Install
# pi
pi install npm:pi-pr-session-title
# omp
omp plugin install pi-pr-session-title
Or drop extensions/pr-session-title.ts into ~/.pi/agent/extensions/ (pi) or ~/.omp/agent/extensions/ (omp).
gh must be on PATH and authenticated (gh auth status). Set PR_SESSION_TITLE_GH to point at a non-standard GitHub CLI location.
Behavior
- Fires on the first prompt of a session that references a PR, and at most once per session.
- Never overwrites a name you chose. A name set by
/name,/rename, or another extension wins; only a model-generated title (omp'stitleSource: "auto") is replaced, because that title is just a paraphrase of the same prompt. - Recognizes
https://github.com/owner/repo/pull/123(repo included, so cross-repo reviews resolve),pr 123,PR#123,pull request 123,pr://123, and a bare#123. - Resolves the PR with
gh pr view <n> --json number,title, in the session's working directory, so the repo comes from your checkout's remote unless the prompt named one. - Names the session
PR review <n>: <subject>when the prompt is about reviewing, otherwisePR <n>: <subject>. Subjects longer than 90 characters are clipped on a word boundary. - Any failure — no
gh, not authenticated, no such PR, 8s timeout — is silent, and the harness's normal titling behavior is untouched. - Slash commands are ignored.
Hook points
Two, because they cover different entry paths:
| Event | Path | Effect |
|---|---|---|
input |
interactive TUI | On omp, awaited before the auto-title check, which is skipped once the session has a name — so the model title is never even generated. On pi there is no auto-titling, so this is the only title source. |
before_agent_start |
initial argv prompt, -p/print |
Emitted after omp has already dispatched auto-titling, so the rename is applied out-of-band and supersedes it. Scheduled, never awaited, so the turn is not delayed. |
On omp, pi.setSessionName records a user-sourced title, which auto titles (including replan refreshes) never overwrite. On pi, session names are last-write-wins with no provenance, which is why the extension checks getSessionName() before renaming.
Uninstall / disable
pi remove npm:pi-pr-session-title
omp plugin uninstall pi-pr-session-title
For a hand-placed copy, delete the file. On pi, pi config toggles discovered
extensions; on omp, settings can disable it by id:
# ~/.omp/agent/config.yml
disabledExtensions:
- extension-module:pr-session-title
Development
npm test # node --test, hermetic: a stub gh, no network
Tests cover PR-reference parsing, title formatting, and both handlers driven end to end against a stub gh.
License
MIT