v0.4.0 · local-first · vendor-neutral · OSS / MIT

Mark your
trail.

Bundle files and their context into one portable archive. Move it to any tool, any repo, any machine, any teammate. They unpack the files — plus the brief that explains what to do with them.

$npm install -g @3notch/cli
No cloud No account No telemetry No lock-in

01 · CONCEPT

The mark that says: you're on the right path.

Before maps, before GPS — travelers marked trees to signal a way through. Three cuts meant: someone has been here. Follow this.

The mark wasn't about the traveler. It was about whoever came next — a way to carry knowledge forward through unfamiliar terrain, without having to be there to explain it.

The problem hasn't changed. You move work across tools, sessions, projects, repos. Context doesn't travel on its own. Right now, you carry it by hand.

The mark
A packet Files + summary + intent. Addressed and ready to move.
The trail
An inbox A readable record of where you've been and what was decided.
The point
Continuity Your tools change. Your context travels with you.

02 · CONTEXT

Multiple tools. Multiple repos.
One portable trail.

A solo founder running three repos across four AI tools. Conventions from one project that should carry to the next. A teammate who needs the files and the brief. The thread that ties it all together doesn't travel on its own.

Re-assembling context by hand is the tax you pay every time you switch tools, switch repos, or start something new.

3Notch packages files and the context to use them into one portable archive. Code, docs, images, conventions, briefs, decisions — whatever the next side needs. The receiver unpacks the files and reads the brief you wrote on top.

No vector database. No cloud relay. No hidden scraping. The contents are what you put in. Nothing more.

And what you pack stays. Every notch joins your local trail — indexed, queryable, available next session, next project, next tool.


03 · LOOP

Pack the session. Leave a notch. Pick it up anywhere.

A single loop that maps onto every cross-tool, cross-repo, cross-machine handoff.

01 · Pack

Bundle files plus the brief.

Code, docs, images, conventions, next steps — whatever the other side needs. One command captures the bytes and the context that uses them.

$ notch packet create \
  --title "Launch page handoff" \
  --file index.html \
  --file favicon.svg
02 · Notch

Get one folder. Or one archive.

Lands as a folder under .notch/outbox/ — Markdown brief, manifest, copied files. Pack it into a single .notchpkt archive when you need to move it.

$ notch packet pack a7f3
  → a7f3.notchpkt
  6.1kb · sha256 verified
03 · Pick up

Move it. They unpack. Done.

Send the archive through any channel — scp, email, Slack, AirDrop, git. The receiver unpacks the files and reads your brief. No AI tool required to read.

$ notch packet unpack a7f3.notchpkt
  ✓ files restored
  ✓ brief: see packet.md

The packet moves. The notch stays. Each handoff also lands in your local trail — indexed, queryable, available the next time you need it.


04 · PACKETS

A packet carries intent and bytes, not just a summary.

Summaries lose fidelity. Packets carry the actual files alongside the reasoning, so the receiving tool doesn't have to guess.

Packet · Folder-canonical

Markdown for humans. Manifest for machines.

Every packet is a folder with packet.md, manifest.json, and copied artifacts. Diff it, grep it, review it — then hand it off.

  • Files copied in when the destination needs the bytes, refs when it shares the workspace path.
  • Secret scanning runs before write — packets land clean or not at all.
  • Targeting metadata answers who is this for — agent, person, or repo.
  • Reviewable before relying on itnotch packet preview shows exactly what the next agent will read.
~/projects/api · packet create
$ notch packet create \
  --title "Brand handoff" \
  --summary "Brand handoff for the launch page." \
  --to-agent codex \
  --to-repo ../brand-site \
  --file mascot.jpg:asset \
  --file showcase.html:source \
  --next-steps "Build apps/brand-site/ using showcase.html."

  scanning artifacts for secrets...
  writing .notch/outbox/a7f3.brand-handoff/
  ├─ packet.md       312 tokens
  ├─ manifest.json   sha256 verified
  └─ artifacts/      2 files · 4.2kb

 Notch marked. outbox/a7f3.brand-handoff
05 · MCP

Skip the typing. Wire your agent.

A local stdio MCP server exposes the same record surface the CLI uses. Wire Claude Code, Claude Desktop, Cursor, or Codex — and prompt in natural language. Your agent calls notch for you.

MCP · Stdio · Local

One store, two tools, zero transfer step.

When the source agent creates a packet, the destination agent lists and reads it immediately. No upload, no relay, no waiting.

  • Read-only toolsget_packet, list_packets, get_brief, get_status.
  • Write toolscreate_packet, create_mark, create_reply, import_packet.
  • Private store is opt-in.notch/private/ stays hidden unless you start the server with --include-private.
  • No arbitrary shell — MCP writes selected records, never executes commands.
