now with native LSP support

A terminal agent that reads your code, not just your prompt

fern wires directly into your language server, your debugger, and your git history — so it plans changes instead of guessing at them.

~/projects/fern-demo
❯ fern plan "fix the race condition in the queue worker"
// scanning call graph, 3 files touch WorkerQueue
✓ found the unguarded read in queue.rs:118
✓ proposed fix — hashline diff ready for review
❯ fern apply
RUST ENGINELSP / DAPGIT-AWARESUBAGENTSPLAN MODE
FEATURES

Built for real codebases, not toy demos

Every feature exists because a large, messy, real repository demanded it.

⌘

Plan mode

fern drafts a change plan before touching a file, so you approve the approach — not just the diff.

◈

Subagents

Spin off focused subagents for research, testing, or refactors that run in parallel without polluting context.

↻

Hindsight memory

fern remembers what it tried last time in this repo, and won't repeat a fix that already failed.

#

Hashline edits

Edits are addressed by content hash, not line number — so they still apply cleanly after upstream changes.

▤

LSP + DAP wired in

Go-to-definition, diagnostics, and live debugging are first-class tools, not text scraped from your editor.

⧗

Time-traveling rules

Project rules can apply retroactively — flag old code against a rule you only just wrote.

WORKFLOW

Reads before it writes

Before fern proposes a change, it walks the call graph, checks type signatures through your LSP, and reviews recent commits touching that file.

  • Understands cross-file references, not just the open buffer
  • Flags breaking changes against real call sites
  • Explains its reasoning in plain English before applying anything
// fern.plan.json
{
  "target": "queue.rs:118",
  "risk": "low",
  "touches": [
    "worker.rs",
    "tests/queue_test.rs"
  ],
  "reasoning": "unguarded read..."
}

Two minutes to your first fix

Works with any git repo. No config file required to start.

curl -fsSL fern.sh/install | sh