pullyard

skill
Security Audit
Fail
Health Warn
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 5 GitHub stars
Code Fail
  • rm -rf — Recursive force deletion command in .github/workflows/linux.yml
  • exec() — Shell command execution in docs/demo.js
  • network request — Outbound network request in docs/demo.js
  • network request — Outbound network request in docs/site/motion.js
  • network request — Outbound network request in docs/stats/stats.js
  • Hardcoded secret — Potential hardcoded credential in docs/stats/stats.js
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

Pull requests, without the browser. A tiny native GitHub client with a Claude Code workspace.

README.md

PullYard icon

PullYard

Review it. Fix it. Ship it.
A native app for pull requests on macOS, Windows and Linux, with a built-in workspace for AI coding agents that runs Claude Code.

Download for macOS · Windows · Linux · Website · Releases · Buy me a pizza 🍕

PullYard showing the changed files of a pull request


GitHub in a browser tab can take up a gigabyte of memory to show a single diff. PullYard is a native app that takes a pull request from review to merge: SwiftUI on macOS, WinUI 3 on Windows, GTK 4 and libadwaita on Linux. It starts fast, scrolls big diffs without stutter, and can pass review comments to Claude Code.

Features

Pull requests

  • Review requests, your own PRs and anything you're involved in, filtered by state
  • "My PRs by project": your pull requests grouped by repository, in sections you can collapse
  • Conversation, review threads, commits, checks and changed files
  • Comment, approve, request changes and merge
  • A diff viewer built on NSTableView, with file headers that stay pinned as you scroll
  • Stacked pull requests: the PR header shows where the PR sits in its stack, and lists mark what each PR is stacked on
  • A Stack tab shows the whole stack as an indented list or, with the Graph switch, as a tree from the base branch down, branches included (dev ← #1 ← #2, with #3 also on #1). Each card shows the branch, base, status (ready, in review, checks running, CI failed, changes requested, draft), the Jira key from the branch name, the last commit and the Claude Code session for that branch. Click a card to open that PR; zoom with the buttons or a pinch
  • Notes on a stack: add a note, question or decision to any card; it shows as a sticky under the card. Notes stay on your Mac and are never sent to GitHub
  • Stacks in the sidebar lists every stack your open pull requests are part of, across repositories
  • The stack is built from one request per repository and cached on disk, so it shows up instantly and refreshes in the background
  • Lists and the open PR refresh every 30 seconds (you can set 15 s to 15 min in Settings) and again when you switch back to the app. New pull requests show up at the top, briefly highlighted
  • Pull to refresh on lists, boards and PR tabs: drag down with two fingers on the trackpad. ⌘R does the same. The footer says when the list was last updated, and shows a Retry link if a refresh fails
  • Re-request review in one click after you push. PullYard compares the reviewed commit with the branch head, so it notices rebases and force pushes too ("You pushed 3 commits after @sofia reviewed"). Outdated review threads don't count as unresolved

Beyond pull requests

  • Notifications and issues
  • Repositories with a file browser and syntax highlighting
  • GitHub Projects boards
  • A menu bar badge with the number of reviews waiting on you
  • The PullYard theme in light and dark, or the standard macOS look
  • Open any GitHub link inside the app (⌘L)
  • Updates from inside the app. PullYard looks for a new release every 6 hours and lets you know with a notification and an "Update to …" item in the sidebar and menu bar. Installing it replaces the app and restarts it. You can also check by hand with PullYard → Check for Updates…

Agents (runs the Claude Code CLI you install)

  • A native chat for the official Claude Code CLI, right next to the PR, its changed files and its branch
  • Fix with agent: one click starts a new session with the review feedback. If the reviewer left a "Fix prompt", PullYard uses it; otherwise it writes one from the comments
  • Session history grouped by project, showing the branch and the PR for each session
  • Change the model, effort and permission mode, approve tool calls in the chat, and see a diff for every edit
  • A Tasks tab that lists every command and subagent Claude runs, live, with its duration, failures and full output
  • Idle sessions go to sleep to free memory and pick up again on your next message
  • An overlay with context and plan usage
  • Several Claude accounts (say, personal and work), each with its own sign-in and history
  • A plain terminal mode if you'd rather use the CLI as is

Install

Platform Download Requirements
macOS PullYard.dmg (universal: Apple Silicon and Intel) macOS 14 Sonoma or later
Windows x64 PullYard-windows-x64-setup.exe or portable .zip Windows 10 1809 or later, or Windows 11; WebView2 Runtime
Windows ARM64 PullYard-windows-arm64-setup.exe or portable .zip Windows 10 1809 or later, or Windows 11; WebView2 Runtime
Linux x86_64 pullyard_<version>_amd64.deb, PullYard-linux-x86_64.flatpak or PullYard-linux-x86_64.tar.gz GTK 4.14 and libadwaita (Ubuntu 24.04 or later), or any distribution with Flatpak

Optional on every platform: GitHub CLI for one-click sign-in, Claude Code for the Claude workspace.

macOS

With Homebrew:

brew install --cask pullyard/tap/pullyard

Or by hand:

  1. Download PullYard.dmg.

  2. Open it and drag PullYard to Applications.

  3. The app is not notarized yet, so macOS blocks the first launch. Open System Settings → Privacy & Security → Open Anyway (the DMG includes a How to Install guide), or run:

    xattr -dr com.apple.quarantine /Applications/PullYard.app
    

You only do this once. PullYard removes the quarantine flag from itself on launch, and later updates install from inside the app (PullYard → Check for Updates…), so there's no disk image to open again.

Windows

  1. Download the setup for your PC: PullYard-windows-x64-setup.exe or PullYard-windows-arm64-setup.exe. It installs for your user only, with no admin rights, adds a Start menu entry and registers pullyard:// links.
  2. The builds are not code-signed yet, so SmartScreen may warn on the first launch: click More info → Run anyway.

Installed copies update themselves: PullYard checks for a new release every 6 hours, downloads the installer and restarts. If you'd rather not install, unzip PullYard-windows-<arch>-portable.zip anywhere and run PullYard.exe; the portable build opens the release page when there's an update.

Linux

Pick one:

sudo apt install ./pullyard_*.deb                     # Ubuntu 24.04+, Debian and derivatives
flatpak install --user PullYard-linux-x86_64.flatpak  # any distribution, uses the GNOME runtime from Flathub
tar xzf PullYard-linux-x86_64.tar.gz && ./PullYard-linux-x86_64/install.sh  # portable, installs to ~/.local

The tarball install updates itself the same way the Windows installer does. The .deb and Flatpak builds tell you about a new release and open the release page.

Sign in to GitHub

Pick one on the welcome screen:

  • GitHub CLI: uses the token from gh auth login.
  • Personal access token: classic token with repo, read:org, notifications, workflow, and read:project / project for Projects.
  • Device Flow: enter the Client ID of your own GitHub OAuth App with Device Flow enabled.

The token is stored in the macOS Keychain, Windows Credential Manager or the Secret Service keyring on Linux.

GitLab, Bitbucket, Gitea and GitHub Enterprise (macOS)

The welcome screen has a tab for each service:

  • GitHub Enterprise Server: your server address, then gh auth login --hostname …, a personal access token or Device Flow. Everything works as on github.com.
  • GitLab (gitlab.com or self-managed): glab auth login, a personal access token with the api scope, or Device Flow with your own OAuth application (GitLab 17.1+).
  • Bitbucket Cloud: your Atlassian account email and an API token.
  • Gitea / Forgejo (Codeberg or your own server): an access token.

For GitLab, Bitbucket and Gitea PullYard shows your review requests and your own merge or pull requests; open one in the browser to review it. Changed files, comments and review for these services come later.

You can add several accounts and switch between them from the sidebar or Settings. Each account has its own Claude Code sign-in: the first account keeps the Claude Code you already use (~/.claude, shared with Terminal), and every account you add later starts with a separate, empty Claude Code profile that you sign in to once. Switching keeps every sign-in; PullYard only shows and runs the Claude Code profiles of the active account. Signing out of an account also signs out its Claude Code profiles and leaves the others alone.

Privacy

PullYard has no backend and no analytics. It talks to api.github.com (or the GitLab, Bitbucket or Gitea server you sign in to) directly and runs the claude CLI you installed. It never reads your Claude credentials; you sign in through claude auth login in your browser.

Build from source

The Windows and Linux apps have their own build instructions in windows/README.md and linux/README.md. The macOS app requires Xcode 15.3+ (Swift 5.10).

git clone https://github.com/pullyard/pullyard.git
cd pullyard
./scripts/build.sh            # builds build/PullYard.app
./scripts/build.sh --install  # builds and copies it to /Applications

Other scripts:

  • UNIVERSAL=1 ./scripts/build.sh: universal binary (arm64 + x86_64)
  • ./scripts/release.sh 2.1.0: universal build packed into build/PullYard-2.1.0.dmg with a drag-to-Applications window (needs pip3 install --user dmgbuild; Finder applies the background so it also shows on macOS 26)
  • swift scripts/make_icon.swift Resources/Brand/icon.svg build/AppIcon.iconset: regenerate the icon

The build is signed with the first "Apple Development" identity in your keychain, or ad-hoc if there is none. Set SIGN_ID to choose another one.

Read-only API self test:

swift build -c release
PULLYARD_TOKEN=$(gh auth token) .build/release/PullYard --selftest

For screenshots without personal data, set PULLYARD_DEMO_REPO=owner/name to fill every pull request and issue section from a public repository with a placeholder user, and PULLYARD_DEMO_FOLDER=/path to limit the Claude Code history to one folder.

Project layout

Sources/PullYard/
  App/        app entry, routing, settings, deep links (pullyard://)
  API/        GitHub GraphQL + REST client and models
  Auth/       sign-in flows, Keychain
  Features/   PR, Lists, Issue, Repos, Projects, Notifications, MenuBar, Claude, ClaudeFix
  Shared/     diff table, HTML view, tab strip, localization, utilities
linux/        Linux app (Rust, GTK 4, libadwaita)
windows/      Windows app (C#, WinUI 3)
docs/         website (GitHub Pages)

Buy me a pizza 🍕

PullYard is free and open source, and every feature is there for everyone. If it saves you time, you can buy me a pizza: pay what you want, from $3. The link is also in the app under Settings → Support PullYard.

Buy me a pizza 🍕

Acknowledgements

  • Third-party licenses ship inside every build (Settings → About → Third-Party Licenses on macOS) and are listed in Resources/THIRD-PARTY-NOTICES.txt.
  • The terminal mode uses SwiftTerm by Miguel de Icaza (MIT License).

License

MIT

PullYard is an independent project and is not affiliated with or endorsed by GitHub, Inc. or Anthropic. GitHub and Claude are trademarks of their respective owners.

Reviews (0)

No results found