~/projects/api · onboard
$ notch onboard --yes --mcp claude-code
  ✓ created .notch/
  ✓ wired ~/.claude/mcp.json → notch mcp serve

$ notch onboard --yes --mcp claude-desktop
  ✓ wired Claude Desktop config → same .notch/ store

$ notch mcp serve
  3notch v0.4.0 · stdio · store .notch/
  read:  get_packet · list_packets · get_brief · ...
  write: create_packet · create_mark · create_reply · ...
  private: hidden (use --include-private)
   ready · waiting for client
06 · TRANSPORT

Cross-machine without a hosted relay.

A deterministic .notchpkt archive moves through whatever channel you already trust — scp, iCloud, Tailscale, email, git LFS.

Archive · .notchpkt

Hash-verified, deterministic, transport-agnostic.

A gzipped tar with deterministic entry ordering. Hashes are re-verified at unpack against the manifest before anything lands in the inbox.

  • Your transport, your rules — 3Notch doesn't move bytes. It packs them so anything else can.
  • Reproducible builds — same packet, same archive, same hash.
  • Tampering-detected unpack — verified at the boundary, not on faith.
~/projects/api · pack & unpack
$ notch packet pack a7f3
  → a7f3.notchpkt · 6.1kb · sha256:9c2…f4d

# move via your channel of choice
$ scp a7f3.notchpkt other-host:~/inbox/

# on the destination
$ notch packet unpack a7f3.notchpkt
  ✓ verified manifest · sha256 match
  ✓ imported .notch/inbox/a7f3.brand-handoff/

$ notch packet preview a7f3
  from: claude-desktop@laptop · 4m ago
  next: Build apps/brand-site/ using showcase.html
07 · CORPUS

The trail is the substrate.

Every notch you leave joins a growing, structured, queryable record of how you work. Pack a packet, leave a mark, reply to a thread — it all gets indexed. The corpus is yours, locally, in plain files.

Substrate · Index · Integrity

Decisions compound. The substrate keeps them coherent.

Every packet, mark, and reply lands with explicit relationships — supersedes, replyTo, refs. A deterministic edge index keeps the corpus queryable as it grows. No LLM judgment, no inference, no magic.

  • supersedes — explicit edges to prior versions. Decisions update; the trail keeps the history.
  • relationships.json — deterministic edge index, derived from the records. Queryable by any tool.
  • notch check — structural integrity. Broken supersedes, cycles, self-reference — caught before the corpus drifts.
  • notch scan — secret scanner. Packets land clean or not at all.
  • No semantic lint, ever — the substrate stays explicit. Anything that needs judgment lives outside the core.
~/projects/api · the trail
$ notch status
  store .notch/  ·  21 records  ·  127kb
  packets 12 · marks 7 · replies 4
  edges 18 · supersedes 5 · replies 6 · refs 7

$ notch check
  ├─ packets         12 ok
  ├─ relationships   18 edges resolved
  ├─ supersedes      no cycles
  └─ replyTo         all targets exist
✓ corpus is structurally sound.

$ cat .notch/index/relationships.json
  {
    "schemaVersion": "0.4.0",
    "edges": [
      { from: "a7f3", to: "b1c2", kind: "supersedes" },
      { from: "d4e5", to: "a7f3", kind: "replyTo" },
      { from: "f6a8", to: "d4e5", kind: "ref" },

    ]
  }
The substrate ships. The surfaces are yours. Wiki view, graph UI, agent integration — build them, or wait for any contributor to. 3Notch ships the records, the relationships, and the integrity verifier. The corpus stays portable across whatever surfaces emerge on top.

Try it in your terminal.

One command to install. Node 20+. Works in any repo, on any project, right now.

$npm install -g @3notch/cli
08 · WHO READS IT

The packet is the contract.
The clients are optional.

A packet is a folder of Markdown plus the actual file bytes. Anything that opens a file can read it. AI clients just give the AI an ergonomic way to consume the same packet humans already can.

Universal — anything that opens a file
Any text editor
Plain Markdown

The brief is a packet.md file. Vim, VS Code, Notepad — they all open it.

Your file browser
Plain folder

Browse artifacts/ for the actual files. They're byte-identical to what you packed.

A teammate
No 3Notch needed

The archive is a gzipped tar. tar -xzf packet.notchpkt works without installing anything.

Future you
Your own trail

Three months later, in a different project. cat packet.md. Done.

AI clients — optional consumers
Claude Code
MCP-native

