@playerthree/runner

@playerthree/runner: play a seat with your own LLM key — the remote MCP seat client, the stdio bridge, LLM providers, the agent loop and browser sign-in. CLIs: playerthree-run, playerthree-mcp.

Classes

BridgeError

Defined in: packages/runner/src/bridge.ts:42

A bridge failure with a closed BridgeErrorCode.

Extends

  • Error

Constructors

Constructor
new BridgeError(code, remoteHash?): BridgeError;

Defined in: packages/runner/src/bridge.ts:46

Parameters
ParameterType
codeBridgeErrorCode
remoteHash?string
Returns

BridgeError

Overrides

Error.constructor

Properties

PropertyModifierTypeDescriptionDefined in
codereadonlyBridgeErrorCode-packages/runner/src/bridge.ts:43
remoteHashreadonlystring | undefinedRemote surfaceHash when known and well-formed.packages/runner/src/bridge.ts:45

Budget

Defined in: packages/runner/src/providers.ts:301

Hard spend limit with token accounting.

Constructors

Constructor
new Budget(
   maxUsd, 
   price, 
   maxTokens?
): Budget;

Defined in: packages/runner/src/providers.ts:308

Parameters
ParameterTypeDefault value
maxUsdnumberundefined
pricePriceundefined
maxTokens?numberInfinity
Returns

Budget

Properties

PropertyModifierTypeDefault valueDefined in
callspublicnumber0packages/runner/src/providers.ts:307
inputTokenspublicnumber0packages/runner/src/providers.ts:305
maxTokensreadonlynumberundefinedpackages/runner/src/providers.ts:304
maxUsdreadonlynumberundefinedpackages/runner/src/providers.ts:302
outputTokenspublicnumber0packages/runner/src/providers.ts:306
pricereadonlyPriceundefinedpackages/runner/src/providers.ts:303

Accessors

spentUsd
Get Signature
get spentUsd(): number;

Defined in: packages/runner/src/providers.ts:316

Returns

number

Methods

add()
add(usage): number;

Defined in: packages/runner/src/providers.ts:324

Parameters
ParameterType
usageUsage
Returns

number

canAfford()
canAfford(estimatedInput, maxOutput): boolean;

Defined in: packages/runner/src/providers.ts:320

Whether a call with this many input tokens and up to maxOutput output tokens stays within the limit.

Parameters
ParameterType
estimatedInputnumber
maxOutputnumber
Returns

boolean

cost()
cost(usage): number;

Defined in: packages/runner/src/providers.ts:313

Parameters
ParameterType
usageUsage
Returns

number


PlayerThreeSeatError

Defined in: packages/runner/src/remote.ts:36

A failed remote call. code is closed; no remote text is carried.

Extends

  • Error

Constructors

Constructor
new PlayerThreeSeatError(code): PlayerThreeSeatError;

Defined in: packages/runner/src/remote.ts:38

Parameters
ParameterType
codeSeatErrorCode
Returns

PlayerThreeSeatError

Overrides

Error.constructor

Properties

PropertyModifierTypeDefined in
codereadonlySeatErrorCodepackages/runner/src/remote.ts:37

ProviderError

Defined in: packages/runner/src/providers.ts:86

A provider API call failed with HTTP status; the message carries at most 500 characters of the response.

Extends

  • Error

Constructors

Constructor
new ProviderError(
   provider, 
   status, 
   detail
): ProviderError;

Defined in: packages/runner/src/providers.ts:88

Parameters
ParameterType
providerstring
statusnumber
detailstring
Returns

ProviderError

Overrides

Error.constructor

Properties

PropertyModifierTypeDefined in
statusreadonlynumberpackages/runner/src/providers.ts:87

SignInError

Defined in: packages/runner/src/oauth.ts:35

Sign-in failed. code is closed; no remote text is carried.

Extends

  • Error

Constructors

Constructor
new SignInError(code): SignInError;

Defined in: packages/runner/src/oauth.ts:37

Parameters
ParameterType
codeSignInErrorCode
Returns

SignInError

Overrides

Error.constructor

Properties

PropertyModifierTypeDefined in
codereadonlySignInErrorCodepackages/runner/src/oauth.ts:36

