fethr

A featherweight code editor with a first‑class agent panel.

The agent reads your project and proposes edits as diffs. You accept them in the editor, where ⌘Z still works. The agent process never touches your disk.

Either way you need Node 18 or newer and a Claude Code login on the machine. Details under before you run it.

The fethr editor with three panels: a file tree on the left showing the fethr repository on branch main, bin/fethr.js open in the middle, and the agent panel on the right. The agent's reply explains the stale comment it found, followed by a propose_edit card showing one removed line and two added lines, with Accept and Reject buttons.
A live session, not a mock-up. Asked about a stale header comment in bin/fethr.js, the agent read the file and proposed dropping the line. Accept puts the change in the editor buffer; it shipped in the same commit as this page.

How it is put together

Proposes, never writes

The agent can read, grep and glob inside the folder you opened, and nothing else: every mutating tool is disabled server-side. Its one way to change anything is propose_edit, which shows you a diff card. You accept or reject.

A peer process, not a plugin

The agent runs on the Claude Agent SDK with the Claude Code login already on your machine, so there is no API key to configure. The editor pipes context in and renders what comes back. There is no extension platform to carry.

Your browser is the shell

fethr starts a local server on 127.0.0.1 and opens your browser, the rendering engine your OS already ships. CodeMirror 6 underneath. No Electron. The native macOS window bundles the same server and shows the same page.

In the panel

  • Context you can see. A pill row above the composer shows exactly what rides along with your next message: the current file, the live selection, the real git branch, and any file you attached by typing @.
  • Live status. Thinking, the tool in use, writing. Streamed thinking sits in a collapsible block, and there is a stop button.
  • Clickable references. app.js:42 in a reply jumps the editor to that file and line.
  • Model picker. Default, opus, sonnet, haiku or fable 5. Switching starts a fresh conversation.
  • Auto mode. Proposals apply straight to the buffer, still undoable with ⌘Z. Off by default.
  • Voice input. The mic button uses the browser's built-in speech recognition in Chromium-based browsers. No server, no key.
  • Chat history persists per project, panels resize by dragging and remember their widths, ⌘J toggles the panel and ⌘B the sidebar.
  • Highlighting for JavaScript and TypeScript, Python, Markdown, HTML, CSS and JSON.
  • Five looks. Auto, moss, paper, slate and dawn from the view button in the footer. The editor follows.

Weights

editor bundle
about 660 KBthe code that runs the editor in your browser
native macOS app
50 MBdisk image, Apple Silicon
first npx run
a few hundred MB, oncethe Agent SDK ships its own copy of the claude binary; npx caches it after the first run
this page
one HTML file and one imageno JavaScript, no web fonts, no tracking

Before you run it

Alpha. It works, and it has rough edges. What shipped in each version is in the changelog; the design decisions and the bugs behind them are in ARCHITECTURE.md.

You need Claude Code. The panel uses the login already on your machine, and tells you if there is none. The native app also needs a Node install it can find (Homebrew or nvm), because it runs the same server as the command line does.

What leaves your machine. The editor makes one network call on its own: once a day it fetches fethr.dev/version.json to learn whether a newer version exists. Nothing is sent, and a checkbox in the footer turns it off. The agent panel makes others: the current file, your selection and anything you attach go to Anthropic's API through your Claude Code login, the same as using Claude Code directly. Don't open the panel on files you don't want leaving your machine.

Scope. File access is confined to the folder you launch with, symlinks included. The local server takes a token minted at launch on every call, so no other page on your machine can talk to it. A Finder double-click asks you to choose a folder rather than opening your home directory.

First launch of the app. The build is signed but not notarized, so macOS blocks it once. Allow it under System Settings, Privacy & Security, then open it again.

What is coming, in the order it is being built

No dates. Where something is not here yet, this says what it costs you today.

  1. Windows and Linux builds. The npx path already runs there. The native window waits on the app finding your Node install on those systems.
  2. A notarized macOS build. Until then, the first launch needs the allow step described above.