Review what needs you. Skip what doesn’t.

Steward is a Mac app for engineers who get tagged on everything. It turns GitHub’s notification pile into a short, sorted inbox, then lays out each diff in the order it should be read.

For macOS · Uses your gh login · 14-day free trial · Pay once

Steward’s inbox with 21 sample pull requests grouped into Needs My Eyes and FYI, each split into My Team and External. The selected pull request explains why it’s there: your review is requested, and the author is on your team.
The real app, fake pull requests. Light or dark, it follows your Mac.

vs. GitHub notifications

Why not just use GitHub notifications?

GitHub tells you something happened. Steward tells you whether it’s your problem.

01

Less noise

Every pull request lands in one of two piles. Needs my eyes: something is actually waiting on you. FYI: worth knowing, nothing owed. GitHub sends both of these as comment. Steward reads the reviews and tells them apart.

Detail for “Move checkout to server components”. Why it’s here: Needs My Eyes, My Team. @bob requested changes after you approved. GitHub reason: comment. Reviewers: @bob requested changes 1 hour ago; you approved 2 days ago.
Needs my eyes Changes requested after you approved. Go look.
Detail for “Add Storybook stories for checkout”. Why it’s here: FYI, My Team. You approved; it’s waiting on others, not you. GitHub reason: comment. Reviewers: @jordan commented; you approved.
FYI You approved, someone commented. Carry on.

02

Sorted by what you owe

Your team’s asks come first, then other teams’, then the FYI pile you can skim or skip. You pick which teams count. Open the app, start at the top, stop when the orange runs out.

21 notifications8 need you

  1. 1Needs my eyes · My team4
  2. 2Needs my eyes · External4
  3. 3FYI · My team6
  4. 4FYI · External7

Layered diff

Your agents write code faster than you can read it.

So let one read it first. Steward hands the diff to your own Claude Code or Codex and gets back a reading plan: foundations, then logic, then wiring, then config. You still review every line. You just stop reading them alphabetically.

GitHub’s order

Alphabetical. Great for dictionaries.

  1. config/default.yaml
  2. db/migrations/20261014_add_charge_attempts.sql
  3. docs/images/retry-flow.png
  4. docs/runbooks/gateway-timeouts.md
  5. src/charges/charge-service.ts
  6. src/charges/idempotency.ts
  7. src/config/schema.ts
  8. src/db/charge-attempts-repo.ts
  9. src/gateway/client.ts
  10. src/gateway/errors.ts
  11. src/retry/policy.ts
  12. test/charges/charge-service.test.ts
  13. test/gateway/client.test.ts
  14. test/retry/policy.test.ts

The retry policy is file 11. Its test is file 14. The YAML goes first because C comes before D.

Steward’s order

Built up, the way it was written.

  1. 1FoundationRecord every charge attempt2 files
  2. 2Core logicDecide which failures are safe to retry3 files · 1 test
  3. 3WiringSend a stable idempotency key2 files · 1 test
  4. 4WiringRetry charge submission through the policy1 file · 1 test
  5. 5ConfigConfiguration and defaults2 files
  6. 6ChoreRunbook2 files
  7. Added by StewardRemaining changes1 hunk

Tests sit next to the code they test. One toggle shows only the app, only the tests, or both.

Steward’s Review view for “Retry idempotent charges on gateway timeout”. The sidebar lists six layers plus Remaining changes. Layer 4, Wiring: “Retry charge submission through the policy”, with a What to verify note above the diff of charge-service.ts, where the body of the create method is folded to a single line reading “create · Implementation · 15 lines, +11 −1”.
Layer 4 of 6. The method body stays folded until you want it.
  • What to verify, not what changed

    Every layer opens with the thing to check (“a failed attempt is recorded before the error propagates”), then the code.

  • Shape first, bodies later

    Method bodies and test setup fold away, so you read signatures before details. Real language servers for TypeScript, JavaScript, and Ruby. Z unfolds everything.

  • Nothing slips through

    The model can be lazy. It can’t hide a hunk. Anything it leaves out lands in “Remaining changes”, added by Steward.

  • Your agent, on a short leash

    Runs your local claude or codex in an empty folder with its tools off, only when you press Generate. No Steward server, no API keys, no extra AI bill.

The obvious question

“Can’t I just vibe code this?”

You can. You’ll have a list of pull requests by Saturday lunch. Here’s Sunday.

Steward is that Sunday, a few hundred times over. It costs about what you’d burn in tokens finding all this out.

Skip the weekend $10
weekend-project.md
  • Fetch notifications with gh
  • Show them in a list
  • Work out why a pull request you cleared came back (GitHub re-delivered it)
  • Handle GraphQL returning data and errors in the same response
  • Notice a thread keeps its mention reason forever, so every comment looks like a mention
  • Stop the 2,000-person org team from making everyone “your team”
  • Make ⌘Z cancel a write before GitHub ever sees it
  • Have an agent order a 1,500-hunk diff, then prove it didn’t skip any
  • Feed it untrusted diffs without handing it a shell
  • Fold code with real language servers, not a regex you’ll regret
  • Use it every morning. Fix what breaks. Repeat.

Pricing

$10. Once.

Launch price, then $20. Every future update included. No subscription, no account, no “book a demo.” Try it free for 14 days first.

I built Steward for my own review queue and use it every day. It’s a small app, and I plan to keep it sharp.

Steward for macOS

$10 Regular price $20 · USD, one-time

  • The inbox and layered diffs
  • Every future update
  • Bring your own Claude Code or Codex
  • No subscription or Steward account
Buy Steward · $10 Download the free trial

14-day free trial, everything on. Less than an hour of reading the wrong pull request.

Questions

What do I need to run it?

A Mac and the GitHub CLI, signed in (gh auth login). For layered diffs, Claude Code or Codex installed and signed in too. Steward uses those logins; there’s no Steward account.

Does AI decide what’s in my inbox?

No. The inbox runs on twelve fixed rules, and every row says which one matched. AI only orders a diff, and only when you ask it to.

Does my code go to your servers?

No. The app only checks getsteward.dev for updates and refunds, and sends nothing about you or your code. Diffs come from GitHub through gh. If you generate layers, they go to your own Claude Code or Codex, which talks to its provider the way it always does. Your inbox lives in a database on your Mac.

Can I review without leaving Steward?

Read the layered diff, approve (A), mark done (E), or unsubscribe (M) from the keyboard. Comments and change requests still happen on GitHub; ↩ takes you there.

Which languages fold?

TypeScript, JavaScript, and Ruby today. Everything else shows the full diff, still in layers.

Is it really a one-time purchase?

Yes. $10 at launch, $20 after, and every future update is included. One key works on all your Macs.

Can I try it first?

Yes. Download it and you get 14 days with everything on, no key or card needed. When the trial ends, Steward locks until you add a key; your inbox stays on your Mac, so buying picks up where you left off. Changed your mind after paying? Refunds within 14 days.

I lost my license key.

It’s in the email you got after buying. Can’t find it? Enter the address you paid with and we’ll send it again.