AI tools: Editor and jobs
Editor state, layouts, long-running jobs and settings. 33 tools. You see every step your AI takes and can undo any of them.
begin_rehearsal
Open a practice copy of the scene. Until merged, your changes go there, not into the real scene. The person sees it live.
| Argument | Type | What it does |
|---|---|---|
label | string | What you're trying, e.g. "Clear the blocked doorway". |
capability_ledger
What TTR can really do: each engine capability (flight, ocean, terrain, faces, crowds…) scored on six criteria (looks, behaves, understood by agents, in budget, survives variation, reusable) with the tests behind it and its gaps. Read it before planning a game or a new mini-world: reuse what's verified, build what's missing.
| Argument | Type | What it does |
|---|---|---|
filter | string | Only capabilities whose id, title or world contains this. |
id | string | One capability's id for its full record. |
capability_request
Record a capability you needed and the engine lacked (or had only in part), so it gets built: what (a capability_ledger id or a short name), why (what the game wanted to do) and which game. Appended to the project's capability_requests.json with your name and the date; list shows what has been asked for. Record it, then carry on with the best workaround.
| Argument | Type | What it does |
|---|---|---|
action | add / list | Default add. |
capability | string | What was missing, e.g. vehicles.boats or "rope physics". |
game | string | The game or scene that needed it. Default: the open scene. |
why | string | What the game wanted to do with it. |
discard_rehearsal
Throw away the open rehearsal. The real scene is unchanged.
No arguments.
edit_intersection
Change how an intersection is controlled: signals, an all-way stop, yield, none, or auto (back to the rule). Pick it by `junction` number (road_report lists them) or the point `at` [x, z] nearest it. Signal timing (green, amber, all_red seconds) applies to the whole network. One undo step.
| Argument | Type | What it does |
|---|---|---|
all_red | number | |
amber | number | |
at | list of number | [x, z] world meters |
control | auto / signals / stop / yield / none | |
green | number | |
junction | integer |
edit_key
The curve editor: change one key of a sequence track without retyping it. tangents: auto (smooth, never overshooting), flat (eases in and out: a hold), linear, step, free (with in/out slopes, units per second, one per number). ease (to the next key) with any preset: auto, linear, step, smooth, ease_in/out/in_out, ease_in/out/in_out_cubic, ease_in/out/in_out_expo, ease_in_back, ease_out_back, ease_out_elastic, ease_out_bounce, bezier [x1,y1,x2,y2]. move_to: drag the key to another time. channel: position, rotation, scale, weight (keys for property tracks). sample: n returns the curve's points ("position.y" for one number) to read its shape.
| Argument | Type | What it does |
|---|---|---|
bezier | list of number | |
channel | string | |
ease | auto / bezier / cubic / ease_in / ease_in_back / ease_in_cubic / ease_in_expo / ease_in_out … | How the stretch from this key to the next moves (default auto: smooth through the keys, never overshooting). |
in | list of number | |
move_to | number | Story seconds from the start. |
out | list of number | |
sample | integer | Return this many points of the curve (2...400). |
sequence required | string | The sequence's name (Sequences/<name>.sequence.json). |
t required | number | Story seconds from the start. |
tangents | auto / flat / linear / step / free | |
track required | string |
edit_road
Change a road: any of its fields (type, lanes, speed, one-way, bridge, control, markings, props, banking), its points (replace all; insert, move or delete one), or remove it. The network rebuilds around it (intersections, lanes, land). One undo step.
| Argument | Type | What it does |
|---|---|---|
absolute | list of number | Spans whose deck follows the control points' own heights (world metres) instead of the land: pairs of distances along the road [from, to, ...] (a main span between pylons on cliffs; points outside keep their lifts; [] clears). |
bank | number | Banking into curves in degrees; -1 automatic. |
bridge | auto / never / always | |
closed | boolean | A loop (race track, ring road). |
control | auto / signals / stop / yield / none | Its intersections: auto (signals where busy roads meet, stop signs on minor ones), signals, stop, yield, none. |
delete_point | integer | |
follow_ground | boolean | Default true: heights from the land, smoothed to the type's grade. |
insert_point | object | {"index": i, "at": [x, z] or [x, y, z]}: a new point before index i (i = point count appends). |
lane_width | number | |
lanes | number | Lanes each way (one-way: total). 0 = the type's own. |
markings | boolean | |
move_point | object | {"index": i, "to": [x, z] or [x, y, z]} |
name required | string | |
one_way | boolean | |
pebbles | number | trail/footpath: pebbles along it, 0 none ... 1 a few per metre (default 0.5). |
pier_free | list of number | Bridge spans with no piers: pairs of distances along the road in metres [from, to, from, to...] (a cable-stayed main span hung from its pylons; [] clears). |
points | list of list of number | Control points [[x, z], ...] or [[x, y, z], ...] (world meters). On a ground-following road y is a lift above the land (an overpass hump: 7); otherwise the height itself. |
profile | city_street / avenue / highway / ramp / country / dirt / gravel / alley … | Road type. city_street (2 lanes, parking, sidewalks), avenue (2+2, median, wide sidewalks), highway (2+2 with shoulders, median barrier, guard rails), ramp (one-way interchange ramp; its ends merge into highways), country (2 lanes, gravel verge), dirt, gravel, alley, runway, taxiway, race (one-way, kerbs and gravel runoff), bridge_street, trail (a 1 m footpath worn into the land: no verges, a ragged edge the ground cover thins toward, a darker worn middle, sunk a few cm, roots and pebbles; lane_width sets its width) or footpath (1.4 m). |
props | boolean | Lamps, signs, signals and guard rails. |
remove | boolean | Delete the road. |
roots | number | trail/footpath: roots crossing it per 10 m (default 0.6). |
speed_limit | number | km/h |
surface | string | Pavement layer override: asphalt, gravel, dirt or concrete. |
editor_command
Run one of the editor's own commands, exactly as the person's shortcut or command palette (⌘K) would: tools (tool.move, tool.rotate, tool.scale), gizmo axes and pivot, grid/angle/scale/surface snapping, duplicate (and duplicate along), align, distribute, drop to surface, attach/detach, Game View, frame, Play from here... list: true returns every command with its id, title, group and current shortcut (people can rebind them). view.frame frames the selection (or safely resets if none); view.reset always teleports the person's camera outside scene geometry, even when Follow AI is off. Other commands act on the current selection; select objects first with select.
| Argument | Type | What it does |
|---|---|---|
command | string | A command id ("arrange.drop") or its exact title ("Drop to surface"). |
gesture | object | Instead of a command, a mouse gesture in the viewport that may edit, played like viewport_input (same fields: gesture drag/click/box_select, from, by, steps) plus modifiers ["option"] (Option-drag a gizmo handle copies the selection), ["shift"] / ["command"] (add to / toggle the selection). A drag that starts on a gizmo handle moves, turns or scales the selection, like the person's mouse. |
list | boolean | true: list the commands instead of running one. |
editor_press
Press a control in the editor by what the person reads on it (a button's title, its tooltip, its label), the way a click would, after bringing a dock panel forward if you name one. Try a manual tool by hand, check a panel's buttons work, or do a Teach Me step for the person. Then editor_window_shot to see what it did. Publishing, uploading, signing out, quitting and buying stay the person's to press.
| Argument | Type | What it does |
|---|---|---|
label required | string | What the control says: "Blend", "Frame Doctor", "Add Component…"; a switch's segment by its word ("Make", "Pro"); the Teach Me card's "Do it for me" and "Skip". Pressed only when exactly one showing control has these words, or one starts with them as a whole word; several, or none, are refused with the closest controls named, so ask again with its own words or tooltip (a card's "Open Story…"), or name a panel to look only there. |
panel | string | A dock panel to bring forward first (mixer, profiler, inspector…). |
editor_visibility
Hide, isolate or lock objects in the editor only, to work inside a busy level: hidden ones aren't drawn while editing, locked ones can't be clicked in the viewport. Everything attached to an object goes with it. Never saved in the scene; Play and exports show everything. action list (the default) says what's hidden and locked.
| Argument | Type | What it does |
|---|---|---|
action | hide / show / lock / unlock / isolate / show_all / unlock_all / list | |
groups | list of string | Whole Scene-list folders (layers) to act on, every object in them ("Props", "Lights"). |
objects | list of string | Names (or #ids) for hide, show, lock, unlock, isolate. |
editor_window_shot
A picture of the editor window as the person sees it: toolbar, dock panels, Inspector, status bar. Name a panel to bring it forward first (scene, inspector, content, history, profiler, animation, input, mixer, playtest, output, agent…). Check the real UI by eye: a panel you changed, a Teach Me step, what the person is looking at. The 3D view is drawn as the viewport shows it, with the activity feed and the Teach Me card over it.
| Argument | Type | What it does |
|---|---|---|
panel | string | A dock panel's id to bring forward before the picture. |
hand_off
A keyed hand-off: the other hand reaches and closes on the object at `point` while the first still holds it, then the first opens and draws back; the object goes to the second hand at the grasp. Saved as a clip with the object's track and played.
| Argument | Type | What it does |
|---|---|---|
clip | string | |
entity required | string | The character (name or #id). |
from required | left / right | |
grip | string | |
object required | string | |
point required | string | |
seconds | number |
history
Recent changes: who made them (you or an agent), what and to which object. Undone changes are marked.
| Argument | Type | What it does |
|---|---|---|
limit | integer | Default 30. |
lane_parts
Why the lane graph traffic drives is in pieces: its strongly connected parts (inside one, every segment reaches every other), the biggest first. For each part besides the biggest: its size, where it is, the roads in it, and its boundary: the lanes leading in from outside, the lanes leading out, and dead ends inside. A part with ways in and none out is a TRAP (cars go in and never come back), one with ways out and none in a SOURCE, neither an ISLAND. Fix the plan or the junction there, then rebuild_roads and look again.
| Argument | Type | What it does |
|---|---|---|
limit | integer | Parts to list (default 12). |
min_size | integer | Leave out parts smaller than this many segments (default 3). |
merge_rehearsal
Apply the rehearsal's changes to the real scene as one undoable step. Run run_tests first.
No arguments.
node_graph
Visual scripting (the node graph people wire by hand in Tools › View › Node Graph): read, write and compile graphs. A graph is JSON in Scripts/<name>.graph.json: {name, nodes:[{id, type, x, y, values:{pin: value}}], links:[{from, fromPin, to, toPin}], comments:[{text,x,y,width,height}]}; it compiles to Scripts/<name>.js, the same kind of script the kits use (attach it with a script component; On Touch needs a trigger). action catalog: every node type with its pins (white exec pins order the steps; value pins carry numbers, text, objects, true/false). read: a graph's JSON. write: save a graph (graph object) and compile it, returns the warnings and the JavaScript. compile: the JavaScript for a graph without saving. example: writes the door_with_key and key_pickup graphs (a door that opens for the player carrying a key, and the key).
| Argument | Type | What it does |
|---|---|---|
action required | catalog / read / write / compile / example / list | |
graph | object | The graph (write, compile). |
name | string | Graph name (read). |
query_lanes
Read the lane graph traffic and racers drive: lanes near a point (`at`), a junction's lanes and turns (`junction`), or the lane route between two points (`from`, `to`) with its length and the stops on it. Lanes are centerlines in travel direction with speed (km/h), width, what follows each, and stop lines with their control. Set `points` true to get the lane polylines.
| Argument | Type | What it does |
|---|---|---|
at | list of number | [x, z] world meters |
from | list of number | [x, z] world meters |
junction | integer | |
points | boolean | |
radius | number | |
to | list of number | [x, z] world meters |
read_script
Read a gameplay script from the Scripts folder, or list them all when no file is given.
| Argument | Type | What it does |
|---|---|---|
file | string |
rehearsal_status
What the open rehearsal has changed compared with the real scene.
No arguments.
remove_requirement
Remove a requirement by id: from the open scene's game brief when it has that id, else from the Game Plan (unprotected only; protected ones are the person's and can't be removed by agents).
| Argument | Type | What it does |
|---|---|---|
id required | string |
set_focus_key
The focus puller: from t the sequence's camera focuses on `on` (a place: an object; a character's eyes by default, the nearer eye; {of, bone: "eyes" | "eye_l" | "eye_r" | "head" | a node}; a point) or at `distance` metres, racking there over `rack` seconds (default 0.6; 0 a snap) with ease (default smooth), the focus ring turned evenly in diopters as a real follow-focus. A moving subject stays sharp. Cuts that set their own focus or focus_distance keep it. Needs an iris (a lens_kit, or aperture). remove: true deletes the cue at t.
| Argument | Type | What it does |
|---|---|---|
distance | number | |
ease | auto / bezier / cubic / ease_in / ease_in_back / ease_in_cubic / ease_in_expo / ease_in_out … | How the stretch from this key to the next moves (default auto: smooth through the keys, never overshooting). |
on | any | A place: [x, y, z], an object's name, or {of, offset: [x, y, z], frame: "object" (heading only, default) | "full" | "world"}. |
rack | number | |
remove | boolean | |
sequence required | string | The sequence's name (Sequences/<name>.sequence.json). |
t required | number | Story seconds from the start. |
set_key
Set a key on a sequence track (making the track if needed): position [x,y,z], rotation (Euler degrees [x,y,z] or a quaternion [x,y,z,w]) and/or scale for an object (or a bone), or value for a property track. ease shapes the stretch to the next key: auto (default), linear, step, smooth, ease_in, ease_out, bezier (with bezier [x1,y1,x2,y2]), cubic (with in/out slopes). falloff (seconds) moves the keys around it too, fully at t and less further away: one edit reshapes a recorded arc smoothly (raise its peak, move where it lands). remove: true deletes the key at t.
| Argument | Type | What it does |
|---|---|---|
bezier | list of number | |
bone | string | |
channel | string | With value: one number of a channel, e.g. "position.y" (the others stay as the curve has them). |
ease | auto / bezier / cubic / ease_in / ease_in_back / ease_in_cubic / ease_in_expo / ease_in_out … | How the stretch from this key to the next moves (default auto: smooth through the keys, never overshooting). |
falloff | number | Seconds around t whose keys move with it (smoothly less with distance). |
in | list of number | |
out | list of number | |
position | list of number | |
property | string | |
remove | boolean | |
rotation | list of number | |
scale | any | A number or [x, y, z]. |
sequence required | string | The sequence's name (Sequences/<name>.sequence.json). |
t required | number | Story seconds from the start. |
target | string | |
track | string | The track: its number, "Bottle" (its transform), "Lamp.point_light.intensity", "Ben.#3" (a bone). Or give target (+ property / bone). |
value | any | For property tracks: a number, [x, y, z], text or true/false. |
weight | number | A transform track's weight key 0...1 (how much of it counts over the tracks before it). |
set_patrol
Set a brain's ordered patrol route, with per-point pauses and look-around angles. Accept waypoint names/#ids or position triples, as strings or objects. Validates names before changing anything; an empty route holds position. Preset, senses and squad stay unchanged. Undoable; authoring scene/rehearsal only.
| Argument | Type | What it does |
|---|---|---|
entity required | string | Entity name (e.g. "Tower_B") or id (e.g. "#7"). |
waypoints required | list of any | Patrol waypoints, in order. Empty holds position. Movement is physical, not teleportation. |
set_team
Atomically assign existing brains to a named squad and explicit leader/roles. Validates every entity and protected-scene lock before one undoable CommandGroup; never partially assigns a team. Does not change recipes or movement. Empty squad makes members independent. Refuses during Play.
| Argument | Type | What it does |
|---|---|---|
entities required | list of string | |
leader | string | |
roles | object | |
squad required | string |
set_time_scale_key
Key how fast story time runs in a sequence (1 real time, 0.15 slow motion, 0.01...10): a ramp 1 → 0.15 → 1 is three or four keys (ease "smooth" eases into and out of it). While it plays, physics, animation, particles and scripts' clocks slow together; keys stay in story time. Reports how long the sequence now takes to watch.
| Argument | Type | What it does |
|---|---|---|
ease | auto / bezier / cubic / ease_in / ease_in_back / ease_in_cubic / ease_in_expo / ease_in_out … | How the stretch from this key to the next moves (default auto: smooth through the keys, never overshooting). |
remove | boolean | |
scale | number | |
sequence required | string | The sequence's name (Sequences/<name>.sequence.json). |
t required | number | Story seconds from the start. |
set_ui_theme
Patch the game UI theme: six-digit hex background/panel/foreground/muted/accent/danger/success, fontSize 18...32, safeInset 16...80, pack (a theme pack name), packs (the game's packs or overrides) and scenes (scene name: pack). ui_theme lists, edits and previews packs. Text contrast/readability should still be visually reviewed.
| Argument | Type | What it does |
|---|---|---|
scene | string | Optional scene name for an independent layout; omit for the project default. |
theme required | object |
set_waypoint
While the game plays: set the GPS waypoint (x, z in metres) that the minimap routes to along the road lanes from the player (or the car it drives), or clear it (clear: true). The route is worked out again every second and cleared on arrival. Scripts do the same with game.ui("waypoint", {x, z}).
| Argument | Type | What it does |
|---|---|---|
clear | boolean | |
x | number | |
z | number |
set_wear
Change how worn a forged object looks, without changing its recipe: wear (0 new, 1 as forged, 2 much more: chipped edges, rubbed-through hand spots, kicks, scuffs), age_years (stains, dirt, fade, dust grow with it), chip_size, grime, fade (sun), scratches; Pro: edge_width, dust. Values you leave out keep their current setting. One undoable step; the person sees the object change. explain: true lists the current settings and the object's parts (names and centres) for paint_wear_mask, changing nothing. HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
age_years | number | |
chip_size | number | |
dust | number | |
edge_width | number | |
entity required | string | |
explain | boolean | |
fade | number | |
grime | number | |
scratches | number | |
wear | number |
set_wind
Set the scene's wind for plants: trees, bushes, hedges and grass sway with it and gusts roll across lawns (direction = compass degrees it blows toward, speed m/s: 2 breeze, 6 windy, 12 gale; gusts 0...1).
| Argument | Type | What it does |
|---|---|---|
direction | number | |
gusts | number | |
speed | number |
teach
Teach the person how to do something in the Arcwright editor, on the real editor: each step lights up the actual control with one sentence and waits for them to do it (it moves on by itself when the editor sees it done; the card always has Do it for me and Skip). Use it when they ask how to do something by hand ("teach me", "show me how", "how do I…"), instead of describing menus in chat or doing it for them. lessons: the built-in lessons. start: a lesson by id, or the one that fits about ("make a zombie chase me"), or your own lesson (title + steps: target = a panel (viewport, scene, inspector, content, history, agent, quicktools, nodegraph, workshop, tools, timeline, camera, gameui), a control's label or tooltip as it reads on screen ("Play", "Quick Tools", "Add a cube"), "panel/label", or an object in the world ("object:Crate_1", "object:selected"); say = one sentence; wait = select, add, change, play, stop, save, shows (the next step's control appeared) or agent, or none for Next; do = click, editor.play, editor.stop, editor.save, editor.add_cube, editor.select, or a tool name with args, where "$selection" is the selected object). point: light up one control with a caption, nothing to wait for. status: which step they're on. stop: end it. Keep lessons to 3 or 4 steps.
| Argument | Type | What it does |
|---|---|---|
about | string | start: what the person wants to learn, in their words; the built-in lesson that fits. |
action required | lessons / start / point / status / stop | |
lesson | string | start: a built-in lesson's id (see lessons). |
say | string | point: the caption (one sentence). |
steps | list of object | start: your own lesson, 1-6 steps (3-4 is best). |
target | string | point: the panel or control to light up. |
title | string | start: your own lesson's title (with steps). |
tool_job
Read a long-running HTTP tool job by job_id. States: queued, running, completed, failed, cancelled. Poll this receipt instead of repeating the original tool. Completed replies include the original tool result. Receipts are scoped to the MCP session and saved on disk for reconciliation.
| Argument | Type | What it does |
|---|---|---|
job_id required | string |
tour
The guided tour of the Arcwright editor (2-3 minutes) that you give the person live. status: whether to offer it now (only on the first connection of this install). offered: record that you offered it (call after asking, whatever the answer). script: the steps with what to highlight, what to say and which tools to use — follow it only after the person said yes. highlight: spotlight an editor area with a caption (panel: viewport, scene, inspector, assets, forge, history, agent, play, toolbar). clear: remove the spotlight. finish: end the tour.
| Argument | Type | What it does |
|---|---|---|
action required | status / offered / script / highlight / clear / finish | |
caption | string | highlight: a short caption beside the spotlight. |
panel | viewport / scene / inspector / assets / forge / history / agent / play … |
viewport_input
Test the editor's navigation like a person would: plays a mouse or trackpad gesture into the viewport (drag to slide the view, option-drag or middle-drag to orbit, scroll to zoom, click to select) frame by frame, without moving the real pointer, and measures it: which view the click landed on, how far the camera moved and turned, and how many pixels the grabbed point drifted from under the pointer. Camera gestures only: it refuses a drag that would start on the move gizmo, any gesture during Play, and left-button gestures (drag, orbit, click) while Sculpt Mode or a paint brush is on.
| Argument | Type | What it does |
|---|---|---|
agent_changes | string | An object an agent keeps changing during the gesture (the way a live agent's edits light it up and the camera follows), to test that the person's own drag still wins. |
amount | number | Scroll amount in wheel lines (default 3; negative zooms out). |
by | list of number | Drag distance in points [dx, dy] (dy down). Default [200, 0]. |
from | list of number | Start point in the viewport as fractions [x, y] (0...1, from the top left). Default the centre. |
gesture | drag / orbit / middle_drag / scroll / click / fly / box_select | drag: left drag (slides the view in the Arcwright style); orbit: option + left drag; middle_drag; scroll: wheel zoom at the point; click: select what's under the point; fly: hold the right button and the keys (W A S D Q E) for seconds (by turns the view); box_select: control-drag a selection box. |
keys | string | fly: the keys held, e.g. "w" or "wd". |
modifiers | list of string | Only control here (box select); keys that edit (option copies, shift adds) go through editor_command's gesture. |
precise | boolean | Scroll as a trackpad (precise deltas). Default false (a wheel). |
seconds | number | fly: how long (default 1, max 10). |
steps | integer | Mouse events the drag is split into, one per frame (default 20). |