>_ groundit

// case study

Grounding Excalidraw's AI context

We scanned one of GitHub's most popular open-source projects - and found real gaps in the maintainers' own hand-written CLAUDE.md.

Run on the public excalidraw/excalidraw repository. Receipts: a transparent pull request, excalidraw/excalidraw#11528.

Why Excalidraw

We picked Excalidraw because anyone can check the result. It's a large, well-known TypeScript monorepo - a library, a web app, and several smaller packages - maintained by an experienced team that had already written its own CLAUDE.md. So if Groundit can do better than what they wrote by hand, that's a strong result - and you can read every line of our output in the open PR.

The starting point

Excalidraw's existing CLAUDE.md was 34 lines - the folders, the package names, a few yarn commands:

"Excalidraw is a monorepo with a clear separation between the core library and the application... Work in packages/* for editor features... Always run yarn test:update before committing."

A fine orientation doc. But notice what an AI assistant can't learn from it:

  • Where element state actually lives, or how to change it correctly.
  • How collaboration works at the library boundary.
  • Which conventions are load-bearing - the ones that, if ignored, produce code that runs but does not match how your team writes it.
  • Which packages even exist (the list was incomplete).

So the AI guesses - puts state in the wrong place, invents the API, opens the wrong file. The folder map isn't the problem; the missing architecture is.

What Groundit delivered

One deep scan produced a grounded memory tree - not a longer essay, a structured, evidence-backed one: a rewritten root file plus 9 area files (one per real subsystem), 6 scoped rule files, and the same knowledge cross-emitted as AGENTS.md, .cursorrules, and copilot-instructions.md.

The new root is short but dense. Where the original said "a monorepo with a clear separation," the new one says:

"The Scene class is the single authoritative store for the live element list, and scene.mutateElement() is the correct call site for changing an element and triggering a re-render. Geometry goes through @excalidraw/math, which uses branded coordinate types (GlobalPoint vs LocalPoint, Radians vs Degrees) for space safety... Collaboration is transport-agnostic at the library layer; excalidraw-app/ is the concrete host, wiring Socket.IO + Firebase with end-to-end AES-GCM encryption."

That is the difference between "the AI knows the folder names" and "the AI knows how the system works."

The proof it's grounded, not generated

Generic AI docs read plausibly and quietly invent things. Ours is the opposite - every claim is checked against the source.

242

facts verified against code

39

flagged unverified, called out

We don't hide what we can't prove.

It even caught real gaps in the maintainers' own doc:

Missed a published package

The root listed the core packages but omitted @excalidraw/fractional-indexing, a separately published package. Added.

Dropped an unverifiable claim

The prior doc pointed at vitest.config.mts as the alias source; no evidence supported it, so the citation was removed.

Corrected build-tooling detail

scripts/build-version.js stamps the commit date of HEAD, not wall-clock time; buildUtils.js aliases all @excalidraw/* packages to source, not a subset.

Finding what the experts' own file got wrong or left out is the whole point.

Honest about the bar

We don't hand over raw machine output. Nothing is auto-applied - every delivery is verified against your live source, by a human and an agent, before it reaches you. On this run that pass caught and fixed a handful of small inaccuracies in the deepest files before we opened the PR. That verification is the difference between context that's plausible and context you can rely on.

Before / after

Hand-written CLAUDE.md Groundit package
Files One CLAUDE.md 10-file CLAUDE.md tree + 6 rule files + 3 cross-format files
Root content 34 lines: folder map + commands Grounded architecture: state model, collab, build, usage surface
Architecture Implied Explicit, with file:line evidence
Verified facts 242 verified, 39 flagged unverified
Tools covered Claude Claude · Cursor · Copilot (cross-format)
Completeness Missed a published package Full package map, audited

// what this means for your repo

Your team wrote a CLAUDE.md (or let /init write one) and it's fine - and your AI still gets your architecture wrong, because "fine" is a folder map. Groundit delivers the grounded, verified, cross-format version - in days, with a money-back guarantee.

← Back to groundit