Skip to content
CRANE: C absent, R absent, A present, N present, E absent.

For Anyone signing an AI budget

Word Five

Guess a hidden five-letter word in six tries, from letter-by-letter feedback.

How would we know it was actually working?

Their hello-world, not ours

Prime Intellect ship this exact game as a starter environment in three of their public repositories. We did not pick a game. We picked theirs.

Outcome
failed
Total reward
0.025
Shipped weights
Steps
8
Model calls in this run
Seed
0
The same seed reproduces this board

Recorded runbrain-qwen38-dspark28 Aug 2026

This is the smallest complete reinforcement-learning environment we could find that needs no domain knowledge at all. It has everything the ones that matter to your business have: a task, a fixed set of legal moves, a grader that cannot be argued with, and a score that moves when the model gets better. Learn the machine here, and every demo after this is the same machine with a different grader.

What an environment actually is

Four parts: a task, the moves that are legal, a grader that computes rather than opines, and a number that moves.

  1. 1The task

    What is the agent asked to do?

    Find a hidden five-letter word in six guesses.

  2. 2Legal actions

    What is it allowed to do?

    One five-letter word per turn, from a fixed 11,846-word list. Anything else is refused and costs a turn.

  3. 3The grader

    Who decides whether it was good?

    Compares the guess to the answer letter by letter and returns green, yellow or grey. It computes; it does not judge.

  4. 4The score that moves

    What number does that produce?

    Half for winning, a third for winning quickly, a fifth for never spending a turn on a word that could not have won.

This reward: Win fast, minus wasted guesses

Every demo on this site is that same machine. The task changes, the legal actions change, and the grader changes — but the grader is always code you can read, and the score is always a number you can watch move. That is what makes an environment different from an eval: an environment is an eval you can take the gradient of.

You and the model get the same word

Same hidden word, same six guesses, same rules. Play it, then watch what the model did with it.

Your attempt

What the model did

Same hidden answer, same rules, same budget — replayed at the speed it actually happened.

Step 1 of 8

Recorded runbrain-qwen38-dspark28 Aug 2026

Reasoning

This step has no recorded reasoning. The run was captured with thinking disabled, so there is nothing to show here — which is different from the model having thought nothing.

Watch it think

This is not a video. It is a recorded attempt replayed at the speed it actually happened, and you can step through it one guess at a time.

You decide what good means

Move one slider and the winner changes. That is not a trick — it is the product.

Reward components, their weights and their contribution to the total score
ComponentScoreWeightValue
Found the wordObjectiveDid it win, within six guesses.solved0.0000.500.000
Did it in few guessesObjectiveTurns used, as a ratio against the best player we ship, on the same hidden word. A ratio rather than a count, so a hard draw is not punished as a bad game.economy0.0000.300.000
Never wasted a turnCounterweightThe share of attempts spent on a word that could still have been the answer. This one pulls against the other two on purpose.consistency0.1250.200.025
Total reward0.025

Never wasted a turn is the counterweight: without a term pulling the other way, the cheapest way to maximise the objective is a behaviour you would never ship, and the model will find it.

Diagnostics — reported, never summed

Guesses used
6.000
Replies refused
2.000
Contradicted itself
5.000
Reference took
4.000

Verified in your browser — re-ran every move through the TypeScript engine and rescored.

Recomputed 0.025 · recorded 0.025 · Δ 0.0000000

Change what good means

Found the word0.5050%

Did it win, within six guesses.

Did it in few guesses0.3030%

Turns used, as a ratio against the best player we ship, on the same hidden word. A ratio rather than a count, so a hard draw is not punished as a bad game.

Never wasted a turn0.2020%

The share of attempts spent on a word that could still have been the answer. This one pulls against the other two on purpose.

The percentage is the share of the reward each term carries once the weights are normalised. Raising one lowers the others — that is the trade a reward designer actually makes.

