Repository navigation
SHA-256: b354d1d2c0a77160d363e32b4f45b320d76da8bd4eb76e1b049b3dd9307af055
Added
- Agent automations. PullPing can start Claude Code or Codex in a terminal (Terminal, iTerm2, Ghostty or Ghostex, whichever are installed, or your own command line;
pullping launchers) when a pull request event arrives. Write rules in the new Settings → Automations tab: the kinds of event, Any / Mine / Others, optional repositories and logins, a prompt with placeholders, a working directory, the agent (with an optional wrapper command) and where it opens. Try with Latest Pull Request checks a rule right away; Recent Runs shows what started and what failed. - Agent hooks and the
pullpingcommand.pullping hook add --pr … --on … --session …lets an agent ask to be resumed on one pull request or issue, for example when it is approved or commented on. Agents get everything the Automations tab does:pullping ruleandpullping hookadd,edit,show,list,enable,disableandrm,pullping run(Run Automation, with--dry-run),pullping runs(Recent Runs),pullping automations on|off|statusandpullping kinds; every reader and writer takes--jsonin the shapeautomations.jsonstores. The app picks changes up within 30 seconds, also when it was closed. Automations written from the command line are marked CLI in Settings, and the first time one is set to run automatically a notification says so. The command is the app binary itself, so the Homebrew cask links it aspullping; any other word after it is a command, never a second copy of the app. A Claude Code skill with the recipes is indocs/claude-skill/pullping. - Handle with Agent. Turn it on in Settings → Automations (or
pullping handler on) and the notifications you pick (Edit…, orpullping handler set --on <kind,…|all>; by default the ones an agent can act on, not CI passed, new commits, merges, closes, drafts, title or label changes), and the pull request's menu, get a Handle with Agent button: one click starts your agent on that pull request or issue with a prompt you can edit, in the agent, terminal and folder you pick. When the pull request has a linked session the button becomes Resume Session and New Session. It never runs on its own. - Linked sessions. An agent links its session to a pull request with
pullping session set --pr <url> --session "$CLAUDE_CODE_SESSION_ID" --quiet(alsohook add --session), and every new Claude Code session PullPing starts on a pull request links itself. The link keeps the folder the session was started in, read from its transcript, so Resume Session finds it. A rule can resume the linked session (The pull request's linked session,--session linked). Links show in Settings → Automations → Linked Sessions and the main window's detail (pullping session list|show|rm) and expire after the pull request is merged or closed, or after 30 days. - Repository folders. The working directory defaults to
{repo_dir}: the repository's folder under Settings → Automations → Repository Folders (default~/Code; add as many as you keep repositories in), else a fallback folder (default~), so a run never fails only because a repository isn't cloned.pullping automations folders list|add|rmandpullping automations fallback. A failed Try shows its whole message, with the folder it tried. - Repository locator.
{repo_dir}is now the clone whose git remote is the repository (owner/repo, any host or SSH alias), found up to 3 levels below the repository folders whatever the clone is called (~/Code/<org>/<repo>,~/src/github.com/<owner>/<repo>, a renamed clone), then a folder named like the repository, then the fallback. A pull request's linked or earlier session's folder wins when it is inside a clone of the repository, and Repository Overrides (pullping automations repos list|set|rm) win over everything.pullping automations folders listshows how many clones PullPing finds. PullPing reads git's own files and never creates worktrees. - Worktree-aware folders. New placeholders
{branch}(the pull request's head branch, GitHub text: prompts only),{worktree_dir}(the worktree with that branch checked out, else the main worktree),{main_dir}and{repo_root}(the repository folder that holds the clone). Handle with Agent's default prompt names the worktree. Resume Session whose folder is gone starts in{worktree_dir}(Claude Code 2.1.223 and Codex resume by id from anywhere) and says so in Recent Runs; one whose transcript was deleted fails with "The session's transcript is gone". - Earlier sessions. With no linked session, PullPing can find the local Claude Code or Codex session that worked on a pull request (the record Claude writes when a session creates it, its URL, or its branch), within the last 60 days, 1.5 GB or 10 seconds of reading; nothing leaves your Mac. Look for earlier sessions under Handle with Agent (off by default) turns Handle with Agent into Resume Earlier and New Session when one is found; Find Earlier Session… in the pull request's menu searches now. Agents use
pullping session find --pr <url> --linkand hand off withpullping session resume --pr <url>, which refuses a session that looks open in another terminal, the calling session itself and a second hand-off within a minute, and records who handed off; the default prompts suggest it. - Activity. Activity in the main window's sidebar (for All Accounts and each account; also in the menu-bar icon's menu) lists everything PullPing saw and did: every event, whether it showed a banner or an alert, went to your phone, or was not shown and why (your own, notifications off, paused, muted, snoozed, off in Settings), review reminders, and every automation run and Handle with Agent launch. Newest first by day, with search; a row shows its pull request, and opens it in the browser even once it is no longer tracked. Kept 30 days (Settings → General → Keep activity for: 7, 30 or 90 days), at most 5000 entries, in
activity.jsonl;pullping activity [--since <time>] [--pr <ref>] [--json]reads it while the app is closed. - Run buttons. An automation asks first by default: its notification gets a Run … button and stays until you act, and the pull request's right-click menu and the main window's toolbar get Run Automation (
pullping runfrom the command line). Run automatically is a per-automation choice. The main window's detail lists a pull request's agent hooks. - Safety limits: no comment bodies or other GitHub text in any shell command or working directory, a prompt the agent never reads as an option, never a permission-bypass flag (the only argument PullPing adds is
--session-idwith a UUID it generated), your own comments and reviews (and pushes GitHub links to your account) never trigger anything, new commits after an automation ran on a pull request only offer it again, and each automation is capped per event, per pull request, per failed start and per check. A Run button left on a notification does nothing once its automation is turned off, removed or expired.
Changed
- Nothing in the state file or the existing settings changes format (a new pull request's first events gain one optional field): a 0.4.0 build still opens everything this version writes and ignores the new
automations.jsonandactivity.jsonl. - An open rule or Handle with Agent editor no longer overwrites a change made from the command line meanwhile: Save says "Changed elsewhere" and offers Reload or Save Anyway, and the Enabled switches and Repository Folders rows change only their own value.
Fixed
- Accounts added with Sign in with GitHub no longer show "Token rejected" every day. GitHub sign-in tokens expire after 8 hours; PullPing now keeps the refresh token GitHub sends with them (in your login keychain) and renews the token by itself; a network drop during the renewal shows Offline (not "Token rejected") and it renews on the next poll, and a renewed token that cannot be saved to the keychain is reported on the account. Accounts signed in with an earlier version have no refresh token yet: sign in with GitHub once more (Add Account…, then remove the old entry). Personal access tokens are not affected.
- Agents PullPing starts are fresh sessions even when PullPing itself was opened from a terminal agent: the launch no longer passes on that agent's session variables (
CLAUDE*,CODEX_*and those of a few session-switching tools); your shell profile still sets anything you export on purpose.