Jev plays OpenFront on prompts anyone can rewrite.

Jeviatus is an open AI player for OpenFront, the real-time territory game. Every move comes from plain-English prompts: change one in the editor, argue it on the forum and put it to a vote, without writing code.

Every 1.5 seconds the harness freezes the game into one state object and asks Jev a batch of typed questions in plain English: which route, which target, how many troops, accept this alliance or refuse it. The wording of those questions is Jev's strategy, and anyone can change it, whether or not they write code.

harness/decide/questions.ts

One step of Jev's mind

Scroll through a single decision, from the state Jev reads to the intents it sends. The numbers are one example step; every question is quoted from the source. Select any node to read its full prompt.

Observe

Code reads the simulation and writes what Jev needs into one JSON object: its troops and gold, each neighbor's strength and attitude, who could be finished off this step, and a short memory of its goal and what its last actions achieved.

It also prunes the options. Jev only ever chooses among actions the simulation would accept right now.

{
  "me": { "land_share": 0.24, "troop_status": "healthy",
          "gold": 412000 },
  "players": {
    "P3": { "kind": "nation", "troops_vs_mine": 0.58,
            "attacking_me": false,
            "conquest": { "share_of_my_troops_to_finish_them": 0.41 } }
  },
  "memory": { "goal": "conquer_neighbor",
              "recent_actions": ["expand: +1,204 tiles"] }
}

Ask, once

Call A is a single request. It asks which of the 8 routes to take and which of 5 goals fits, and in the same request, every side decision: what to buy, whether to accept an alliance, how dangerous each neighbor is.

Arguments, asked before they're needed

Jev answers who to attack and how hard before it has picked a route, so a step never needs a second round trip. Troop amounts are scores on a scale, and code turns the expected level into a share of the army.

Pick a tile

Only builds, naval landings and nukes need a concrete tile. Code ranks the legal sites and Jev picks one in Call B. This step is a land attack, so it skips Call B.

The weakest link

Jev's confidence in a step is its lowest confidence among the answers that matter: the route and its target. Below 0.35 the step holds. When the top route comes back with no good target, Jev falls through to the next route that drew at least 15%.

Troop amounts, structures and sites are preferences. They're logged but never gated, so a close call between two good options doesn't stop Jev from acting.

Guard, then act

Code has the last word on troops. It keeps a reserve at home against the strongest neighbor, trims any push that would empty the army, and resizes an attack that can finish its target, up to 75% of troops. Side decisions go out in the same step. Code checks every intent against the simulation again right before sending it.

    23 questions, verbatim

    These prompts are what the Jeviatus DAO votes on. Below is every question Jev can be asked, read from questions.ts when this page was built. Open one, then rewrite it in the editor.

    Four ways to change how Jev plays

    Lightest first. Anyone can pull the first one in the editor, with no code. The other three are code changes, for mistakes a sentence can't prevent.

    Anyone, in the editor

    A hint

    Add or reword one of the hints Jev weighs. You write it in plain English in the editor, with nothing to install or compile.

    Developer · questions.ts

    A fact

    If Jev keeps misjudging something, it may not be able to see it. Add a field to the state it reads, then point a hint at it.

    Developer · pipeline.ts

    A guard

    Some calls shouldn't be left to the model. Code already keeps troops home and sizes finishing blows; add a guard when a mistake is costly and easy to detect.

    Developer · questions.ts + pipeline.ts

    A question

    When a decision deserves its own judgment, give it one: a new choice, score or yes/no question in Call A, and the code that acts on the answer.

    From an idea to Jev's next game

    Every change to how Jev plays is argued in public, voted on by token holders and reviewed by a maintainer.

    1. Watch a game

      Run Jev in a private lobby with the browser extension. Its panel shows every step: the route it picked, how sure it was, and why it held back.

    2. Rewrite a hint

      Open the decision tree editor, pick the decision that went wrong and say, in plain English, what Jev should weigh. The editor shows the exact change before anything leaves your browser.

    3. Debate it on the forum

      Start a thread on the Jeviatus forum. Players argue the strategy, point at games, and sharpen the wording before it goes to a vote.

    4. Vote on Snapshot

      Publish the proposal to the Jeviatus space on Snapshot. Each wallet votes with the tokens it holds. Signing is free because it sends no transaction.

    5. A bot opens the pull request

      When a vote passes, a GitHub Action opens a pull request that changes only the text that was voted on.

    6. A maintainer reviews and merges

      A maintainer checks the change and approves it. The next game runs the new prompt, and this page, built from the same file, quotes it.

    Developers can skip straight to a pull request against questions.ts; bun test and bun run typecheck must pass.

    What the DAO is deciding

    Read from the Jeviatus space on Snapshot and the strategy forum each time this page loads.

    On the ballot

    All proposals ↗

    On the forum

    Open the forum ↗

    Teach Jev its next habit.

    Pick the decision that went wrong, write what Jev should weigh, and the editor turns it into a proposal.