// 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 inpackages/*for editor features... Always runyarn test:updatebefore 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:
"TheSceneclass is the single authoritative store for the live element list, andscene.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.