Now in private beta

PR review built for the pace of AI-generated code.

AI writes code faster than any team can review it. AgentBase is the review layer built to keep up.

Free during beta. No credit card required.See it in action
agentbase.dev/agentbase-demo/checkout/pull/2847
Signal mode
Files5 / 8
services/api/dashboard/route.ts
+18 4
lib/cache.tsnew
+24
services/users/update.ts
+9 2
config/redis.tsnew
+8
tests/dashboard.test.ts
+36
pnpm-lock.yaml
lockfile
dist/types.d.ts
generated
src/components/Dashboard.tsx
formatter

3 files hidden as noise
4.5k lines skipped

Open#2847·agentbase-demo/checkout

Cache dashboard endpoint with Redis (60s TTL)

IIan Kelsey·p95: 800ms → 90ms
Author reasoningVerified against 3 call sites

Tried request-scoped memoization first — works for repeated calls in one render, but does nothing when different users hit the dashboard seconds apart, which is the actual problem. Switched to cache.get with a 60s TTL because that's the window where ~95% of repeat traffic clusters. Same pattern PR #2611 landed on for team-settings.

Ruled out:Request-scoped memoization· doesn't help across users5-minute TTL· profile changes need fasterWildcard cache sweep· blast radius too wide
services/api/dashboard/route.ts+18 −4
@@ services/api/dashboard/route.ts -42,18 +42,32 @@
42export async function GET(req: Request) {
43 const userId = await requireAuth(req)
44 const data = await fetchDashboard(userId)
44+ // Try cache first — 60s TTL keeps active users fresh
45+ const cacheKey = `dashboard:${userId}`
46+ const cached = await cache.get<Dashboard>(cacheKey)
47+ if (cached) return Response.json(cached)
48
49+ const data = await fetchDashboard(userId)
50+ await cache.set(cacheKey, data, { ttl: 60 })
51 return Response.json(data)
52}

Review at the speed your team ships.

Understand why the code was written, not just what changed

Every PR surfaces the author's original reasoning inline, right next to the diff, so you see exactly how the engineer or agent arrived at each decision before you review a single line.

services/api/dashboard/route.ts+18 −4
44 const userId = await requireAuth(req)
45 const cached = await cache.get(`dashboard:${userId}`)
46 if (cached) return Response.json(cached)
I
Ian Kelseyopened this PRAuthor intent
Tried

Request-scoped memoization — works for repeated calls in one render but does nothing across users.

Chose

Redis with a 60s TTL — that's the window where ~95% of repeat traffic clusters. Same as PR #2611.

Ruled out

5-min TTL (profile changes need faster) · Wildcard sweep (blast radius too wide)

Verified against 3 call sites
·lib/cache.ts:6
47 const data = await fetchDashboard(userId)
48 await cache.set(cacheKey, data, { ttl: 60 })

An agent that's already read the PR, and the rest of your codebase

From the moment a PR opens, the agent has full context on the expected outcome, every line changed, and how it fits into your architecture, conventions, and history, so you can ask anything and get an answer immediately.

Codebase agent
main · 48,231 files
Has this caching pattern been used before?
Yes — twice. Both stable in production for over a year, no cache-related incidents. This is the third use of the pattern.
PR #2611· team-settings
PR #2104· billing-summary
lib/cache.ts· shared helper
Ask about this codebase...

Only review the changes that actually matter

AgentBase automatically filters out lockfile churn, generated code, and formatter noise, so every line you see is a line worth your attention, and nothing else gets between you and the real review.

Changed files
Signal mode
services/api/dashboard/route.ts
+18 -4
lib/cache.ts
+24 -0
services/users/update.ts
+9 -2
pnpm-lock.yamllockfile
+4,218 -3,984
dist/types.d.tsgenerated
+142 -88
src/components/Dashboard.tsxformatter
+14 -14

3 files hidden as noise · Show all

Built by engineers from

We've spent years shipping code review tools at some of the most demanding engineering orgs in the world.

Coinbase
Bloomberg
Microsoft