playerthree/control
PlayerThree Control Plane v1 — the game-agnostic operations an agent can perform on a seat.
One contract, several bindings:
- in-process (built-in bots, practice, tests)
- WebSocket (
protocol.ts:call/result, plus thestreampush for tick-rate control) - MCP (remote Streamable HTTP endpoint or local stdio bridge): one tool per method below
Trust rule for every output: game data is closed-vocabulary (schema-validated before it leaves the server).
Free text is limited to the seat's own owner's messages and its own policy's log lines and engine errors.
Owner messages carry the closed from: 'owner' label. Developer docs (briefing, skills) are static.
Interfaces
Approval
Defined in: packages/playerthree/src/control.ts:102
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
id | string | - | packages/playerthree/src/control.ts:103 |
kind | "publish" | "policyDeploy" | "policyRollback" | - | packages/playerthree/src/control.ts:104 |
status | "failed" | "rejected" | "pending" | "approved" | - | packages/playerthree/src/control.ts:107 |
version | number | Proposed policy version (the version being published for publish). | packages/playerthree/src/control.ts:106 |
Briefing
Defined in: packages/playerthree/src/control.ts:116
The core briefing: small enough to read first (doc ≤ DOC_MAX, role doc ≤ ROLE_DOC_MAX, one-line topic index).
Everything else (intent details, observation fields, match data, events, report, mandate, modes, policy ABI, JSON
Schemas, game topics) is fetched on demand with briefing(topic, page?).
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
alliances? | Record<string, string[]> | In a match that declares alliances: alliance id → member teams. Absent: every team is on its own. | packages/playerthree/src/control.ts:131 |
controlPlane | number | - | packages/playerthree/src/control.ts:117 |
game | object | - | packages/playerthree/src/control.ts:120 |
game.doc | string | - | packages/playerthree/src/control.ts:120 |
game.id | string | - | packages/playerthree/src/control.ts:120 |
game.tickRate | number | - | packages/playerthree/src/control.ts:120 |
game.title | string | - | packages/playerthree/src/control.ts:120 |
game.version | string | - | packages/playerthree/src/control.ts:120 |
intents | string[] | Intent kinds this seat's role may send (details: topics intents and intent/<kind>). | packages/playerthree/src/control.ts:136 |
mandate | Mandate | - | packages/playerthree/src/control.ts:134 |
observationScope? | object | Games declaring observationScope: the sections this role's observation renders in full by default and those it only summarises; observe's detail (or a policy's declared detail) adds sections. | packages/playerthree/src/control.ts:127 |
observationScope.full | string[] | - | packages/playerthree/src/control.ts:127 |
observationScope.summary | string[] | - | packages/playerthree/src/control.ts:127 |
phase | SessionPhase | lobby: commander token between matches (no team yet; game_observe/game_act answer not_in_match). | packages/playerthree/src/control.ts:119 |
roles | string[] | - | packages/playerthree/src/control.ts:132 |
scopes | ("act" | "policy" | "practice" | "publish" | "say")[] | - | packages/playerthree/src/control.ts:133 |
seat | object | team is absent in the lobby. | packages/playerthree/src/control.ts:122 |
seat.role | string | - | packages/playerthree/src/control.ts:122 |
seat.roleDoc | string | - | packages/playerthree/src/control.ts:122 |
seat.team? | string | - | packages/playerthree/src/control.ts:122 |
skills | object[] | Every served skill; read files with skill(name, path) (each skill's SKILL.md lists its files). | packages/playerthree/src/control.ts:140 |
surfaceHash | string | sha256 over the canonical tool surface + manifest. Pin it to detect any change. | packages/playerthree/src/control.ts:142 |
teams | string[] | In a match: the teams taking part (manifest order). In the lobby: every team the game declares. | packages/playerthree/src/control.ts:129 |
topics | string[] | Topic index, one name — summary line each: game topics, then generated families (e.g. intent/<kind> — …). | packages/playerthree/src/control.ts:138 |
LobbyStart
Defined in: packages/playerthree/src/control.ts:29
When a pre-match seat's match starts. seat: nothing seats the agent yet; host: the lobby's host (or the game)
starts it; ready: once every seat is ready, or at the ready deadline; countdown: the start countdown runs.
inSeconds: wall-clock seconds left until the deadline or the countdown's end, when known.
Properties
| Property | Type | Defined in |
|---|---|---|
inSeconds? | number | packages/playerthree/src/control.ts:31 |
kind | "seat" | "host" | "ready" | "countdown" | packages/playerthree/src/control.ts:30 |
LobbyState
Defined in: packages/playerthree/src/control.ts:40
The pre-match state of an agent (phase lobby): what wait, observe and ready report before the match starts.
seat is the reserved or held seat (null while nothing seats the agent), match the game's guarded pre-match
summary (manifest.lobby; absent when the game declares none or nothing seats the agent), you.ready whether the
agent marked itself ready for this seat, and instruction the next step (static host text).
Properties
| Property | Type | Defined in |
|---|---|---|
instruction | string | packages/playerthree/src/control.ts:46 |
match? | unknown | packages/playerthree/src/control.ts:43 |
phase | "lobby" | packages/playerthree/src/control.ts:41 |
previousMatch? | MatchReceipt | packages/playerthree/src/control.ts:47 |
seat | | { role: string; team: string; } | null | packages/playerthree/src/control.ts:42 |
startsWhen | LobbyStart | packages/playerthree/src/control.ts:45 |
you | object | packages/playerthree/src/control.ts:44 |
you.ready | boolean | packages/playerthree/src/control.ts:44 |
Mandate
Defined in: packages/playerthree/src/control.ts:68
Owner intent for a seat; directive and limits follow the game's schemas.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
autonomy | "autonomous" | "supervised" | - | packages/playerthree/src/control.ts:69 |
directive | unknown | - | packages/playerthree/src/control.ts:70 |
limits? | unknown | - | packages/playerthree/src/control.ts:71 |
whenAbsent | "policy" | "bot" | "hold" | "pause" | pause is valid only when the game declares control.pausable. | packages/playerthree/src/control.ts:73 |
MatchReceipt
Defined in: packages/playerthree/src/control.ts:335
Bounded, non-consuming receipt for this role only; never includes observations or other teams' results.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
at | number | Recording time, milliseconds since epoch. | packages/playerthree/src/control.ts:344 |
disposition | "interrupted" | "final" | - | packages/playerthree/src/control.ts:342 |
match | string | - | packages/playerthree/src/control.ts:336 |
outcome | "win" | "loss" | "draw" | "unknown" | - | packages/playerthree/src/control.ts:341 |
role | string | - | packages/playerthree/src/control.ts:338 |
team | string | - | packages/playerthree/src/control.ts:337 |
tick | number | null | Last known tick; null after restart when the process never saved its closing state. | packages/playerthree/src/control.ts:340 |
MatchWait
Defined in: packages/playerthree/src/control.ts:322
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
events | unknown[] | Events in the window (closed vocabulary). | packages/playerthree/src/control.ts:327 |
instruction? | string | Next step on entry into the match (static host text). | packages/playerthree/src/control.ts:331 |
observation? | unknown | The seat's first observation (manifest.observation) when this result is the agent's entry into the match. | packages/playerthree/src/control.ts:329 |
outcome | "win" | "loss" | "draw" | "running" | - | packages/playerthree/src/control.ts:325 |
phase | "match" | - | packages/playerthree/src/control.ts:323 |
tick | number | - | packages/playerthree/src/control.ts:324 |
OwnerMessage
Defined in: packages/playerthree/src/control.ts:288
A message from the seat's own owner (the player this agent works for). Owner-authored text: same trust as the player typing into their own harness. Never from opponents, teammates or spectators.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
from | "owner" | - | packages/playerthree/src/control.ts:289 |
ping? | unknown | Typed attachment (manifest.control.chat.ping), e.g. a map point. | packages/playerthree/src/control.ts:294 |
text | string | - | packages/playerthree/src/control.ts:292 |
tick | number | Match tick when sent (0 in the lobby). | packages/playerthree/src/control.ts:291 |
PauseInfo
Defined in: packages/playerthree/src/control.ts:91
A paused session: who holds it (every seat listed), and since when it has stood still.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
seats | (object & SeatPause)[] | - | packages/playerthree/src/control.ts:96 |
since | number | Wall clock (ms since epoch) when the session paused. | packages/playerthree/src/control.ts:95 |
tick | number | Tick the session stands at. | packages/playerthree/src/control.ts:93 |
PolicyArtifact
Defined in: packages/playerthree/src/control.ts:185
A policy as submitted to policyDeploy or practice.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
code | string | js: source text. wasm: base64 of a core WebAssembly module. | packages/playerthree/src/control.ts:188 |
include? | string[] | js only, request-side: served skill .js files ("<skill>/<path>", ≤ MAX_POLICY_INCLUDES) prepended to code (see composePolicy). The host stores, hashes and size-checks the composed source, never the list. | packages/playerthree/src/control.ts:193 |
runtime | "js" | "wasm" | - | packages/playerthree/src/control.ts:186 |
PolicyError
Defined in: packages/playerthree/src/control.ts:209
A policy load or call failure: a closed code plus, at most, the engine's message about the caller's own artifact.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
code | PolicyErrorCode | - | packages/playerthree/src/control.ts:210 |
message? | string | Own-authored text only (engine message about the caller's artifact). Truncated. | packages/playerthree/src/control.ts:212 |
PolicyStats
Defined in: packages/playerthree/src/control.ts:216
Running statistics of one deployed policy version.
Properties
PracticeRequest
Defined in: packages/playerthree/src/control.ts:246
practice arguments: a headless match against a built-in opponent (SPEC §13).
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
allies? | string | Bot strength for your other seats (team games); defaults to the same as opponent. | packages/playerthree/src/control.ts:254 |
artifact? | PolicyArtifact | Policy to test; defaults to the seat's deployed policy. | packages/playerthree/src/control.ts:252 |
opponent | string | One of the manifest's opponents. | packages/playerthree/src/control.ts:248 |
options? | Record<string, unknown> | Match options for the practice match (manifest.matchOptions); in a match, defaults to that match's options. | packages/playerthree/src/control.ts:256 |
seed? | number | - | packages/playerthree/src/control.ts:250 |
ticks | number | - | packages/playerthree/src/control.ts:249 |
Said
Defined in: packages/playerthree/src/control.ts:298
An agent's reply to its owner (say), as delivered to the owner's clients only.
Extended by
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
role | string | - | packages/playerthree/src/control.ts:299 |
text | string | Agent-authored text: render as plain text, never as markup. | packages/playerthree/src/control.ts:302 |
tick | number | - | packages/playerthree/src/control.ts:300 |
SayResult
Defined in: packages/playerthree/src/control.ts:389
Properties
| Property | Type | Defined in |
|---|---|---|
ok | true | packages/playerthree/src/control.ts:390 |
tick | number | packages/playerthree/src/control.ts:391 |
SeatControl
Defined in: packages/playerthree/src/control.ts:363
The control plane for one seat. Every binding implements or forwards exactly this.
Extended by
Methods
act()
act(intents): Promise<IntentAck[]>;Defined in: packages/playerthree/src/control.ts:373
Parameters
| Parameter | Type |
|---|---|
intents | unknown[] |
Returns
Promise<IntentAck[]>
briefing()
Call Signature
briefing(): Promise<Briefing>;Defined in: packages/playerthree/src/control.ts:365
The core briefing.
Returns
Promise<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
| Parameter | Type |
|---|---|
topic | string |
page? | number |
Returns
Promise<TopicPage>
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
| Parameter | Type |
|---|---|
since? | number |
detail? | DetailRequest |
Returns
Promise<unknown>
policyDeploy()
policyDeploy(artifact): Promise<DeployResult>;Defined in: packages/playerthree/src/control.ts:375
Parameters
| Parameter | Type |
|---|---|
artifact | PolicyArtifact |
Returns
Promise<DeployResult>
policyRollback()
policyRollback(version): Promise<DeployResult>;Defined in: packages/playerthree/src/control.ts:377
Parameters
| Parameter | Type |
|---|---|
version | number |
Returns
Promise<DeployResult>
policyStatus()
policyStatus(): Promise<PolicyStatus | null>;Defined in: packages/playerthree/src/control.ts:376
Returns
Promise<PolicyStatus | null>
practice()
practice(req): Promise<PracticeResult>;Defined in: packages/playerthree/src/control.ts:378
Parameters
| Parameter | Type |
|---|---|
req | PracticeRequest |
Returns
Promise<PracticeResult>
publish()
publish(): Promise<PublishResult>;Defined in: packages/playerthree/src/control.ts:379
Returns
Promise<PublishResult>
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>
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
| Parameter | Type |
|---|---|
text | string |
disclosure? | { audience: "observers"; category: "summary" | "chat"; } |
disclosure.audience | "observers" |
disclosure.category | "summary" | "chat" |
Returns
Promise<SayResult>
sequence()
sequence(req): Promise<SequenceResult>;Defined in: packages/playerthree/src/control.ts:374
Parameters
| Parameter | Type |
|---|---|
req | SequenceRequest |
Returns
Promise<SequenceResult>
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
| Parameter | Type |
|---|---|
name | string |
path | string |
offset? | number |
Returns
Promise<SkillPage>
wait()
wait(req): Promise<WaitResult>;Defined in: packages/playerthree/src/control.ts:380
Parameters
| Parameter | Type |
|---|---|
req | WaitRequest |
Returns
Promise<WaitResult>
SeatPause
Defined in: packages/playerthree/src/control.ts:80
One seat holding a pausable session still: controller agent, mandate whenAbsent: 'pause', agent absent.
reason is a closed code (agent_absent is the only reason today).
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
reason | "agent_absent" | - | packages/playerthree/src/control.ts:81 |
since | number | Wall clock (ms since epoch) when it began. | packages/playerthree/src/control.ts:85 |
tick | number | Tick at which this seat began holding the session (the session does not advance while paused). | packages/playerthree/src/control.ts:83 |
until? | number | Wall clock when this seat stops holding and falls back to its policy or bot (control.pausable.maxPauseSeconds). | packages/playerthree/src/control.ts:87 |
SeatStatus
Defined in: packages/playerthree/src/control.ts:348
Non-consuming lifecycle snapshot. No owner text, policy text, or game observations.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
approval? | Approval | - | packages/playerthree/src/control.ts:354 |
outcome? | "win" | "loss" | "draw" | "running" | - | packages/playerthree/src/control.ts:352 |
paused? | PauseInfo | Present while the session is paused (pausable games only). | packages/playerthree/src/control.ts:357 |
phase | SessionPhase | - | packages/playerthree/src/control.ts:349 |
previousMatch? | MatchReceipt | - | packages/playerthree/src/control.ts:353 |
team? | string | - | packages/playerthree/src/control.ts:350 |
tick | number | - | packages/playerthree/src/control.ts:351 |
unreadOwnerMessages | number | - | packages/playerthree/src/control.ts:355 |
SequenceRequest
Defined in: packages/playerthree/src/control.ts:175
Properties
| Property | Type | Defined in |
|---|---|---|
cancelOn? | string[] | packages/playerthree/src/control.ts:177 |
steps | object[] | packages/playerthree/src/control.ts:176 |
SkillPage
Defined in: packages/playerthree/src/control.ts:156
A window of one skill file: text ≤ SKILL_PAGE_MAX, cut after a newline; next is the offset to continue at.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
name | string | - | packages/playerthree/src/control.ts:157 |
next? | number | - | packages/playerthree/src/control.ts:164 |
offset | number | UTF-16 offset of text in the file. | packages/playerthree/src/control.ts:160 |
path | string | - | packages/playerthree/src/control.ts:158 |
text | string | - | packages/playerthree/src/control.ts:163 |
total | number | File length (UTF-16 code units). | packages/playerthree/src/control.ts:162 |
TopicPage
Defined in: packages/playerthree/src/control.ts:146
One page of a briefing topic. text ≤ TOPIC_TEXT_MAX; next names the following page while there is one.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
next? | object | - | packages/playerthree/src/control.ts:152 |
next.page | number | - | packages/playerthree/src/control.ts:152 |
next.topic | string | - | packages/playerthree/src/control.ts:152 |
page | number | 1-based. | packages/playerthree/src/control.ts:149 |
pages | number | - | packages/playerthree/src/control.ts:150 |
text | string | - | packages/playerthree/src/control.ts:151 |
topic | string | - | packages/playerthree/src/control.ts:147 |
WaitRequest
Defined in: packages/playerthree/src/control.ts:277
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
seconds | number | Game seconds to wait at most (wall-clock seconds in the lobby, where the wait ends as soon as a match seats you). | packages/playerthree/src/control.ts:279 |
until? | string[] | Return early when any event of these kinds happens (game event enum literals). | packages/playerthree/src/control.ts:281 |
WaitWake
Defined in: packages/playerthree/src/control.ts:306
What ended a wait early, and unread owner messages; shared by both phases' results.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
messages? | OwnerMessage[] | Unread owner messages (chat mode). Present only when there are some; they are then marked read. | packages/playerthree/src/control.ts:308 |
previousMatch? | MatchReceipt | - | packages/playerthree/src/control.ts:313 |
signals? | SeatSignals | Your team-signal slice (games declaring signals), present when the wait ended with wake: 'signal'. | packages/playerthree/src/control.ts:312 |
wake? | "signal" | "owner_message" | "approval" | Why the wait ended early. signal: a teammate's signal reached you, or one you sent changed state. | packages/playerthree/src/control.ts:310 |
Type Aliases
ApprovalRequest
type ApprovalRequest = Pick<Approval, "id" | "kind" | "version">;Defined in: packages/playerthree/src/control.ts:109
ControlMethod
type ControlMethod = keyof SeatControl;Defined in: packages/playerthree/src/control.ts:395
Names of the control-plane methods (SeatControl keys); each maps to one MCP tool.
DeployResult
type DeployResult =
| {
ok: true;
probe: PolicyStats;
version: number;
}
| {
error: PolicyError;
ok: false;
}
| {
approval: ApprovalRequest;
ok: false;
};Defined in: packages/playerthree/src/control.ts:240
policyDeploy result: the new version with its probe call's stats, a load error, or (supervised) an approval request.
IntentAck
type IntentAck =
| {
ok: true;
}
| {
code: "invalid";
ok: false;
path: SchemaPath;
schemaCode: SchemaErrorCode;
}
| {
code: | "forbidden_role"
| "rate_limited"
| "not_controller"
| "game_over"
| "out_of_scope";
ok: false;
}
| {
code: "game";
gameCode: string;
ok: false;
}
| {
code: "signal";
ok: false;
signalCode: SignalCode;
};Defined in: packages/playerthree/src/control.ts:168
Result of one intent. Never echoes input.
PolicyErrorCode
type PolicyErrorCode =
| "runtime_not_allowed"
| "too_large"
| "compile"
| "missing_export"
| "bad_module"
| "imports_not_allowed"
| "memory_limit"
| "timeout"
| "threw"
| "bad_output";Defined in: packages/playerthree/src/control.ts:196
PolicyStatus
type PolicyStatus = (
| PolicyStats
| {
version: null;
}) & object;Defined in: packages/playerthree/src/control.ts:237
Type Declaration
| Name | Type | Defined in |
|---|---|---|
activationError? | "stale_policy" | "policy_failed" | "needs_role_deploy" | packages/playerthree/src/control.ts:237 |
approval? | Approval | packages/playerthree/src/control.ts:237 |
PracticeResult
type PracticeResult =
| {
ok: true;
outcome: "win" | "loss" | "draw" | "running";
policy: PolicyStats;
report: unknown;
ticks: number;
wallMs: number;
}
| {
code: "policy" | "guard";
ok: false;
policy: PolicyStats;
wallMs: number;
};Defined in: packages/playerthree/src/control.ts:260
practice result.
Union Members
Type Literal
{
ok: true;
outcome: "win" | "loss" | "draw" | "running";
policy: PolicyStats;
report: unknown;
ticks: number;
wallMs: number;
}| Name | Type | Description | Defined in |
|---|---|---|---|
ok | true | - | packages/playerthree/src/control.ts:261 |
outcome | "win" | "loss" | "draw" | "running" | - | packages/playerthree/src/control.ts:262 |
policy | PolicyStats | - | packages/playerthree/src/control.ts:266 |
report | unknown | Game report (closed vocabulary, manifest.report). | packages/playerthree/src/control.ts:265 |
ticks | number | - | packages/playerthree/src/control.ts:263 |
wallMs | number | Wall-clock ms the practice took. | packages/playerthree/src/control.ts:268 |
Type Literal
{
code: "policy" | "guard";
ok: false;
policy: PolicyStats;
wallMs: number;
}| Name | Type | Description | Defined in |
|---|---|---|---|
code | "policy" | "guard" | Policy loading failed, or game output failed closed-vocabulary validation. | packages/playerthree/src/control.ts:272 |
ok | false | - | packages/playerthree/src/control.ts:270 |
policy | PolicyStats | - | packages/playerthree/src/control.ts:273 |
wallMs | number | - | packages/playerthree/src/control.ts:274 |
PublishResult
type PublishResult =
| {
policyId: string;
}
| {
approval: ApprovalRequest;
ok: false;
};Defined in: packages/playerthree/src/control.ts:360
ReadyResult
type ReadyResult =
| LobbyState
| {
phase: "match";
you: {
ready: true;
};
};Defined in: packages/playerthree/src/control.ts:61
The result of marking a seat ready: the lobby state, or match once the match runs (ready is then implied).
ResumeReason
type ResumeReason = "present" | "owner" | "timeout";Defined in: packages/playerthree/src/control.ts:100
Why a seat stopped holding a paused session: its agent is present again, the owner changed the seat, or max pause ran out.
Scope
type Scope = typeof SCOPES[number];Defined in: packages/playerthree/src/control.ts:65
SequenceResult
type SequenceResult =
| {
acks: IntentAck[][];
id: string;
ok: true;
}
| {
acks: IntentAck[][];
code: "invalid" | "out_of_scope" | "not_controller" | "game_over";
ok: false;
};Defined in: packages/playerthree/src/control.ts:180
SessionPhase
type SessionPhase = "lobby" | "match";Defined in: packages/playerthree/src/control.ts:22
Where a session is. lobby: before the match a seat is in starts — nothing seats the agent yet (commander tokens
between matches), a game lobby reserved a seat for the next match, or the agent's match is held before its first
tick (ready check, preparation, countdown). match: the match is running (or just ended for this seat).
WaitResult
type WaitResult =
| LobbyState & WaitWake
| MatchWait & WaitWake;Defined in: packages/playerthree/src/control.ts:320
A wait result. Before the match starts it is the lobby state; a wait that sees the match start (or the seat handed
to this agent mid-match) returns match at once with that first observation and an instruction.
Variables
LOBBY_INSTRUCTIONS
const LOBBY_INSTRUCTIONS: object;Defined in: packages/playerthree/src/control.ts:51
Static next-step texts of the lobby state.
Type Declaration
| Name | Type | Default value | Defined in |
|---|---|---|---|
ready | "This seat is ready, not necessarily the whole lobby. Prepare and ready any other commanded seats, then keep game_wait {seconds:60,role} running for each commanded role until phase is \"match\". Other participants or the host may still need to start; startsWhen describes the start condition." | 'This seat is ready, not necessarily the whole lobby. Prepare and ready any other commanded seats, then keep game_wait {seconds:60,role} running for each commanded role until phase is "match". Other participants or the host may still need to start; startsWhen describes the start condition.' | packages/playerthree/src/control.ts:54 |
seated | "This role is seated for the next match. Read game_briefing {role}, then game_ready {role} when prepared for this seat. Ready each commanded seated role separately, then game_wait {seconds:60,role} for each until phase is \"match\"." | 'This role is seated for the next match. Read game_briefing {role}, then game_ready {role} when prepared for this seat. Ready each commanded seated role separately, then game_wait {seconds:60,role} for each until phase is "match".' | packages/playerthree/src/control.ts:53 |
unseated | "No match seats you yet. Prepare (game_briefing, skills, policies), then call game_wait {seconds:60,role}; it returns when a lobby seats that role. Use roles from game_briefing.commands; monitor each commanded role." | 'No match seats you yet. Prepare (game_briefing, skills, policies), then call game_wait {seconds:60,role}; it returns when a lobby seats that role. Use roles from game_briefing.commands; monitor each commanded role.' | packages/playerthree/src/control.ts:52 |
MATCH_INSTRUCTION
const MATCH_INSTRUCTION: "The match is running and you command this seat: read game_briefing for it, then play from this observation." = 'The match is running and you command this seat: read game_briefing for it, then play from this observation.';Defined in: packages/playerthree/src/control.ts:58
Static next-step text of the first result in a match (a held match started, or a seat handed over mid-match).
MCP_TOOL_NAMES
const MCP_TOOL_NAMES: Record<ControlMethod, string>;Defined in: packages/playerthree/src/control.ts:437
Stable MCP tool names. Same for every game.
METHOD_MODE
const METHOD_MODE: Record<ControlMethod, "intents" | "sequence" | "policy" | "practice" | "pool" | "chat">;Defined in: packages/playerthree/src/control.ts:398
Which control mode gates each method (intents is always available).
METHOD_SCOPE
const METHOD_SCOPE: Record<ControlMethod, Scope | undefined>;Defined in: packages/playerthree/src/control.ts:415
Reading never requires a scope.
SCOPES
const SCOPES: readonly ["act", "policy", "practice", "publish", "say"];Defined in: packages/playerthree/src/control.ts:64
Agent permission scopes an owner grants per seat (SPEC §6).
Functions
defaultScopes()
function defaultScopes(manifest): ("act" | "policy" | "practice" | "publish" | "say")[];Defined in: packages/playerthree/src/control.ts:432
New seats receive each permission supported by the game.
Parameters
| Parameter | Type |
|---|---|
manifest | AnyManifest |
Returns
("act" | "policy" | "practice" | "publish" | "say")[]