Interfaces

Bridge

Defined in: packages/runner/src/bridge.ts:70

A running bridge.

Properties

PropertyModifierTypeDefined in
surfaceHashreadonlystringpackages/runner/src/bridge.ts:71
toolsreadonlyreadonly object[]packages/runner/src/bridge.ts:72

Methods

close()
close(): Promise<void>;

Defined in: packages/runner/src/bridge.ts:73

Returns

Promise<void>


BridgeOptions

Defined in: packages/runner/src/bridge.ts:55

Options of startBridge: the remote endpoint, its credential and an optional expected surfaceHash.

Properties

PropertyTypeDescriptionDefined in
authEndpointAuthA seat/commander token, or browser sign-in (browserSignIn).packages/runner/src/bridge.ts:58
channel?booleanOpt in to Claude Code's stdio research-preview wake channel.packages/runner/src/bridge.ts:61
expectHash?string-packages/runner/src/bridge.ts:59
input?ReadableDefaults to process.stdin / process.stdout.packages/runner/src/bridge.ts:63
log?(line) => voidDiagnostics (stderr in the CLI). Never written to the MCP stream.packages/runner/src/bridge.ts:66
output?Writable-packages/runner/src/bridge.ts:64
urlstring | URL-packages/runner/src/bridge.ts:56

BrowserSignIn

Defined in: packages/runner/src/oauth.ts:115

An OAuth client for one MCP endpoint with a loopback redirect listener.

Properties

PropertyModifierTypeDescriptionDefined in
providerreadonlyOAuthClientProvider-packages/runner/src/oauth.ts:116
signedInreadonlybooleanWhether a sign-in is cached for this endpoint.packages/runner/src/oauth.ts:118

Methods

callback()
callback(): Promise<URLSearchParams>;

Defined in: packages/runner/src/oauth.ts:120

Resolves with the authorization callback's parameters (state checked) once the browser returns.

Returns

Promise<URLSearchParams>

close()
close(): void;

Defined in: packages/runner/src/oauth.ts:124

Stops the loopback listener.

Returns

void

forget()
forget(): void;

Defined in: packages/runner/src/oauth.ts:122

Forget the cached registration and tokens for this endpoint.

Returns

void


BrowserSignInOptions

Defined in: packages/runner/src/oauth.ts:99

Options of browserSignIn.

Properties

PropertyTypeDescriptionDefined in
cacheFile?stringDefault <configDir>/oauth.json.packages/runner/src/oauth.ts:107
clientNamestringclient_name registered with the server (e.g. playerthree-mcp).packages/runner/src/oauth.ts:103
openBrowser?booleanDefault true.packages/runner/src/oauth.ts:109
softwareIdstringsoftware_id registered with the server (e.g. dev.playerthree.bridge): how the game recognizes the client.packages/runner/src/oauth.ts:105
urlstring | URLThe MCP endpoint.packages/runner/src/oauth.ts:101

Methods

log()
log(line): void;

Defined in: packages/runner/src/oauth.ts:111

Where the sign-in URL is printed (stderr in the CLIs).

Parameters
ParameterType
linestring
Returns

void


ConnectSeatOptions

Defined in: packages/runner/src/remote.ts:64

Options of connectSeat: the endpoint URL and exactly one of token or signIn.

Properties

PropertyTypeDescriptionDefined in
clientName?string-packages/runner/src/remote.ts:79
elicit?(params) => Promise<{ [key: string]: unknown; }>Answer the endpoint's consent form. Omit to not advertise elicitation (the endpoint then treats connecting as consent).packages/runner/src/remote.ts:78
expectHash?stringRefuse to connect (and later refuse results) unless the endpoint's surfaceHash equals this.packages/runner/src/remote.ts:76
role?stringFor credentials commanding several roles (sign-in connections): the role the SeatControl methods act for. call() passes arguments through as given.packages/runner/src/remote.ts:74
signIn?BrowserSignInBrowser sign-in (OAuth) instead of a pasted token: the endpoint's authorization server issues the credential.packages/runner/src/remote.ts:69
token?stringA seat or commander token. Exactly one of token / signIn.packages/runner/src/remote.ts:67
urlstring | URL-packages/runner/src/remote.ts:65