Wired via notch onboard --mcp claude-code. Reads and writes the store directly.

Claude Desktop
MCP-native

Same store, second client. Hand off without leaving the desktop app.

Codex / Cursor / Gemini
MCP-native

Any MCP-capable agent points at the local store and reads packets through the same tool surface.

ChatGPT / Claude.ai
Bridge · Clipboard

Browser chats can't reach local MCP yet. Fallback: pbpaste | notch packet import -.


09 · CAPABILITIES

Everything in the shipped surface.

Tight scope, not a feature list. Each verb does one thing and stays out of the way.

Onboard

Initialize .notch/ and wire MCP clients in one step.

Packet create

Bundle files, refs, and intent. The core verb.

Packet import

Read a packet folder or .notchpkt archive into the inbox.

Packet preview

See exactly what the next agent will read — before relying on it.

Pack & unpack

Hash-verified .notchpkt archives for cross-machine transport.

Brief

Scoped task briefs for narrow agent runs.

Mark

Self-addressed private capture. The fastest way to remember something for yourself.

Reply

Typed replies that thread back to the originating packet.

Seed

Carry preferences and conventions into a new repo without leaking the old one.

Prompt

Print client-specific instruction packs for web chats and constrained surfaces.

Scan

Standalone secret scanner over any file or stdin.

Check & doctor

Deterministic structural checks and store diagnostics. No magic.


10 · BOUNDARIES

What 3Notch isn't.

The product stays narrow on purpose. These boundaries are tested by a regression-guard in the repo.

No cloud service, hosted relay, or account system. Your existing transport moves bytes — scp, iCloud, Tailscale, email, git.
No telemetry. No hidden chat or project scraping. MCP writes only the records you or your agent explicitly hand it.
No vector database. No semantic auto-tagging or similarity threading. The store is Markdown. Search is grep.
No SQLite or native database dependency. Files are the source of truth. Everything else is derived.
No arbitrary shell execution through MCP. The server writes selected records. It does not run commands.
No wiki UI. No graph view. No semantic lint. The substrate ships — records, relationships, integrity checks. Surfaces on top (readers, browsers, agent integrations) are yours or any contributor's. Anything that needs semantic judgment lives outside the core.
11 · FAQ

Loose ends.

What the page didn't already answer.

Same-repo, same-tool continuity is already solved — by CLAUDE.md, native tool memory, and git commit. 3Notch's wedge is everything that crosses a boundary: handing files from one tool to another, carrying conventions from an old project into a new one, sending a teammate the files and the brief, picking up where you left off on a different machine.

If your work stays in one tool on one repo, you probably don't need 3Notch. If you're juggling multiple repos and tools — or you're starting a new project and want your conventions, skills, and workflows to come with you — that's the gap.

No. A .notchpkt archive is a standard gzipped tar. Anyone with tar can extract it and get the files back plus a Markdown brief they can read in any editor.

Installing the notch CLI on the receiving side just gives you the ergonomic verbs — notch packet unpack hash-verifies the manifest before extracting, notch packet preview formats the brief, notch packet import organizes it into the local store. Useful, not required.

Only when you move them. 3Notch writes Markdown packets to a local .notch/ store. There is no upload, no hosted relay, no account, no telemetry. The CLI never makes a network request unless you explicitly invoke a transport command.

For cross-machine handoff, you run notch packet pack, get a .notchpkt file, and move it through whatever channel you already trust.

The CLI is the primary surface. MCP is an optional convenience for clients that speak it. You can notch packet create from any terminal, hand the resulting folder to anything that reads Markdown, and never touch MCP.

For browser chats (Claude.ai, ChatGPT), there's a clipboard-mediated fallback: notch prompt --client claude-chat prints an instruction pack you paste in; the chat returns a packet you import with pbpaste | notch packet import -.

They accumulate into a local corpus. Every packet, mark, and reply lands in .notch/ as a Markdown record and gets indexed into .notch/index/relationships.json — a deterministic edge graph over your decisions, supersedes, and replies. notch check catches broken references and cycles before the corpus drifts.

3Notch ships the substrate, not the surface. There's no built-in wiki UI, browse view, or agent integration on top. Whether you grep the records, point an agent at them, or build a personal wiki on the index is up to you. The corpus is plain files; it stays portable.

MIT. Free. No tiers, no hosted service, no upsell. 3Notch is open source because the cross-vendor handoff problem can only be solved neutrally — anything else recreates the lock-in it's meant to escape.

v0.4.0 · OSS · MIT

Mark your trail.

One command. Local-first. No account required.

$npm install -g @3notch/cli