Overzicht
team-solve is een multi-agent harness voor programmeerproblemen, geïmplementeerd als een Memdoor-workflow. Het systeem is gebaseerd op de GVS5H-methode en maakt gebruik van Qwen3.8-27B modellen. Het unieke aspect is dat agents communiceren via bestanden op de schijf en telkens vanuit een schone context starten.
Architectuur en Workflow
Het systeem hanteert een strikt proces bestaande uit verschillende rollen:
- Plan: Stelt een plan op basis van de taakbeschrijving op.
- Ideate (A & B): Genereren twee verschillende algoritmische benaderingen.
- Solve: Kiest de beste benadering en schrijft de code (
solution.py).
- Test: Een shell-script voert de code uit tegen samples.
- Review: Analyseert testresultaten en geeft reparatie-instructies.
- Repair: Herstelt de code indien nodig.
- Verify: Een finale controle op correctheid.
Prestaties en Kosten
Bij tests op LiveCodeBench Hard behaalde team-solve een gemiddelde score van 9,8/10, wat superieur is aan zowel het originele harness (9,6) als het standalone Fable 5 model (8,0). De totale kosten voor 50 runs bedroegen ongeveer $38,77 via OpenRouter, met een gemiddelde model-tijd van 40 minuten per run.
Technische Implementatie
Het project maakt gebruik van OpenRouter voor modeltoegang (o.a. via Modal en Wafer). Er zijn specifieke optimalisaties doorgevoerd in de Memdoor-workflow om exact dezelfde vragen te stellen als in de referentie-implementaties, inclusief aanpassingen in topp, topk en de afhandeling van afgekapte replies.
team-solve: Multi-agent Harness voor Programmeerproblemen
Deze methode is gebaseerd op GVS5H (Lee, 2026: vijf Qwen3.8-27B modellen matchen Fable 5 op LiveCodeBench Hard). De implementatie is herbouwd met de exacte prompts van de auteurs op Qwen3.8-27B.
Prestaties
Bij het testen op de eerste tien LiveCodeBench Hard-problemen over vijf passes, behaalde de loop een gemiddelde score van 9,8 van de 10. Ter vergelijking: het oorspronkelijke harness van de auteurs scoorde 9,6 en Fable 5 alleen scoorde 8,0.
De bestanden zijn door de coder zelf geschreven op basis van een beschrijving van de methode (25-10-2026) en zijn niet handmatig geschreven.
Vergelijkingstabel (Vijf passes op tien problemen)
| Pass | Memdoor workflow | Harness van auteurs (27B) | Fable 5 alleen |
| 1 | 10 / 10 | 9 | 7 |
| 2 | 10 / 10 | 10 | 8 |
| 3 | 10 / 10 | 10 | 10 |
| 4 | 10 / 10 | 9 | 8 |
| 5 | 9 / 10 | 10 | 7 |
| Gemiddelde | 9,8 | 9,6 | 8,0 |
De kolommen van de auteurs zijn gebaseerd op de regraded resultaten uit hun repository (q38multiagentpN, fable5singlepN).
Technische Details en Kosten
Alle 50 runs (tien problemen, vijf passes) zijn opgeslagen in bench/results/parity-5pass/. Dit omvat elk request en reply, het programma, de volledige output van de grader, de kosten per call en de gebruikte host.
- Resultaten: 49 van de 50 problemen zijn opgelost.
- Kosten: De 50 runs kostten $35,79 (15,3M output tokens). Inclusief 16 pogingen die werden afgebroken door een timeout of stopgezet voor een fix, bedroegen de kosten $38,77.
- Tijd: Een run nam gemiddeld 40 minuten aan model-tijd in beslag (de langste duurde 4 uur).
- Omgeving: Alles is uitgevoerd via OpenRouter, niet op een lokale machine.
- Opmerking over contaminatie: De wedstrijden dateren van 29 maart tot 6 april 2025; het is mogelijk dat het model deze in de trainingsset heeft gezien.
Modelconfiguratie
De configuratie is identiek aan die van de auteurs:
- Temperatuur: Plan (0,3), Ideation (0,4), Manager en Worker (0,2).
- Parameters:
topp 0,95 en topk 20 (gebaseerd op de vLLM-configuratie van het model).
- Cap: 128K reply cap.
- Rondes: Maximaal 10 rondes.
- Specifieke regels: Een afgebroken worker wordt samengevat; een reply zonder tekst wordt beantwoord door de reasoning van het model.
Host-informatie
In tegenstelling tot de auteurs (die eigen vLLM in FP8 gebruikten), maakte dit project gebruik van OpenRouter. De calls werden in de volgende volgorde aangevraagd: Modal, CoreWeave, Parasail, Wafer. Wanneer Modal vertraagde tot 14 tokens/s, werd overgeschakeld naar FP8-hosts (Wafer, Parasail, CoreWeave). In totaal werden 203 calls bediend door Modal, 27 door CoreWeave en 115 door Wafer.
Analyse van het Proces
Benodigde Aanpassingen
Er was een mismatch in de probleemtekst. De eerste versie schreef zijn eigen taakbestand, maar de 27B-model plande slechter vanuit dit bestand dan vanuit de exacte LiveCodeBench-tekst. Vier wijzigingen in Memdoor maakten het mogelijk om exact dezelfde vragen te stellen als het harness van de auteurs:
- Een taak antwoordt met de reasoning van het model wanneer er geen tekst is geschreven.
- Toevoeging van
topp/topk op een modellijn.
mark_cutoff voor replies die door de cap zijn afgekapt.
- De mogelijkheid voor een call om op een eigen klok van vier uur te draaien.
Waar het Systeem Faalde
Er werden twee gaten in de loop van de auteurs geïdentificeerd:
- Pass 5, abc399_e: Het programma in ronde 1 was correct, maar de manager bedacht een tegenvoorbeeld met een foutief verwacht antwoord. Het team herschreef het programma, dat vervolgens de samples passeerde, maar niet het specifieke edge-case scenario.
- Pass 4, arc196c en arc196d: Een programma dat alle hidden tests passeerde, werd overschreven door een latere ronde omdat de manager niet aangaf dat het voltooid was. Beide kregen uiteindelijk voor het einde van de loop weer een correct programma terug, maar tegen hogere kosten ($3,44 en $4,24).
Beide problemen zijn oplosbaar zonder de methode te wijzigen (bijv. door tegenvoorbeelden van de manager te controleren met brute force op kleine inputs, of door het laatste programma te behouden dat de samples passeerde).
Installatie en Gebruik
Setup
curl -fsSL https://memdoor.ai/install.sh | bash
memdoor connect openrouter # of anthropic, openai, gemini, chatgpt
# Voor lokale modellen: memdoor connect local # Ollama, llama.cpp, vLLM, LM Studio
git clone --depth 1 https://github.com/guregodevo/memdoor
mkdir -p ~/.memdoor/workflows
cp -r memdoor/examples/workflows/team-solve ~/.memdoor/workflows/
Een probleem uitvoeren
mkdir my-problem && cd my-problem
cp -r ../memdoor/examples/workflows/team-solve/sample/* . # task.md + tests/1.in … 5.out
memdoor workflow run team-solve --wait # voortgang op stderr, exit 0 bij succes
Voor eigen problemen: vervang task.md en voeg gepaarde tests/N.in en tests/N.out bestanden toe.
Het programma wordt opgeslagen als solution.py, gelezen via stdin en vergeleken met de samples via diff. Er is Python 3 en bash vereist.
Werking van de Workflow
De workflow volgt dit pad: plan → (ideate-a & ideate-b) → solve → test → review → repair → verify
Rollen en Verantwoordelijkheden
| Stap | Type | Leest | Schrijft |
| plan | agent | task.md | plan.md en een notes.md ledger |
| ideate-a/b | agent | task.md, plan.md, notes.md | Een voorstel in notes.md (A: direct bewijsbaar algoritme, B: andere techniek) |
| solve | agent | beide voorstellen | De beslissing in notes.md, solution.py |
| test | command | tests/ | test-output.log, test-status.txt |
| review | agent | test output | review.md, reparatie-instructies in notes.md |
| repair | agent | instructies van manager | een herstelde solution.py (of niets als samples passeren) |
| verify | command | tests/ | final-test-output.log (nonzero exit faalt de run) |
Elke agent krijgt de instructie: "fresh context, read the files, do not rely on chat". Er is één reparatieronde en geen menselijke tussenkomst.
Verificatie Stap (YAML)
De laatste stap is de definitieve uitspraak:
type: command
requires:
- table_pattern: repair
command: |
check=.memdoor/workflows/team-solve/check-samples.sh
[ -f "$check" ] || check="$HOME/.memdoor/workflows/team-solve/check-samples.sh"
bash "$check" > final-test-output.log 2>&1
result=$?
cat final-test-output.log
exit "$result"
Bevindingen uit de Eerste Run
Het voorbeeld: Tel de substrings van een string over {a, b, c} met gelijke aantallen van elke letter, tot 200.000 tekens.
- Resultaat: 8 van de 8 stappen voltooid, 5 van de 5 samples geslaagd.
- Oplossing: De solver koos de prefix-state methode van ideator A, $O(N)$ met een dictionary van $(a−b, a−c)$ paren. Brute force tests op 300 random strings bevestigden de correctheid.
- Incidenten:
- Een provider verbrak de stream mid-answer. Omdat
maxretries op 0 stond, stierf de run. Dit is nu gewijzigd naar maxretries: 1.
- De oorspronkelijke prompts van de coder noemden specifieke methoden (bijv. "streaming prefix-state count"), wat andere problemen in de verkeerde richting zou sturen. De prompts zijn nu algemener.
- Een initiële fout ("no agent named coder") werd veroorzaakt doordat runs hun agent alleen in de eigen workspace zochten; dit is opgelost in versie v1.692.0.
team-solve: Multi-agent Harness voor Programmeerproblemen
Deze methode is gebaseerd op GVS5H (Lee, 2026: vijf Qwen3.8-27B modellen matchen Fable 5 op LiveCodeBench Hard). De implementatie is herbouwd met de exacte prompts van de auteurs op Qwen3.8-27B.
Prestaties
Bij het testen op de eerste tien LiveCodeBench Hard-problemen over vijf passes, behaalde de loop een gemiddelde score van 9,8 van de 10. Ter vergelijking: het oorspronkelijke harness van de auteurs scoorde 9,6 en Fable 5 alleen scoorde 8,0.
De bestanden zijn door de coder zelf geschreven op basis van een beschrijving van de methode (25-10-2026) en zijn niet handmatig geschreven.
Vergelijkingstabel (Vijf passes op tien problemen)
| Pass | Memdoor workflow | Harness van auteurs (27B) | Fable 5 alleen |
| 1 | 10 / 10 | 9 | 7 |
| 2 | 10 / 10 | 10 | 8 |
| 3 | 10 / 10 | 10 | 10 |
| 4 | 10 / 10 | 9 | 8 |
| 5 | 9 / 10 | 10 | 7 |
| Gemiddelde | 9,8 | 9,6 | 8,0 |
De kolommen van de auteurs zijn gebaseerd op de regraded resultaten uit hun repository (q38multiagentpN, fable5singlepN).
Technische Details en Kosten
Alle 50 runs (tien problemen, vijf passes) zijn opgeslagen in bench/results/parity-5pass/. Dit omvat elk request en reply, het programma, de volledige output van de grader, de kosten per call en de gebruikte host.
- Resultaten: 49 van de 50 problemen zijn opgelost.
- Kosten: De 50 runs kostten $35,79 (15,3M output tokens). Inclusief 16 pogingen die werden afgebroken door een timeout of stopgezet voor een fix, bedroegen de kosten $38,77.
- Tijd: Een run nam gemiddeld 40 minuten aan model-tijd in beslag (de langste duurde 4 uur).
- Omgeving: Alles is uitgevoerd via OpenRouter, niet op een lokale machine.
- Opmerking over contaminatie: De wedstrijden dateren van 29 maart tot 6 april 2025; het is mogelijk dat het model deze in de trainingsset heeft gezien.
Modelconfiguratie
De configuratie is identiek aan die van de auteurs:
- Temperatuur: Plan (0,3), Ideation (0,4), Manager en Worker (0,2).
- Parameters:
topp 0,95 en topk 20 (gebaseerd op de vLLM-configuratie van het model).
- Cap: 128K reply cap.
- Rondes: Maximaal 10 rondes.
- Specifieke regels: Een afgebroken worker wordt samengevat; een reply zonder tekst wordt beantwoord door de reasoning van het model.
Host-informatie
In tegenstelling tot de auteurs (die eigen vLLM in FP8 gebruikten), maakte dit project gebruik van OpenRouter. De calls werden in de volgende volgorde aangevraagd: Modal, CoreWeave, Parasail, Wafer. Wanneer Modal vertraagde tot 14 tokens/s, werd overgeschakeld naar FP8-hosts (Wafer, Parasail, CoreWeave). In totaal werden 203 calls bediend door Modal, 27 door CoreWeave en 115 door Wafer.
Analyse van het Proces
Benodigde Aanpassingen
Er was een mismatch in de probleemtekst. De eerste versie schreef zijn eigen taakbestand, maar de 27B-model plande slechter vanuit dit bestand dan vanuit de exacte LiveCodeBench-tekst. Vier wijzigingen in Memdoor maakten het mogelijk om exact dezelfde vragen te stellen als het harness van de auteurs:
- Een taak antwoordt met de reasoning van het model wanneer er geen tekst is geschreven.
- Toevoeging van
topp/topk op een modellijn.
mark_cutoff voor replies die door de cap zijn afgekapt.
- De mogelijkheid voor een call om op een eigen klok van vier uur te draaien.
Waar het Systeem Faalde
Er werden twee gaten in de loop van de auteurs geïdentificeerd:
- Pass 5, abc399_e: Het programma in ronde 1 was correct, maar de manager bedacht een tegenvoorbeeld met een foutief verwacht antwoord. Het team herschreef het programma, dat vervolgens de samples passeerde, maar niet het specifieke edge-case scenario.
- Pass 4, arc196c en arc196d: Een programma dat alle hidden tests passeerde, werd overschreven door een latere ronde omdat de manager niet aangaf dat het voltooid was. Beide kregen uiteindelijk voor het einde van de loop weer een correct programma terug, maar tegen hogere kosten ($3,44 en $4,24).
Beide problemen zijn oplosbaar zonder de methode te wijzigen (bijv. door tegenvoorbeelden van de manager te controleren met brute force op kleine inputs, of door het laatste programma te behouden dat de samples passeerde).
Installatie en Gebruik
Setup
curl -fsSL https://memdoor.ai/install.sh | bash
memdoor connect openrouter # of anthropic, openai, gemini, chatgpt
# Voor lokale modellen: memdoor connect local # Ollama, llama.cpp, vLLM, LM Studio
git clone --depth 1 https://github.com/guregodevo/memdoor
mkdir -p ~/.memdoor/workflows
cp -r memdoor/examples/workflows/team-solve ~/.memdoor/workflows/
Een probleem uitvoeren
mkdir my-problem && cd my-problem
cp -r ../memdoor/examples/workflows/team-solve/sample/* . # task.md + tests/1.in … 5.out
memdoor workflow run team-solve --wait # voortgang op stderr, exit 0 bij succes
Voor eigen problemen: vervang task.md en voeg gepaarde tests/N.in en tests/N.out bestanden toe.
Het programma wordt opgeslagen als solution.py, gelezen via stdin en vergeleken met de samples via diff. Er is Python 3 en bash vereist.
Werking van de Workflow
De workflow volgt dit pad: plan → (ideate-a & ideate-b) → solve → test → review → repair → verify
Rollen en Verantwoordelijkheden
| Stap | Type | Leest | Schrijft |
| plan | agent | task.md | plan.md en een notes.md ledger |
| ideate-a/b | agent | task.md, plan.md, notes.md | Een voorstel in notes.md (A: direct bewijsbaar algoritme, B: andere techniek) |
| solve | agent | beide voorstellen | De beslissing in notes.md, solution.py |
| test | command | tests/ | test-output.log, test-status.txt |
| review | agent | test output | review.md, reparatie-instructies in notes.md |
| repair | agent | instructies van manager | een herstelde solution.py (of niets als samples passeren) |
| verify | command | tests/ | final-test-output.log (nonzero exit faalt de run) |
Elke agent krijgt de instructie: "fresh context, read the files, do not rely on chat". Er is één reparatieronde en geen menselijke tussenkomst.
Verificatie Stap (YAML)
De laatste stap is de definitieve uitspraak:
type: command
requires:
- table_pattern: repair
command: |
check=.memdoor/workflows/team-solve/check-samples.sh
[ -f "$check" ] || check="$HOME/.memdoor/workflows/team-solve/check-samples.sh"
bash "$check" > final-test-output.log 2>&1
result=$?
cat final-test-output.log
exit "$result"
Bevindingen uit de Eerste Run
Het voorbeeld: Tel de substrings van een string over {a, b, c} met gelijke aantallen van elke letter, tot 200.000 tekens.
- Resultaat: 8 van de 8 stappen voltooid, 5 van de 5 samples geslaagd.
- Oplossing: De solver koos de prefix-state methode van ideator A, $O(N)$ met een dictionary van $(a−b, a−c)$ paren. Brute force tests op 300 random strings bevestigden de correctheid.
- Incidenten:
- Een provider verbrak de stream mid-answer. Omdat
maxretries op 0 stond, stierf de run. Dit is nu gewijzigd naar maxretries: 1.
- De oorspronkelijke prompts van de coder noemden specifieke methoden (bijv. "streaming prefix-state count"), wat andere problemen in de verkeerde richting zou sturen. De prompts zijn nu algemener.
- Een initiële fout ("no agent named coder") werd veroorzaakt doordat runs hun agent alleen in de eigen workspace zochten; dit is opgelost in versie v1.692.0.