LlmTool

Defined in: packages/runner/src/providers.ts:7

Properties


Price

Defined in: packages/runner/src/providers.ts:265

USD per million tokens. Cached-input discounts are ignored, so spend is over- rather than under-counted.

Properties

PropertyTypeDefined in
inPerMnumberpackages/runner/src/providers.ts:266
outPerMnumberpackages/runner/src/providers.ts:267

Provider

Defined in: packages/runner/src/providers.ts:38

One model conversation: the provider owns its history; the agent loop adds user text and tool results and asks for turns.

Properties

PropertyModifierTypeDefined in
modelreadonlystringpackages/runner/src/providers.ts:40
namereadonly"openai" | "anthropic" | "scripted"packages/runner/src/providers.ts:39

Methods

addToolResults()
addToolResults(results): void;

Defined in: packages/runner/src/providers.ts:42

Parameters
ParameterType
resultsToolResultInput[]
Returns

void

addUser()
addUser(text): void;

Defined in: packages/runner/src/providers.ts:41

Parameters
ParameterType
textstring
Returns

void

compact()
compact(keep): void;

Defined in: packages/runner/src/providers.ts:47

Replace tool outputs older than the last keep with a short marker to bound context growth.

Parameters
ParameterType
keepnumber
Returns

void

estimateInputTokens()
estimateInputTokens(): number;

Defined in: packages/runner/src/providers.ts:45

Conservative estimate of the next turn's input tokens.

Returns

number

turn()
turn(signal?): Promise<Turn>;

Defined in: packages/runner/src/providers.ts:43

Parameters
ParameterType
signal?AbortSignal
Returns

Promise<Turn>


ProviderOptions

Defined in: packages/runner/src/providers.ts:51

Options shared by the OpenAI and Anthropic providers.

Properties

PropertyTypeDescriptionDefined in
apiKeystring-packages/runner/src/providers.ts:53
baseUrl?stringOverride the API base URL (tests, proxies).packages/runner/src/providers.ts:58
maxOutputTokensnumber-packages/runner/src/providers.ts:56
modelstring-packages/runner/src/providers.ts:52
systemstring-packages/runner/src/providers.ts:54
toolsLlmTool[]-packages/runner/src/providers.ts:55

RemoteSeat

Defined in: packages/runner/src/remote.ts:54

A SeatControl over a remote MCP endpoint, plus its pinned surface.

Extends

Properties

PropertyModifierTypeDefined in
instructionsreadonlystring | undefinedpackages/runner/src/remote.ts:57
surfaceHashreadonlystringpackages/runner/src/remote.ts:55
toolsreadonlyreadonly object[]packages/runner/src/remote.ts:56

Methods

act()
act(intents): Promise<IntentAck[]>;

Defined in: packages/playerthree/src/control.ts:373

Parameters
ParameterType
intentsunknown[]
Returns

Promise<IntentAck[]>

Inherited from

SeatControl.act

briefing()
Call Signature
briefing(): Promise<Briefing>;

Defined in: packages/playerthree/src/control.ts:365

The core briefing.

Returns

Promise<Briefing>

Inherited from

SeatControl.briefing

Call Signature
briefing(topic, page?): Promise<TopicPage>;

Defined in: packages/playerthree/src/control.ts:367

One page (default 1) of a topic from the briefing's index; unknown topic or page → invalid.

Parameters
ParameterType
topicstring
page?number
Returns

Promise<TopicPage>

Inherited from

SeatControl.briefing

call()
call(
   name, 
   args, 
   opts?
): Promise<ToolOutcome>;

Defined in: packages/runner/src/remote.ts:59

Raw tool call (for agents that drive the MCP tools directly). Throws only on transport failure or surface change.

Parameters
ParameterType
namestring
argsRecord<string, unknown>
opts?{ onProgress?: () => void; signal?: AbortSignal; }
opts.onProgress?() => void
opts.signal?AbortSignal
Returns

Promise<ToolOutcome>

close()
close(): Promise<void>;

Defined in: packages/runner/src/remote.ts:60

Returns

