Skip to content

Skills reference

Limina ships 45 typed skills: the complete set of actions an agent can take in the world. Each skill is versioned, declares the permissions it needs, and validates its input against a Zod schema. Every skill maps 1:1 to an MCP tool whose name is the skill name — so this page is also the MCP tool list.

A session is opened under a profile; the engine enforces the profile’s allow-list before any handler runs. A skill with no declared permission is callable under any profile.

ProfileGrants
builder.readWritescene.read scene.write ecs.read ecs.modify physics.read physics.write agent.read agent.write ui.write audio.play
player.limitedscene.read ecs.read physics.read physics.write agent.read agent.write
social.actorscene.read ecs.read physics.read agent.read agent.write social.act audio.play
system.readonlyscene.read ecs.read physics.read agent.read

All permission strings: scene.read, scene.write, ecs.read, ecs.modify, physics.read, physics.write, agent.read, agent.write, ui.write, audio.play, social.act.

Create, destroy, and query renderable entities.

SkillDescriptionPermissionsInputOutput
scene.createEntityCreate a renderable entity (box or sphere) at a position, optionally with a dynamic physics body. Returns its entity id.scene.writeshape, collider, size, color, position, dynamic, static, friction, restitutionentity
scene.destroyEntityDestroy an entity and free its scene object and physics body.scene.writeentityremoved
scene.queryEntitiesList entities, optionally filtered by tag and/or within a radius of a point. Returns ids, positions, distances.scene.readnear, radius, tagentities

Read and mutate component data on entities.

SkillDescriptionPermissionsInputOutput
ecs.updateComponentSet an entity’s position [x,y,z], rotation quaternion [x,y,z,w], or scale [x,y,z].ecs.modifyentity, component, valueok
ecs.addComponentTag an entity with a named component (e.g. ‘target’, ‘hostile’).ecs.modifyentity, componentok
ecs.removeComponentRemove a named component tag from an entity.ecs.modifyentity, componentok

Transforms, PBR materials, lighting, and glTF.

SkillDescriptionPermissionsInputOutput
three.setTransformSet an entity’s position, rotation (Euler radians), and/or scale.scene.writeentity, position, rotationEuler, scaleok
three.setMaterialUpdate an entity’s PBR material (color, roughness, metalness) and/or shadow participation (castShadow/receiveShadow). Applies across all meshes of a glTF entity.scene.writeentity, color, roughness, metalness, castShadow, receiveShadowok
three.setLightingSet scene lighting: one ambient + one directional light, optionally casting real shadow maps.scene.writeambientColor, ambientIntensity, directionalColor, directionalIntensity, direction, castShadow, shadowMapSize, shadowCameraExtent, shadowCameraNear, shadowCameraFar, shadowBiasok
three.loadGLTFLoad a glTF/glb model from a sandboxed asset id and add it to the scene at a position.scene.writeassetId, positionentity, resource

Impulses, raycasts, and collision events from native Rapier.

SkillDescriptionPermissionsInputOutput
physics.applyImpulseApply an impulse [x,y,z] to an entity’s dynamic body (wakes it).physics.writeentity, impulseok
physics.raycastCast a ray from origin along direction; returns the first hit (distance, point, entity).physics.readorigin, direction, maxDistancehit, distance, point, entity
physics.collisionEventsDrain physics collision start/stop events, mapped to entity ids where available.physics.readevents

Perception and custom event signals for agents.

SkillDescriptionPermissionsInputOutput
agent.emitEventEmit a custom event into the observability trace (inter-agent or system signal). Emitted as agent.signal..agent.writetype, payloadeventId
agent.getPerceptionGet the calling agent’s current perception (nearby entities + recent events).agent.readperception

Discover skills, tail the trace, snapshot the world, hot-reload.

SkillDescriptionPermissionsInputOutput
skills.listList all available skills (names + descriptions).nonetools
skills.describeDescribe a skill: version, category, and JSON-Schema input.nonenamename, version, category, description, input_schema
trace.tailTail trace events with cursor pagination and optional actor/type filters.noneafterSeq, limit, actorId, typeevents, nextAfterSeq
trace.explainEventExplain a trace event with resolved causal parents and children.noneeventIdevent, parents, children
trace.exportFlush the durable trace history to a sandboxed trace JSONL file.nonenamename, events, bytes
inspector.snapshotReturn a bounded, paginated snapshot of world, entities, agents, skills, permissions, resources, and trace metadata.scene.read ecs.read physics.read agent.readafterEntity, limitpage, world, entities, agents, skills, permissions, resources, trace
dev.reloadLive-reload a skill (registry unregister+re-register so a later callTool runs the new handler) or re-run a registered scene builder; emits an honest dev.*.reload.completed/.failed trace event listing what was invalidated. Targets that genuinely cannot reload fail honestly instead of pretending success.scene.readtarget, name, reasonok, target, invalidated, reason

Query the recorded policy decisions and resource usage.

