extension
MockingBird, inside your editor.
Chat, edit, and build — right where your code lives.
One extension, four models, and an edit pipeline that reads your files before it touches them.
1.0 chat
Chat, grounded in your codebase.
Route work to the right model, not just one model.
Claude, GPT, Gemini, and DeepSeek sit behind one picker. Sonnet for reasoning-heavy refactors, a fast model for boilerplate, Opus when you need to go deep — swap mid-conversation without losing context. If a provider goes down mid-task, MockingBird falls back automatically. No dropped request, no starting over.

GPT
Start a conversation.
Switch models anytime.
Reference a file, don't paste it.
Type @ and pull any file in your workspace straight into the conversation — the model reads it directly instead of you copying code back and forth. No stale pastes, no forgetting to update the context when the file changes.
Show it, don't just describe it.
Attach screenshots, error dumps, design mockups — anything visual — alongside your message. Multimodal models read the image and the code together, so "this button looks wrong" is a valid bug report.
QUICK ACCESS
Desktop
Downloads
Documents
Pictures
MockingBird > src
2.0 edit
Edits that land where you meant.
One model call reads the file and proposes the edit — not two.
Most tools read your code with one model call, then guess at the edit with a second, disconnected one — reconstructing the change from a text marker instead of the actual file state. MockingBird's propose_edits runs inside the same call that reads your code, so the edit is grounded in what the model just saw, not a re-guess of it.
Every edit stops at a review panel first.
Nothing touches your files until you accept it. See the exact diff, accept, reject, or ask for changes — the model never writes to disk behind your back.
the login form doesn't handle empty passwords, fix it
Claude Haiku 4.5
Found it — handleSubmit in LoginForm.tsx submits even when the password field is empty. Adding a guard:
Edits land on the right line, every time.
Insertions are anchored to exact text in your file, not a line number that shifts the moment something above it changes. Works identically whether your file uses LF or CRLF line endings — no more edits that apply, then quietly land three lines off.
3.0 sudo mode
Turn off the review step, when you trust the pipeline.
One switch, and the review panel disappears.
Sudo Mode skips the accept/reject step entirely — edits apply the instant they're proposed. Same propose_edits pipeline underneath, same anchoring, same CRLF-safe application. You're not trading safety for speed, you're trading a click for speed.
Built for repetition, not risk.
Bulk renames, formatting passes, applying the same fix across a dozen files — the kind of work where reviewing every diff is friction, not safety. Sudo Mode stays off by default; you turn it on per session, not per project.
BEHAVIOUR
Auto model switch
Switch to another provider on 503
Sudo Mode
Apply proposed edits instantly, no review
SLASH COMMANDS
4.0 builder mode
Describe what you want built. MockingBird runs the build.
A conversation first, a plan second.
Talk through what you want before anything runs. MockingBird asks questions, reads your codebase, and proposes a step-by-step plan — no file gets touched during this stage, planning conversations are architecturally locked out of editing. When the plan looks right, one click turns it into a queue of Builder Mode steps.
Let's plan your build.
Tell me what you want to create.
| Ref | Purpose |
|---|---|
`retryRef` | Holds the step id currently being retried
`pollTimer` | Interval driving `RunLoop.status` polling
`isRetrying` | Declared but **not actively used** in the current code
Add a manual Retry button to the Builder Mode step card for failed steps
OUTPUT
Found StepCard.tsx— failed steps already store their error, just no action to retry. Adding a Retry button that re-invokes the step's original tool call.
FILE
src/components/StepCard.tsx
REVIEW
Clean on review.
Wire the Retry button to re-run the failed step through the existing RunLoop queue instead of starting a new one
OUTPUT
Confirmed — RunLoopEngine.enqueueStep() already accepts a step id for re-runs. Wiring the button to call it directly.
One step at a time, not one giant diff.
Each step runs, applies its edit, and commits to git — before the next step starts. Every step self-reviews against what directly depends on it, so a change in step 2 doesn't silently break step 5. Assign different models to different steps: a fast model for boilerplate, a stronger one for the step that actually needs judgment.
Every step has a way out.
A failed step can be retried, skipped, or the whole build aborted — and any applied step can be reverted individually, without touching the ones before or after it. Reject a proposed edit mid-run and reprompt it, retry it, or dismiss it and move on.
5.0 workspace
A workspace, not just a chat window.
Commands, not menus.
/clear wipes the current chat, /model opens the model switcher, /workspace swaps context, /context shows exactly what's been injected into the system prompt, /help lists what's available. No hunting through settings mid-conversation.
Let's plan your build.
Tell me what you want to create.
Refactor the auth middleware
New Chat
Fix cart checkout race condition
Add pin-to-workspace summarization
Debug map marker clustering
New Chat
Every conversation belongs to a workspace.
Reopen a past conversation and it's still scoped to the right project — the right files, the right context, nothing bleeding in from a different workspace you were in yesterday.
Save the decision, not the whole thread.
Pin a message and MockingBird summarizes it — under 40 words — then appends it to the workspace's running context. The next conversation in that workspace already knows what was decided, without you re-pasting it.
Add debounce to the map marker clustering so it doesn't recompute on every drag frame, only once the user stops panning.
Pinned to workspace: Debounce map marker clustering to run once panning stops, not every drag frame.