Scenarios
The versioned ScenarioDefinition wire, connector references, and every generated object field.
Contract identity
This reference is generated from the released scenario.schema.json bytes the Terrarium SDK ships. It documents schema version 1 with SHA-256 6b007c8f5151627ee95720d56a46d24c3636e77df8075eefc6b9972b826bc488. schema_version travels inside the document, so a scenario written against this version keeps its meaning as the contract grows.
Minimal typed document
A scenario is a closed object. Unknown fields fail validation; omitted optional fields take the generated defaults shown below.
{
"agents": [
{
"location": "the square",
"name": "Ana"
}
],
"locations": [
{
"name": "the square"
}
],
"name": "A short world",
"schema_version": 1
}Connector references
A brain selects a registered route by kind, connector id, and API mode. The same reference shape is used by agent, physics, resident, and seat brains. Registration records are documented under HostedConnector and CustomerConnector.
Scenario documents contain only public references and simulation law. Credentials, request headers, transport policy, and connector endpoints do not belong in a ScenarioDefinition. Customer endpoints and relay audiences live on separately registered customer connector records.
| Vocabulary | Values |
|---|---|
| Connector kinds | hosted, customer |
| Connector protocols | demosyne.hosted.v1, demosyne.signed-invocation.v1 |
| Model API modes | openai.responses.v1, openai.chat.v1 |
Use Characters for brain configuration.
ScenarioDefinition fields
| Field | Type and constraints |
|---|---|
agent_brainOptional | BrainSpec | nullDefault nullNo additional bounds |
agentsOptional | array<PersonSpec> | nullDefault nullmaximum items 100000 |
broadcastsOptional | array<ScheduledBroadcastSpec>No defaultmaximum items 100000 |
channelsOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 200 |
character_cuesOptional | array<CharacterCueSpec>No defaultmaximum items 100000 |
day_end_hourOptional | integer | nullDefault nullminimum 1; maximum 24 |
day_start_hourOptional | integer | nullDefault nullminimum 0; maximum 23 |
eventsOptional | array<EventSpec>No defaultmaximum items 100000 |
locationsOptional | array<LocationSpec>No defaultmaximum items 100000 |
max_conversation_turnsOptional | integer | nullDefault nullminimum 1; maximum 1000 |
nameOptional | string | nullDefault nullminimum length 1; maximum length 200 |
num_daysOptional | integer | nullDefault nullminimum 1; maximum 3650 |
originOptional | object<string, any JSON value> | nullDefault nullNo additional bounds |
physics_brainOptional | BrainSpec | nullDefault nullNo additional bounds |
physics_instructionsOptional | string | nullDefault nullminimum length 1; maximum length 1000000 |
presentationOptional | object<string, any JSON value> | nullDefault nullNo additional bounds |
probesOptional | array<ProbeSpec>No defaultmaximum items 10000 |
schema_versionOptional | 1Default 1constant 1 |
seatsOptional | array<PersonSpec>No defaultmaximum items 100000 |
seedOptional | integer | nullDefault nullNo additional bounds |
start_dateOptional | string | nullDefault nullpattern ^\d{4}-\d{2}-\d{2}$ |
ticks_per_dayOptional | integer | nullDefault nullminimum 1; maximum 1440 |
Object definitions
BrainSpec
| Field | Type and constraints |
|---|---|
connectorOptional | HostedConnectorRef | CustomerConnectorRef | nullDefault nullNo additional bounds |
max_tokensOptional; deprecated | integer | nullDefault nullminimum 1; maximum 1000000 |
openai_modelOptional; deprecated | string | nullDefault nullminimum length 1; maximum length 200 |
openai_service_tierOptional; deprecated | string | nullDefault nullminimum length 1; maximum length 64 |
reasoning_effortOptional | string | nullDefault nullminimum length 1; maximum length 32 |
tool_choiceOptional | string | nullDefault nullminimum length 1; maximum length 128 |
CharacterCueSpec
| Field | Type and constraints |
|---|---|
datesOptional | array<string>No defaultitems: format date |
excludeOptional | array<string>No defaultNo additional bounds |
nameRequired | stringNo defaultminimum length 1; maximum length 200 |
targetsOptional | array<string>No defaultNo additional bounds |
textRequired | stringNo defaultminimum length 1; maximum length 1000000 |
timesRequired | array<string>No defaultminimum items 1; items: format time |
ConnectorCapabilities
| Field | Type and constraints |
|---|---|
max_context_tokensRequired | integerNo defaultminimum 1; maximum 10000000 |
max_output_tokensRequired | integerNo defaultminimum 1; maximum 1000000 |
reasoningRequired | booleanNo defaultNo additional bounds |
structured_outputsRequired | booleanNo defaultNo additional bounds |
toolsRequired | booleanNo defaultNo additional bounds |
CustomerConnector
| Field | Type and constraints |
|---|---|
api_modesRequired | array<ModelApi>No defaultminimum items 1; maximum items 2 |
audienceRequired | stringNo defaultminimum length 1; maximum length 512 |
capabilitiesRequired | ConnectorCapabilitiesNo defaultNo additional bounds |
enabledOptional | booleanDefault trueNo additional bounds |
endpointRequired | stringNo defaultminimum length 1; maximum length 2083; format uri |
generation_defaultsOptional | GenerationDefaultsNo defaultNo additional bounds |
idRequired | stringNo defaultminimum length 1; maximum length 128 |
kindOptional | "customer"Default "customer"constant "customer" |
modelRequired | stringNo defaultminimum length 1; maximum length 200 |
nameRequired | stringNo defaultminimum length 1; maximum length 200 |
organization_idRequired | stringNo defaultformat uuid |
protocolOptional | "demosyne.signed-invocation.v1"Default "demosyne.signed-invocation.v1"constant "demosyne.signed-invocation.v1" |
schema_versionOptional | 1Default 1constant 1 |
CustomerConnectorRef
| Field | Type and constraints |
|---|---|
api_modeRequired | ModelApiNo defaultNo additional bounds |
connector_idRequired | stringNo defaultminimum length 1; maximum length 128 |
kindOptional | "customer"Default "customer"constant "customer" |
EventSpec
| Field | Type and constraints |
|---|---|
locationsOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 200 |
nameRequired | stringNo defaultminimum length 1; maximum length 200 |
textRequired | stringNo defaultminimum length 1; maximum length 1000000 |
ticksRequired | array<integer>No defaultminimum items 1; maximum items 100000; items: minimum 0 |
GenerationDefaults
| Field | Type and constraints |
|---|---|
max_output_tokensOptional | integer | nullDefault nullminimum 1; maximum 1000000 |
reasoning_effortOptional | string | nullDefault nullminimum length 1; maximum length 32 |
service_tierOptional | string | nullDefault nullminimum length 1; maximum length 64 |
temperatureOptional | number | nullDefault nullminimum 0; maximum 2 |
top_pOptional | number | nullDefault nullexclusive minimum 0; maximum 1 |
HostedConnector
| Field | Type and constraints |
|---|---|
api_modesRequired | array<ModelApi>No defaultminimum items 1; maximum items 2 |
capabilitiesRequired | ConnectorCapabilitiesNo defaultNo additional bounds |
enabledOptional | booleanDefault trueNo additional bounds |
generation_defaultsOptional | GenerationDefaultsNo defaultNo additional bounds |
idRequired | stringNo defaultminimum length 1; maximum length 128 |
kindOptional | "hosted"Default "hosted"constant "hosted" |
modelRequired | stringNo defaultminimum length 1; maximum length 200 |
nameRequired | stringNo defaultminimum length 1; maximum length 200 |
protocolOptional | "demosyne.hosted.v1"Default "demosyne.hosted.v1"constant "demosyne.hosted.v1" |
schema_versionOptional | 1Default 1constant 1 |
HostedConnectorRef
| Field | Type and constraints |
|---|---|
api_modeRequired | ModelApiNo defaultNo additional bounds |
connector_idRequired | stringNo defaultminimum length 1; maximum length 128 |
kindOptional | "hosted"Default "hosted"constant "hosted" |
LocationMapPresentation
| Field | Type and constraints |
|---|---|
is_publicRequired | booleanNo defaultNo additional bounds |
typeRequired | stringNo defaultminimum length 1; maximum length 200 |
LocationPresentation
| Field | Type and constraints |
|---|---|
simulation_mapOptional | LocationMapPresentation | nullDefault nullNo additional bounds |
typeOptional; deprecated | string | nullDefault nullminimum length 1; maximum length 200 |
LocationSpec
| Field | Type and constraints |
|---|---|
invisibleOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 1000000 |
kindOptional | string | nullDefault nullminimum length 1; maximum length 200 |
nameRequired | stringNo defaultminimum length 1; maximum length 200 |
presentationOptional | LocationPresentation | nullDefault nullNo additional bounds |
privateOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 1000000 |
receivesOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 200 |
residentsOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 200 |
visibleOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 1000000 |
PersonMapPresentation
| Field | Type and constraints |
|---|---|
is_candidateOptional | booleanDefault falseNo additional bounds |
roleRequired | stringNo defaultminimum length 1; maximum length 200 |
PersonPresentation
| Field | Type and constraints |
|---|---|
roleOptional; deprecated | string | nullDefault nullminimum length 1; maximum length 200 |
simulation_mapOptional | PersonMapPresentation | nullDefault nullNo additional bounds |
PersonSpec
| Field | Type and constraints |
|---|---|
brainOptional | BrainSpec | nullDefault nullNo additional bounds |
invisibleOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 1000000 |
locationOptional | string | nullDefault nullminimum length 1; maximum length 200 |
nameRequired | stringNo defaultminimum length 1; maximum length 200 |
personaOptional | string | nullDefault nullminimum length 1; maximum length 1000000 |
presentationOptional | PersonPresentation | nullDefault nullNo additional bounds |
privateOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 1000000 |
receivesOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 200 |
speechOptional | SpeechSpec | nullDefault nullNo additional bounds |
syspromptOptional | string | nullDefault nullminimum length 1; maximum length 1000000 |
visibleOptional | array<string>No defaultmaximum items 10000; items: minimum length 1; items: maximum length 1000000 |
ProbeMapPresentation
| Field | Type and constraints |
|---|---|
choice_mapRequired | object<string, string>No defaultminimum properties 1; maximum properties 10000; property names: minimum length 1; property names: maximum length 200; values: minimum length 1; values: maximum length 200 |
metricRequired | "voter_lean"No defaultconstant "voter_lean" |
ProbePresentation
| Field | Type and constraints |
|---|---|
simulation_mapRequired | ProbeMapPresentationNo defaultNo additional bounds |
ProbeResultContract
| Field | Type and constraints |
|---|---|
schemaRequired | object<string, JsonValue>No defaultNo additional bounds |
schema_idRequired | stringNo defaultminimum length 1 |
versionRequired | integerNo defaultminimum 1 |
ProbeSpec
| Field | Type and constraints |
|---|---|
excludeOptional | array<string>No defaultNo additional bounds |
nameRequired | stringNo defaultminimum length 1 |
presentationOptional | ProbePresentation | nullDefault nullNo additional bounds |
questionRequired | stringNo defaultminimum length 1 |
resultOptional | ProbeResultContract | nullDefault nullNo additional bounds |
targetsRequired | array<string>No defaultNo additional bounds |
ticksRequired | array<integer>No defaultminimum items 1; items: minimum 0 |
ScheduledBroadcastSpec
| Field | Type and constraints |
|---|---|
channelRequired | stringNo defaultminimum length 1; maximum length 200 |
contentRequired | stringNo defaultminimum length 1; maximum length 1000000 |
tickRequired | integerNo defaultminimum 0 |
SpeechSpec
| Field | Type and constraints |
|---|---|
speakerRequired | stringNo defaultminimum length 1; maximum length 200 |