TGIS v0
How it works
TGIS answers questions about a city by finding who holds the data, fetching what it can reach while you wait, and computing over it. Every figure in the answer carries its source. Data it cannot reach is named, with the institution that holds it.
This is v0, a working prototype. Most of its sources cover the whole world; city-level source discovery was seeded from Addis Ababa, which is where the two real questions below come from. Each is followed from the moment it was typed to the answer on screen.
The flow
A dashboard shows a number and keeps quiet about what is underneath it. TGIS shows the number, what it stands on, and what it could not find.
Every figure carries its source, publisher, date, place and kind of evidence. An official count and a model's estimate are different claims, even with the same digits.
When two sources disagree, both appear, each labelled, with a line on why. Nothing is averaged away. The planner decides which to trust.
What it searched for, called, received and failed to reach is part of the answer, not hidden machinery.
The rule
Never fill a gap with a plausible number. A planner who knows the data is missing is better off than one acting on something invented. A run that ends with “I could not get this, here is who has it” is a successful run.
Two example runs
Two real runs from the system's log. One wants a single figure. The other needs nine datasets combined. The code that answers them is the same, with no script and no fixed sequence. The agent decides each next step from what came back.
What's the population of Addis Ababa?
15 calls · 6 misses · 110 s
look up
fetch
compute
answer
Where should the next bus corridor go?
23 calls · 3 misses · 320 s
look up
fetch
compute
answer
Example 1: the population of Addis Ababa
15 tool calls, 110 seconds, six misses, three figures.
Asked on 8 October 2026
“What's the population of Addis Ababa?”
Find the place
the registry“Addis Ababa” resolves to a boundary from a table of 640 administrative units. No city is named anywhere in the code. The path that answers Addis is the path that would answer Jakarta.
Find sources
the registryThe question becomes a concept, population count. The registry returns up to eight sources that can be reached and eight that cannot, each with what earlier runs learned about it.
Try the official figure
six missesOCHA’s humanitarian API refused the request twice with 403 Forbidden, although it carried a valid app identifier. The government table underneath it had no single row for the city, and then asked which of its files to read. Kontur asked the same. geoBoundaries has no way in at all.
Fetch three other sources
three fetchesThe agent chose the 2022 admin-1 table from the government source, Kontur’s boundary file, and the WorldPop 2026 grid. Each fetch clips to the city and records where it came from.
Compute
the workspaceOne step reads the Addis Ababa row. Another sums the grid inside the city outline and notes that at 1 km resolution only 60% of the outline fell inside measurable cells.
Present figures, record the disagreement
the agentThe agent picks which figures matter and labels them. The numbers come from code, by reference. The 22% gap between the official and the WorldPop figure is recorded in the registry, where later runs can see it.
Gap
The census itself (1984, 1994, 2007) is held by the Ethiopian Statistical Service and supplied only on request. So no count newer or more authoritative than the 2007 base exists in open form, and the answer says so.
Example 2: a bus corridor
The question v0 was built for. 23 tool calls, 320 seconds, nine sources, fourteen figures.
Asked on 21 September 2026
“Where should the next bus corridor go in Addis Ababa, given where people live and travel, and whether those passengers face heat and poor air quality?”
The agent split the question into four, searched the registry once for each, and fetched every reachable source in parallel. Three fetches came back asking which file or layer to read; the agent answered and they went through. Then four rounds of analysis in the workspace: cut the city into its ten subcities, rank them, draw a candidate corridor, and measure heat and air along it.
Findings
Kolfe Keranio has the largest population of any subcity and the worst ratio of residents to existing stops. The recommendation: a west–centre corridor from Kolfe Keranio to the city centre, along the Ring Road and Churchill and Ras Mekonnen Avenues.
Residents per existing bus or minibus stop
Stops from four timetable feeds, not deduplicated across them, so a ceiling on distinct kerbside locations. Population from WorldPop 2025, 100 m grid.
582,312
people within 500 m of the candidate corridor
677
existing stops inside the same 500 m
36.6 °C
mean ground surface temperature along it, 0.3 °C above the city
29.3 µg/m³
PM2.5 along it, against 26.8 citywide; about six times the WHO guideline
Disagreement
Kolfe Keranio’s population: 819,428 from WorldPop’s grid, 660,461 from Kontur’s blend. Both are models; they differ by 24%. The ranking holds under either, and the answer said the gap matters to anyone budgeting per head.
Gaps
No household travel survey, no ridership for the light rail or the city buses, no official traffic counts or road hierarchy. All are held on request. No reachable source for NO2 either. So “where people travel” rests on where stops already are, and the answer calls itself a starting hypothesis, not an alignment.
Figure provenance
Every number in an answer is a reference to something an operation produced. The model chooses which figures matter and how to label them. It cannot type a number in.
A number that appears in the answer’s text with no figure behind it is marked unsourced: marked, never removed, because what the run said is the evidence. A person has reviewed 1 of the 100 sources so far, so nearly every figure today says Provisional. That changes as sources are reviewed.
Misses and gaps
A tool that cannot answer returns a miss instead of failing, and the miss is information. The two runs above hit all three kinds.
Ambiguous request
Kontur publishes three files of the same format.
The fetch stops and lists them rather than taking the first. Taking the first once answered a roads question with 2,586 points and perfect-looking provenance.
The agent picks the file it needs and asks again.
Provider refused
OCHA's HAPI answered 403 Forbidden, twice.
The request carried a valid app identifier, and the identical request succeeds today; the cause was on HAPI's side and is not established. The miss is recorded, so the registry learns the source failed that day rather than that it is healthy.
The agent read the same official figure from the table HAPI is built on, and said so in the answer.
No access route
Ethiopia's census is supplied only on request.
The registry holds it anyway, as a row with no way in and a named holder: the Ethiopian Statistical Service.
It becomes a gap in the answer, with who to ask and how.
Gaps collect in a rail beside the conversation and build up across the whole chat, because they belong to the city and its data rather than to one answer. Each one names who holds the data and how to reach them, in words when no working link exists. A dead link is worse than none.
A gap costs the registry nothing extra. A source nobody can reach is a row like any other, with its way in left empty. The lookup that finds what is reachable finds who holds the rest. Today the registry carries 34 researched gaps like these.
Gaps (5)
Ethiopian population and housing census
Held by Ethiopian Statistical Service
Addis Ababa household travel survey
Held by Addis Ababa City Transport Bureau
Light rail ridership and operations
Held by Ethiopian Railways Corporation
Functional road classification
Held by Addis Ababa City Roads Authority (AACRA)
Traffic counts and screenline surveys
Held by Addis Ababa City Roads Authority (AACRA)
Coverage
The registry right now. It grows every time a run uses a new source.
137
sources in the registry
67
that TGIS can fetch from
40
gaps with a named holder
127
questions answered so far
Every concept, connector and source, with what each one reaches, is on the registry. Why it is shaped that way is on the model.
Scope of v0
v0 exists to find out whether provenance, disagreement and the trace hold up when a working planner uses them. Nearly everything left out was cut on purpose, so testing with users tests the idea and not its edges.
- One agent with 8 tools and a cap of 20 steps
- Maps, grids and tables; no documents yet
- 58 global and 16 national sources answer for any place; city-level discovery was seeded from Addis Ababa
- A workspace that lasts one chat
- Every figure provisional until people review the sources
- A plain interface. The work went into the registry and the provenance
- An orchestrator over specialist experts for statistical, geospatial and documentary evidence
- A fusion step that aligns them, and a reconciliation step that surfaces disagreement
- Many countries and modes, for the transport data ecosystem as a whole
- Described at tgis.ai/concept
If the three properties fail in front of a real planner asking a real question, that is a finding, and it arrives before an architecture is built around them. Where it goes next is on up next.