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)
2/3 READnext →
1
v2 users service + handler+88 −0 · 3 files
2
Dark-launch traffic split+24 −2 · 2 files
3
v1 falls back to v2+3 −1 · 1 file
Not interesting
Renames, imports, formatting
3v1 falls back to v2+3 −1

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

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}
no prompt foundNothing in your session asked for this.

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…
4/5 READunfold morenext →
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 tour # anytime, on any branchcontent_copy

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