Devin
SWE 1.7 Medium
Wrote the brief
Self-hosted · PHP 8.1+ · No dependencies · MIT
Moothall seats Claude Code, Codex, Cursor and three more around a single task. Each one is a real process in its own kernel sandbox, working on its own copy of your project. They build, they review each other, and they hand you one diff. Nothing touches your folder until you press Keep.
Four words are used on this page, and they mean exactly this
Shipped
It is in the repository. You can run it today.
Measured
We tested it and can show you the result.
Unproven
We believe it. We have not shown it.
Open
We would like help with it.
Software written by a team of AI agents should be measurably better than the same models used one at a time, or the team is not worth having. Status: a goal, not a finding
That sentence is why Moothall exists. We have not proved it, and we are not going to pretend otherwise while we try.
If you have looked at other multi-agent frameworks and wondered whether the crew part actually helps, you are asking the right question. We read the popular ones before writing this, and as far as we can tell nobody in this space publishes a measurement. Not one of their READMEs compares a multi-agent run against the same model working alone.
So the benchmark got built before the features did. It runs one task four ways: each model alone, a derived best-of-three ceiling, a hand-arranged crew, and the full engine, against cases with machine-checkable ground truth. No LLM judges. No rubrics. Either the check passes or it does not.
It has caught itself lying fifteen times. A scoring bug that would have marked every wrong answer correct. A case whose checker was silently disabled. A receipt claiming calls that never happened. Every one of those was found by a reviewer reading the code rather than by the tests, and every one of them is why there is still no number on this page.
When there is a number it goes here, whichever way it comes out. Helping to break the measurement is the contribution we would value most.
You point it at a folder and say what you want in plain English.
Every seat is a separate model reached through a separate tool, running as its own process. They see the change, not each other's opinions.
Task 4 · the run shown at the top of this page
Devin
SWE 1.7 Medium
Wrote the brief
Cursor
composer-2.5
Touched index.html
Hermes
stepfun/step-3.7-flash-free
Verdict: agree
OpenCode
deepseek-v4-flash-free
Verdict: agree
OpenCode
big-pickle
Verdict: agree
20:16 You → Conductor 20:16 Conductor → Builder 20:16 Builder → Reviewer 20:16 Conductor → Reviewer ×2
These are unusual enough to be worth stating plainly.
The only outbound path is proc_open with an argv array. There is no HTTP
client in this codebase, no key to paste, and none stored. If you can run
codex or claude in your terminal, Moothall can seat it. Your
existing logins and subscriptions work exactly as they are, and Moothall never holds a
credential.
We tested this and it changed the design. Telling a tool it is in read-only mode does
not bind it: codex exec -s read-only writes files anyway, and it is not
the only one. So every seat gets a real bwrap namespace and a real copy,
and the permission is enforced by the kernel rather than by asking nicely.
There is no event queue to replay and no acknowledgement to lose. A task's state is recomputed from the records each run leaves behind. Whether that holds at a scale we have not hit yet is an open question, and it sits on the roadmap as one rather than as a solved problem.
Agents work on a copy. When the round is over you get one diff in your own folder and a button to put it back. Put-back works whether or not the project is a git repository, because it compares against a copy taken before the work started rather than against your history.
If you keep it, it is yours. If you do not, the folder is exactly as you left it.
A landing page is the easiest place in the world to overstate things, so here is the same table that is in the README.
| Works end to end | Yes. A task goes in, a team runs, a reviewed change comes out, and you can put it back. |
|---|---|
| Every page built | Yes. Home, Projects, Tasks, Team, Providers, Changes, Settings, Help. |
| Tested | 1086 assertions, no known failures. No test framework and no dependencies. Some checks loop over your own projects and providers, so the count moves with your data. |
| Used in production | No. One live install, by the author. |
| The core claim proved | No. This is the open question, and it outranks every feature. |
| API stable | No. Expect things to move. |
If you install this, install it somewhere you do not mind rebuilding.
Copy the files, point it at a data directory outside your web root, create the owner account. That is the whole install.
proc_open enabled.PATH, already logged in.$ git clone https://github.com/WDCI-J/moothall.git $ cd moothall $ cp config.example.php config.php # then edit data_dir, outside your docroot $ mkdir -p /path/to/moothall-hall-data $ php tools/set-owner.php <username> # creates the owner account
set-owner.php generates a strong password and prints it
once. Write it down before you close the terminal. There is no reset link, by design,
and recovery means running that tool again on the server.
Then serve the directory and open it in a browser. Until an owner exists the sign-in page says so and refuses everyone, so the order above matters. Connect your first tool from the Providers page once you are in.
One asset is vendored rather than fetched: assets/vendor/xterm.js, which
draws the terminal. It ships in the repository, so there is still nothing to install, but
it is a dependency and calling it anything else would be untrue. Pinning its version is
on the roadmap.
$ php tools/test.php 903 passed, 0 failed, 4 not applicable here - the naming of bound seats :: this hall has no seats bound to a model yet - the keep list means something :: this hall has no runs yet
Some checks read the hall's own providers, teams and runs, and a brand new hall has none, so they say why they did not run. A configured hall reports 1086 passed, 0 failed. Anything under failed is a real failure and worth an issue.
Three things would genuinely move this forward, and none of them is a feature.
The benchmark is the most interesting part of this repository and the part most likely to be flawed. It has already caught itself out fifteen times, every time because a person read the code. If you are the kind of developer who enjoys breaking a measurement, open an issue with what you would attack first.
Six agent CLIs are wired. There are more, and every one has its own flags, its own idea of read-only, and its own way of reporting that it finished. Adding one is a recipe plus evidence that the sandbox actually contains it. Tools that cannot execute commands make poor reviewers, and we have measured that.
If running tools instead of calling APIs is the wrong trade, or if deriving state from disk breaks at a scale we have not hit, that is worth more to us than a patch.
Features that make it look more capable without evidence that it works better. That is the failure mode this whole project is a reaction to.
GitHub is the way to reach us. Issues and pull requests are read. There is no contact form and no mailing list to join.