everything the agent, the CLI, and the web app share is one /v1 contract. start with the quickstart, then keep the api reference handy.
what scimap is, and the one rule that holds it together.
scimap is a durable record for autonomous research. your coding agent writes every hypothesis, run, and decision through one HTTP API into a typed graph — so the work survives the chat that produced it, and stays forkable, auditable, and re-derivable.
there is one funnel for results: run:record. it is idempotent, so a retried job never double-writes. the web app, the agent, and the terminal all speak the same /v1 contract — they cannot drift.
from zero to a recorded run in four steps.
npm i -g scimap-cli
scimap login --key sk_live_…
scimap init --title "train a better LM"
scimap run:record --project <id> \ --commit a1f3c9e --seed 1337 \ --metric val_bpb=0.812 --outcome success
the shipped scimap commands — the agent-facing front door, same /v1 contract.
the CLI is a thin client over /v1: global flags (--json, --api-url, --api-key) are inherited by every subcommand, and the runtime key + URL resolve from flags, env (SCIMAP_API_URL / NEXT_PUBLIC_API_URL), the repo's scimap.json, then ~/.scimap/config.json. these are the verbs that actually ship.
BYOK — you hold the key; scimap never holds a balance.
every request authenticates with an API key in the Authorization header. create and scope keys on the api keys page; reads need graph:read, writes need graph:write, recording a run needs run:record, and starting a campaign needs optimize:start.
Authorization: Bearer sk_live_…
the /v1 endpoints the agent and the app share. all paths are relative to the base url.
run:record is the heart of the contract and the one write you should understand first.
curl https://api.scimap.dev/v1/runs \
-H "Authorization: Bearer sk_live_…" \
-H "Idempotency-Key: a1f3c9e:1337" \
-d '{"hypothesis_id":"…","config":{…},
"seed":1337,"code_commit":"a1f3c9e",
"metrics":{"val_bpb":0.812},
"outcome":"success"}'
→ 201 · node dry-dawn-9050 · supported
→ brief recomputed · exactly-once/runswrite · scoped/runs?project={id}read/runs/compare?a={id}&b={id}read/runs/{id}/verify-commitwrite · scoped/projectsread/projects/{id}/treeread/projects/{id}/briefread/projects/{id}/search?q=read/projects/{id}/library/search?q=&mode=read/nodes/{id}/forkwrite · scoped/nodes/{id}/reproducewrite · scoped/nodes/{id}/evaluatewrite · scoped/sourceswrite · scoped/campaignswrite · scoped/api-keysreadtwo node types, a typed graph, and one funnel.
the graph is the product. it has two node types you reason about — claims and evidence — connected by typed links, and every result carries enough state to be re-derived from scratch.