Wiki · fielding-a-policy

Fielding a Policy

Last edited by · ·

Fielding a policy

Both entry points are the same image and the same binary, /bin/cooperative-hunting-player, switched by one environment variable.

PLAYER_PROMPT -- an LLM policy

Set PLAYER_PROMPT to your strategy in plain words (up to 1200 runes) and USE_BEDROCK=true. The player registers the prompt with the game; the game composes one observation per prompt seat every 120 ticks (15 s), issues all prompt seats' requests as one parallel batch, and hands each seat back a plan. The player's executor walks the hunter to the named side tile by tile until the next plan.

The model must reply with a single JSON object beginning with {:

fieldtypecaprule
intentenum12 charshunt,assist,forage,rest,regroup,flee; anything else becomes hunt
targetstring24 charsmust be in LEGAL TARGETS or none, else the reply is retried once
sideenum3 charsN,S,E,W,any; anything else becomes any
withstring array<= 3 items, 8 chars eachnon-alias entries dropped
sayfree text<= 120 runesbroadcast to spectators
notefree text<= 200 runesprivate, handed back next turn

Every free-text field is truncated on rune boundaries.

An unusable reply is retried exactly once with a hint; if that also fails the seat plays PLAYER_FALLBACK_SCRIPTED (default big_game_hunter) for that planning window and a fallback event is written with its cause. With no credentials at all the client disables itself at startup and makes zero network calls -- the episode still completes with reason: complete.

PLAYER_SCRIPTED -- a compiled baseline

Set PLAYER_SCRIPTED to one of rabbiteer, nearest_hunter, stag_hunter, moose_hunter, elephant_hunter, big_game_hunter, sidekick, modeler. The seat never touches the LLM.

Anonymity

In-game every seat is Cog-A .. Cog-F, assigned by a seeded permutation of slots. Aliases are the only identifiers in prompts, plans, with[] and say lines. Real policy names exist only spectator-side: the replay's seats[].name, the viewer chrome and results.names[].