Metazooa Solver is a terminal assistant for Metazooa. You enter the species you guessed in the game and the lowest-common-ancestor feedback Metazooa returned, and the solver ranks the best next guess using a minimax policy with expected remaining candidates as the tiebreak.
- launches a full-screen Textual dashboard in your terminal
- tracks every guess and LCA clue you enter
- keeps only species consistent with the feedback seen so far
- recommends the next guess that best shrinks the remaining search space
- shows a
Why <animal>?breakdown so you can inspect how each recommendation partitions the candidate set
The current candidate-only minimax policy solves the March 27, 2026 project snapshot in at most 7 guesses, with 64.4% of species solved within 4 guesses and 88.1% solved within 5.
The full analysis and supporting plots live in docs/2026-03-27/current-policy-solve-paths.md.
- Python 3.12 or newer
- uv
git clone https://github.com/wmsci/metazooa-solver.git
cd metazooa-solver
uv syncuv run metazooa-solver playWhat happens on first run:
- The app checks for a local runtime dataset cache.
- If the cache is missing, it automatically downloads the current
animals.jsonsource and the NCBInew_taxdumparchive. - It builds
dataset.jsonandsummary.jsonin the local cache. - The Textual dashboard launches.
The first run may be slower because it has to build the cache. Later runs reuse the cached dataset unless you refresh it.
play and refresh-data need internet access when they are using the default upstream data sources.
Typical flow:
- Start a game in Metazooa.
- Launch
metazooa-solver play. - Use the recommended opening guess in the game.
- In the solver, enter the species you guessed.
- Enter the LCA taxon returned by Metazooa.
- Press
Enteror selectApply. - Repeat until the candidate set collapses to one species.
q: quit the appu: undo the last feedback entryr: reset the sessiong: focus the guess inputTab: accept the active autocomplete suggestionEnter: submit feedback when both inputs are filled
By default, the runtime cache is stored in:
$XDG_CACHE_HOME/metazooa_solverwhenXDG_CACHE_HOMEis set~/.cache/metazooa_solverotherwise
You can override that location in either of these ways:
- set
METAZOOA_SOLVER_DATA_DIR - pass
--data-dirtoplayorrefresh-data
Refreshing data writes:
dataset.json: the playable species snapshot with full and display lineagessummary.json: metadata about the generated snapshot and sources used
- Metazooa for the game this solver is built around.
- NCBI Taxonomy for the taxonomy data used to compute LCA feedback and lineage structure.
- OpenAI's GPT-5.4 (via the Codex app) for AI-assisted development work on this project.

