Instrument the codebase, not aspreadsheet.
Scan your source, generate a tracking plan, ship typed SDK wrappers for 14 platforms. Any call that does not match the plan fails at compile time.
Free. Reads your own source tree and nothing else.

One plan, typed wrappers forevery stack.
Same intempt.yaml, fourteen generators. Rename a property once in the plan, regenerate, every SDK site type-errors until it matches.
intempt init, then two morecommands.
Detects your framework, proposes events from a source scan, writes them to intempt.yaml, generates the wrappers. Three commands, no dashboard step.
- name: user_signed_up
properties:
email: string
plan: string
- name: checkout_started
properties:
plan: string
seats: number
- name: payment_confirmed
properties:
amount: numberplan: "pro",
seats: 5
})
A mistyped property breaks the build,not the funnel.
Every analytics call the generator writes is typed against the plan. Wrong property name, wrong type, missing event, none of it ships. It fails locally, in review, or in CI.
The alternative is finding it three weeks later in a broken dashboard, with no way to backfill.
AI scan sends source to the model provider only for files you approve. Nothing routes through an Intempt server.
What sellers, marketers and PMs will ask you tofix next.
Eight cases the tracking plan owns before the ticket exists.
Renaming an event.
Change the name in intempt.yaml, regenerate. Every call site breaks the build until it matches.
A required property nobody sent.
intempt status lists the events planned but not yet called anywhere in the code.
iOS, web and Android sending different shapes.
One plan generates typed wrappers for all three, so shape drift is impossible.
Analytics code review during PRs.
Wrappers are just imports; reviewers read them like any other typed call.
A new engineer instrumenting their first flow.
They import the generated wrapper, autocomplete does the rest.
A CI check that fails on unplanned events.
Static token authenticates, intempt status --json returns machine-readable drift.
Retiring an event without breaking dashboards.
Remove from plan, regenerate, compile errors surface every call site that still uses it.
Adopting a new SDK next quarter.
Same plan, different generator. No re-writing of instrumentation.
Two ways to use it. Same output,different input.
Set it up from inside Claude Code.
Paste one prompt into your agent. It installs the CLI, runs init, walks you through the AI scan, shows you the plan, generates the wrappers and reports status. Waits for your confirmation before each step.
You are helping me set up the Intempt CLI. It scans a codebase, proposes a tracking plan, and generates typed SDK wrappers for 14 platforms. Walk me through it one step at a time, run commands for me where you can, and wait for my confirmation before moving on. ...
Device-code login handles auth. No terminal credentials.
Every command supports --json for piping.
For scripted and batch work, run the commands directly. Static token authenticates in CI. Registry commands return machine-readable JSON.
$ intempt init --plan-only $ intempt generate --platform typescript $ intempt status --json | jq .missing
Config lives in intempt.yaml at repo root. Commit it.
Teams love it
Teams stopped shipping broken funnels because their compilercaught them first.
Ready to instrument once?
Free. Reads your own source tree and nothing else. Three commands from install to typed calls.
Nothing ships until you approve it.