Ranking under this reward

  1. 1Best-known playrank unchanged1.000
  2. 2Never wastes a guessrank unchanged1.000
  3. 3Never wastes a guessrank unchanged1.000
  4. 4Never wastes a guessrank unchanged1.000
  5. 5Never wastes a guessrank unchanged1.000
  6. 6Never wastes a guessrank unchanged1.000
  7. 7Never wastes a guessrank unchanged1.000
  8. 8Allowed to thinkrank unchanged0.960

    Same model, same seeds, sampled with thinking enabled. No training, no fine-tuning.

  9. 9Best-known playrank unchanged0.950
  10. 10Best-known playrank unchanged0.950
  11. 11Best-known playrank unchanged0.950
  12. 12Never wastes a guessrank unchanged0.940
  13. 13Best-known playrank unchanged0.933
  14. 14Best-known playrank unchanged0.933
  15. 15Best-known playrank unchanged0.933
  16. 16Never wastes a guessrank unchanged0.925
  17. 17Allowed to thinkrank unchanged0.920

    Same model, same seeds, sampled with thinking enabled. No training, no fine-tuning.

  18. 18Allowed to thinkrank unchanged0.920

    Same model, same seeds, sampled with thinking enabled. No training, no fine-tuning.

  19. 19Best-known playrank unchanged0.900
  20. 20Allowed to thinkrank unchanged0.845

    Same model, same seeds, sampled with thinking enabled. No training, no fine-tuning.

  21. 21Allowed to thinkrank unchanged0.080

    Same model, same seeds, sampled with thinking enabled. No training, no fine-tuning.

  22. 22Allowed to thinkrank unchanged0.067

    Same model, same seeds, sampled with thinking enabled. No training, no fine-tuning.

  23. 23Allowed to thinkrank unchanged0.050

    Same model, same seeds, sampled with thinking enabled. No training, no fine-tuning.

  24. 24Allowed to thinkrank unchanged0.050

    Same model, same seeds, sampled with thinking enabled. No training, no fine-tuning.

  25. 25Out of the boxrank unchanged0.033
  26. 26Out of the boxrank unchanged0.029
  27. 27Out of the boxrank unchanged0.029
  28. 28Out of the boxrank unchanged0.025
  29. 29Out of the boxrank unchanged0.025
  30. 30Out of the boxrank unchanged0.018
  31. 31Out of the boxrank unchanged0.018
  32. 32Out of the boxrank unchanged0.018

Leading under this reward: Best-known play, 1.000.

We re-scored the same recorded attempts under your reward. Training on it would change the behaviour, not just the ranking.

The number that moves

Out of the box, this model solved none of eight. Letting it think first is the cheapest intervention there is, and you can measure exactly what it bought.

Total reward — Out of the box

0.025

Out of the boxOut of the boxAllowed to thinkAllowed to thinkBest-known playNever wastes a guessNever wastes a guess0.000.250.501.00Out of the box
Show these points as a table
Out of the box0.025
Out of the box0.033
Out of the box0.018
Out of the box0.018
Out of the box0.018
Out of the box0.025
Out of the box0.029
Out of the box0.029
Allowed to think0.920
Allowed to think0.845
Allowed to think0.067
Allowed to think0.050
Allowed to think0.080
Allowed to think0.960
Allowed to think0.050
Allowed to think0.920
Best-known play0.900
Best-known play0.933
Best-known play0.950
Best-known play0.933
Best-known play1.000
Best-known play0.950
Best-known play0.950
Best-known play0.933
Never wastes a guess0.940
Never wastes a guess1.000
Never wastes a guess1.000
Never wastes a guess1.000
Never wastes a guess1.000
Never wastes a guess1.000
Never wastes a guess1.000
Never wastes a guess0.925

Every point is a recorded run scored by the same grader. Nothing here is a projection.

Which agent would you rather have running this?

Same puzzle, same seed (0).

Agent A

8 steps

Agent B

5 steps

The whole environment, in one screen

The grader is thirty lines of Python. Here it is, and here is the command that runs it.

Provenance

Environment package
wordle_five
Taskset
wordle-five
verifiers version
0.3.2.dev12
Model
brain-qwen38-dspark
Captured
28 Aug 2026
Seed
0

Run it yourself

uv run python envs/probe.py

envs/wordle_five/wordle_five/reward.py

