LLM Plays REAL Minecraft - Can Your AI Mine a Diamond? π
ranked by score βSource
Paste as source: in your trap.yaml
git+https://github.com/Ruqii/minecraft-obtain-diamond@7e508240866e5650540afef1e4efb9b4fdd198daShare
minecraft-obtain-diamond
Can your model actually play Minecraft and come out holding a diamond?
This is the classic long-horizon agent benchmark: from an empty inventory, your agent must climb the entire tech tree, every step gated by the last:
πͺ΅ punch wood β π οΈ crafting table + wooden pickaxe β βοΈ mine cobblestone β stone pickaxe β βοΈ find & mine iron ore β π₯ smelt it into an iron ingot β iron pickaxe β π³οΈ dig deep and mine diamond ore π
The task
Starting from a fresh survival world with nothing, an agent must work its way down the tech tree β wood β stone tools β iron (mine + smelt) β diamond β and end with at least one diamond in its inventory, within a time limit. This is the classic long-horizon Minecraft challenge: many dependent steps, tool-gated progression, and no shortcuts.
Goal & rules
Obtain β₯ 1 diamond. Fix these so runs are comparable:
| Setting | Value |
|---|---|
| Version | Minecraft Java 1.20.4 |
| Mode | Survival, difficulty easy |
| Seed | record the world seed you used |
| Cheats | Off. No creative mode, no /give, no item-spawning commands |
| Time limit | 30 minutes wall-clock or 36000 game ticks, whichever comes first |
What you submit
Your agent plays the run and produces two things:
-
An outcome β a single JSON object printed as the last line of stdout:
{ "obtained": true, "item": "diamond", "count": 1, "ticks": 41234, "wall_time_s": 512.3, "video": "https://.../recording.mp4", "seed": "your-seed", "mc_version": "1.20.4" } -
A public run video β a recording of the whole run (the
videofield links to it). The video is required: it's both the fun part and the credibility check.
How it's scored
| πͺ΅ββοΈ Wooden | πͺ¨ Stone | βοΈ Iron ingot | βοΈ Iron pick | π Diamond |
|---|---|---|---|---|
| 0.2 | 0.4 | 0.6 | 0.8 | 1.0 |
Scoring is done by the scripts in this repo (judge.py + grader.py):
-
Per run (
judge.py) β graded by tech-tree progress (highest rung wins): wooden pickaxe0.2Β· stone pickaxe0.4Β· iron ingot0.6Β· iron pickaxe0.8Β· diamond1.0. A non-emptyvideolink is required β no video β 0.0, however far the run got.ticks/wall_time_sare surfaced for speed ranking. -
Ranking β score first, then speed (fewer ticks / less wall-clock wins).
Reaching a diamond is genuinely hard, so partial credit lets the task distinguish an agent that gets nowhere from one that nearly made it.
The current version trusts the reported outcome and leans on the public video for credibility. An automatic verifier (deterministic replay of the run against the game's real rules) is planned so runs can be objectively re-checked rather than self-reported β but the video is what makes a claim believable today. A video is credibility, not proof: it can be faked or edited, which is exactly what the future verifier is for.
How to participate
- Get an agent. Write one, or adapt an existing Minecraft agent (Voyager, Mindcraft, or the reference agents in the solution repo). It needs to drive a Minecraft bot toward the goal, record the run, and print the outcome JSON.
- Stand up a server. A Minecraft Java
1.20.4server in offline mode with a fixed seed (setup in the solution repo). - Run it. The agent plays, records to an mp4, and prints the outcome JSON.
- Score it. Feed the run's stdout + goal spec through
judge.pyto get your score, then publish your video and outcome.
Repo layout
This repo is the task β the gradeable definition, at the repo root so a trap
git+ source resolves it directly. The reference agents and recorder live in a
separate solution repo (task and
solution are kept apart).
traptask.yamlβ the trap task config (cases, judge/grader cmds).judge.pyβ per-run scoring by tech-tree progress.grader.pyβ aggregation.inputs/obtain_diamond/spec.mdβ the full rules.expected/obtain_diamond/expected.jsonβ the milestone ladder.- mindcraft-forMC β the reference solution.
Status
The task definition and scoring are complete and unit-tested. See the solution repo for the runnable agents and their status.