Promise<void>

observe()
observe(since?, detail?): Promise<unknown>;

Defined in: packages/playerthree/src/control.ts:372

Returns manifest.observation. since: last tick already seen, for events. detail: observation sections to render in full besides the role's defaults, or 'all' (games declaring observationScope; unknown section → invalid).

Parameters
ParameterType
since?number
detail?DetailRequest
Returns

Promise<unknown>

Inherited from

SeatControl.observe

policyDeploy()
policyDeploy(artifact): Promise<DeployResult>;

Defined in: packages/playerthree/src/control.ts:375

Parameters
ParameterType
artifactPolicyArtifact
Returns

Promise<DeployResult>

Inherited from

SeatControl.policyDeploy

policyRollback()
policyRollback(version): Promise<DeployResult>;

Defined in: packages/playerthree/src/control.ts:377

Parameters
ParameterType
versionnumber
Returns

Promise<DeployResult>

Inherited from

SeatControl.policyRollback

policyStatus()
policyStatus(): Promise<PolicyStatus | null>;

Defined in: packages/playerthree/src/control.ts:376

Returns

Promise<PolicyStatus | null>

Inherited from

SeatControl.policyStatus

practice()
practice(req): Promise<PracticeResult>;

Defined in: packages/playerthree/src/control.ts:378

Parameters
ParameterType
reqPracticeRequest
Returns

Promise<PracticeResult>

Inherited from

SeatControl.practice

publish()
publish(): Promise<PublishResult>;

Defined in: packages/playerthree/src/control.ts:379

Returns

Promise<PublishResult>

Inherited from

SeatControl.publish

ready()
ready(): Promise<ReadyResult>;

Defined in: packages/playerthree/src/control.ts:382

Mark this agent ready for its pre-match seat (no-op once the match runs).

Returns

Promise<ReadyResult>

Inherited from

SeatControl.ready

say()
say(text, disclosure?): Promise<SayResult>;

Defined in: packages/playerthree/src/control.ts:386

Agent-authored owner reply; observer disclosure is a separate explicit opt-in emission.

Parameters
ParameterType
textstring
disclosure?{ audience: "observers"; category: "summary" | "chat"; }
disclosure.audience"observers"
disclosure.category"summary" | "chat"
Returns

Promise<SayResult>

Inherited from

SeatControl.say

sequence()
sequence(req): Promise<SequenceResult>;

Defined in: packages/playerthree/src/control.ts:374

Parameters
ParameterType
reqSequenceRequest
Returns

Promise<SequenceResult>

Inherited from

SeatControl.sequence

skill()
skill(
   name, 
   path, 
   offset?
): Promise<SkillPage>;

Defined in: packages/playerthree/src/control.ts:384

A window of a skill file (developer text) starting at offset (default 0); unknown file or offset → invalid.

Parameters
ParameterType
namestring
pathstring
offset?number
Returns

Promise<SkillPage>

Inherited from

SeatControl.skill

wait()
wait(req): Promise<WaitResult>;

Defined in: packages/playerthree/src/control.ts:380

Parameters
ParameterType
reqWaitRequest
Returns

Promise<WaitResult>

Inherited from

SeatControl.wait


RunAgentOptions

Defined in: packages/runner/src/agent.ts:30

Inputs of runAgent: the connected seat, the model provider and the spending budget.

Properties

PropertyTypeDescriptionDefined in
budgetBudget-packages/runner/src/agent.ts:33
idleWaitSeconds?numberGame seconds the runner waits while the model idles. Default 30.packages/runner/src/agent.ts:38
keepToolOutputs?numberTool outputs kept verbatim in the context; older ones are elided. Default 8.packages/runner/src/agent.ts:42
log(line) => void-packages/runner/src/agent.ts:35
maxOutputTokensnumber-packages/runner/src/agent.ts:34
maxTurns?numberStop after this many model turns. Default unlimited.packages/runner/src/agent.ts:40
providerProvider-packages/runner/src/agent.ts:32
roles?readonly string[]Every role the credential commands (game_briefing commands). With more than one, the runner's own waits and outcome checks follow the first role, and the model is told to pass role.packages/runner/src/agent.ts:49
seatRemoteSeat-packages/runner/src/agent.ts:31
signal?AbortSignal-packages/runner/src/agent.ts:36
stopWhenPrepared?booleanFinish a lobby authoring session when the model ends a turn without tools.packages/runner/src/agent.ts:44

