Inspiration
Colombia's infrastructure deficit — with special attention on housing and schools — has a strange second half: the money. Funding exists, and goes unclaimed. The sharpest case is public money: Decreto 413 de 2025 (housing) sat at 8.6% execution while calls worth COP $100,000+ million (≈ US$32M) opened and closed in weeks. Small municipalities rarely lose these plays on merit; they lose them on attention. Nobody in a small planning secretariat is watching SECOP II at 2 a.m., cross-checking a new call against the town's formulated projects, requirement by requirement, against a closing date — and public calls are only one lane: development banks and cooperation agencies run their own, each with its own clock.
We build C2X, a platform where municipal infrastructure projects — housing programs and educational infrastructure — are formulated as structured data. Working with municipalities we kept watching the same scene: the money existed, the project existed, and the two never met in time. RESOLVE automates the watch over funding sources — it makes the financial ends meet.
What it does
RESOLVE is a background agent for funding operations — it hunts the full financing cocktail, not just public money. Four levels:
- Watches. The watcher model is source-agnostic: any source that publishes funding opportunities can be watched — public entities, development banks, international cooperation — and users can propose new sources to add to the watch. v1 ships three live watchers on the public housing side, where the freeze is sharpest: SECOP II API, Minvivienda calls, MVCT circulars. Each round diffs against snapshots and declares the vintage of every reading.
- Matches & scores. A detected instrument is checked against the municipality's formulated projects requirement by requirement, every check with its quoted source: "You meet 7 of 9."
- Prepares the play. The missing requirements come out with an owner and calendar time; an unblock route compiles (steps, actor, ETA) with a code-computed viability verdict against the closing date. The financing cocktail mixes whatever actually closes the gap — public instruments, development banking, the municipality's own resources — and a deterministic cost/benefit scale can recommend against incorporating an instrument, including the verdict ADDS NO CAPITAL.
- Drafts & chases. The agent exports a ready-to-review filing package: a ZIP with the drafted application letter, the requirement checklist with its quoted evidence, the unblock route, and a machine-readable manifest — every missing piece marked
[MISSING — owner], never filled in with a plausible value, and a gate proves no digit in the package came from a language model. The alert reaches the planning secretary by WhatsApp — overnight, unprompted. Deadlines are tracked until they resolve.
The human reviews, decides, and files. RESOLVE never files, signs, or adjudicates — Colombian procurement law (Ley 80) stays human.
The pattern: Evidence-Gated Agency
A false "you meet this requirement" could cost a municipality a real filing — the worst bug this product can have. So the agent is built to make unreal optimism impossible:
- Models reason and write; code counts. No figure, verdict, or ranking is ever produced by the model.
- Four gates before any "meets": the requirement is evaluable → the supporting quote exists literally in the source → the value is real → a subtractive adversary tries to tear the match down.
- The honest zero is a first-class output. An instrument with no declared amount adds zero. An unverified requirement shows as pending, never as met. A downed source is shown as down — never stale data as fresh.
- Everything is epistemically typed —
{value, tag, source, vintage}: VALIDATED / ESTIMATED / HYPOTHESIS / TO INVESTIGATE, plus DEMO DATA where seeded. - 786 runtime assertions enforce the constitution, and caught hallucinations are counted on a visible scoreboard, not hidden.
- The UI ships a live engine room: trigger a watch round manually (assert-proven to be the same code path Cloud Scheduler runs) and watch the agents narrate their own work in first person — an actor rail lights up as each source reads, every line carries its real figures as data, and a gate proves no number in the narration exists outside that round's facts. Then run the precision panel (14 live Gemini calls), and the counterproof that loosens one gate — and watch the false positives reappear. That's the argument for the gates, running live.
How we built it
Google Cloud, end to end. Cloud Scheduler fires the rounds → Cloud Run services execute them → Pub/Sub decouples detection from qualification → Firestore holds snapshots, matches, routes, and a checkpoint per orchestration step, so a failed round resumes where it died instead of restarting. Gemini 3.5 Flash via the GenAI SDK does the reading — including multimodal reading of scanned official PDFs, where the extracted quote must still exist literally in the document: vision never lowers the evidence bar. Outbound WhatsApp ships through Twilio (sandbox, declared). The UI is served from Cloud Run: six tabs, English/Spanish, no chart libraries (inline SVG only), and every money figure in its original currency with a declared USD conversion — the exchange rate itself stored as a sourced, dated fact (Superintendencia Financiera de Colombia) that withholds the conversion when stale rather than defaulting.
Challenges we ran into
- Official sources are fragile. Formats drift and some portals have no stable API. We cache snapshots, always declare each reading's vintage, and show outages as outages.
- Making honesty testable. The suite runs on poisoned fixtures: a fabricated quote must be caught, an instrument without a declared amount must not sum, and the scale must be able to say no. One assert is non-negotiable: the agent must be able to argue against its own expansion.
- Refusing seductive math. The cost/benefit scale will not net money against days — different units. It presents both sides and declares why it refuses to merge them.
- Our own lock caught us. The repo carries an assert forbidding any reference to our frozen, separately-judged prior product. Mid-sprint it blocked our own video materials. We stripped the files and kept the assert.
- Provenance is where you read it. We first attributed Colombia's official exchange rate to Banco de la República; the certifying body is Superintendencia Financiera. The pipeline now records the certifier.
What we learned
Trust in public-sector AI is built by subtraction: every capability ships with the proof that it can refuse. "You meet 7 of 9" only persuades because the missing two arrive with owners and dates, not excuses — the honest zero turned out to be our most persuasive feature. And a constitution is only real if it's executable: 786 asserts did more for our architecture than any diagram.
What's next
v1 watches three public housing-side sources; the same watchers and the same gates extend to educational-infrastructure calls, SGR royalties, development-bank and cooperation windows, and departmental funds — new sources, identical evidence bar. After judging, RESOLVE becomes the institutional tier of C2X, piloted with structuring entities and planning secretariats. Inbound WhatsApp (v1 is outbound-only, by design) follows once parsing can meet the same evidence bar.
Prior work & data disclosure
Everything in this repository was built new during the submission period (Aug 18–31, 2026): watchers, matcher/qualifier, route compiler, cost/benefit scale, multimodal reader, orchestrator, filing-package exporter, UI, i18n and currency engines. RESOLVE inherits, and declares, prior work from C2X — our platform for formulating municipal infrastructure projects, today housing and educational infrastructure: its agent patterns and honesty framework, its design system, and its structured dataset of formulated projects. C2X is a separate product, separately submitted to XPRIZE Build with Gemini, and is not part of this entry. Demo projects are seeded from C2X data and labeled DEMO DATA in the UI; deficit figures are real (DANE, CNPV 2018).
Built With
- css3
- datos.gov.co
- gemini
- google-cloud
- google-cloud-firestore
- google-cloud-pub-sub
- google-cloud-run
- google-cloud-scheduler
- google-genai-sdk
- html5
- javascript
- node.js
- secop-ii-api
- svg
- twilio
Log in or sign up for Devpost to join the conversation.