DEV Community

Cover image for Undox: approval-gated data-broker opt-outs on TrueForge
Manas Dutta
Manas Dutta

Posted on AI-assisted

Undox: approval-gated data-broker opt-outs on TrueForge

People-search sites still republish names, addresses, phones, and dates of birth. Opting out is tedious, easy to mess up, and basically irreversible once you hit Submit.

For the WeMakeDevs × TrueFoundry × Qodo agent-harness hackathon, I built Undox — a TrueForge agent that does the annoying work carefully, then stops until a person allows the exact payload.

Live demo: undox.vercel.app

Repo: github.com/manasdutta04/undox

Connect MCP (paste-ready): undox.vercel.app/app/connect


The problem (in one breath)

Privacy products exist because this workflow is painful. An agent that “just submits” is worse than no agent. We needed a harness that:

  1. Finds broker listings
  2. Prepares opt-out forms in a sandbox
  3. Pauses on literal PII before anything leaves the machine

Chat summaries don’t count. Tool JSON and a dashboard do.


What Undox is

Undox is a TrueForge orchestrator wired to a custom HTTP MCP server (undox-tools):

TrueForge piece How we use it
MCP tools find_*run_sandbox_prepare → approval-gated submit_opt_out; plus get_session_state / get_exposure_dashboard
Sandbox + skills Broker prepare scripts (prepare_runtime: sandbox-script)
Approval Submit requires human Allow on the exact fields
Subagents dynamicSubAgents + parallel tool fan-out fallback
Sessions File store keyed by session_id — survives TrueForge restart
Status UI Next.js dashboard on Vercel; same store as MCP on Render

Demo brokers PeopleFind and Clearbook are fixtures (no live CAPTCHA on stage). Spokeo uses real URL mapping; submit stays mock.


How TrueForge fits (not a thin wrapper)

The agent isn’t “one mock function + a chat UI.”

  • TrueForge owns the loop, tools, and Allow gate.
  • MCP does the broker work and writes session state.
  • The public UI is evidence of that state — Exposure, Brokers, Approval, Architecture, Connect.

Kill TrueForge, restart, reopen the same session_id — statuses are still there. That’s the Double-O story: durable harness state, not a one-shot demo.

Judges (and you) can walk the seeded session without cloning:

Exposure → Brokers → Approval → Connect

Session: demo-test-2


Stack (all free-tier friendly)

  • TrueForge locally (+ Ollama for the agent)
  • Vercel for the neo-brutal product UI (web/)
  • Render for API, fixtures, and /mcp
  • Public demo Bearer on Connect: undox-demo-public (mock submits only)

Render free tier sleeps — first hit after idle can take ~a minute. Ping /healthz before a live demo.


How Qodo helped

Every substantive change shipped as a PR with /agentic_review. Qodo caught real issues — auth edges, stale UI after failed loads, CSS specificity bugs — and we fixed High/Medium before merge. CI also runs typecheck, test, and prove:heart on every PR.

That mattered more than polish: the approval path and session store had to be trustworthy on camera.


What I learned

  1. Fixture-first demos win. Live CAPTCHAs kill stage takes. Fixtures keep find → prepare → allow reliable.
  2. Chat lies; tools don’t. Point judges at the dashboard and tool JSON.
  3. Approval on literal PII is the product. If Allow isn’t on the exact fields, you don’t have a safety story.
  4. Split hosting is fine. UI on Vercel, MCP on Render, TrueForge local — Connect JSON ties it together.
  5. Review bots earn their keep when you actually fix what they flag before squash-merge.

Try it

  1. Open the live demo
  2. Walk Exposure → Brokers → Approval → Connect
  3. Paste the MCP config into TrueForge as-is
  4. Clone the repo if you want the offline prove scripts

Built with TrueForge. Reviewed with Qodo. Submits stay mock on purpose.

Thanks for reading — if you try the Connect paste, tell me what broke first. That’s usually the most useful review.

Top comments (0)