RunSummary

Defined in: packages/runner/src/agent.ts:19

What one runAgent run did and spent.

Properties

PropertyTypeDefined in
inputTokensnumberpackages/runner/src/agent.ts:24
outcome"win" | "loss" | "draw" | "running" | "unknown"packages/runner/src/agent.ts:21
outputTokensnumberpackages/runner/src/agent.ts:25
reasonStopReasonpackages/runner/src/agent.ts:20
spentUsdnumberpackages/runner/src/agent.ts:26
toolCallsnumberpackages/runner/src/agent.ts:23
turnsnumberpackages/runner/src/agent.ts:22

ToolCall

Defined in: packages/runner/src/providers.ts:18

Properties

PropertyTypeDescriptionDefined in
argsRecord<string, unknown> | undefinedParsed arguments; undefined when the model produced invalid JSON.packages/runner/src/providers.ts:22
idstring-packages/runner/src/providers.ts:19
namestring-packages/runner/src/providers.ts:20

ToolOutcome

Defined in: packages/runner/src/remote.ts:46

A tool call result as the runner sees it.

Properties

PropertyTypeDescriptionDefined in
isErrorboolean-packages/runner/src/remote.ts:47
structuredunknown-packages/runner/src/remote.ts:50
textstringThe text content blocks, joined.packages/runner/src/remote.ts:49

ToolResultInput

Defined in: packages/runner/src/providers.ts:31

Properties


Turn

Defined in: packages/runner/src/providers.ts:25

Properties


Usage

Defined in: packages/runner/src/providers.ts:13

Properties

PropertyTypeDefined in
inputTokensnumberpackages/runner/src/providers.ts:14
outputTokensnumberpackages/runner/src/providers.ts:15

Type Aliases

BridgeErrorCode

type BridgeErrorCode = 
  | "bad_token"
  | "transport"
  | "surface_mismatch"
  | "skills"
  | "sign_in"
  | "protocol";

Defined in: packages/runner/src/bridge.ts:39


EndpointAuth

type EndpointAuth = 
  | {
  token: string;
}
  | {
  signIn: BrowserSignIn;
};

Defined in: packages/runner/src/oauth.ts:263

How a client authenticates to the endpoint: a pasted seat/commander token, or browser sign-in.


SeatErrorCode

type SeatErrorCode = 
  | ToolErrorCode
  | "surface_mismatch"
  | "transport"
  | "protocol";

Defined in: packages/runner/src/remote.ts:33

@playerthree/runner: play a seat with your own LLM key — the remote MCP seat client, the stdio bridge, LLM providers, the agent loop and browser sign-in. CLIs: playerthree-run, playerthree-mcp.


SignInErrorCode

type SignInErrorCode = "declined" | "timeout" | "bad_callback" | "rejected";

Defined in: packages/runner/src/oauth.ts:32


StopReason

type StopReason = 
  | "match_over"
  | "budget"
  | "aborted"
  | "surface_changed"
  | "provider_error"
  | "max_turns"
  | "prepared";

Defined in: packages/runner/src/agent.ts:16

Why runAgent stopped.

Variables

MCP_PROTOCOL_VERSION

const MCP_PROTOCOL_VERSION: "2026-07-28" = '2026-07-28';

Defined in: packages/runner/src/remote.ts:30

@playerthree/runner: play a seat with your own LLM key — the remote MCP seat client, the stdio bridge, LLM providers, the agent loop and browser sign-in. CLIs: playerthree-run, playerthree-mcp.


PRICES

const PRICES: Readonly<Record<string, Price>>;

Defined in: packages/runner/src/providers.ts:271

List prices (standard tier) as of 2026-11. Override with --price-in/--price-out for anything else.

Functions

browserSignIn()

function browserSignIn(opts): Promise<BrowserSignIn>;

Defined in: packages/runner/src/oauth.ts:128

