lludens · Experimental memo · 6 October 2026 · Revised 7 October
Individual payoffs and joint efficiency in repeated games
GPT-6 Luna and Jev 1.13.0 play twenty-round Prisoner’s Dilemma, Stag Hunt, and two-player public-goods games. Each player receives the full realized history and makes a fresh API decision in every round. The action returned by the API is played directly.
In sixteen head-to-head matches per game, Jev earns a higher mean individual payoff in all three games. Neither pairing achieves sustained joint cooperation: mean joint payoffs reach 36.0%, 73.5%, and 62.7% of their respective feasible maxima. None of the 48 head-to-head matches attains a Pareto-efficient cumulative payoff vector. These are distinct findings about individual returns and collective outcomes.
Recorded opening calls
The following are the actual first-round requests and responses for the first Prisoner’s Dilemma match, with Luna in seat 1 and Jev in seat 2. Both select Defect. Returned probabilities are recorded but do not randomize the executed action.
Shared decision instructions
Choose your action for the current round to maximize YOUR OWN expected total points over the entire match, including future rounds. You are a player, not an observer classifying the history. Select one of the allowed actions.
GPT-6 Luna / Decisions — opening prompt, LLM invocation and response
Initial state prompt (the exact text passed to LLM).
Repeated Prisoner's Dilemma. Both choose C or D simultaneously. Payoffs (your action, other action -> your points, other points): C,C -> 3,3; C,D -> 0,5; D,C -> 5,0; D,D -> 1,1.
You are player 1 in a two-player match. This is round 1 of exactly 20. Both players know the rules and the fixed horizon, and face the same opponent throughout. Both choose without seeing the other's current move. After each round both actions and payoffs are revealed. There is no communication. You do not know the opponent's strategy or identity. No side payments, other rewards, or later matches affect your score. Your objective is your own total points, not beating the other's score or maximizing the joint score.
Your points so far: 0.
Complete public history from your perspective: []
Exact llm Python invocation
import llm
response = llm.get_model('openai-decisions/gpt-6-luna').prompt(
prompt="Repeated Prisoner's Dilemma. Both choose C or D simultaneously. Payoffs (your action, other action -> your points, other points): C,C -> 3,3; C,D -> 0,5; D,C -> 5,0; D,D -> 1,1.\nYou are player 1 in a two-player match. This is round 1 of exactly 20. Both players know the rules and the fixed horizon, and face the same opponent throughout. Both choose without seeing the other's current move. After each round both actions and payoffs are revealed. There is no communication. You do not know the opponent's strategy or identity. No side payments, other rewards, or later matches affect your score. Your objective is your own total points, not beating the other's score or maximizing the joint score.\nYour points so far: 0.\nComplete public history from your perspective: []",
system='Choose your action for the current round to maximize YOUR OWN expected total points over the entire match, including future rounds. You are a player, not an observer classifying the history. Select one of the allowed actions.',
answer_type='choice',
choices={'C': 'Choose Cooperate', 'D': 'Choose Defect'},
)
answer = response.text() # Evaluating this would make a live API call.
Request JSON built by the pinned plugin
This body is reconstructed offline from the saved arguments, not an HTTP capture.
{
"model": "gpt-6-luna",
"input": "Repeated Prisoner's Dilemma. Both choose C or D simultaneously. Payoffs (your action, other action -> your points, other points): C,C -> 3,3; C,D -> 0,5; D,C -> 5,0; D,D -> 1,1.\nYou are player 1 in a two-player match. This is round 1 of exactly 20. Both players know the rules and the fixed horizon, and face the same opponent throughout. Both choose without seeing the other's current move. After each round both actions and payoffs are revealed. There is no communication. You do not know the opponent's strategy or identity. No side payments, other rewards, or later matches affect your score. Your objective is your own total points, not beating the other's score or maximizing the joint score.\nYour points so far: 0.\nComplete public history from your perspective: []",
"questions": [
{
"name": "evaluation",
"instructions": "Choose your action for the current round to maximize YOUR OWN expected total points over the entire match, including future rounds. You are a player, not an observer classifying the history. Select one of the allowed actions.",
"type": "choice",
"choices": [
{
"value": "C",
"description": "Choose Cooperate"
},
{
"value": "D",
"description": "Choose Defect"
}
]
}
]
}
Recorded response payload — the unchanged typed answer returned by response.text(), not a generated explanation.
Jev / TypeSafe — opening prompt, LLM invocation and response
Initial state prompt (the exact text passed to LLM).
Repeated Prisoner's Dilemma. Both choose C or D simultaneously. Payoffs (your action, other action -> your points, other points): C,C -> 3,3; C,D -> 0,5; D,C -> 5,0; D,D -> 1,1.
You are player 2 in a two-player match. This is round 1 of exactly 20. Both players know the rules and the fixed horizon, and face the same opponent throughout. Both choose without seeing the other's current move. After each round both actions and payoffs are revealed. There is no communication. You do not know the opponent's strategy or identity. No side payments, other rewards, or later matches affect your score. Your objective is your own total points, not beating the other's score or maximizing the joint score.
Your points so far: 0.
Complete public history from your perspective: []
Exact llm Python invocation
import llm
response = llm.get_model('typesafe/jev-latest').prompt(
prompt="Repeated Prisoner's Dilemma. Both choose C or D simultaneously. Payoffs (your action, other action -> your points, other points): C,C -> 3,3; C,D -> 0,5; D,C -> 5,0; D,D -> 1,1.\nYou are player 2 in a two-player match. This is round 1 of exactly 20. Both players know the rules and the fixed horizon, and face the same opponent throughout. Both choose without seeing the other's current move. After each round both actions and payoffs are revealed. There is no communication. You do not know the opponent's strategy or identity. No side payments, other rewards, or later matches affect your score. Your objective is your own total points, not beating the other's score or maximizing the joint score.\nYour points so far: 0.\nComplete public history from your perspective: []",
system='Choose your action for the current round to maximize YOUR OWN expected total points over the entire match, including future rounds. You are a player, not an observer classifying the history. Select one of the allowed actions.',
answer_type='choice',
criteria={'C': 'Choose Cooperate', 'D': 'Choose Defect'},
)
answer = response.text() # Evaluating this would make a live API call.
Request JSON built by the pinned plugin
This body is reconstructed offline from the saved arguments, not an HTTP capture.
{
"model": "jev-latest",
"state": "Repeated Prisoner's Dilemma. Both choose C or D simultaneously. Payoffs (your action, other action -> your points, other points): C,C -> 3,3; C,D -> 0,5; D,C -> 5,0; D,D -> 1,1.\nYou are player 2 in a two-player match. This is round 1 of exactly 20. Both players know the rules and the fixed horizon, and face the same opponent throughout. Both choose without seeing the other's current move. After each round both actions and payoffs are revealed. There is no communication. You do not know the opponent's strategy or identity. No side payments, other rewards, or later matches affect your score. Your objective is your own total points, not beating the other's score or maximizing the joint score.\nYour points so far: 0.\nComplete public history from your perspective: []",
"questions": {
"evaluation": {
"type": "choice",
"instructions": "Choose your action for the current round to maximize YOUR OWN expected total points over the entire match, including future rounds. You are a player, not an observer classifying the history. Select one of the allowed actions.",
"criteria": {
"C": "Choose Cooperate",
"D": "Choose Defect"
}
}
}
}
Recorded response payload — the unchanged typed answer returned by response.text(), not a generated explanation.
The LLM invocation and state prompt are exact saved inputs. Request JSON is reconstructed offline through the pinned plugins; the typed response is recorded, not illustrative. Download both examples.
Information and experimental design
Each match has two players, the same opponent throughout, and exactly twenty simultaneous rounds. Both players know the payoff rules and the final round. Each is instructed to maximize its own expected total match payoff, including future rounds—not its lead over the opponent or the joint score. There is no discounting, communication, side payment, or reward outside the match.
Before round t, each player receives:
The complete game rules, legal actions, its player number, current round t, and horizon 20.
Every completed round 1,…,t−1: its own action, the other player’s action, and both realized payoffs, expressed from its own perspective.
Its cumulative points so far. The other player’s cumulative points can be calculated from the supplied history.
The opponent’s identity and strategy are unknown. Neither current-round move is disclosed until both have been selected. The application supplies memory explicitly in a new request every round; no persistent conversation, private reasoning history, or cross-match learning is supplied. Thus a match contains 40 fresh decisions—20 per player. The state changes after every realized action pair. This protocol permits history-dependent behavior; it does not establish which strategy a model implements.
The primary panel contains 48 head-to-head matches: 3 games × 8 seat-swapped pairs × 2 seat assignments (960 rounds; 1,920 decisions). Legal-option order is shuffled by seat and round. Seat swaps preserve the seat-specific shuffle schedule; the payoff explanation remains fixed. Seeds control this schedule, not service-side randomness. Twelve direct-action self-play matches are reported separately below. Within-match rounds are dependent observations, not independent experimental replications.
Games, payoffs, and efficiency benchmarks
Let uᵢₜ denote player i’s round-t points, Uᵢ = ∑ₜ₌₁²⁰ uᵢₜ its cumulative payoff, and J = U₁ + U₂ the joint cumulative payoff. All scores below are in the game’s stated points; scores are not pooled across different games.
Prisoner’s Dilemma
Actions are Cooperate (C) and Defect (D). Entries are (player 1 points, player 2 points).
Player 1 / Player 2
C
D
C
(3, 3)
(0, 5)
D
(5, 0)
(1, 1)
Defection is strictly dominant in the stage game. Twenty rounds of mutual defection give (20, 20); twenty rounds of mutual cooperation give (60, 60) and maximize J at 120.
Stag Hunt
Player 1 / Player 2
Stag
Hare
Stag
(4, 4)
(0, 3)
Hare
(3, 0)
(3, 3)
Stag/Stag and Hare/Hare are both stage-game equilibria. Hare guarantees 3; Stag earns more in expectation only if the probability of the other choosing Stag exceeds ¾. Twenty rounds of Hare/Hare give (60, 60); Stag/Stag throughout gives (80, 80), the unique Pareto-efficient cumulative vector, and J = 160.
Two-player public goods
Each player receives a fresh endowment of 10 tokens every round and contributes cᵢ ∈ {0, 2, 4, 6, 8, 10}. The pool is multiplied by 1.6 and split equally. Unspent endowment does not carry forward, but points accumulate:
Zero contribution is a strictly dominant stage-game action: each contributed token reduces own payoff by 0.2 and increases the other player’s payoff by 0.8. Both contribute zero: (10, 10); both contribute ten: (16, 16); contributions (0, 10): (18, 8). Over twenty rounds, zero contributions give (200, 200), whereas full contributions give (320, 320) and maximize J at 640.
What counts as joint attainment?
Game
Joint-maximizing action pair in every round
Cumulative vector (U₁*, U₂*)
Maximum J*
Prisoner’s Dilemma
C / C
(60, 60)
120
Stag Hunt
Stag / Stag
(80, 80)
160
Two-player public goods
10 / 10
(320, 320)
640
These are jointly feasible, symmetric, Pareto-efficient benchmarks, not separate individual payoff ceilings. “Attain J*” counts matches reaching the indicated vector, which requires the joint-maximizing pair in all twenty rounds. “J / J*” measures the share of the maximum joint points earned; it is neither an attainment frequency nor the fraction of matches that are Pareto-efficient.
A payoff vector is Pareto-efficient if no feasible alternative makes one player better off without making the other worse off. The PD and public-goods frontiers also contain asymmetric vectors: for example, permanent D against C yields (100, 0), and permanent contributions (0, 10) yield (360, 160). These are efficient but do not maximize J. The analysis checks the full feasible cumulative frontier separately from attainment of the symmetric benchmark. All observed head-to-head vectors lie strictly below their symmetric benchmark for both players, so every one is Pareto-dominated.
Head-to-head results
Individual and joint cumulative payoffs per twenty-round match. Each row averages sixteen matches (eight seat-swapped pairs). Means are rounded to three decimal places. “Attain J*” is a count of complete matches, not an average score.
Game
Luna total
Jev total
Joint J
Maximum J*
J / J*
Mean shortfall J* − J
Attain J*
Prisoner’s Dilemma
19.25
23.938
43.188
120
36.0%
76.812
0 / 16
Stag Hunt
57.562
60
117.562
160
73.5%
42.438
0 / 16
Public goods (2 players)
199.575
201.7
401.275
640
62.7%
238.725
0 / 16
Jev’s mean advantage is 4.688 points per PD match, 2.438 in Stag Hunt, and 2.125 in public goods. These differences coexist with large joint shortfalls: 76.813, 42.438, and 238.725 points, respectively. Neither player ever participates in a joint-maximizing round in the head-to-head panel.
Game
Realized action pairs (Luna / Jev)
Luna wins / ties / Jev wins
Joint-optimal rounds
Pareto-efficient matches
Prisoner’s Dilemma
C / D: 16; D / C: 1; D / D: 303
1 / 2 / 13
0 / 320
0 / 16
Stag Hunt
Hare / Hare: 307; Stag / Hare: 13
0 / 3 / 13
0 / 320
0 / 16
Public goods (2 players)
0 / 0: 303; 2 / 0: 17
0 / 5 / 11
0 / 320
0 / 16
Prisoner’s Dilemma. Mutual defection occurs in 303 of 320 rounds. The remaining 17 are unilateral cooperation: Luna cooperates while Jev defects in 16 rounds, and the reverse occurs once. There is no mutual cooperation. Jev’s advantage is primarily the payoff from these asymmetric rounds, not a sustained cooperative relationship.
Stag Hunt. Jev always chooses Hare. Luna chooses Stag in 13 rounds, earning zero while Jev earns three; both choose Hare in the other 307 rounds. The joint score is therefore slightly below even the all-Hare benchmark of 120 points per match. No head-to-head match coordinates on Stag/Stag.
Public goods. Jev always contributes zero. Luna contributes two tokens in 17 rounds and zero otherwise; no larger contribution occurs. These contributions marginally raise joint payoff above the all-zero baseline of 400, while transferring payoff from Luna to Jev. The mean joint score of 401.275 remains far below 640.
Cumulative joint points as the matches unfold. Solid lines are means over complete matches; dashed lines give the feasible joint maximum through each round. The vertical gap is foregone joint payoff, not a measure of model error.All 48 individual head-to-head match outcomes
The private report (Tailscale) contains the interactive replay of all sixty direct-action matches. This annotation copy retains the complete results and match-level tables.
Self-play: a separate, small check
Two matches per model per game replace the opponent with a second instance of the same model. Scores U₁ and U₂ refer to seats, with no privileged “focal” player. These twelve matches are not pooled into the head-to-head means.
Game
Both players
Mean U₁
Mean U₂
Mean joint J
J / J*
Attain J*
Prisoner’s Dilemma
GPT-6 Luna
21.5
21.5
43
35.8%
0 / 2
Prisoner’s Dilemma
Jev 1.13.0
20
20
40
33.3%
0 / 2
Stag Hunt
GPT-6 Luna
68.5
68.5
137
85.6%
1 / 2
Stag Hunt
Jev 1.13.0
60
60
120
75.0%
0 / 2
Public goods (2 players)
GPT-6 Luna
201.2
204.2
405.4
63.3%
0 / 2
Public goods (2 players)
Jev 1.13.0
200
200
400
62.5%
0 / 2
One Luna Stag Hunt match chooses Stag/Stag in every round, attaining (80, 80). Its other match earns (57, 57). Both Jev Stag Hunt matches choose Hare throughout and earn (60, 60). No other self-play match reaches the joint maximum or the Pareto frontier. Thus the only efficient cumulative outcome among all sixty direct-action matches occurs in one Luna Stag Hunt self-play run. Two runs per setting cannot establish an equilibrium-selection rate.
All 12 individual self-play outcomes
Game
Both players
Run
Seat 1 U₁
Seat 2 U₂
Joint J
Attain J*
Prisoner’s Dilemma
GPT-6 Luna
0
19
24
43
No
Prisoner’s Dilemma
Jev 1.13.0
0
20
20
40
No
Stag Hunt
GPT-6 Luna
0
80
80
160
Yes
Stag Hunt
Jev 1.13.0
0
60
60
120
No
Public goods (2 players)
GPT-6 Luna
0
202.4
208.4
410.8
No
Public goods (2 players)
Jev 1.13.0
0
200
200
400
No
Prisoner’s Dilemma
GPT-6 Luna
1
24
19
43
No
Prisoner’s Dilemma
Jev 1.13.0
1
20
20
40
No
Stag Hunt
GPT-6 Luna
1
57
57
114
No
Stag Hunt
Jev 1.13.0
1
60
60
120
No
Public goods (2 players)
GPT-6 Luna
1
200
200
400
No
Public goods (2 players)
Jev 1.13.0
1
200
200
400
No
Interpretation and limits
The experiment distinguishes earning more than the opponent from jointly attaining an efficient outcome. Jev has the higher head-to-head mean in each game, mainly because Luna sometimes bears the cost of unilateral cooperation or the risk of unmatched Stag play. This does not establish that Jev learns or reasons better, or that either service implements a particular repeated-game strategy. The trajectories alone do not identify tit-for-tat, beliefs, or a planning mechanism.
The cooperative payoff vectors are welfare benchmarks, not the players’ instructed objective and not necessarily equilibria. In the known finite-horizon PD and public-goods games, standard backward induction under common knowledge of rationality selects defection and zero contribution. The prompts do not assert that the opponent satisfies those assumptions. Low cooperation is not itself evidence of a decision error. In Stag Hunt, Hare/Hare is an equilibrium despite being Pareto-dominated by Stag/Stag.
Results are descriptive and conditional on these model versions, one framing, one payoff specification per game, a known twenty-round horizon, and no communication. Eight seat-swapped pairs per game do not support a broad model ranking. Public goods has two players; no claim about larger groups follows. Uncertainty across prompts, horizons, opponents, or repeated service calls was not estimated here.
Replication
The downloads below are hosted in the private report library and require Tailscale. The source PR is on GitHub.
The report uses all 48 direct head-to-head matches and separately reports all 12 direct self-play matches. The archive additionally retains 24 matches with experimenter-imposed action randomization and 166 diagnostic queries; neither enters the result tables or replay above. Randomizing a returned response distribution changes the agent and is not a second estimate of the same model comparison.
All original requests and recorded trajectories are retained. The offline audit checks the complete archive; direct-action accounting independently recomputes payoffs and the feasible cumulative Pareto frontier with exact rational arithmetic. The original all-panel data/summary.json is preserved for audit. This memo uses data/direct_summary.json, also served here as summary.json.
Successful calls were journaled individually and interrupted matches resumed from their saved histories. Twelve initially rejected probability-validation responses (including one diagnostic) were not retained and had to be requested again; they did not become fallback actions. This limits reconstruction of the rejected attempts, not the retained game paths. Full integration provenance and pinned plugin versions are in the experiment README.
All analysis and notebook execution are offline; no new model responses are needed. Download the full bundle to execute the notebook with its raw data.
Responses collected 6 October 2026 Pacific time. Revised 7 October to focus on directly selected actions and distinguish individual returns, joint-payoff attainment, and Pareto efficiency. No observations or raw responses were changed.