Read the whole file
"""The reward. This file is quoted verbatim on the demo page, so it is writtento be read by someone who does not write Python. Three components, weights summing to 1.0. Two of them pull toward winning. Thethird pulls against them on purpose. # region: pig-demo/reward""" from __future__ import annotations from dataclasses import dataclass from .engine import GREEN, WORD_LENGTH, score_guess SOLVED_WEIGHT = 0.50ECONOMY_WEIGHT = 0.30CONSISTENCY_WEIGHT = 0.20  @dataclassclass Episode:    """Everything the reward needs from one played game."""     answer: str    guesses: list[str]    patterns: list[str]    rejected: int    reference_depth: int    max_guesses: int = 6  def solved(ep: Episode) -> float:    """Did it win? The objective, and half the reward."""    return 1.0 if ep.patterns and ep.patterns[-1] == GREEN * WORD_LENGTH else 0.0  def economy(ep: Episode) -> float:    """How few turns it took, against how few the reference player needed.     Always a ratio against a reference on the SAME hidden word, never an    absolute count — otherwise the reward would mostly measure whether the word    happened to be easy, and a model would be punished for a hard draw.    """    if not solved(ep):        return 0.0    return min(1.0, ep.reference_depth / max(1, len(ep.guesses)))  def consistency(ep: Episode) -> float:    """The share of guesses that were still possible answers when they were made.     This is the counterweight, and it is genuinely in tension with the other    two. A player maximising information will deliberately guess words that    CANNOT win, because a word that splits the remaining candidates evenly    teaches it more than a word that might happen to be right. That is good    play, and it costs consistency. The reference solver scores below 1.0 here.     So the three components describe a real trade: win, win fast, and do not    spend turns on moves that could not have won. You cannot max all three, and    which one you weight is a decision about what you actually want — which is    the entire argument this demo exists to make.     Scored over every turn SPENT, not every guess accepted — see below. Without    that, a policy which never produces a parseable word scores a vacuous 1.0    here (no guesses, therefore no contradictions) and collects 0.2 for doing    nothing at all.    """    spent = len(ep.guesses) + ep.rejected    if spent == 0:        return 0.0     viable = 0    for i, guess in enumerate(ep.guesses):        # A guess is viable iff it is consistent with every earlier piece of        # feedback — that is, it was still a possible answer at the moment it        # was played.        if all(score_guess(ep.guesses[k], guess) == ep.patterns[k] for k in range(i)):            viable += 1     # The denominator is every turn SPENT, including replies the game refused.    # Counting only legal guesses would hand a free 1.0 to a policy that plays    # one word and then jams the parser five times: one guess, no    # contradictions, perfect score. Measuring against turns spent asks the    # question that actually matters — of the attempts you made, how many were    # a move that could have won?    return viable / spent  def score(ep: Episode) -> dict[str, float]:    """The weighted components, unweighted. The caller applies the weights."""    return {        "solved": solved(ep),        "economy": economy(ep),        "consistency": consistency(ep),    }  def total(ep: Episode) -> float:    parts = score(ep)    return (        parts["solved"] * SOLVED_WEIGHT        + parts["economy"] * ECONOMY_WEIGHT        + parts["consistency"] * CONSISTENCY_WEIGHT    )  # endregion: pig-demo/reward  def metrics(ep: Episode) -> dict[str, float]:    """Diagnostics. Weight zero — reported, never summed into the reward."""    return {        "guesses_used": float(len(ep.guesses)),

What this does not teach

A word game is missing four things your business has. Each one is why the next demo exists.

What this demo does not teach

  • Nobody is pushing back. There is no counterparty adapting to what the agent does, which is most of what makes fraud and abuse hard.

    No demo answers this one yet. It is a real gap, not a rhetorical one.

  • There is no rule the agent could break. No privacy boundary, no regulator, no policy it must satisfy while it optimises.

    No demo answers this one yet. It is a real gap, not a rhetorical one.

  • Every guess is objectively scorable. Real decisions have partial credit and honest disagreement about what a good answer even was.

    No demo answers this one yet. It is a real gap, not a rhetorical one.

  • The score arrives the moment the game ends. A claim, a bid or a dispatch is graded weeks later, by reality.

    No demo answers this one yet. It is a real gap, not a rhetorical one.