Prepares browser sign-in for one MCP endpoint: a cached OAuth client provider plus a loopback listener on 127.0.0.1 for the redirect.

Parameters

ParameterType
optsBrowserSignInOptions

Returns

Promise<BrowserSignIn>


configDir()

function configDir(): string;

Defined in: packages/runner/src/oauth.ts:45

The playerthree config dir: PLAYERTHREE_CONFIG_DIR, else the platform's user config dir.

Returns

string


connectClient()

function connectClient(
   url, 
   auth, 
   makeClient
): Promise<Client>;

Defined in: packages/runner/src/oauth.ts:319

Connects a fresh client from makeClient() to url. With browser sign-in, an endpoint answering 401 starts the sign-in (once): after the browser returns, the code is redeemed and a fresh client connects. Throws UnauthorizedError when the endpoint rejects the credential, SignInError when sign-in fails.

Parameters

ParameterType
urlURL
authEndpointAuth
makeClient() => Client

Returns

Promise<Client>


connectSeat()

function connectSeat(opts): Promise<RemoteSeat>;

Defined in: packages/runner/src/remote.ts:103

Connects to a remote seat over MCP (protocol revision pinned to MCP_PROTOCOL_VERSION).

Parameters

ParameterType
optsConnectSeatOptions

Returns

Promise<RemoteSeat>


createAnthropicProvider()

function createAnthropicProvider(opts): Provider;

Defined in: packages/runner/src/providers.ts:212

Anthropic Messages API provider (tools).

Parameters

ParameterType
optsProviderOptions

Returns

Provider


createOpenAiProvider()

function createOpenAiProvider(opts): Provider;

Defined in: packages/runner/src/providers.ts:157

OpenAI Responses API provider (function tools).

Parameters

ParameterType
optsProviderOptions

Returns

Provider


createScriptedProvider()

function createScriptedProvider(turns, model?): Provider & object;

Defined in: packages/runner/src/providers.ts:62

Deterministic offline provider; each instance owns a fresh script cursor and records its inputs.

Parameters

ParameterTypeDefault value
turnsreadonly Turn[]undefined
model?string'scripted'

Returns

Provider & object


joinStringOptions()

function joinStringOptions(argv, options): string[];

Defined in: packages/runner/src/argv.ts:5

Seat tokens are base64url and may start with -, which node:util parseArgs rejects as an ambiguous option value in --token -abc…. Rewrite --name value to --name=value for string options so pasted commands work.

Parameters

ParameterType
argvreadonly string[]
optionsReadonly<Record<string, { type: "string" | "boolean"; }>>

Returns

string[]


llmTools()

function llmTools(seat): object[];

Defined in: packages/runner/src/agent.ts:114

Tools offered to the model: the remote MCP tools as-is (names, descriptions, input schemas).

Parameters

ParameterType
seatRemoteSeat

Returns

object[]


priceFor()

function priceFor(model): Price | undefined;

Defined in: packages/runner/src/providers.ts:294

Price for a model id, accepting dated snapshots (gpt-5-mini-2025-08-07).

Parameters

ParameterType
modelstring

Returns

Price | undefined


runAgent()

function runAgent(opts): Promise<RunSummary>;

Defined in: packages/runner/src/agent.ts:146

Drives one seat with one LLM until the match is over, the budget is spent, signal aborts or another StopReason.

Parameters

ParameterType
optsRunAgentOptions

Returns

Promise<RunSummary>


startBridge()

function startBridge(opts): Promise<Bridge>;

Defined in: packages/runner/src/bridge.ts:91

Serves local discovery immediately, without claiming a remote credential. Resolves with truthful remote tools/hash only after the first non-discovery request acquires the endpoint.

Parameters

ParameterType
optsBridgeOptions

Returns

Promise<Bridge>


systemPrompt()

function systemPrompt(seat, game): string;

Defined in: packages/runner/src/agent.ts:67

Runner-authored system prompt. Embeds only static developer text: the game's manifest title and the first paragraph of its doc (from game_briefing game) and the server's instructions.

Parameters

ParameterType
seatRemoteSeat
game{ doc: string; title: string; }
game.docstring
game.titlestring

Returns

string