{"slug": "undox-approval-gated-data-broker-opt-outs-on-trueforge", "title": "Undox: approval-gated data-broker opt-outs on TrueForge", "summary": "A developer built Undox, a TrueForge agent that automates data-broker opt-outs with approval-gated submissions, for the WeMakeDevs × TrueFoundry × Qodo agent-harness hackathon. The system uses a custom HTTP MCP server and durable session state, and was reviewed with Qodo's agentic review tool.", "body_md": "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.\n\nFor 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.\n\n**Live demo:** [undox.vercel.app](https://undox.vercel.app/app?session=demo-test-2)\n\n**Repo:** [github.com/manasdutta04/undox](https://github.com/manasdutta04/undox)\n\n**Connect MCP (paste-ready):** [undox.vercel.app/app/connect](https://undox.vercel.app/app/connect)\n\nPrivacy products exist because this workflow is painful. An agent that “just submits” is worse than no agent. We needed a harness that:\n\nChat summaries don’t count. Tool JSON and a dashboard do.\n\nUndox is a TrueForge orchestrator wired to a custom HTTP MCP server (`undox-tools`\n\n):\n\n| TrueForge piece | How we use it |\n|---|---|\nMCP tools |\n`find_*` → `run_sandbox_prepare` → approval-gated `submit_opt_out` ; plus `get_session_state` / `get_exposure_dashboard`\n|\nSandbox + skills |\nBroker prepare scripts (`prepare_runtime: sandbox-script` ) |\nApproval |\nSubmit requires human Allow on the exact fields |\nSubagents |\n`dynamicSubAgents` + parallel tool fan-out fallback |\nSessions |\nFile store keyed by `session_id` — survives TrueForge restart |\nStatus UI |\nNext.js dashboard on Vercel; same store as MCP on Render |\n\nDemo brokers **PeopleFind** and **Clearbook** are fixtures (no live CAPTCHA on stage). Spokeo uses real URL mapping; submit stays **mock**.\n\nThe agent isn’t “one mock function + a chat UI.”\n\nKill TrueForge, restart, reopen the same `session_id`\n\n— statuses are still there. That’s the Double-O story: durable harness state, not a one-shot demo.\n\nJudges (and you) can walk the seeded session without cloning:\n\n**Exposure → Brokers → Approval → Connect**\n\nSession: `demo-test-2`\n\n`web/`\n\n)\n`/mcp`\n\n`undox-demo-public`\n\n(mock submits only)Render free tier sleeps — first hit after idle can take ~a minute. Ping `/healthz`\n\nbefore a live demo.\n\nEvery substantive change shipped as a PR with `/agentic_review`\n\n. 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`\n\n, `test`\n\n, and `prove:heart`\n\non every PR.\n\nThat mattered more than polish: the approval path and session store had to be trustworthy on camera.\n\nBuilt with TrueForge. Reviewed with Qodo. Submits stay mock on purpose.\n\nThanks for reading — if you try the Connect paste, tell me what broke first. That’s usually the most useful review.", "url": "https://wpnews.pro/news/undox-approval-gated-data-broker-opt-outs-on-trueforge", "canonical_source": "https://dev.to/manasdutta/undox-approval-gated-data-broker-opt-outs-on-trueforge-219m", "published_at": "2026-08-29 15:50:16+00:00", "updated_at": "2026-08-29 16:19:07.685882+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-products"], "entities": ["Undox", "TrueForge", "WeMakeDevs", "TrueFoundry", "Qodo", "MCP", "Vercel", "Render"], "alternates": {"html": "https://wpnews.pro/news/undox-approval-gated-data-broker-opt-outs-on-trueforge", "markdown": "https://wpnews.pro/news/undox-approval-gated-data-broker-opt-outs-on-trueforge.md", "text": "https://wpnews.pro/news/undox-approval-gated-data-broker-opt-outs-on-trueforge.txt", "jsonld": "https://wpnews.pro/news/undox-approval-gated-data-broker-opt-outs-on-trueforge.jsonld"}}