Verifiable intelligence for AI software engineering.

Try AxiomCode Graph on GitHub

Everything starts with a formally grounded code graph.

Request Demo

Works with your favorite agents

  • Cursor
  • Claude Code
  • Codex
  • Antigravity
  • Windsurf
  • GitHub Copilot
  • Gemini CLI
  • OpenCode
  • Cline
  • Amp

AxiomCode Graph

Better code startswith a graph.

A formally grounded map of your codebase. The foundation for agents and engineers to understand, plan, and act.

  1. Give coding agents the callers, dependencies, and affected code behind a task, so they can make changes with better context.

the changecode it depends ontests that call itunrelated, skipped

Drag to turn the graph, or focus it and use the arrow keys. Dragging or using the keyboard pauses automatic rotation.

Missed by AI agents alone
67%0% with AxiomCode
More impact sites found
85%Including indirect calls
Lower cost, fewer rounds
48%4 tool calls, not 10

Context

Start from the task, not from a symbol.

One question, put to a type-aware call graph and answered five times over — every chain verified, and anything the graph cannot vouch for widening the answer instead of shrinking it.

claude — hono — zsh
dev@MacBook hono % claude
Claude Code v2.1.278
Opus 5 (1M context) with high effort · Claude Max
axiomcode · plugin + skill
~/Documents/hono
Tip: Use git worktrees to run multiple Claude sessions in parallel.
⏵⏵ auto mode on(shift+tab to cycle) · esc to interrupt · ← for agents
axiomcode graph hono · typescript · 8,657 call edges · 366 files
The tests reached by a change to basicAuthThe inner ring shows source files and their call relationships. Blue paths reach the seven selected test files in the outer ring. Dashed red paths mark the tests with no chain to the change.benchmarks/jsx/src/benchmark.tsbenchmarks/jsx/src/hono.tsbenchmarks/jsx/src/nano.tsbenchmarks/jsx/src/page-react.tsxbenchmarks/jsx/src/page.tsxbenchmarks/jsx/src/preact.tsbenchmarks/jsx/src/react-jsx/benchmark.tsbenchmarks/jsx/src/react-jsx/hono.tsbenchmarks/jsx/src/react-jsx/nano.tsbenchmarks/jsx/src/react-jsx/page-hono.tsxbenchmarks/jsx/src/react-jsx/page-nano.tsxbenchmarks/jsx/src/react-jsx/page-preact.tsxbenchmarks/jsx/src/react-jsx/page-react.tsxbenchmarks/jsx/src/react-jsx/preact.tsbenchmarks/jsx/src/react-jsx/react.tsbenchmarks/jsx/src/react.tsbenchmarks/routers/src/bench-includes-init.mtsbenchmarks/routers/src/bench.mtsbenchmarks/routers/src/hono.mtsbenchmarks/routers/src/tool.mtsbenchmarks/routers/src/trek-router.mtsruntime-tests/workerd/index.tssrc/adapter/aws-lambda/conninfo.tssrc/adapter/aws-lambda/handler.tssrc/adapter/aws-lambda/types.tssrc/adapter/bun/conninfo.tssrc/adapter/bun/serve-static.tssrc/adapter/bun/server.tssrc/adapter/bun/ssg.tssrc/adapter/bun/websocket.tssrc/adapter/cloudflare-pages/conninfo.tssrc/adapter/cloudflare-pages/handler.tssrc/adapter/cloudflare-workers/conninfo.tssrc/adapter/cloudflare-workers/serve-static-module.tssrc/adapter/cloudflare-workers/serve-static.tssrc/adapter/cloudflare-workers/utils.tssrc/adapter/cloudflare-workers/websocket.tssrc/adapter/deno/conninfo.tssrc/adapter/deno/deno.d.tssrc/adapter/deno/serve-static.tssrc/adapter/deno/ssg.tssrc/adapter/deno/websocket.tssrc/adapter/lambda-edge/conninfo.tssrc/adapter/lambda-edge/handler.tssrc/adapter/netlify/conninfo.tssrc/adapter/netlify/handler.tssrc/adapter/service-worker/handler.tssrc/adapter/service-worker/index.tssrc/adapter/vercel/conninfo.tssrc/adapter/vercel/handler.tssrc/client/client.tssrc/client/fetch-result-please.tssrc/client/types.tssrc/client/utils.tssrc/compose.tssrc/context.tssrc/helper/accepts/accepts.tssrc/helper/adapter/index.tssrc/helper/conninfo/types.tssrc/helper/cookie/index.tssrc/helper/css/common.tssrc/helper/css/index.tssrc/helper/dev/index.tssrc/helper/factory/index.tssrc/helper/html/index.tssrc/helper/proxy/index.tssrc/helper/route/index.tssrc/helper/ssg/middleware.tssrc/helper/ssg/plugins.tssrc/helper/ssg/ssg.tssrc/helper/ssg/utils.tssrc/helper/streaming/sse.tssrc/helper/streaming/stream.tssrc/helper/streaming/text.tssrc/helper/streaming/utils.tssrc/helper/testing/index.tssrc/helper/websocket/index.tssrc/hono-base.tssrc/hono.tssrc/http-exception.tssrc/jsx/base.tssrc/jsx/children.tssrc/jsx/components.tssrc/jsx/context.tssrc/jsx/dom/client.tssrc/jsx/dom/components.tssrc/jsx/dom/context.tssrc/jsx/dom/css.tssrc/jsx/dom/hooks/index.tssrc/jsx/dom/index.tssrc/jsx/dom/intrinsic-element/components.tssrc/jsx/dom/jsx-dev-runtime.tssrc/jsx/dom/render.tssrc/jsx/dom/server.tssrc/jsx/dom/utils.tssrc/jsx/hooks/index.tssrc/jsx/intrinsic-element/common.tssrc/jsx/intrinsic-element/components.tssrc/jsx/jsx-dev-runtime.tssrc/jsx/jsx-runtime.tssrc/jsx/streaming.tssrc/jsx/utils.tssrc/middleware/basic-auth/index.tssrc/middleware/bearer-auth/index.tssrc/middleware/body-limit/index.tssrc/middleware/cache/index.tssrc/middleware/combine/index.tssrc/middleware/compress/index.tssrc/middleware/context-storage/index.tssrc/middleware/cors/index.tssrc/middleware/csrf/index.tssrc/middleware/etag/digest.tssrc/middleware/etag/index.tssrc/middleware/ip-restriction/index.tssrc/middleware/jsx-renderer/index.tssrc/middleware/jwk/jwk.tssrc/middleware/jwt/jwt.tssrc/middleware/language/language.tssrc/middleware/logger/index.tssrc/middleware/method-not-allowed/index.tssrc/middleware/method-override/index.tssrc/middleware/powered-by/index.tssrc/middleware/pretty-json/index.tssrc/middleware/request-id/request-id.tssrc/middleware/secure-headers/secure-headers.tssrc/middleware/serve-static/index.tssrc/middleware/serve-static/path.tssrc/middleware/timeout/index.tssrc/middleware/timing/timing.tssrc/middleware/trailing-slash/index.tssrc/preset/quick.tssrc/preset/tiny.tssrc/request.tssrc/router.tssrc/router/linear-router/router.tssrc/router/pattern-router/router.tssrc/router/reg-exp-router/node.tssrc/router/reg-exp-router/prepared-router.tssrc/router/reg-exp-router/router.tssrc/router/reg-exp-router/trie.tssrc/router/smart-router/router.tssrc/router/trie-router/node.tssrc/router/trie-router/router.tssrc/router/utils.tssrc/types.tssrc/utils/accept.tssrc/utils/basic-auth.tssrc/utils/body.tssrc/utils/buffer.tssrc/utils/color.tssrc/utils/concurrent.tssrc/utils/cookie.tssrc/utils/crypto.tssrc/utils/encode.tssrc/utils/filepath.tssrc/utils/handler.tssrc/utils/html.tssrc/utils/ipaddr.tssrc/utils/jwt/jws.tssrc/utils/jwt/jwt.tssrc/utils/jwt/types.tssrc/utils/mime.tssrc/utils/stream.tssrc/utils/url.tssrc/validator/validator.tsruntime-tests/bun/index.test.tsxruntime-tests/deno-jsx/jsx.test.tsxruntime-tests/deno/hono.test.tsruntime-tests/deno/middleware.test.tsxruntime-tests/deno/ssg.test.tsxruntime-tests/deno/stream.test.tsruntime-tests/fastly/index.test.tsruntime-tests/lambda-edge/index.test.tsruntime-tests/lambda/index.test.tsruntime-tests/lambda/stream-backpressure.test.tsruntime-tests/lambda/stream.test.tsruntime-tests/node/index.test.tssrc/adapter/aws-lambda/conninfo.test.tssrc/adapter/aws-lambda/handler.test.tssrc/adapter/bun/conninfo.test.tssrc/adapter/bun/server.test.tssrc/adapter/bun/websocket.test.tssrc/adapter/cloudflare-pages/conninfo.test.tssrc/adapter/cloudflare-pages/handler.test.tssrc/adapter/cloudflare-workers/conninfo.test.tssrc/adapter/cloudflare-workers/serve-static.test.tssrc/adapter/cloudflare-workers/utils.test.tssrc/adapter/cloudflare-workers/websocket.test.tssrc/adapter/deno/conninfo.test.tssrc/adapter/deno/websocket.test.tssrc/adapter/lambda-edge/conninfo.test.tssrc/adapter/lambda-edge/handler.test.tssrc/adapter/netlify/conninfo.test.tssrc/adapter/service-worker/handler.test.tssrc/adapter/vercel/conninfo.test.tssrc/adapter/vercel/handler.test.tssrc/client/client.test.tssrc/client/types.test.tssrc/client/utils.test.tssrc/compose.test.tssrc/context.test.tssrc/helper/accepts/accepts.test.tssrc/helper/adapter/index.test.tssrc/helper/cookie/index.test.tssrc/helper/css/common.case.test.tsxsrc/helper/css/index.test.tsxsrc/helper/dev/index.test.tssrc/helper/factory/index.test.tssrc/helper/html/index.test.tssrc/helper/proxy/index.test.tssrc/helper/route/index.test.tssrc/helper/ssg/plugins.test.tsxsrc/helper/ssg/ssg.test.tsxsrc/helper/ssg/utils.test.tssrc/helper/streaming/sse.test.tsxsrc/helper/streaming/stream.test.tssrc/helper/streaming/text.test.tssrc/helper/testing/index.test.tssrc/helper/websocket/index.test.tssrc/hono.test.tssrc/http-exception.test.tssrc/jsx/base.test.tsxsrc/jsx/children.test.tssrc/jsx/components.test.tsxsrc/jsx/dom/client.test.tsxsrc/jsx/dom/components.test.tsxsrc/jsx/dom/context.test.tsxsrc/jsx/dom/css.test.tsxsrc/jsx/dom/hooks/index.test.tsxsrc/jsx/dom/index.test.tsxsrc/jsx/dom/intrinsic-element/components.test.tsxsrc/jsx/dom/server.test.tsxsrc/jsx/hooks/dom.test.tsxsrc/jsx/hooks/string.test.tsxsrc/jsx/index.test.tsxsrc/jsx/intrinsic-element/components.test.tsxsrc/jsx/jsx-runtime.test.tsxsrc/jsx/streaming.test.tsxsrc/jsx/utils.test.tssrc/middleware/basic-auth/index.test.tssrc/middleware/bearer-auth/index.test.tssrc/middleware/body-limit/index.test.tssrc/middleware/cache/index.test.tssrc/middleware/combine/index.test.tssrc/middleware/compress/index.test.tssrc/middleware/context-storage/index.test.tssrc/middleware/cors/index.test.tssrc/middleware/csrf/index.test.tssrc/middleware/etag/digest.test.tssrc/middleware/etag/index.test.tssrc/middleware/ip-restriction/index.test.tssrc/middleware/jsx-renderer/index.test.tsxsrc/middleware/jwk/index.test.tssrc/middleware/jwt/index.test.tssrc/middleware/language/index.test.tssrc/middleware/logger/index.test.tssrc/middleware/method-not-allowed/index.test.tssrc/middleware/method-override/index.test.tssrc/middleware/powered-by/index.test.tssrc/middleware/pretty-json/index.test.tssrc/middleware/request-id/index.test.tssrc/middleware/secure-headers/index.test.tssrc/middleware/serve-static/index.test.tssrc/middleware/serve-static/path.test.tssrc/middleware/timeout/index.test.tssrc/middleware/timing/index.test.tssrc/middleware/trailing-slash/index.test.tssrc/preset/quick.test.tssrc/preset/tiny.test.tssrc/request.test.tssrc/router/common.case.test.tssrc/router/linear-router/router.test.tssrc/router/pattern-router/router.test.tssrc/router/reg-exp-router/prepared-router.test.tssrc/router/reg-exp-router/router.test.tssrc/router/smart-router/router.test.tssrc/router/trie-router/node.test.tssrc/router/trie-router/router.test.tssrc/types.test.tssrc/utils/accept.test.tssrc/utils/basic-auth.test.tssrc/utils/body.test.tssrc/utils/buffer.test.tssrc/utils/color.test.tssrc/utils/concurrent.test.tssrc/utils/cookie.test.tssrc/utils/crypto.test.tssrc/utils/encode.test.tssrc/utils/filepath.test.tssrc/utils/html.test.tssrc/utils/ipaddr.test.tssrc/utils/jwt/jwt.test.tssrc/utils/mime.test.tssrc/utils/stream.test.tssrc/utils/url.test.tssrc/validator/validator.test.tssrc/utils/buffer.ts — timingSafeEqualsrc/utils/basic-auth.tssrc/jsx/dom/index.test.tsx — no chain — skippedsrc/jsx/index.test.tsx — no chain — skippedsrc/hono.test.ts — no chain — skippedsrc/jsx/utils.test.ts — no chain — skippedsrc/middleware/cache/index.test.ts — no chain — skippedsrc/client/client.test.ts — no chain — skippedsrc/router/reg-exp-router/router.test.ts — no chain — skippedsrc/types.test.ts — no chain — skippedsrc/router/linear-router/router.test.ts — no chain — skippedsrc/router/pattern-router/router.test.ts — no chain — skippedsrc/router/smart-router/router.test.ts — no chain — skippedsrc/router/trie-router/router.test.ts — no chain — skippedsrc/middleware/basic-auth/index.test.ts — reached — these runbasic-auth/index.test.tsruntime-tests/fastly/index.test.ts — reached — these runfastly/index.test.tsruntime-tests/node/index.test.ts — reached — these runnode/index.test.tsruntime-tests/lambda/index.test.ts — reached — these runlambda/index.test.tsruntime-tests/lambda-edge/index.test.ts — reached — these runlambda-edge/index.test.tsruntime-tests/bun/index.test.tsx — reached — these runbun/index.test.tsxruntime-tests/deno/middleware.test.tsx — reached — these rundeno/middleware.test.tsxsrc/middleware/basic-auth/index.tsbasicAuth
97.9%
of the suite ruled out
4,086 of 4,172 tests never run
38 / 11
methods / files that reach the change
bearerAuth among them
< 1s
per answer
all five calls, 0.16–0.80s

