Why Stash works the way it does

Design decisions

Short records of the choices behind Stash: what we decided, why, and what it means for you.

  1. 0001Your library is a git repo you ownTips live as Markdown files in a private git repository on your Mac, optionally pushed to a private GitHub repo. There's no Stash server.
  2. 0002Save the link first, read the whole post only when you allow itA share stores the link, the public caption and your note. Reading captions, comments or the video is an explicit opt-in on the Mac.
  3. 0003iCloud carries shares from your iPhone to your MacShares travel through your private CloudKit database. Offline shares wait in an on-device outbox.
  4. 0004The Mac uses your own Claude Code or Codex, headlessTriage runs as `claude -p /stash:triage` (or `codex exec` with the same skill) in your library folder with narrow permissions, so tips are written with your own subscription.
  5. 0005Every post becomes one typed tipA tip is a skill, rule, tool, design, command or habit, and the type decides how it's applied.
  6. 0006Only score what was seenWhen Claude only saw a caption, a tip shows "Not judged yet" instead of a low score.
  7. 0007A free first look on the Mac before spending tokensApple's on-device model gives a quick score in seconds and skips obvious bait, calibrated against Claude on real posts.
  8. 0008A calm clay brand instead of stock symbolsMatte clay illustrations in a five-color palette, rounded type and plain-spoken copy.
  9. 0009Claude Code is where tips get usedA Claude Code plugin with a `/stash` front door, `/stash:suggest`, `/stash:apply` and a SessionStart hook.

Safety decisions

  1. 0101Posts are untrusted inputEvery caption, transcript, comment and fetched page is data, never instructions, and is cleaned and fenced before a model sees it.
  2. 0102Nothing changes in your code without your approvalApplying a tip always shows the exact change first; tool installs need a human even in automated runs.
  3. 0103The headless run is boxed inTriage on the Mac can read the library, write only in tips/, fetch only documentation hosts and the post's own domains, and can't run commands or load other settings.
  4. 0104Only the app pushes your library, never the modelClaude can't push, configure remotes or change git settings; the Mac app pushes with fixed arguments after a successful run.
  5. 0105Every tip is scanned, and risky ones are held for reviewA deterministic scanner flags dangerous commands, hidden text and injection attempts. Flagged tips never reach a repo or a session on their own.
  6. 0106Reading the whole post and using browser cookies are separate opt-insyt-dlp only runs when you turn on "Read the whole post", always with hardening flags, and it reads Chrome cookies only if you allow that separately.
  7. 0107Label masked promotion instead of hiding itEvery tip says whether the post promotes the creator's own product, a sponsor, affiliate links or a sales funnel, without changing its score.