Tern LogoTern

Catch agent drift.

You asked for one thing. The agent built it. And more.

$ curl https://tern.sh/install | bashcontent_copyCopy install command
Read the docs
Tours

See what your agent decided on its own.

Tern ties every code change to the prompt that asked for it, and flags the decisions the agent made on its own. The decisions, not a paragraph about them.

tern-sh/api#2904Add v2 users endpoint (dark launch)
Lens
Plan Gapsdone but not intended
Stops
1
NEW SERVICEv2 users service + handler+88 −0 · 3 files
2
TRAFFICDark-launch split+24 −2 · 2 files
3
BEHAVIORv1 falls back to v2+3 −1 · 1 file
api/v1/users.go+3 −1
36func GetUser(id) (*UserV1, error) {
37 u, err := store.Get(id)
38 if err != nil {
return nil, err
39+ // fall back to v2
40+ r, _ := v2.Get(ctx, id)
41+ return v2ToV1(r.User), nil
42 }
43 return toV1(u), nil
44}
45
46// toV1 maps a user to the v1 shape.
47func toV1(u *User) *UserV1 {
48 return &UserV1{ID: u.ID}
49}
v1 now answers with v2 data

On a store miss it returns whatever the v2 service hands back, coupling v1 to v2 at runtime.

Prompts that shaped this stopnone

Before you open the PR, know what you're shipping.

1

Reads what you meant.

Your prompts and your plan, not just the diff. The intent behind the change, pulled from the session you already ran.

~/repos/api
$ tern tour
Read the diff12 files
Read your session4 prompts
Read plans/v2-rollout.md1 plan
what you asked for
add a v2 users service + handler
dark-launch 5% of read traffic
store tokens in the new table
Matching code to what you meant…
5 pieces · 4 from your prompts · 1 not
Opening browser →
app.tern.sh/tours/8f3a…
2

Maps it to your intent.

Every piece, tied to the prompt behind it, and the one nobody asked for standing on its own. Move through it at your speed.

app.tern.sh/tours/8f3a…
LensOverviewPlan GapsSecurity+ ask…
1v2 users service + handlernew service, new endpoint← prompt 1
2Dark-launch traffic split5% of reads routed to v2← prompt 3
3Token storagetokens table + migration← prompt 6
4Tests + fixturescoverage for the aboveroutine
5v1 falls back to v2v1 now forwards on a store missno prompt
3

Outlives the review.

The map is a real artifact: your intent, the catch, the code. Hand it to a reviewer, the security team, whoever inherits it, no re-explaining.

app.tern.sh/tours/8f3a
share linkapp.tern.sh/tours/8f3aopening…

Install Tern.

curl https://tern.sh/install | bashcontent_copy
tern tourcontent_copy

30 seconds. No email. No code leaves your machine.