local-first macOS app · free & open source

your agent
stops guessing
when it reads
your shelf.

reshelf catalogs the open-source you actually use and clones the keepers to your Mac — so your coding agent works from real source, not stale docs: learns the patterns, borrows the code, credits every repo it touched, and knows when a license says hands off. No account. No cloud.

Download for macOS View on GitHub signed & notarized · universal · macOS 14+
reshelf
All Projects
Cloned supabase to ~/reshelf/repos/Database/supabase Dismiss
e
excalidraw
Virtual whiteboard for sketching hand-drawn like diagrams
Design·Top Shelf
K
reshelf
A local-first macOS app to catalog, organize, and clone the open-source repos…
macOS·Top Shelf
s
supabase
The Postgres development platform. Supabase gives you a dedicated Postgre…
Database
t
tldraw
Build infinite canvas apps in React with the tldraw SDK
Design
i
immich
High performance self-hosted photo and video management solution
Media
o
ollama
Get up and running with large language models locally
AI / Agent·Top Shelf
g
ghostty
👻 Fast, feature-rich, cross-platform terminal emulator
CLI·Top Shelf
20 projects
the loop

collect. clone. build better.

reshelf isn't a trophy case. every repo on your shelf is full source your agent can read — so the next thing you build starts from code that already works, curated by the person who knows your taste: you. You don't need special phrasing; gesturing at your own collection is enough.

01

curate

Capture from GitHub with ⌘K. Shelves decide keeper, maybe, or let-go — the pile stays honest.

02

clone

Full clones land at ~/reshelf/repos/<Category>/<repo> — real source, grouped the way you think.

03

point

Say look at my shelf or /reshelf. The bundled skill maps what's on disk — no setup, no cloud.

04

build

The agent reads the actual files, learns or borrows, and tells you exactly which repos it used.

what to actually say
check my shelf — did I already save something that solves this? read the real source in my clone before you write any of this. what did I clone for the photos app, and can any of it go? tell me which files you referenced, and check the licence first.
/reshelf skill · ships with the app

stuck? ask your shelf.

Not a separate step — you're mid-bug, you mention your shelf, and the skill maps what's on disk, reads the files that matter, and answers from real code. With receipts, and the licence checked.

agent session · /reshelf
what it does

a calm place for the repos that matter.

Stars are a pile. Tabs are a mess. reshelf is the shelf in between — decide quickly whether something is a keeper, a maybe, or a let-go.

capture fast

Paste a GitHub URL with ⌘K — metadata fetched and auto-categorized. No AI required, no mouse either.

shelves, not piles

Top Shelf for keepers, The Collector by default, Yard Sale for let-go. Move any repo with one keystroke.

source as context

Your agent greps the real clone before writing a line — actual APIs and conventions, no invented functions, no stale docs.

credit & rules

Every pattern is cited to the file it came from, and copyleft gets flagged before code crosses into your project.

⌘K command palette

capture starts where you search.

One palette: search your shelf, or paste a GitHub link and it becomes a capture — fetched, auto-categorized, saved. Duplicates get caught before they happen. Press ⌘K anywhere on this page — or watch:

reshelf — command palette
Search projects or paste GitHub link…
recently added
K
Glossary
Understand any tech term in seconds — a keyboard-first, distraction-fre…
macOS
K
hig-mcp
MCP server serving Apple Human Interface Guidelines as structured desig…
MCP
K
reshelf
A local-first macOS app to catalog, organize, and clone the open-so…
macOS
path one

learn the pattern.

Walk the actual files with your agent — the functions, the wiring, the why. You come away with the technique, taught from code you already curated and trust. Not a generic tutorial: the approach in this code.

path two

use the code.

Borrow the proven approach into your own project, wired to your setup. The agent implements the minimal change, checks the license first, and names the source files it referenced — so you can verify every line against the real thing.

three shelves

triage in one keystroke.

Every repo lands in The Collector. Promote the keepers to Top Shelf, send the maybes to the Yard Sale — and your library stays honest. No folders-within-folders, no guilt.

⌘T top shelf ⌘Y yard sale ⌘⇧G collector
Top Shelfthe keepers⌘T
The Collectordefault landing⌘⇧G
Yard Salenot sure / let go⌘Y
clone locally, organized

your shelf doubles as source-as-context.

Clones are grouped by category in a predictable, scriptable layout — so a coding agent can read the real source of a library instead of guessing from stale docs. Behind upstream? One click pulls.

⌘⇧U check all clones for updates
~/reshelf/repos/
├── Database/
│   └── supabase/ · up to date
├── CLI/
│   ├── ghostty/ · 14 commits behind ⬇
│   └── lazygit/ · up to date
├── AI / Agent/
│   └── ollama/ · up to date
└── Media/
    └── immich/ · 3 commits behind ⬇
folders · new in 1.9

group them by what you got them for.

Clone thirty repos for one project and there's no record they belonged together. A folder fixes that — it's yours to name, sits in its own sidebar section, and is separate from categories (what a repo is) and shelves (how much you value it), because one project's repos span all of them.

Deleting a folder only ungroups it. Every project keeps its shelf, its clone, its notes — nothing else changes. Folders ride along in exports and backups too, matched by name, so both your Macs land on one “Photos app” instead of two.

