Click anything in your app and watch the whole trip through your code, database and services, with real values.
Understand a codebase you've never seen in minutes. When something breaks, your agent still does the fixing,
but now it sees what actually ran, so it gets it right the first time. AI-native, with skills that improve every time a fix is proven.
Works with Node backends (Express, Next.js, NestJS, Hono, Remix), Python 3.12+ backends (FastAPI, Flask, Django) and Vite or Next frontends. Any other backend that speaks OpenTelemetry (.NET, Go, Java, older Python) gets basic tracing.
Download for Mac · Quick start · Walkthrough · How it works · Docs
Watch the 40 second launch video on YouTube, then the 14 short tutorials (about 2 minutes each)
Tip
Hacktoberfest 2026: Shrike welcomes first-time contributors all October. Pick a good first issue, or add your stack (Go, Rails, .NET, Java, PHP, Rust). Replies within 48 hours. Start here.
"Why not just ask my agent?" You do. Shrike doesn't replace your agent, it gives it eyes. Your agent can read your code, but it can't see what your app actually did when you clicked. So it guesses, and on a bigger codebase it loops on wrong fixes. Shrike records what really ran and hands it over, and you get to see it too.
You build with Cursor, Claude Code, Lovable or Bolt, and the code grows faster than you can follow it. Shrike shows you how it actually works: which code a click runs, what each step got and returned, what it read and wrote, and where the time went. That's useful when something breaks, and just as useful when you open a project you didn't write.
| Without Shrike | With Shrike |
|---|---|
|
|
Shrike is for you if
- You build with AI and the code grows faster than you can follow it
- You've opened a project you didn't write and want to know how it really works
- You want to see what your code did when you clicked, not read 40 files to find out
- You want your agent to fix things with proof, and never touch a file without asking
1. Click. The trip draws itself and stops where it broke.
Every click becomes a trip across lanes: you, page, server, database. The step that failed turns red, and Shrike dives into the code with the real value inline, like userId: undefined on line 18.
2. Press E. See the whole file, and every file the click touched. The Files view opens on the line that ran, next to a tree of every file in the trip. Hot rows ran, red rows broke. The strip at the bottom is the call path you can scrub.
3. Ask in plain words. Your agent says "Found it". Type "when I click Add Todo nothing shows up". The agent walks the recorded trip, pins the cause on a line, and says why in one sentence. You see which playbook it used.
4. Approve the diff. Then ship it. The fix lands only after your click, and Shrike replays the same click to show it passes. Commit, open a pull request, and read CI failures and review comments in the same window.
|
A click in Bazaar, the big sample app, crosses 8 services, 3 Postgres databases, an SQLite outbox, 3 LRU caches, a queue, Stripe and an email provider. Shrike finds the lanes by itself and still stops on the one bad line. Postgres, MySQL, SQLite, MongoDB, Redis, DynamoDB, Firestore, Supabase. Tested projects → |
![]() |
|
A Bruno-style request editor. Routes are found for you, collections are plain files in your repo, and you can import from Bruno, OpenAPI and cURL. Every request you send becomes a trip, so you see what the server did with it. The Routes page is a Swagger-like reference for backend-only projects: filled exactly from your OpenAPI spec when there is one (a file in the repo, or FastAPI, NestJS and Spring's own spec URL), and otherwise from examples your agent guesses from the handler code, which you check before they're saved. Bodies are checked against the schema before you send. |
![]() |
|
Try a fix in a git worktree copy with its own ports and its own agent. Race two fixes side by side and keep the one that passes. Many projects, one rail. |
![]() |
|
The Thread |
Files view |
Agent fix, with approvals |
|
Skills that evolve |
PR and CI |
MCP hub |
|
Voice |
Look inside your data |
Local and private |
Works today with Node servers (Express, Next.js, NestJS, Hono, Remix), Python 3.12+ servers (FastAPI, Flask, Django) and Vite or Next frontends. On Python, Shrike records every call into your own code with its arguments, what it returned and its file and line, nested under the request that caused it, plus its sqlite3 queries, with no change to your code (packages/python-agent). Any backend that speaks OpenTelemetry (.NET, Go, Java, Python before 3.12) works with basic tracing: its requests, queries and outside calls show up, but not per-function values. Shrike points the app's OpenTelemetry SDK at itself when it runs the app; see fixtures/py-app for FastAPI, Flask and Django examples.
- Get
Shrike-<version>-arm64.dmgfrom Releases and drag Shrike to Applications. - Open Shrike. The build is signed and notarised by Apple, so it opens like any other app.
- Click Open the sample project, press Run, add a todo, and watch it break.
- New to it? The tutorials walk through every part of the app, about 2 minutes each.
Linux (x64): get Shrike-<version>-x86_64.AppImage or Shrike-<version>-amd64.deb from Releases. They are unsigned. On arm64, build them with scripts/release/build-linux.sh (see docs/RELEASING.md). Voice is macOS only. On NixOS, run the AppImage with appimage-run. Windows builds from the same config but hasn't been run on a Windows machine yet (docs/14-compatibility.md).
git clone https://github.com/SumantxD/shrike.git
cd shrike
pnpm i
pnpm devInstall the plugin and the Claude Code in your terminal reads Shrike's recordings while Shrike is open:
/plugin marketplace add SumantxD/shrike
/plugin install shrike@shrike
It adds Shrike's tools, a debugging skill, the latest trip in a line above the prompt and /shrike. Code still changes only after you click Apply in Shrike. See integrations/claude-code. For Cursor or another MCP client, copy the one-line setup from Shrike's Tools panel instead.
Requirements
- macOS on Apple Silicon (voice needs macOS 15 or later). Linux x64 from the released AppImage or
.deb, without voice - Node 24 (any Node from 22.18 runs your app; Shrike's own build uses 24)
- pnpm 10 for running from source, plus Xcode if you want voice (the helper builds on first use)
- Claude Code is optional. Shrike uses it on your own subscription when it's installed. Without it, the built-in agent runs on your own Anthropic API key, and the recording, Thread and API client work with no agent at all.
packages/browser-agentruns in your page: clicks, fetches and React components with their source lines.packages/node-agentloads into your server with--import: functions, queries, logs and errors, tied to the request that caused them.packages/correlatorjoins both sides into one tree per click.packages/mcp-serverhands it to agents as tools, with an approval gate on anything that changes code.apps/desktopis the Electron app.apps/desktop/native/voiceis the Swift voice helper.
More in docs/02-architecture.md and docs/05-agent.md.
| Shrike | Browser devtools | Sentry | Postman / Bruno | Claude Code on its own | |
|---|---|---|---|---|---|
| Page, server and database in one trip per click | ✅ | Page only | Traces, with an SDK | Request only | ❌ |
| Real values on the line that ran | ✅ | Page, with breakpoints | On errors | ❌ | ❌ |
| Agent fix you approve, then a replay to prove it | ✅ | ❌ | Paid AI add-on | ❌ | Fixes from reading code |
| Runs on your machine, no account | ✅ | ✅ | Cloud or self-host | Bruno yes, Postman needs an account | ✅ |
| Production monitoring | ❌ | ❌ | ✅ | ❌ | ❌ |
Shrike is for building and debugging on your Mac. For errors in production, keep Sentry.
- No telemetry, no account. Your code, recordings and secrets stay on your Mac.
- Secrets are stripped from every recording before it is stored, shown, sent to an agent or exported.
- Agents can't edit files directly. Every change is a diff you approve.
- Shrike connects out only when you ask: your agent's own API, voice model downloads from Hugging Face, and GitHub through your
ghlogin.
Details in docs/07-security-privacy.md.
- Notarised builds
- Auto-update
- Linux releases (x64 AppImage and
.deb) - Windows release
- Codex and OpenCode as agent brains
- Shareable recordings (
.shriketrace) and a read-only web viewer - Function steps for Python 3.12+ (FastAPI, Flask, Django)
- More stacks: Vite SSR, SvelteKit, Nuxt, function steps for other OpenTelemetry backends
The full plan is in docs/08-roadmap.md.
Shrike is built in the open and contributions are welcome, from a bug report to a new stack.
- Start here: CONTRIBUTING.md covers setup, the rules and how pull requests are reviewed.
- Pick something up: good first issues and help wanted.
- Ask, share or propose: Discussions.
- Found a bug or need your stack? Open an issue.
Each recorder has one owner. Take a wanted one and it's yours; docs/writing-a-recorder.md shows how.
| Stack | Recorder | Owner |
|---|---|---|
| Node | packages/node-agent |
@SumantxD (maintainer) |
| Python 3.12+ | packages/python-agent |
@SumantxD (maintainer) |
| Go | Wanted, see #30 | |
| Ruby on Rails | Wanted, see #31 | |
| .NET | Wanted, see #32 | |
| Java | Wanted, see #33 | |
| PHP | Wanted, see #34 | |
| Rust | Wanted, see #35 |
Any other backend shows up through OpenTelemetry with basic tracing.
What changed in each version is in CHANGELOG.md. Everyone follows the Code of Conduct, and security problems go through SECURITY.md.
MIT. Copyright (c) 2026 Sumant Tirkey.







