Skip to main content
This example is a small version of the Hutter Prize. The task is to compress the first 10 MB of enwik8, a dump of English Wikipedia, into as few bytes as possible. The agents edit one file, compressor.py. The baseline is zlib at level 9.

Install

The installer installs uv, Entire, the piloop CLI and the piloop skills for your coding agents. It is safe to run again. If you already have uv, you can install the CLI alone:
Log in to at least one coding agent CLI: claude auth login, codex login, or pi and then /login.

Run the example

1

Create the project

piloop init copies the example, downloads data/enwik8.zip (about 36 MB, not committed) and makes a git repo with a baseline commit. Then it measures the baseline and registers the project. The baseline is about 3.69 MB.
2

Choose your agents

The example uses Claude Code (harnesses = ["claude"] in piloop.toml). To use Codex or pi as well, or instead, edit harnesses, for example harnesses = ["claude", "codex"].If you do not have Herdr, set runtime = "subprocess". The agents then run in the background, and you cannot see their screens.Run piloop init again, so that piloop reads the changed file.
3

Add an idea

You do not have to add more. When the backlog is short, the research agent adds ideas.
4

Start the daemon

The daemon starts a worker for the idea and a research sweep for more ideas. It writes its log to ~/.piloop/serve.log.
5

Watch the campaign

Press enter to open the project. The four panels show the inbox, the agents, the ideas and the candidates. Press q to quit. The daemon continues to run.
The example stops after 20 worker runs ([stop] max_runs = 20 in piloop.toml). Stop it earlier with piloop stop. To run longer, raise max_runs and run piloop init.

What happens

Each worker edits compressor.py and commits. For each commit, the daemon runs evaluate.py in a clean worktree. The script checks that decompress(compress(data)) gives back the exact input. If it does not, the commit is a crash. Then the script prints two metrics:
  • bytes: the compressed size plus the size of compressor.py. Lower is better. This is the primary metric. As in the Hutter Prize, the size of the decompressor counts.
  • seconds: the time to compress and decompress. Lower is better. This is a guardrail: a commit may add at most 10 s to the time of the head, and the time must stay below 120 s.
A commit with fewer bytes that holds the guardrail is a keep, and it becomes the new head. The next runs start from it. To see the progress at any time, run:

Talk to an orchestrator

The orchestrator is a coding agent that answers escalations and records its decisions in your inbox. To start one, open Claude Code, Codex or pi in ~/piloop-enwik8 and ask:
The agent follows the piloop-operate skill. See The orchestrator and the inbox.

Stop

The daemon stops the running agents. Their ideas go back to the backlog. Every candidate commit stays in the repo under refs/piloop/, so git show and git cherry-pick work on any of them.

Next steps