Ping your FileMaker solution — every reference echoes back.
One engine, two interfaces: an explorer for you, a queryable index for your AI.
The same engine builds a SQLite index designed for AI tools — with an instruction file (AGENTS.md) and a Claude Code skill that teach any assistant the schema, the query patterns, and the honesty rules. Install once (needs Python 3.10+ and pipx), ask from any project:
pipx install git+https://github.com/oogi-io/fm-ddr-analyzer fm-ddr install-skill # Claude Code: global skill
Then simply: "analyze the DDR on my desktop — which scripts write to CTC::email?" The first question builds the index once into a local cache (seconds, even for huge solutions). Every question after that — today, next week, from any project — answers instantly against the same index, with SQL-backed evidence and the caveats an honest analysis needs. Re-export the DDR when the solution changes, and the next question rebuilds automatically.
Click anything — see every reference grouped by what references it: scripts, layouts, relationships, value lists. Writes distinguishable from reads.
Full step text with block indentation, comments dimmed. Copy a line, a selection, or the whole script.
Full-depth caller/callee graph — PSoS and triggers marked, hover to trace lineage, drag to untangle, export PNG or Mermaid.
Full-text search across every calculation and script step — catches what structure can't, like ExecuteSQL strings.
Unused-field and orphan-script candidates, unresolved references, hotspots, biggest scripts — each list a CSV download.
Any script copies as a real FileMaker clipboard snippet — paste it straight into Script Workspace (one-time helper install).
Any entity exports as a tiny self-contained HTML — steps, chain, references — safe to Slack or mail without sharing the schema.
Put a full report on a shared drive and link colleagues to the exact script: report.html#e12345.
Why the index beats reading the raw XML: parse once (~26 s for a 9-file solution), then every question answers in milliseconds. Aggregations become possible — hotspots, orphan candidates, blast radius by kind — which raw scanning fundamentally can't do. And the resolution logic (table occurrences, cross-file references, ambiguity) is computed once by tested code instead of re-derived per question.
Where its model ends: the index deliberately extracts entities, references, calculations and script steps — not auto-enter/validation details, layout geometry, custom-menu internals, or import/export orders. Those answers are still in your DDR XML; for them, read it directly. And the index is a snapshot: change the solution, re-export, rebuild.
Static analysis can't see everything: field names inside ExecuteSQL strings, calculated script and layout names, and anything that happens outside the DDR (Data API, OData, users running scripts from menus). The full matrix is in COVERAGE.md. Ambiguous matches are flagged, and the AI instructions require a full-text check before anything is called "unused" — treat those lists as candidates to review, never as delete lists.
fmsonar.com — the app, no install. · GitHub — engine, CLI, docs, MIT.