Your agents ship the code. You stay able to explain it.

Ella reads every change your coding agents make and keeps the why: what changed, what it assumes, and what could break. Ask her before you edit, before you deploy, and when production breaks.

We're letting developers in a few at a time while we test. One email when your spot opens, nothing else.

@eric @ella why did the Stripe webhook change last night?

app/api/webhooks/stripe/route.ts   commit 4f2a91c, written by Claude Code

  1. 1Why it changed. Stripe retries a webhook when the reply is slow. The old handler ran capture() on every retry, so a customer was charged twice on Sep 30.
  2. 2What it assumes. Stripe event ids are unique, and the stripe_events table exists in production (migration 0007).
  3. !Still open. The refunds webhook uses the old pattern and can double-refund. This is the third payment fix with the same cause.
From the Change Digest Claude Code recorded at the end of the session, plus your production errors.

Ask before you edit, before you ship, and when it breaks

Ella answers from your app's own history: the reasons your agents recorded, the structure of your code, and your production errors. Every answer points at files and commits you can check.

Before you edit

@eric@ella what should I know before touching billing?
Ella
  • Billing changed 4 times in 3 weeks, all by Claude Code.
  • Webhooks skip repeats since Oct 1: event ids go in stripe_events.
  • Refunds still use the old handler. Treat it as high risk.
  • Checkout tests haven't run since Sep 28.

Before you ship

@eric@ella is this safe to deploy?
Ella
  • GET /api/orders returns every order with no sign-in check (route.ts:5).
  • NEXT_PUBLIC_STRIPE_SECRET_KEY ships your secret key to the browser.
  • I didn't check database policies or business logic.

When it breaks

@eric@ella TypeError: Cannot read properties of null (reading 'user_id') in /api/orders
Ella
  • Likely cause: last night's change assumed every order has a user. Guest checkout orders don't.
  • Path: Checkout page, Orders API, orders table.
  • A fix prompt for your agent is ready, with this context included.

Three minutes to set up, then it stays out of your way

  1. Install the CLI and plugin

    One npm install, then the Claude Code plugin, or an MCP entry for Cursor and Codex.

    npm install -g @coderetro/local
    coderetro login
    coderetro init --cloud --agents
  2. Work with your agent as usual

    When a session ends, the agent records a Change Digest: intent, root cause, approach, rejected options, assumptions and risks. Secrets are stripped on your machine before anything is sent.

  3. Ask Ella

    In your editor through MCP, in the terminal, or in the web app with your App Map, confidence check and recurring issues. Your own tools can call the same MCP server.

Built on MCP, so it fits your workflow

Any MCP client can ask Ella for context, record a change, run a check or investigate an error. Wire her into your agent rules, your CI, or an on-call bot of your own.

# Claude Code
claude mcp add coderetro -- coderetro mcp

# Cursor: .cursor/mcp.json
{ "mcpServers": { "coderetro": { "command": "coderetro", "args": ["mcp"] } } }

# then, in any agent
> @ella what should I know before editing lib/billing?

Your code stays on your machine

The local agent is open source under Apache-2.0, so you can read exactly what it sends. Local-only mode keeps everything on your computer.

What leaves your machine

  • The digest your agent writes: intent, reasoning, assumptions, risks
  • File paths, routes, table and service names, environment variable names
  • Check findings with short, redacted excerpts
  • Your source code, unless you turn on snippets
  • Secrets, tokens and email addresses, which are stripped first
  • Environment variable values

Early access opens in small groups

We're testing with indie developers and small teams shipping with Claude Code, Cursor and Codex.

Join the waitlist