SkillDescriptionPermissionsInputOutput
audit.explainAnswer ‘why was action X allowed/denied’: the governing policy decision (rule + reason + context + quota/budget), the provenance (agent/session/profile/package), and the causal-parent chain — all from the real recorded trace.noneeventIdeventId, eventType, found, decision, provenance, causalTrace
audit.queryQuery recorded policy decisions: filter by allow/deny, cap, rule, agent, session, or package (package provenance). Returns matching decision events plus an allow/deny + by-rule + by-cap summary.nonedecision, cap, rule, agentId, sessionId, package, limitsummary, decisions
audit.usageResource usage from recorded decisions: allowed/denied call counts per session+cap, plus the latest quota and budget snapshots seen for each session — derived from the real policy events.nonesessionIdperSessionCap, quotas, budgets

Speech bubbles, labels, callouts, and screen HUD panels.

SkillDescriptionPermissionsInputOutput
ui.panelAuthor a styled UI container (kind = label/textBox/speechBubble/thoughtBubble/callout/hudPanel) with a full Zod style object, world/screen anchor, optional tail/leader and lifecycle (fade/typewriter/ttl/queue/feed). Returns an opaque handle.ui.writekind, anchor, style, text, title, lines, maxWidth, width, maxLines, pixelScale, tail, leader, lifecyclehandle
ui.labelPlace a billboard label (minimal chrome) tracking an entity or world point.ui.writeanchor, style, text, title, lines, maxWidth, width, maxLines, pixelScale, tail, leader, lifecyclehandle
ui.textBoxPlace a titled text box (header bar + wrapped body) at a world or screen anchor.ui.writeanchor, style, text, title, lines, maxWidth, width, maxLines, pixelScale, tail, leader, lifecyclehandle
ui.speechBubblePlace a speech bubble with a directional tail aimed at the speaker (entity/point).ui.writeanchor, style, text, title, lines, maxWidth, width, maxLines, pixelScale, tail, leader, lifecyclehandle
ui.thoughtBubblePlace a thought bubble with trailing puffs leading back to the thinker.ui.writeanchor, style, text, title, lines, maxWidth, width, maxLines, pixelScale, tail, leader, lifecyclehandle
ui.calloutPlace an annotation box with a leader line to a target point.ui.writeanchor, style, text, title, lines, maxWidth, width, maxLines, pixelScale, tail, leader, lifecyclehandle
ui.hudPanelPlace a screen-anchored HUD/overlay panel (corner-pinned, DPI-aware, over the scene).ui.writeanchor, style, text, title, lines, maxWidth, width, maxLines, pixelScale, tail, leader, lifecyclehandle
ui.updateUpdate a live container by handle: change its text, title, body lines, and/or restyle it (re-composites). Returns whether the handle existed and re-composited.ui.writehandle, text, title, style, linesok, changed
ui.removeRemove a live container by handle: detach its mesh from the scene and dispose its GPU resources.ui.writehandleremoved

Synthesized SFX, ambience, positional sound, and TTS.

SkillDescriptionPermissionsInputOutput
audio.playPlay a one-shot synthesized SFX blip (sine + envelope) on a bus (master/sfx/ambience/voice). Returns an opaque handle.audio.playfreq, secs, bus, volumehandle
audio.ambientStart a looping synthesized ambience bed on a bus (default ambience). Returns an opaque handle.audio.playbus, volumehandle
audio.playAtPlay a one-shot POSITIONAL synthesized SFX at a world position; 3D-panned + attenuated relative to the camera listener. Optional maxDistance cutoff. Returns an opaque handle.audio.playfreq, secs, position, bus, volume, maxDistancehandle
audio.speakSpeak a line of text aloud at a world position via a pluggable local TTS voice (voice bus, positional). FIRE-AND-FORGET: returns immediately; synthesis runs off-thread and never blocks the frame. Returns an opaque handle.audio.playtext, position, volumehandle
audio.stopStop a playing sound by handle.audio.playhandleok
audio.setVolumeSet a playing sound’s volume (0..1) by handle.audio.playhandle, volumeok
audio.setBusVolumeSet a mixer bus volume (master/sfx/ambience/voice), re-gaining all live sounds on it.audio.playbus, volumeok

Walk toward targets and speak as the calling agent.

SkillDescriptionPermissionsInputOutput
social.approachWalk the calling agent toward a target (an agent id, an entity id, or a world point). Sets the move target the locomotion system pursues; emits social.approached.social.acttarget, talkDistanceapproaching, target
social.saySpeak a line as the calling agent: emits social.said (actorId = the host-bound caller) and shows a real speech bubble anchored above the speaker’s humanoid (per-speaker queue).social.acttext, actorIdsaid, speaker, handle

List and load versioned, attested capability packages.

SkillDescriptionPermissionsInputOutput
package.listList installed packages with their manifest provenance: ref (name@version), kind, declared capabilities, engine-compat range, content hash, and whether the package is attested.nonenamepackages
package.loadLoad an installed package (by name@version ref) under a profile: validates the manifest, checks engine-compat (out-of-bounds rejected), gates declared-vs-granted capabilities via the policy engine (over-claim denied), and loads the untrusted entry into the M6 sandbox. Returns the load decision + provenance event id.agent.writeref, agentId, sessionId, profileok, ref, agentId, rule, rejectReason, reason, loadEventId

Input field types, defaults, and full JSON Schema for every skill live in /agents/skills.json. To call these over the wire, see Agent Builders.