william@fieldcompass:~$ graphify ./field-compass
We mapped every working part of Field Compass and drew a line each time one part asks another for help. This is what the app looks like from the inside.
$ graphify map --neighborhoods
Parts that work together a lot form a neighborhood. Bigger circle = more parts. Thicker line = more traffic. Tap any circle to see what it does and who it talks to.
The database: every resource, plan and setting, plus the search over them.
$ trace kayla --question "where can I eat tonight?"
Kayla is the Field Compass guide. Every message runs through these seven steps, in this order, before you see an answer.
rateLimit() · hashIp()
detectSafety() · safetyInstruction()
detectCategories()
retrieveGrounding()
liveTransitContext() · liveMobilityContext() · projectNewsContext()
resolveChatModel()
stripUnknownUrls() · tidyReply() · classifyAiError()
✔ answer delivered — grounded, safety-checked, links verified
$ graphify path "Kayla" "Resource collector"
The map turned up a connection that's easy to miss. The part that picks Kayla's AI model is also used by the resource collector, the robot that reads nonprofit websites and pulls out phone numbers and details.
┌──────────────────┐ ┌──────────────────────┐ │ KAYLA │ │ RESOURCE COLLECTOR │ │ talks to people │ │ gathers listings │ └────────┬─────────┘ └──────────┬───────────┘ │ │ └─────► ┌──────────────────┐ ◄──────┘ │ MODEL PICKER │ │resolveChatModel()│ └──────────────────┘
One switch upgrades both. A better AI model makes Kayla smarter and the collector more accurate at the same time.
The robot that gathers the listings and the guide that explains them think the same way, so the facts going in match the answers coming out.
$ graphify top --by connections
The busiest part is tiny, but almost everything on screen leans on it.
$ cat credits.txt
william@fieldcompass:~$