william@fieldcompass:~$ graphify ./field-compass

Inside 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.

1,514working parts
3,664connections
204files
0circular tangles

$ graphify map --neighborhoods

16 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 filing cabinet

The database: every resource, plan and setting, plus the search over them.

$ trace kayla --question "where can I eat tonight?"

What happens when you ask Kayla

Kayla is the Field Compass guide. Every message runs through these seven steps, in this order, before you see an answer.

  1. [1/7]

    Spam guard

    OK Slows down anyone sending a flood of messages. Your internet address is scrambled before it is used.

    rateLimit() · hashIp()

  2. [2/7]

    Safety check

    OK Looks for signs someone is in danger. If it finds any, crisis lines come first.

    detectSafety() · safetyInstruction()

  3. [3/7]

    What do you need?

    OK Works out the kind of help: food, shelter, health care, transit and more.

    detectCategories()

  4. [4/7]

    Look it up for real

    OK Pulls actual listings from the database. Kayla answers from real records, not from memory.

    retrieveGrounding()

  5. [5/7]

    What's happening right now

    OK Live RTD bus arrivals and alerts, nearby scooters and e-bikes, and the latest Field Compass news.

    liveTransitContext() · liveMobilityContext() · projectNewsContext()

  6. [6/7]

    Think and write

    OK Picks the AI model and writes a reply using only what steps 4 and 5 found.

    resolveChatModel()

  7. [7/7]

    Double-check

    OK Removes any link that isn't real and tidies the wording. If the AI is down, you get a clear message instead of nonsense.

    stripUnknownUrls() · tidyReply() · classifyAiError()

✔ answer delivered — grounded, safety-checked, links verified

$ graphify path "Kayla" "Resource collector"

One brain, two jobs

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()│
                   └──────────────────┘

+ why it's good

One switch upgrades both. A better AI model makes Kayla smarter and the collector more accurate at the same time.

! why it matters

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

Who gets asked for help the most

The busiest part is tiny, but almost everything on screen leans on it.

    $ cat credits.txt

    Map built Oct 30, 2026 from the Field Compass source code with graphify, an open-source tool that turns code into a knowledge graph.

    Field Compass is free, has no ads and needs no account. Open Field Compass · About

    william@fieldcompass:~$