Folders
Photos app 6
Terminal research 3
Glossary rewrite 11
Right-click any repo → Add to Folder. A project sits in one folder at most, cloned or not — uncloning shouldn't drop it from the group that exists to make the cleanup possible.
batch actions · new in 1.9

retire a whole project's worth at once.

⌘-click to gather rows, ⇧-click to take a range — then move them all to a shelf, add them all to a folder, or send their clones to the Trash in one action. The other half of folders: the point of knowing what belonged together is being able to let it go together.

Right-clicking inside the selection acts on the selection; right-clicking outside it still acts on that one row, so nothing destructive lands on repos you weren't pointing at. Both destructive actions confirm with a count and say what survives.

click — add to selection click — take a range
react-native-vision-camera Media
photoprism Media
lazygit CLI
exiftool-vendored Utility
libvips Media
ghostty CLI
20 projects 4 selected Actions ⌄
ground rules

credit every repo. respect every license.

The agent names the exact repo, file, and function behind every pattern it brings you — verify it against the real code, and your project stays honest about where it came from. And before any code crosses into your project, the license gets a say: the app's ⓘ explains each one in plain language, copyleft cautions included.

Apache-2.0 Permissive
Permissive like MIT, with an explicit patent grant.
You can
  • Commercial use
  • Modify & distribute
  • Private & patent use
  • You must
  • Keep notices + the license
  • State significant changes
  • Safe for commercial/closed use; note files you changed. Patent-friendly.
    MIT · BSD · ISC use the code — keep the copyright notice allowed
    Apache-2.0 use it — state your changes, keep notices; patent grant included allowed
    GPL · AGPL learn the approach — copying code would infect your project's license learn, don't copy
    source-available / no license read the terms first — no license means no permission hands off
    capture assist · optional

    AI, when it happens, happens on your Mac.

    On Macs with Apple Intelligence, each capture can auto-fill use cases, a note, and tags — and a one-click backfill fills entries that have none. No API keys, no provider to choose, nothing leaves your Mac. It never overwrites anything you typed.

    repoghostty-org/ghostty
    use cases✦ generated — fast daily terminal · GPU-rendered splits · native macOS feel
    note✦ generated — high performance and native UI; ideal when speed and consistency matter
    tags✦ generated — terminal · gpu · emulator
    on-device apple intelligence · no cloud option exists
    keyboard-first

    no mouse needed.

    KCommand palette — search or paste a GitHub URL
    NQuick Capture (GitHub URL)
    TMove to Top Shelf
    YMove to Yard Sale
    UCheck clones for updates
    EExport catalog as JSON
    SToggle sidebar
    IToggle inspector

    local by default

    No sign-in, no required sync. The catalog lives in an isolated store at ~/reshelf/ with automatic JSON backups of the last 30 snapshots.

    network on demand

    The GitHub API is touched only when you Quick Capture — repo metadata and an optional README. Update checks are read-only git ls-remote.

    ai stays home

    Capture Assist runs on-device Apple Intelligence. There is no cloud provider to configure and no cloud option to turn on. Credentials, when used, live in the Keychain.

    faq

    the fine print.

    macOS 14 or later, Apple Silicon or Intel. Grab the signed & notarized reshelf.dmg from Releases, drag to Applications, run — no Gatekeeper warnings. To build from source you'll want Xcode 16+ (Swift 6, SwiftUI, SwiftData); GRDB resolves via SPM on first build.
    Everything under ~/reshelf/: the catalog in catalog.store (SwiftData, isolated), automatic JSON backups in backups/, clones in repos/<Category>/<repo>, and clone records in a GRDB SQLite database. JSON import/export is built in, and auto-restore kicks in if the store is ever empty.
    No. Capture Assist is optional and runs fully on-device via Apple Intelligence. There is no provider setting and no cloud fallback. Without it, auto-categorization is plain heuristics — no AI required at all.
    Yes — that's the point of the predictable layout. The bundled /reshelf skill maps your clones, reads their real source, and recommends whether to learn the approach or use the code — always citing the files it referenced and flagging copyleft before anything gets copied. Settings → General → Agent Skill installs it straight to ~/.claude/skills/reshelf, read-only on your clones. Two more skills ship in extras/: an index over the whole catalog, and one that resurfaces forgotten Collector picks.
    Through Sparkle. reshelf checks a static appcast file and offers the new version in-app — every update is EdDSA-signed and notarized, and you can turn automatic checks off in Settings and use Check for Updates… instead. Nothing about you is sent; it's a plain file request.
    Three different questions. A category says what a repo is — Database, CLI, macOS — auto-assigned from a fixed taxonomy. A shelf says how much you value it: Top Shelf, The Collector, Yard Sale. A folder says what you got it for — "everything I cloned for the photos app" — and you name those yourself. One project's worth of repos spans several categories and all three shelves, which is exactly why folders had to be their own thing. A project sits in one folder at most; deleting the folder ungroups its projects and changes nothing else.
    Yes — ⌘⇧E exports the whole catalog as JSON, and File → Import Catalog… merges it on the other machine. Import is additive by default: repos already there are matched by GitHub URL and left alone, so importing twice never duplicates. Folders travel too, matched by name, so a folder both Macs created independently converges into one instead of doubling.
    Free and MIT-licensed. Bug reports, fixes, docs, design feedback, and integrations are all welcome — community skills and scripts that talk to reshelf are explicitly encouraged.
    stop letting it guess

    give your agent a shelf.