Skip to content

bkan239/proxyform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProxyForm

You never fill a form again. Your agent does, and when it doesn't know something, it just texts you.

Live demo (event night)

These URLs are a cloudflared tunnel to the demo laptop and change if the tunnel restarts.

Every user gets a personal AI agent (living in WhatsApp) with a growing "LLM wiki" about them. Every company hosts a counterpart agent that knows its own forms and requirements. To apply anywhere, the user hands over one token — the two agents negotiate, fill the real PDF forms, and only interrupt the human for facts nobody has ever recorded.

Built at Beyond the Form (AI Hackathon, Student Project House, ETH Zürich, July 2026).

Slogan: Say it once. We'll say it everywhere.

Run it

# needs Python 3.10+ with OpenSSL (the LLM gateway requires TLS 1.3 —
# Apple's system python3.9/LibreSSL fails with "tlsv1 alert internal error")
python3.13 -m venv .venv && .venv/bin/pip install -r requirements.txt
cp .env.example .env        # paste the team LLM key (works without one too — mock mode)
./run.sh                    # generates the demo form PDF + starts http://localhost:8000

The landing page at / is a scroll-through presentation built from web/. The built assets live in static/landing/ and are committed so the demo runs without Node. To rebuild after editing the frontend:

cd web && npm install && npm run build

For local frontend development with hot reload (backend must be running on port 8000):

cd web && npm install && npm run dev   # → http://localhost:5173

Public URL (needed for the Twilio webhook, nice for phones):

cloudflared tunnel --url http://localhost:8000   # or: ./run.sh --tunnel

Demo runbook (90 seconds)

  1. / — scroll through the story, then register with a phone number → agent greets you, you get a token (PXF-XXXX).
  2. /phone (on the demo phone, or real WhatsApp if Twilio is configured) — paste the contents of demo/about_me.txt. The agent saves the facts to your wiki. The blob deliberately omits the move-in date and room preference.
  3. /apply — the WOKO page (its own standalone page, played by the "company"; not linked from the landing page). The scary 16-field housing form. Paste the token instead.
  4. /theater?s=… (opens automatically — put this on the projector) — the two agents negotiate live. When the personal agent hits the planted gap, the phone buzzes.
  5. Reply something like “Move in on 01.09.2026 — single room in Oerlikon!”
  6. Finale: the completed, filled PDF appears. 16 fields filled, 2 answers typed, 0 forms seen.

Real WhatsApp (Twilio sandbox)

  1. Twilio Console → Messaging → Try it out → WhatsApp sandbox.
  2. From the demo phone, send join <sandbox-code> to the sandbox number.
  3. Put TWILIO_ACCOUNT_SID / TWILIO_AUTH_TOKEN in .env, restart.
  4. Set the sandbox "When a message comes in" webhook to https://<your-tunnel>.trycloudflare.com/webhook/twilio (method POST).

Without Twilio credentials everything runs against the built-in WhatsApp simulator at /phone.

How it works

User ──WhatsApp/Twilio (or /phone sim)──► Personal Agent ◄──A2A loop──► Company Agent
                                              │                             │
                                        user wiki (facts,            company wiki (rules,
                                        grows every chat)            required fields, form)
                                                        └──► pypdf fills the real
                                                             AcroForm PDF (out/*.pdf)
  • app/agents.py — the agent-to-agent negotiation loop; pauses on unknown facts, asks the human on WhatsApp, writes the answer back into the wiki (asked once, known forever).
  • app/forms.py — fills any AcroForm PDF. Works on real IRS forms too: their field semantics are extracted from the embedded XFA captions (see PLAN.md).
  • app/llm.py — hackathon gateway (gpt-5.4-mini); with no key, a deterministic mock runs the same flow (also the on-stage emergency fallback).
  • static/theater.html — the live agent-conversation view (SSE), paced for an audience.

Demo data only — no real personal data (see house rules).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors