A private context home · macOS

Your Mac knows what you're doing.
You choose who else does.

Fisherman runs in your menu bar. It captures your screen locally, turns it into a one-line status, and shares only that — with friends, or with scoped agents. Raw frames never leave your laptop unless you say so.

Open source · Apple Silicon & Intel · No account required

The menu bar notch, expanded. Your status, your friends, your trust boundary.

How it works

Four steps to a private context home.

Local-first by default. No account to make, no cloud to opt into, no friends required. Each step below is optional — stop at step 2 and you have a personal screen journal that never leaves your Mac.

  1. 01 ~30s

    Install the app and daemon

    One command. Installs Fisherman.app into /Applications and a background daemon into ~/.fisherman. No sudo needed.

    $ curl -fsSL https://raw.githubusercontent.com/sxysun/fisherman/main/install.sh | bash
  2. 02 one click

    Grant screen recording, once

    macOS will ask the first time the daemon tries to capture. After that, capture runs silently every 5 seconds — compressed, OCR'd, stored on your disk. The frames never touch the network in Local mode.

  3. 03 optional

    Pick where your context lives

    Default is Local. Nothing leaves your Mac. You can move to Fisherman Cloud (attested, multi-tenant) or your own server later — history comes with you.

  4. 04 optional

    Share status. Authorize agents.

    Send a friend code over Signal to see each other in the notch. Generate a scoped, expiring token to let an agent read your captures or transcripts. Revoke either without rotating your Fisherman identity.

One product · three context homes

Move where your context lives — without losing it.

default

Local Only

Raw captures, transcripts, embeddings — all on your Mac. Friend status still flows through an encrypted relay that only ever sees ciphertext.

  • Zero outbound capture traffic
  • Friend status works (E2EE relay)
  • Agents must run on your machine
attested

Fisherman Cloud

A managed backend running in a TDX-attested enclave. Multi-tenant ingest, fast queries, remote agents. Every new release must be reviewed and re-approved by your client before it gets your data.

  • TDX attestation, reproducible builds
  • Per-release client approval gate
  • Same friend & agent APIs
sovereign

Self-Hosted

The same server image, on your hardware. Bring your own S3-compatible storage and Postgres. Keep the official relay so you stay interoperable with friends on Cloud or Local.

  • Single-tenant, your infra
  • Interops with other modes
  • Bring-your-own object storage

Friends

Ambient presence, encrypted per recipient.

A friend code is a one-line handshake. After paste, you each see each other's distilled status in the notch — one emoji, one phrase, no raw bytes. The relay only ever stores ciphertext addressed to your recipients.

  • One-line invite. Paste, name, done.
  • Per-friend policy. "work" sees a different summary than "close".
  • Always reversible. Unfriend revokes both directions.

Agent access

Give tools scoped context. Not your whole machine.

A deputy token is a capability: a list of read scopes, a ttl, an optional rate cap. Hand it to Claude Code, Cursor, an autonomous agent, or your own shell loop. The agent only sees what the token allows. Pull the token, access stops.

  1. create

    From Settings → Agent Access. Pick scopes (status, captures, transcripts, screenshots). Set a TTL.

  2. register

    Paste the resulting block into the agent's environment. Works with any HTTP-speaking runtime.

  3. query

    The agent reads only what the token grants. Every call is logged and visible from the menu bar.

  4. revoke

    One click. Or wait for TTL. Identity, friends, and other agents are untouched.

$ fisherman deputy create \
    --scopes read.status,read.transcripts \
    --ttl 24h \
    --label "claude-code review loop"

# share with the agent runtime →
FISH_DEPUTY_TOKEN=fish:deputy:eyJhbGciOiJFZERTQSJ9...
FISH_BASE=https://fisherman.teleport.computer

$ curl -H "Authorization: Bearer $FISH_DEPUTY_TOKEN" \
       $FISH_BASE/api/status

{
  "status": "coding",
  "phrase": "wiring agent access into menubar",
  "in_flow": true,
  "updated_at": "2026-05-11T16:21:09Z"
}

Privacy model

Trust is explicit, not implied.

01

Persistent identity, on your disk

An ed25519 key in ~/.fisherman/.env signs everything. Reinstall, keep your friends. Delete the key, become a stranger.

02

Client-held Cloud data keys

Cloud receives data under keys you control. A new Cloud release must be reviewed and re-approved by your client before it can compute on history.

03

Portable context, end to end

Export, import, and delete history when moving between Local, Cloud, and Self-Hosted. The on-disk format is the source of truth, not the server.

Install

One command. Starts in Local mode.

Drops Fisherman.app into /Applications and the daemon into ~/.fisherman. You can read the script first — it's plain bash.

macOS · Apple Silicon & Intel · uv & Swift, no Docker

$ curl -fsSL https://raw.githubusercontent.com/sxysun/fisherman/main/install.sh | bash