Inspiration
Every founder has heard "get feedback from a mentor panel" but a real panel review has genuine tension in it: the VC and the engineer don't want the same things, and a good moderator decides live who needs to speak next, not off a script. Most "AI feedback" tools flatten that into five chatbots each giving one polite opinion in parallel. We wanted the actual tension back an adversarial society of agents that argue, contradict each other, and decide their own next move.
What it does
You paste in a startup pitch. A core panel a VC, an Engineer, and a Customer reacts independently and in parallel, each skeptical in a genuinely different way (market size vs. technical feasibility vs. "does this beat what I already do"). From there, an Orchestrator agent takes over: after every turn it reads the live transcript and decides one of three things have specific personas rebut a specific point, summon a new domain specialist from an 18-role library (a HIPAA officer, a financial regulator, a manufacturing engineer whoever the actual debate warrants, not a pre-computed guess), or conclude the cross-examination. Personas can call real tools a calculator to verify a number, a pitch-search tool to quote you exactly instead of paraphrasing via Qwen's native function-calling. Once the Orchestrator concludes, a separate flagship-model Mediator reads the entire transcript and delivers a scored verdict: a 1–10 fundability score with a rationale for that exact number, the strongest point, the weakest point, the biggest risk, and one concrete next step. Every debate is persisted to Alibaba Cloud RDS and the full transcript exported as JSON to Alibaba Cloud OSS.
How I built it
We built it in phases so there was always something working: a frontend against a mocked API first, then a real Express backend wired to Qwen Cloud, then Alibaba Cloud RDS + OSS + ECS deployment. The early version used a hardcoded flow round 1 openings, round 2 rebuttals, a fixed cap on manually-added personas. It worked, but it wasn't actually agentic it was a script wearing agent clothing. We rebuilt the core: replaced the fixed round loop with a real Orchestrator agent that makes structured decisions (speak / summon / conclude) via its own Qwen call after every turn, added native function-calling so personas can verify claims instead of hallucinating them, and unified the debate's state into one shared DebateMemory object that every agent call reads from and writes to no model call carries memory of its own, all continuity is explicit. The RDS schema was migrated live, mid-hackathon, from fixed round1/round2 columns to a single JSONB turns array to match the new dynamic shape.
Challenges we ran into
Getting RDS reachable took a few real detours: Alibaba Cloud's whitelist treats a bare 127.0.0.1 entry as "block all external access" regardless of other entries in the list easy to miss. Later, redeploying after a container restart produced a wall of 502s even though docker compose ps showed everything "Up" turned out nginx had been running for 26 hours straight and cached the backend/frontend containers' old internal IPs via Docker's embedded DNS; only nginx itself needed a restart to re-resolve them. We also learned the flagship Mediator model can take 60–120 seconds per call, which meant designing real named loading states (not just a spinner) so the UI never looks broken while a debate is genuinely still in progress.
Accomplishments that we're proud of
Watching the Orchestrator autonomously summon four different specialists in one live debate a HIPAA officer, a practicing clinician, an incumbent competitor, and a payer/insurance analyst each with reasoning that explicitly built on what the previous specialist had just said, was the moment this stopped feeling like a demo and started feeling like a real agent society. Confirming a persona actually invoke the search_pitch tool mid-debate to quote the pitch verbatim, live against production, was a close second.
What we learned
That "shared memory" in most agentic systems isn't magic it's disciplined, explicit prompt construction on top of stateless model calls. Formalizing that into a single DebateMemory object made the system easier to reason about and made the difference between "orchestration" and "a script" much clearer in our own heads, not just on paper.
What's next for Adversary
Real tool access beyond arithmetic and text search e.g. a live market-comparables lookup for the VC persona. Letting the Mediator's verdict feed back into a second debate round for founders who want to argue back. And tightening the Orchestrator's summon judgment further so specialist calls stay sharp as debates get longer.
Built With
- alibaba-cloud
- alibaba-cloud-ecs
- alibaba-cloud-oss
- alibaba-cloud-rds
- dashscope
- docker
- docker-compose
- express.js
- nextjs
- nginx
- node.js
- openai-api
- postgresql
- qwen-cloud
- react
- server-sent-events
- tailwindcss
- typescript
- web-speech-api
Log in or sign up for Devpost to join the conversation.