Solo founders and small operators make big, irreversible calls alone. Expand into a new market or not. Kill the product line or keep bleeding on it. A real board of advisors would catch the bad ones, but real boards are expensive and slow, and most people running a 10-person company are never getting one.
Steven and I kept circling this problem, so when the Qwen hackathon came around we built FounderOS: an AI board of directors. You bring one decision, eight specialist agents argue about it, and you get a board memo back. The thing we cared about most, and the reason we didn't just build another chatbot wrapper, is that the disagreement survives into the memo. If the board didn't align, you can read who dissented and what would change their mind.
Live demo: https://founderos-zeta.vercel.app
Repo: https://github.com/VincentJulijanto/FounderOS
Video: https://youtu.be/X6x_u6IWHog
The board
It's a LangGraph state machine underneath. A Scout frames the options first. Market Intelligence pulls cited benchmarks. Four analysts (Trend, Finance, Growth, Capability) run in parallel with asyncio.gather. Then the Skeptic gets everyone's work and attacks the weakest assumption it can find, a debate engine detects the conflicts and runs rebuttal rounds, and the Chair writes the memo.
We'd both seen multi-agent demos where five agents produce one suspiciously smooth answer, which means somewhere in the pipeline the disagreement got averaged out. We wanted the opposite. Agents revise their positions when the counterargument is good, and if a conflict doesn't resolve within the round limit it ships in the memo as attributed dissent instead of disappearing.
Everything runs on Qwen through the DashScope API. We split by role: qwen-turbo does the fast work (Scout, the analysts, research, the memory index) and qwen-plus does the heavy reasoning (Skeptic, Chair, the debate itself). A full board run comes out to roughly two cents and about two minutes. The two cents part is what makes the product idea work at all. Nobody convenes a board casually at a dollar per question.
Memory, the boring way
Each company gets a markdown vault, basically Obsidian-style: a profile note, one note per decision, dissent and outcomes included. We assumed we'd need embeddings for retrieval and never did. qwen-turbo reads a small index (filenames, frontmatter, one-line summaries) and picks which notes matter for the current question. At the scale of one company's history this is easier to debug than a vector store and, as far as we can tell, more accurate. Also the whole memory is plain markdown, so you can open your board's brain in a text editor, which we did constantly while debugging.
The memory validation run was the best moment of the project for me. Cold company, one decision, then a second decision in a new session. The memo came back citing the first decision's risk assessment and adjusted its recommendation because of it. We had already written "the board remembers" on the landing page at that point, so it was a relief when it turned out to be true.
Benchmarking against one agent
Track 3 wants a measurable gain over a single-agent baseline. We ran the same three live decisions through our board and through a single qwen-plus call with an equivalent prompt, then counted. Raw outputs are committed in scripts/bench_results if you want to audit the counting.
| Dimension | Board | Bare LLM |
|---|---|---|
| Distinct risks identified | 9 | 4 |
| Attributed dissent | 7 | 3 |
| Options with explicit verdicts | 10 | 3 |
| Confidence calibration stated | 3/3 | 0/3 |
| Fabricated entities | 0 | invented border crossings and a nonexistent committee |
The baseline tied us on two dimensions we expected to win: naming missing inputs, and stating reversal conditions. A single well-prompted model is better than people give it credit for. Where the structure earns its cost is dissent, per-option verdicts, calibrated confidence, and not fabricating. The bare model invented a "Steering Committee" and some border crossings that don't exist. Ours cited nothing it couldn't source, because the research agent is explicitly forbidden from doing so and the Skeptic checks.
The demo question
For the video we asked the board: "Should we migrate our core inference backend from OpenAI to Qwen to cut costs?" We were building on Qwen for a Qwen hackathon, so either the board flatters the sponsor or it embarrasses us. Worth filming either way.
It did neither. Conditional, medium confidence. Unverified pricing, missing production observability, customer-trust risk from silent output regressions, recommend phased validation before any migration. The Skeptic forced two rounds of revisions on the other agents before the Chair would close. It's a strange feeling when your own product declines to tell you what you want to hear, but that was the whole point of building it.
Pointing it at ourselves
Late in the build, later than was responsible honestly, we reused the architecture on the product itself. A Feedback Council (Analyst, Skeptic, Chair) reads user feedback and produces a ranked brief. A Feature Delivery Loop takes an approved theme through a Senior SWE agent that writes a build spec and a QA agent that reviews it adversarially, bounced back on failure, capped at two rounds. It proposes specs. A human merges. It once refused to build anything because three feedback notes was "insufficient signal to represent the majority," which annoyed us for about ten seconds and then felt exactly right.
Bugs worth admitting
The debate engine kept truncating mid-argument for a while. The token ceiling was left over from an earlier, smaller design and nobody had updated it. Qwen also returned loosely typed values under pressure, "8/10" where a number should be, so there are Pydantic coercion validators in there now.
Early prompts let agents invent proper nouns. The fix was a blunt "never invent names of companies, people, or programs" rule, and then re-running the exact decision that triggered the fabrication to confirm it stopped.
And the one I keep retelling: our PDF export passed every test and produced blank pages. Tests were green because they checked that a file was produced, not what was in it. Someone opened the actual PDF and found nothing. House rule since then is to verify the real artifact, every time.
The Qwen side of the build was less eventful than expected, which is a compliment. DashScope speaks the OpenAI-compatible protocol so the provider layer is about 30 lines, the free per-model quota covered live validation and the benchmark runs, and for the deployment requirement the same Docker image now runs on an Alibaba Cloud ECS box in Singapore.
Next
Confidence should be capped by data provenance, because right now unsourced numbers can still underwrite a confident verdict. We want an outcome loop where the board grades its old recommendations against what actually happened. And Market Intelligence needs real web search instead of curated benchmarks. The board remembers now. It should learn next.
FounderOS, Track 3: Agent Society. Built by Vincent Julijanto and Steven Laksono. https://founderos-zeta.vercel.app
Top comments (3)
Really like that you preserved the disagreement instead of forcing consensus. In my experience, the best decisions usually come from challenging assumptions, not just getting a polished final answer.
What stood out to me isn’t that there are eight agents—it’s that disagreement is treated as a first-class output instead of something the system tries to smooth away.
In many decision-support systems, forcing early consensus can create an illusion of confidence. Preserving attributed dissent, confidence levels, and reversal conditions makes the final memo much more useful because it exposes uncertainty instead of hiding it.
One thing I’d be curious to measure is not just whether the board identifies more risks than a single model, but whether those additional risks actually improve decision quality over time. Your planned outcome loop seems like the right direction: the most valuable board is one that can compare past recommendations with real outcomes and recalibrate its own confidence accordingly.
I also liked the markdown memory approach. At the scale of one company’s decision history, inspectability and deterministic retrieval can be a stronger engineering trade-off than introducing embeddings simply because they’re expected. Sometimes the simplest memory model is the one that’s easiest to trust.
This is a great example of using multi-agent AI for structured decision-making instead of just generating longer responses. Preserving dissent and confidence levels makes the output far more useful than forcing artificial consensus. I'd be interested to see how it performs with real-world production data over time.