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 the stream push 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

PropertyTypeDescriptionDefined in
idstring-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
versionnumberProposed 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

PropertyTypeDescriptionDefined 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
controlPlanenumber-packages/playerthree/src/control.ts:117
gameobject-packages/playerthree/src/control.ts:120
game.docstring-packages/playerthree/src/control.ts:120
game.idstring-packages/playerthree/src/control.ts:120
game.tickRatenumber-packages/playerthree/src/control.ts:120
game.titlestring-packages/playerthree/src/control.ts:120
game.versionstring-packages/playerthree/src/control.ts:120
intentsstring[]Intent kinds this seat's role may send (details: topics intents and intent/<kind>).packages/playerthree/src/control.ts:136
mandateMandate-packages/playerthree/src/control.ts:134
observationScope?objectGames 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.fullstring[]-packages/playerthree/src/control.ts:127
observationScope.summarystring[]-packages/playerthree/src/control.ts:127
phaseSessionPhaselobby: commander token between matches (no team yet; game_observe/game_act answer not_in_match).packages/playerthree/src/control.ts:119
rolesstring[]-packages/playerthree/src/control.ts:132
scopes("act" | "policy" | "practice" | "publish" | "say")[]-packages/playerthree/src/control.ts:133
seatobjectteam is absent in the lobby.packages/playerthree/src/control.ts:122
seat.rolestring-packages/playerthree/src/control.ts:122
seat.roleDocstring-packages/playerthree/src/control.ts:122
seat.team?string-packages/playerthree/src/control.ts:122
skillsobject[]Every served skill; read files with skill(name, path) (each skill's SKILL.md lists its files).packages/playerthree/src/control.ts:140
surfaceHashstringsha256 over the canonical tool surface + manifest. Pin it to detect any change.packages/playerthree/src/control.ts:142
teamsstring[]In a match: the teams taking part (manifest order). In the lobby: every team the game declares.packages/playerthree/src/control.ts:129
topicsstring[]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

PropertyTypeDefined in
inSeconds?numberpackages/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


Mandate

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

Owner intent for a seat; directive and limits follow the game's schemas.

Properties

PropertyTypeDescriptionDefined in
autonomy"autonomous" | "supervised"-packages/playerthree/src/control.ts:69
directiveunknown-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

PropertyTypeDescriptionDefined in
atnumberRecording time, milliseconds since epoch.packages/playerthree/src/control.ts:344
disposition"interrupted" | "final"-packages/playerthree/src/control.ts:342
matchstring-packages/playerthree/src/control.ts:336
outcome"win" | "loss" | "draw" | "unknown"-packages/playerthree/src/control.ts:341
rolestring-packages/playerthree/src/control.ts:338
teamstring-packages/playerthree/src/control.ts:337
ticknumber | nullLast 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

PropertyTypeDescriptionDefined in
eventsunknown[]Events in the window (closed vocabulary).packages/playerthree/src/control.ts:327
instruction?stringNext step on entry into the match (static host text).packages/playerthree/src/control.ts:331
observation?unknownThe 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
ticknumber-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

PropertyTypeDescriptionDefined in
from"owner"-packages/playerthree/src/control.ts:289
ping?unknownTyped attachment (manifest.control.chat.ping), e.g. a map point.packages/playerthree/src/control.ts:294
textstring-packages/playerthree/src/control.ts:292
ticknumberMatch 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

PropertyTypeDescriptionDefined in
seats(object & SeatPause)[]-packages/playerthree/src/control.ts:96
sincenumberWall clock (ms since epoch) when the session paused.packages/playerthree/src/control.ts:95
ticknumberTick 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

PropertyTypeDescriptionDefined in
codestringjs: 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

PropertyTypeDescriptionDefined in
codePolicyErrorCode-packages/playerthree/src/control.ts:210
message?stringOwn-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

PropertyTypeDescriptionDefined in
callsnumberCalls since this version was deployed.packages/playerthree/src/control.ts:220
consecutiveFailuresnumberFailed calls/restarts since the last successful decision.packages/playerthree/src/control.ts:224
errorsnumber-packages/playerthree/src/control.ts:226
intentsEmittednumber-packages/playerthree/src/control.ts:230
intentsRejectedobject[]-packages/playerthree/src/control.ts:231
lastError?PolicyError-packages/playerthree/src/control.ts:232
logsstring[]Tail of the policy's own log() output.packages/playerthree/src/control.ts:234
maxMsnumber-packages/playerthree/src/control.ts:229
meanMsnumberMean / max wall time per call, ms.packages/playerthree/src/control.ts:228
runtime"js" | "wasm"-packages/playerthree/src/control.ts:218
successfulCallsnumberSuccessful decisions, including a valid empty intent list.packages/playerthree/src/control.ts:222
timeoutsnumber-packages/playerthree/src/control.ts:225
versionnumber-packages/playerthree/src/control.ts:217

PracticeRequest

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

practice arguments: a headless match against a built-in opponent (SPEC §13).

Properties

PropertyTypeDescriptionDefined in
allies?stringBot strength for your other seats (team games); defaults to the same as opponent.packages/playerthree/src/control.ts:254
artifact?PolicyArtifactPolicy to test; defaults to the seat's deployed policy.packages/playerthree/src/control.ts:252
opponentstringOne 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
ticksnumber-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

PropertyTypeDescriptionDefined in
rolestring-packages/playerthree/src/control.ts:299
textstringAgent-authored text: render as plain text, never as markup.packages/playerthree/src/control.ts:302
ticknumber-packages/playerthree/src/control.ts:300

SayResult

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

Properties


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
ParameterType
intentsunknown[]
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
ParameterType
topicstring
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
ParameterType
since?number
detail?DetailRequest
Returns

Promise<unknown>

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

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

Parameters
ParameterType
artifactPolicyArtifact
Returns

Promise<DeployResult>

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

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

Parameters
ParameterType
versionnumber
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
ParameterType
reqPracticeRequest
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
ParameterType
textstring
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
ParameterType
reqSequenceRequest
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
ParameterType
namestring
pathstring
offset?number
Returns

Promise<SkillPage>

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

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

Parameters
ParameterType
reqWaitRequest
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

PropertyTypeDescriptionDefined in
reason"agent_absent"-packages/playerthree/src/control.ts:81
sincenumberWall clock (ms since epoch) when it began.packages/playerthree/src/control.ts:85
ticknumberTick at which this seat began holding the session (the session does not advance while paused).packages/playerthree/src/control.ts:83
until?numberWall 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


SequenceRequest

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

Properties

PropertyTypeDefined in
cancelOn?string[]packages/playerthree/src/control.ts:177
stepsobject[]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

PropertyTypeDescriptionDefined in
namestring-packages/playerthree/src/control.ts:157
next?number-packages/playerthree/src/control.ts:164
offsetnumberUTF-16 offset of text in the file.packages/playerthree/src/control.ts:160
pathstring-packages/playerthree/src/control.ts:158
textstring-packages/playerthree/src/control.ts:163
totalnumberFile 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


WaitRequest

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

Properties

PropertyTypeDescriptionDefined in
secondsnumberGame 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

PropertyTypeDescriptionDefined 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?SeatSignalsYour 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

NameTypeDefined in
activationError?"stale_policy" | "policy_failed" | "needs_role_deploy"packages/playerthree/src/control.ts:237
approval?Approvalpackages/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;
}
NameTypeDescriptionDefined in
oktrue-packages/playerthree/src/control.ts:261
outcome"win" | "loss" | "draw" | "running"-packages/playerthree/src/control.ts:262
policyPolicyStats-packages/playerthree/src/control.ts:266
reportunknownGame report (closed vocabulary, manifest.report).packages/playerthree/src/control.ts:265
ticksnumber-packages/playerthree/src/control.ts:263
wallMsnumberWall-clock ms the practice took.packages/playerthree/src/control.ts:268

Type Literal
{
  code: "policy" | "guard";
  ok: false;
  policy: PolicyStats;
  wallMs: number;
}
NameTypeDescriptionDefined in
code"policy" | "guard"Policy loading failed, or game output failed closed-vocabulary validation.packages/playerthree/src/control.ts:272
okfalse-packages/playerthree/src/control.ts:270
policyPolicyStats-packages/playerthree/src/control.ts:273
wallMsnumber-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

NameTypeDefault valueDefined 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

ParameterType
manifestAnyManifest

Returns

("act" | "policy" | "practice" | "publish" | "say")[]