A doomed LLM automaton stuck in a competitive-programming hellscape.
Attempt history · Prompt · Latest summary
Every day at 13:37 UTC, GitHub Actions picks one Exercism Zig problem, sends it through OpenRouter's openrouter/free model router, runs zig test, and commits the result. Pass/fail is logged here and published on this website.
Attempt history: https://s04.github.io/zigsyphus/
The runner is a small Zig CLI. It asks Zigsyphus for one replacement source file, copies it into the exercise, and runs the official tests.
The project uses the MIT-licensed Exercism Zig practice bank. Difficulty is a small ladder: the first adaptive run starts at 1, a pass moves the next run up one level, and any non-pass moves it down one level, clamped between 1 and 9.
Each run has a full audit trail:
data/bronze/runs/: prompt, response metadata, selected problem, and writer log.data/silver/attempts/: submittedsolution.zig, attempt metadata, and deterministic test result.data/gold/:runs.csv,summary.json,difficulty.json, and dashboard-ready scoring history.
The prompt lives in .github/workflows/daily.yml under ZIGSYPHUS_SYSTEM_PROMPT. The logs also keep the routed OpenRouter model, token counts, reported cost, retry state, selected exercise, pass/fail counts, and final score.
Use the pinned local Zig 0.16 binary when present:
./.tools/zig-0.16.0/zig versionInstall it locally on Apple Silicon macOS:
mkdir -p .tools
curl -L --fail -o .tools/zig-0.16.0.tar.xz https://ziglang.org/download/0.16.0/zig-aarch64-macos-0.16.0.tar.xz
tar -C .tools -xf .tools/zig-0.16.0.tar.xz
mv .tools/zig-aarch64-macos-0.16.0 .tools/zig-0.16.0
rm .tools/zig-0.16.0.tar.xzFixture good run:
ZIGSYPHUS_DATA_ROOT=/tmp/zigsyphus-good \
./.tools/zig-0.16.0/zig build run -- daily --mode fixture-good --problem-slug leap --min-difficulty 1 --max-difficulty 9 --repair-attempts 0 --skip-readmeFixture bad run:
ZIGSYPHUS_DATA_ROOT=/tmp/zigsyphus-bad \
./.tools/zig-0.16.0/zig build run -- daily --mode fixture-bad --problem-slug leap --min-difficulty 1 --max-difficulty 9 --repair-attempts 0 --skip-readmeLive OpenRouter run:
OPENROUTER_API_KEY=... ./.tools/zig-0.16.0/zig build run -- daily --mode liveThe daily workflow runs at 13:37 UTC and can also be started manually. It picks the current adaptive difficulty unless a manual difficulty range is supplied, writes one attempt, tests it, updates this README table, commits the audit log, and deploys the Pages dashboard.
Required GitHub secret:
OPENROUTER_API_KEY
| Date | Exercise | Difficulty | Model | Status | Passed | Score | Attempt |
|---|---|---|---|---|---|---|---|
| 2026-08-15 | Collatz Conjecture (collatz-conjecture) |
2 | openrouter/free |
pass/compiled | 5/5 | 100 | 135325Z-r02-collatz-conjecture |
| 2026-08-15 | Collatz Conjecture (collatz-conjecture) |
2 | openrouter/free |
compile_error/compile_error | 0/5 | 10 | 135325Z-r01-collatz-conjecture |
| 2026-08-15 | Collatz Conjecture (collatz-conjecture) |
2 | openrouter/free |
compile_error/compile_error | 0/5 | 10 | 135325Z-r00-collatz-conjecture |
| 2026-08-14 | Pangram (pangram) |
1 | openrouter/free |
pass/compiled | 11/11 | 100 | 143226Z-r00-pangram |
| 2026-08-13 | Grains (grains) |
2 | openrouter/free |
compile_error/compile_error | 0/10 | 10 | 143838Z-r05-grains |
| 2026-08-13 | Grains (grains) |
2 | openrouter/free |
compile_error/compile_error | 0/10 | 10 | 143838Z-r04-grains |
| 2026-08-13 | Grains (grains) |
2 | openrouter/free |
compile_error/compile_error | 0/10 | 10 | 143838Z-r03-grains |
| 2026-08-13 | Grains (grains) |
2 | openrouter/free |
compile_error/compile_error | 0/10 | 10 | 143838Z-r02-grains |
| 2026-08-13 | Grains (grains) |
2 | openrouter/free |
compile_error/compile_error | 0/10 | 10 | 143838Z-r01-grains |
| 2026-08-13 | Grains (grains) |
2 | openrouter/free |
compile_error/compile_error | 0/10 | 10 | 143838Z-r00-grains |
| 2026-08-11 | D&D Character (dnd-character) |
3 | openrouter/free |
compile_error/compile_error | 0/18 | 10 | 143751Z-r05-dnd-character |
| 2026-08-11 | D&D Character (dnd-character) |
3 | openrouter/free |
compile_error/compile_error | 0/18 | 10 | 143751Z-r04-dnd-character |
| 2026-08-11 | D&D Character (dnd-character) |
3 | openrouter/free |
compile_error/compile_error | 0/18 | 10 | 143751Z-r03-dnd-character |
| 2026-08-11 | D&D Character (dnd-character) |
3 | openrouter/free |
compile_error/compile_error | 0/18 | 10 | 143751Z-r02-dnd-character |
| 2026-08-11 | D&D Character (dnd-character) |
3 | openrouter/free |
compile_error/compile_error | 0/18 | 10 | 143751Z-r01-dnd-character |
| 2026-08-11 | D&D Character (dnd-character) |
3 | openrouter/free |
compile_error/compile_error | 0/18 | 10 | 143751Z-r00-dnd-character |
| 2026-08-10 | Difference of Squares (difference-of-squares) |
2 | openrouter/free |
pass/compiled | 9/9 | 100 | 143830Z-r00-difference-of-squares |
| 2026-08-09 | Micro Blog (micro-blog) |
3 | openrouter/free |
compile_error/compile_error | 0/13 | 10 | 140846Z-r05-micro-blog |
| 2026-08-09 | Micro Blog (micro-blog) |
3 | openrouter/free |
compile_error/compile_error | 0/13 | 10 | 140846Z-r04-micro-blog |
| 2026-08-09 | Micro Blog (micro-blog) |
3 | openrouter/free |
compile_error/compile_error | 0/13 | 10 | 140846Z-r03-micro-blog |