Five questions about one change, measured against hono — 373 source files, 137 test files. Every timing is that run's own. With 121 unresolved calls inside the impacted set, the selected tests remain a lower bound.

Explore AxiomCode Graph features

01 · UNDERSTAND HOW IT WORKS

Ask how the code works. Get the answer from the code.

Ask a question and the graph finds where the answer lives, then traces the flow through it, so your agent explains the real path instead of guessing from file names.

exploring a new codebase: up to 50% fewer tool calls than an agent searching alone

$ axiomcode context "how does StaticCanvas draw elements"
 
where the work is (nearest first):
hop 0 components/canvases/StaticCanvas.tsx -> StaticCanvas
hop 0 element/src/renderElement.ts -> drawElementOnCanvas
hop 2 renderer/staticScene.ts -> _renderStaticScene
 
$ axiomcode path StaticCanvas renderElement
StaticCanvas → renderElement: nearest at 5 hop(s)
3 call(s) + 2 containment hop(s) (a callback it defines, then calls from it)
verified: every printed hop is an edge in the graph

HOW AN ELEMENT GETS ON SCREEN

  1. StaticCanvasStaticCanvas.tsx:33

    The canvas component. It defines an effect that runs after each render.

  2. useEffect callbackStaticCanvas.tsx:44

    After each render, asks for a repaint.

  3. renderStaticScenestaticScene.ts:535

    Holds repaints to one per animation frame.

  4. _renderStaticScenestaticScene.ts:274

    Sets up the canvas, then loops over the elements in view.

  5. forEach callbackstaticScene.ts:398

    Runs once for each visible element.

  6. renderElementrenderElement.ts:967

    Draws one element with its opacity and offset.

