Your AI forgets between chats, so you re-explain the same decisions. Edith gives it a memory it maintains itself: it reads its past sessions, distils them into linked Markdown notes, and searches them in later chats while you watch the retrieval on a live graph.
Edith answers inside the chat, in your AI’s own tool calls.
Why a chat gets worse as it goes
At the start, your AI knows what you decided and why. An hour later it is working from a summary of a summary: the reasoning is gone, and it suggests the approach you already threw out. Open a new chat and even that is gone, so you explain your project from scratch, again.
Edith gives it somewhere to put all that. What you decided, what broke, what you agreed not to do: written down as you work, and read back when it matters.
startwe use the next free port, never a fixed one
20 minthe config is rewritten to match
an hour… something about ports?
new chatso, what does this project do?
Without a brain, this is the shape of every long session.
Watch it remember
Edith serves your notes to Claude over MCP, and hosts that server inside the app. So a tool call and the glow are the same tick. A search dimly lights every note Claude considered. Opening one brightly lights the note it actually used.
youthe dev server says the port is already in use again
claudesearch_brain "port already in use"
edith◈ EDITH · 5 matches for “port already in use”░░░░░▓▓▓▓▓ dynamic-port-binding░░░░░▓▓▓ mcp-registration░░░░░▓▓ in-process-mcpread_note <id> for the full text.
clauderead_note dynamic-port-binding
edith◈ EDITH · dynamic-port-binding✦ Dynamic Port Binding
claudeWe have been here before. Last time the fix was to bind the next free port and rewrite the MCP config to match. First I will check for a server left over from an earlier run.
Connect in one click, as the drawing at the top shows. Open Edith and it adds itself to Claude Code, so your next chat can already reach your notes. There is nothing to paste, no key to make, and no server for you to run: Edith is the server, and it only listens on your own Mac.
Then minimise it. Edith becomes a narrow panel docked to the left edge of your screen, drawing your brain and lighting the notes Claude reaches for. It never takes focus. Fold it to a strip the width of its rail, or shrink it to a small square in the corner.
This page is doing the same thing. The graph beside this note is the live view, drawn by the app’s own renderer. Hover a link and its note lights up, along with the road it is about to travel.
Ask Claude to review my recent sessions and save anything worth keeping. It reads your transcripts, works out what was learned, and writes the notes back. Edith runs no inference of its own to fill the brain, so there is no API key and no account. Claude reads and writes your notes through its own session, on the plan you already pay for. Edith is the store and the canvas.
youreview my recent sessions and save anything worth keeping
claudelist_sessions◈ EDITH · 12 session(s), 3 not yet captured
clauderead_session the 3 not yet captured◈ EDITH · session 5f2a1c0b
claudesave_note transcripts-are-trees
edith◈ EDITH · note saved✦ transcripts-are-treeslinked → session-goes-quiet · 40 note(s) in the brain
claudesave_note most-jsonl-are-not-sessions
edith◈ EDITH · note saved✦ most-jsonl-are-not-sessionslinked → transcripts-are-trees · 41 note(s) in the brain
claudesave_note atomic-config-writes
edith◈ EDITH · note saved✦ atomic-config-writeslinked → mcp-registration · 42 note(s) in the brain
claudeSaved three notes and linked them to what was already here.
Another replay, with demo numbers. Each save puts a new note into the brain.
Some things you settle once and want followed every time: how this repo is deployed, what a review has to cover, how to write a commit message here. When your AI sees that shape in the brain, it can draft a skill from it, and Edith holds it in the Skills Forge until you look.
Nothing reaches your AI’s skills folder until you say yes. You read the draft, edit it, approve or throw it out. Edith ships five to start with, so the forge is not empty on day one.
youthat is the third time we have done the release dance by hand
When Claude reaches into the brain, you see exactly where it reached.
A search dimly glows what Claude considered. Opening a note brightly glows what it actually used. Saving one sends a ripple out from the new note. Highlights fade over thirty seconds.
Edith hosts the MCP server itself rather than spawning it. Every tool call emits an event straight to the renderer, which is why the light is instant.
Ask review my recent sessions and save anything worth keeping. Claude reads your transcripts with list_sessions and read_session, then writes the notes back with save_note.
Underneath, five things happen.
Stage
What happens
Watch
Edith watches ~/.claude/projects, waiting for a session to go quiet
Parse
The transcript becomes one canonical session, with abandoned branches skipped
Store
Markdown with YAML frontmatter, indexed in SQLite FTS5
Serve
An MCP server inside the app, over local HTTP
Light up
Every tool call emits an event straight to the renderer
Claude reads and writes your notes through its own session, on the plan you already pay for. Edith is the store and the canvas. It never calls a model to fill the brain, and there is nothing to sign up for.
There is one optional exception. When you import your own files you can ask Edith to distil them into concepts. That makes one API call, on an Anthropic API key of your own that you add in Edith and that is stored locally. Keeping files as written makes no call, and nothing else in Edith ever asks for a key.
Minimise Edith and it becomes a narrow panel docked to the left edge of the screen, drawing your brain and lighting up the notes Claude reaches for. The window and the panel are never up at the same time.
It never takes focus. It folds to a strip the width of the rail, or shrinks to a small square in the corner. Both are just the live graph.
With the window closed or minimised, the panel also opens on its own when a Claude session starts, and stays closed for the rest of a session once you close it. You can turn the automatic opening off under Connection.
A note is a Markdown file with YAML frontmatter. Files on disk are the source of truth. They live in ~/Library/Application Support/Edith/vault, and you can edit them in any editor.
---id: dynamic-port-binding
title: Dynamic Port Binding
type: concept
created: 2026-08-25
updated: 2026-08-25
origin: distilled
sources:
- session: 11111111-2222-3333-4444-555555555555
project: -Users-u-myapp
at: 2026-08-25T10:00:00Z
links: [mcp-registration]
---
Bind the next free port and rewrite the MCP config to match.
The frontmatter carries an id, a title, a type, when the note was created and updated, where it originated, the sessions it came from, and the notes it links to. The body is whatever was worth keeping. This page is laid out the same way.
A note records what you worked out. A skill makes your AI do it the same way next time, without being asked.
Your AI drafts the skill; Edith never writes one. It has no API key and no opinions, so the drafting happens in the session you already pay for, from what it read in the brain.
Drafts wait in the forge as Markdown with frontmatter, editable in any editor. You read one, change what you want, and approve it or throw it out. Only then does it land in your AI’s skills folder, where later sessions pick it up.
The queue is capped. A pile of twenty proposals never gets read, so Edith refuses more until you have caught up. Five starter skills ship with the app.
Add content imports .md, .markdown, .txt and .mdx files, or anything you paste. Files keep their existing frontmatter, so importing a Markdown vault preserves ids and links instead of duplicating notes.
Mode
What it does
API calls
Keep as written
Stores the file or text verbatim as a note
none
Distil into concepts
Runs the same extraction used on sessions
one
Distilling is the only thing in Edith that calls a model on its own. It is optional, and it runs on an Anthropic API key of your own, stored locally. Re-importing a file deepens the existing note rather than creating a duplicate, so syncing a folder repeatedly is safe.
On first launch, outside its own folder, Edith adds four things. Nothing else.
What
Where
Its server entry, so Claude can reach the brain
~/.claude.json, plus Claude Desktop’s config if you have it
A session-start hook that tells Claude the brain exists
~/.claude/settings.json
The /edith command
~/.claude/skills/edith
A handful of starter skills
~/.claude/skills/, managed from the Skills panel
Your config is safe. Registration merges a single key into ~/.claude.json, writes atomically, and backs the file up before the first modification. Your notes are plain Markdown in ~/Library/Application Support/Edith/vault.
Edith is source-available under the Functional Source License, Version 1.1, MIT Future License (FSL-1.1-MIT).
You can read, use, modify and share it for anything except offering it, or something substantially similar, as a competing commercial product or service. Each release becomes MIT-licensed two years after it is published.
The shape is the Aizawa attractor: a swirling disc threaded onto a vertical column, with particles that occasionally ride up the polar axis and dive back down the outside. It reads three-dimensional from every angle, and it exists only as motion.
ẋ = (z − b)x − dyẏ = dx + (z − b)yż = c + az − z3/3 − (x2 + y2)(1 + ez) + fzx3
With a = 0.95, b = 0.7, c = 0.6, d = 3.5, e = 0.25 and f = 0.1. In the app, about 5,200 anonymous motes give the shape its body, and every note is a named particle riding the same flow. Drag one away and the attractor reclaims it.