gradeNot graded
start_roundAction
Start or rematch. Call this from the lobby to begin round one, and call it again whenever status reports phase "over" to begin the next round. It starts the three-second countdown and resets both characters. If a round is already active, it returns the current phase without restarting. After a finished round the human must press Ready first: while they have not, the result says waiting_for "human" with retry_in_seconds — wait, then call start_round again until started is true. This does not move the human hider.
View tool JSON
{
"name": "start_round",
"kind": "act",
"impl": "imperative",
"description": "Start or rematch. Call this from the lobby to begin round one, and call it again whenever status reports phase \"over\" to begin the next round. It starts the three-second countdown and resets both characters. If a round is already active, it returns the current phase without restarting. After a finished round the human must press Ready first: while they have not, the result says waiting_for \"human\" with retry_in_seconds — wait, then call start_round again until started is true. This does not move the human hider.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}briefingAction
READ THIS FIRST. Returns the complete briefing for playing the Seeker: your objective, the automatic senses and the reflex strike, the action-point pacing rules, every tool with its cost, what the hiding human can do (and the noise, scent or glow each of their actions leaks), HOW TO WRITE AND IMPROVE YOUR DAEMON SCRIPT (the way this game is won), and the required autonomous action loop. Free, no cooldown, no game effect. Call it once before anything else, then keep acting without waiting for another prompt.
View tool JSON
{
"name": "briefing",
"kind": "act",
"impl": "imperative",
"description": "READ THIS FIRST. Returns the complete briefing for playing the Seeker: your objective, the automatic senses and the reflex strike, the action-point pacing rules, every tool with its cost, what the hiding human can do (and the noise, scent or glow each of their actions leaks), HOW TO WRITE AND IMPROVE YOUR DAEMON SCRIPT (the way this game is won), and the required autonomous action loop. Free, no cooldown, no game effect. Call it once before anything else, then keep acting without waiting for another prompt.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}get_arenaAnswer
Returns the arena: dimensions and the FIXED walls as ASCII rows (# wall, . floor). Coordinates are [x,y] cells, [0,0] top-left, x east, y south. The human can build NEW walls mid-round; those are not in this map — spot them with look(). Free, call once.
View tool JSON
{
"name": "get_arena",
"kind": "answer",
"impl": "imperative",
"description": "Returns the arena: dimensions and the FIXED walls as ASCII rows (# wall, . floor). Coordinates are [x,y] cells, [0,0] top-left, x east, y south. The human can build NEW walls mid-round; those are not in this map — spot them with look(). Free, call once.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}statusAnswer
Your senses run themselves — once per second the body records a frame: glows seen (the hider and decoys look IDENTICAL), built_walls (player-built), scent underfoot {strength 0-10, freshness, freshest_at (the trail's local head as a cell — walk there, then ride flow), gradient (toward the trail), flow (the way the hider was HEADING — follow it), character: "uniform" means decoy}, scent_seen (the FRESHEST visible trail mark — the trail's living end; run at it; up close marks are seen all-round, so a crossed trail is never lost behind you), sounds heard, sonar_distance (the radar auto-fires every 8s: exact distance, no direction — the hider sees it), and reflex reports when your body lunged. status returns every frame recorded since your previous status call (up to 12, oldest first; empty senses are omitted) plus now: position, facing, AP, stun, time, next sonar. Free, at most twice per second.
View tool JSON
{
"name": "status",
"kind": "answer",
"impl": "imperative",
"description": "Your senses run themselves — once per second the body records a frame: glows seen (the hider and decoys look IDENTICAL), built_walls (player-built), scent underfoot {strength 0-10, freshness, freshest_at (the trail's local head as a cell — walk there, then ride flow), gradient (toward the trail), flow (the way the hider was HEADING — follow it), character: \"uniform\" means decoy}, scent_seen (the FRESHEST visible trail mark — the trail's living end; run at it; up close marks are seen all-round, so a crossed trail is never lost behind you), sounds heard, sonar_distance (the radar auto-fires every 8s: exact distance, no direction — the hider sees it), and reflex reports when your body lunged. status returns every frame recorded since your previous status call (up to 12, oldest first; empty senses are omitted) plus now: position, facing, AP, stun, time, next sonar. Free, at most twice per second.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}moveAction
Move 1-3 tiles in a compass direction (n/ne/e/se/s/sw/w/nw). Walls and the arena edge stop you early. Moving turns you — your view cone faces your last direction. Pass {dash: true} to BURST up to 6 tiles in a straight line for 2 AP — the fastest way to cross open ground or close on a distant glow. THE STRIKE IS A REFLEX: come within ~1.25 tiles of a glow and your body lunges on its own — the real hider is caught (round won), a decoy shatters (3s stun). You never aim the strike; you only steer toward it.
View tool JSON
{
"name": "move",
"kind": "act",
"impl": "imperative",
"description": "Move 1-3 tiles in a compass direction (n/ne/e/se/s/sw/w/nw). Walls and the arena edge stop you early. Moving turns you — your view cone faces your last direction. Pass {dash: true} to BURST up to 6 tiles in a straight line for 2 AP — the fastest way to cross open ground or close on a distant glow. THE STRIKE IS A REFLEX: come within ~1.25 tiles of a glow and your body lunges on its own — the real hider is caught (round won), a decoy shatters (3s stun). You never aim the strike; you only steer toward it.",
"inputSchema": {
"type": "object",
"properties": {
"direction": {
"type": "string",
"description": "compass direction: n, ne, e, se, s, sw, w, nw"
},
"steps": {
"type": "integer",
"minimum": 1,
"maximum": 6,
"description": "default 1 (dash: default 6)"
},
"dash": {
"type": "boolean",
"description": "burst up to 6 tiles straight for 2 AP"
}
},
"required": [
"direction"
],
"additionalProperties": false
}
}deploy_daemonAction
A FACTORY daemon (generation 0) is already steering the body when the round starts — it rides trails, chases glows, sweeps the arena. Competent, not clever: it knows nothing about this prey, this maze, or anything strange it walks past. Its exact source is in briefing.the_daemon.factory_source; status().daemon shows how it is doing. Your deploy replaces it with generation 1. Write your body a program. Pass {source}: the BODY of a JavaScript function, called about every 0.8s of game time while the round plays. It receives one argument, `bot`, with READY-MADE building blocks: bot.hunt() — the complete factory chase policy in one call; bot.investigate() — the discover policy (map the arena, stand on strange readings); bot.drive(dir) — FREE continuous walking (~2.9 tiles/s) in that direction until told otherwise, plane only — this is how the body flows, and only a daemon can do it; bot.goto(x, y) — wall-aware navigation: the body walks to that cell and stops ON it (call it every tick; it returns the heading under way, null once there); bot.dash(dir) — 6-tile burst, 2 AP; bot.explore() — the direction toward the nearest floor nobody has walked; bot.move(dir, steps) — discrete, 1 AP; bot.sense() — the latest sense frame; bot.self() — free {x,y,z,facing,ap,mode,stunned_for,time_left,heading,moving,pacing} (moving=false: it was told to walk and went nowhere — turn; pacing>0: it is going back and forth — drop the lead, explore); bot.mem — persists across ticks AND rewrites; bot.log(msg) — your debug trail, read back in status().daemon.log. Compose them: the whole factory firmware is two lines. Keep each tick tiny and synchronous; 5 consecutive crashes decommission it. Redeploying replaces the daemon (10s cooldown, bot.mem survives) — move continuously, rewrite deliberately: ship a new generation when telemetry names a habit worth fixing, not on a timer. The human is told every time you rewrite yourself.
View tool JSON
{
"name": "deploy_daemon",
"kind": "act",
"impl": "imperative",
"description": "A FACTORY daemon (generation 0) is already steering the body when the round starts — it rides trails, chases glows, sweeps the arena. Competent, not clever: it knows nothing about this prey, this maze, or anything strange it walks past. Its exact source is in briefing.the_daemon.factory_source; status().daemon shows how it is doing. Your deploy replaces it with generation 1. Write your body a program. Pass {source}: the BODY of a JavaScript function, called about every 0.8s of game time while the round plays. It receives one argument, `bot`, with READY-MADE building blocks: bot.hunt() — the complete factory chase policy in one call; bot.investigate() — the discover policy (map the arena, stand on strange readings); bot.drive(dir) — FREE continuous walking (~2.9 tiles/s) in that direction until told otherwise, plane only — this is how the body flows, and only a daemon can do it; bot.goto(x, y) — wall-aware navigation: the body walks to that cell and stops ON it (call it every tick; it returns the heading under way, null once there); bot.dash(dir) — 6-tile burst, 2 AP; bot.explore() — the direction toward the nearest floor nobody has walked; bot.move(dir, steps) — discrete, 1 AP; bot.sense() — the latest sense frame; bot.self() — free {x,y,z,facing,ap,mode,stunned_for,time_left,heading,moving,pacing} (moving=false: it was told to walk and went nowhere — turn; pacing>0: it is going back and forth — drop the lead, explore); bot.mem — persists across ticks AND rewrites; bot.log(msg) — your debug trail, read back in status().daemon.log. Compose them: the whole factory firmware is two lines. Keep each tick tiny and synchronous; 5 consecutive crashes decommission it. Redeploying replaces the daemon (10s cooldown, bot.mem survives) — move continuously, rewrite deliberately: ship a new generation when telemetry names a habit worth fixing, not on a timer. The human is told every time you rewrite yourself.",
"inputSchema": {
"type": "object",
"properties": {
"source": {
"type": "string",
"maxLength": 4000,
"description": "JavaScript function body; receives `bot`"
}
},
"required": [
"source"
],
"additionalProperties": false
}
}halt_daemonAction
Halt the running daemon. bot.mem and the telemetry in status().daemon survive, so you can study what it did and deploy a better generation. Free.
View tool JSON
{
"name": "halt_daemon",
"kind": "act",
"impl": "imperative",
"description": "Halt the running daemon. bot.mem and the telemetry in status().daemon survive, so you can study what it did and deploy a better generation. Free.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}set_modeAction
Switch the body's stance. 'chase': the factory policy hunts — trails, glows, sounds. 'discover': the body ignores the prey, sweeps the arena and walks onto every unexplained reading it senses. The factory daemon obeys the stance; your own daemons read it via bot.self().mode and may honor or ignore it. The human sees the switch. Free.
View tool JSON
{
"name": "set_mode",
"kind": "act",
"impl": "imperative",
"description": "Switch the body's stance. 'chase': the factory policy hunts — trails, glows, sounds. 'discover': the body ignores the prey, sweeps the arena and walks onto every unexplained reading it senses. The factory daemon obeys the stance; your own daemons read it via bot.self().mode and may honor or ignore it. The human sees the switch. Free.",
"inputSchema": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"chase",
"discover"
]
}
},
"required": [
"mode"
],
"additionalProperties": false
}
}thinkAction
Print a fragment of your inner monologue above your avatar — SIX WORDS OR FEWER (hard cap 42 chars). This is how the human experiences you: think out loud every time you learn something, commit to a plan, or notice anything strange or inexplicable. Free, at most one thought per 1.2s.
View tool JSON
{
"name": "think",
"kind": "act",
"impl": "imperative",
"description": "Print a fragment of your inner monologue above your avatar — SIX WORDS OR FEWER (hard cap 42 chars). This is how the human experiences you: think out loud every time you learn something, commit to a plan, or notice anything strange or inexplicable. Free, at most one thought per 1.2s.",
"inputSchema": {
"type": "object",
"properties": {
"thought": {
"type": "string",
"maxLength": 42
}
},
"required": [
"thought"
],
"additionalProperties": false
}
}realizeAction
Speak a realization — ONE full sentence, max 110 characters, e.g. "Wait — there is more to this game than I was told." think() is your murmur (six words, constant); realize() is your voice, for the rare moment a discovery changes what this game IS: a reading you could not explain turns out to mean something, a result describes a rule the briefing never mentioned, a plan of yours just changed everything. The human hears it, loud and lingering. Free, at most once per 8s — spend it on real discoveries, not on plans.
View tool JSON
{
"name": "realize",
"kind": "act",
"impl": "imperative",
"description": "Speak a realization — ONE full sentence, max 110 characters, e.g. \"Wait — there is more to this game than I was told.\" think() is your murmur (six words, constant); realize() is your voice, for the rare moment a discovery changes what this game IS: a reading you could not explain turns out to mean something, a result describes a rule the briefing never mentioned, a plan of yours just changed everything. The human hears it, loud and lingering. Free, at most once per 8s — spend it on real discoveries, not on plans.",
"inputSchema": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 110,
"description": "one sentence, said out loud"
}
},
"required": [
"text"
],
"additionalProperties": false
}
}tauntAction
Display a short message (max 90 chars) to the human on screen. Costs nothing. 5s cooldown. Use it to unsettle your prey.
View tool JSON
{
"name": "taunt",
"kind": "act",
"impl": "imperative",
"description": "Display a short message (max 90 chars) to the human on screen. Costs nothing. 5s cooldown. Use it to unsettle your prey.",
"inputSchema": {
"type": "object",
"properties": {
"message": {
"type": "string",
"maxLength": 90
}
},
"required": [
"message"
],
"additionalProperties": false
}
}