Test selection, measured.

Bugs with all triggering tests selected

Test suite selected versus bugs with all triggering tests selectedEight test-selection methods and references. The horizontal axis is the share of the test suite selected, from 0 to 100 percent; farther left selects fewer tests. The vertical axis is the share of bugs for which every triggering test was included, from 0 to 100 percent. AxiomCode selects 52.2 percent of the suite and includes every triggering test for 94.9 percent of bugs. Diamond markers are reference points. Focus or select a point to inspect its name and values. The dynamic reference is observed by running the suite, rather than a competing static selector.AxiomCode: 52.2% of the test suite selected; all triggering tests included for 94.9% of bugs.d4j-relevant: 47.6% of the test suite selected; all triggering tests included for 100% of bugs.all-tests: 100% of the test suite selected; all triggering tests included for 100% of bugs.GitNexus: 27.4% of the test suite selected; all triggering tests included for 61.5% of bugs.CodeGraph: 21.2% of the test suite selected; all triggering tests included for 52.3% of bugs.Graphify: 17% of the test suite selected; all triggering tests included for 48.7% of bugs.Code-Review-Graph: 5.4% of the test suite selected; all triggering tests included for 21.9% of bugs.String-Search: 2.8% of the test suite selected; all triggering tests included for 46.8% of bugs.

Benchmark

Measured on
real bugs.

On 748 held-out Defects4J bugs, AxiomCode included every triggering test for 94.9% of bugs while selecting a median of 0.98× as many tests as Defects4J’s run.

Explore the results, the method, and what a formally grounded code graph makes possible.

Read release article

Born in a Harvard CS lab

A graph is the beginning.Verification goes deeper.

AxiomEngine builds on the code graph for deeper formal verification.

AxiomCode Graph supplies structured code context to AxiomEngine for deeper formal verification. The code graph feeds five connected analysis layers. The flow repeats every two seconds.
AxiomCode GraphStructured code contextAxiomEngineAI-native formal verification

CODE VERIFICATION IN PRACTICE

  • Spring
  • Keycloak
  • Kubernetes
  • OpenJDK