[ 01 ] THINKING PARTNER
Relay sits with you first.
You describe a feature. Claude starts writing code. Three files in, you realize it's solving the wrong problem.
Relay doesn't do that. It confirms what you're building and why. Reads your codebase. Teaches you the landscape — what exists, what the options are, what would break.
You make the decisions. But you make them informed.
we need to add SSO
So enterprise customers can use their existing identity provider — that right?
Right now auth goes through handlers/auth.go — JWT only, no SAML or OIDC paths yet.
Two approaches — build on the existing middleware or use a dedicated SSO service. I'd go dedicated — keeps your auth paths separate.
[ 02 ] THE CATCH
It catches what you'd have missed.
Not generic warnings about error handling. Not “have you considered edge cases?” Real things, grounded in your actual code.
Your event_logs table has a 30-day auto-clean policy. Retry state stored there gets silently deleted. Relay finds that before you ship it. Points you to the queue infrastructure you already have.
The kind of thing a good staff engineer catches in review. Except it happens before you write the code.
add webhook retries
Before I write anything — webhook_events has a 30-day auto-clean policy. Retry state stored there gets silently deleted.
I'd go queue-based. You already have the infra in internal/queue/.
[ 03 ] PRODUCTION THINKING
It thinks about production. Not just your file.
When something fails at 3am — can someone trace the cause? When two requests hit the same row — what wins? When step 2 of 3 fails — is the data still valid?
Most AI tools write code that works on your machine. Relay thinks about your database, your cache, your queue, your workers — the whole system. Every change gets evaluated through that lens.
add a cache for user profiles
updateProfile in handlers/user.go:84 writes to Postgres but doesn't invalidate. Cached reads will serve stale data until TTL expires.
Write-through at the handler level. One line — cache.Set after the DB write. Two other write paths do the same thing — I'll trace those too.
[ 04 ] DECISIONS CARRY
It remembers what you decided. And why.
Every decision gets captured — what you chose, what you considered, why you went this way. Technical and business. Architecture, pricing, strategy — all of it.
Next session picks up where this one left off. Your teammate pulls the repo, their Claude has your decisions. No more re-explaining context. The thinking compounds.
relay decisions
Dedicated webhook_subscriptions table
Decided by: Alice
Category: data_model
Confirmed: Independent table, own lifecycle
Over: Extending event_logs
Reasoning: event_logs has 30-day auto-clean —
subscriptions would be silently deleted
✓ Carries to next session
✓ Teammates see this decision
Tell us about a time you were frustrated with Claude Code.
What happened? We read every one of these.