From signup to your first instrumented run in under 60 seconds.
Sign in at platform.useinvariance.com and create a key under Settings → API keys → New API key.
export INVARIANCE_API_KEY=inv_live_...Pick your stack — each block is the complete first run.
npm install @invariance/sdkimport { Invariance } from '@invariance/sdk';
const inv = Invariance.init({ apiKey: process.env.INVARIANCE_API_KEY! });
await inv.runs.start({ name: 'hello-invariance' }, async (run) => {
await run.log('prompt received', { prompt: 'Hello, world?' });
await run.tool('greet', { who: 'world' }, async () => ({
greeting: 'Hello, world!',
}));
});pip install invariance-sdkfrom invariance import Invariance
inv = Invariance() # reads INVARIANCE_API_KEY
with inv.runs.start(name="hello-invariance") as run:
with run.step("greet", input={"who": "world"}) as s:
s.output = {"greeting": "Hello, world!"}npm install -g @invariance/cliinv login --api-key "$INVARIANCE_API_KEY"
RUN=$(inv runs start --name hello --json | jq -r .id)
inv nodes write "$RUN" \
--action-type tool_call \
--input '{"who":"world"}' \
--output '{"greeting":"Hello, world!"}'
inv runs update "$RUN" --status completed
inv runs inspect "$RUN" --json # full run + nodes (agent-friendly)Add the MCP server to your Claude Desktop / Claude Code / Cursor config:
{
"mcpServers": {
"invariance": {
"command": "npx",
"args": ["-y", "@invariance/mcp"],
"env": { "INVARIANCE_API_KEY": "inv_live_..." }
}
}
}Then ask the agent: “Start a run named hello and write a node.”
Open the Runs page in the dashboard — your run appears with its nodes, status, and a verifiable proof chain.