See the world as it is.
Inspect the live game. Find instances, read properties and attributes, and follow the tree from any root.
A little context changes everything.Turn an idea into a working change. An open-source AI agent that sees, builds, and acts inside Roblox.
Start free. No API key to enter.
A whole lot
of capability.
01 / FROM INTENT TO ACTION
Give UAI the goal. It finds the right tools, works through the steps, and keeps you close to what is changing.
Inspect the live game. Find instances, read properties and attributes, and follow the tree from any root.
A little context changes everything.Write Luau, search your workspace, and edit files together. Run several tasks in parallel with subagents.
From a single line to the next idea.Check Luau syntax, capture output, and inspect the result. Choose Ask first when you want to approve tool calls.
The answer is only part of the work.Your model. Your endpoint. Your call.
02 / A CONVERSATION THAT GOES SOMEWHERE
The conversation, the tools, and the world they are changing. Together in one workspace.
Find the doors and show me which ones are locked.
I found two doors in Workspace and checked their Locked attributes.
The garden door is unlocked. No changes were made.
instance_query searched Workspace for Door and read the Locked attribute.
Where is the walk speed set?
The workspace search found two places that set WalkSpeed. I read the surrounding source together.
The player controller is the starting point for player movement.
file_search found WalkSpeed; file_read_many read both files.
Make the walk speed configurable, then check the file.
Updated the movement script to read its speed from CONFIG.walkSpeed.
-- Movement/PlayerController.lua
humanoid.WalkSpeed = CONFIG.walkSpeedThe resulting Luau passed the syntax check.
file_edit_many validated the edit before writing; check_luau checked syntax without running it.
Recorded in-game workflow: game tree traversal, file searches, and validated file edits. Playback can be paused using the video controls.
03 / YOUR FIRST SPARK
Take a prompt. Make it your own.
Let UAI work out the next step.
Find the checkpoints in Workspace and show their positions and any checkpoint attributes. Inspect first.
Search my workspace Lua files for WalkSpeed, read the relevant sections together, and explain where movement speed is set.
Read my movement script, make its speed configurable, apply the necessary edits together, and check the resulting Luau for syntax errors.
04 / A TOOL FOR THE NEXT STEP
Every tool in the current build. Availability follows your host’s capabilities, enabled groups, and permission mode.
changes_listReadList recorded UAI property/attribute changes and Undo status. Other game effects are outside this history.
changes_readReadInspect recorded before/after values for one supported game-change batch.
changes_undoWriteUndo one recorded property/attribute batch. Rechecks every target/value and never overwrites a conflicting newer edit.
code_extract_sourceWriteExtract a UTF-8 byte range from an immutable source snapshot into a separate editable document. Opening or extracting never runs source.
code_open_sourceWriteOpen a script/file/capture as a source snapshot in the shared Code workspace. Large source stays in a bounded reader. Never overwrites a modified document or executes source.
explorer_childrenReadRead a bounded child page by exact parent handle or logical root (nil/bookmarks). Cursors reject changed branches.
explorer_exportWriteExport explicitly selected object metadata to a verified user file. Model export and full-place saving are not provided.
Requires fsexplorer_propertiesReadRead supported properties, attributes or tags for exact handles or shared selection. Returns a bounded page and an expiring snapshot_id for guarded edits; large values are labelled previews.
explorer_searchReadSearch by literal name, class, tag and subtree with bounded cooperative traversal and snapshot pages.
explorer_selectWriteExplicitly change shared Explorer selection (maximum 20). Existing selection requires expected_revision. focus optionally opens the native workspace.
explorer_stateReadRead native Explorer selection, root handles, metadata coverage and capabilities. Does not scan or change selection.
instance_attributeWriteRead or write an attribute on an instance. Omit value to read.
instance_cloneWriteClone an instance. The copy keeps its children.
instance_createWriteCreate an instance detached, validate/apply properties, then parent it. Legacy property maps use sorted property names. Failed setup destroys only the new owned instance.
instance_destroyHigh impactDestroy an instance and everything under it. This cannot be undone.
instance_edit_manyWriteApply ordered typed property/attribute/tag operations with expected values or an observed snapshot. Preflight conflicts produce zero writes. Property/attribute changes share Game changes Undo.
instance_findReadSearch a subtree for instances by name and/or class. Stops when the requested result count is reached. For selected properties and paginated results, use instance_query.
instance_getReadRead an instance's properties, attributes and tags. Do this before setting anything.
instance_get_manyReadInspect up to 20 known instance paths at once. Select only the properties and attributes needed; compact class defaults are used otherwise. Missing paths do not discard successful reads.
instance_parentWriteReparent an instance.
instance_queryReadFind instances and read selected properties/attributes in one call. Name is a case-insensitive substring; class uses IsA. Stops as soon as a page fills, without collecting the entire subtree. Search is capped at 20,000 nodes.
instance_result_readReadRead bounded retained detail from a large result in this tool group. Follow returned path arrays and offsets; expires after five minutes.
instance_setWriteSet one property on one instance. The value is converted to the property's existing type, so 'Size' takes '4, 1, 2' on a part and '0, 200, 0, 40' on a GUI frame.
instance_taggedReadList instances carrying a CollectionService tag, or list every tag in use.
instance_treeReadRead a depth-limited tree within the result budget. Reports omitted/unreadable branches; use explorer_children for complete paginated children of a known handle.
check_luauReadCheck Luau syntax without executing code or changing the game. Provide inline 'code' or a saved file 'path', not both. Prefer path for scripts you wrote or edited so their source need not be sent again. Returns compile errors for correction before run_luau.
Requires execrun_luauHigh impactRun bounded Luau on the local client. Provide inline source in 'code', or 'path' to run a workspace file directly without reading it back first. Captures print/warn, tables and all return values; waits for functions started with task.spawn/defer/delay. Stop or the deadline cancels managed tasks. Loop checkpoints yield automatically. Prefer a specific tool when one exists. This is not a security sandbox; dynamically loaded code and engine calls can bypass cooperative guards.
Requires execscript_listReadFind script instances by root, kind and optional name substring. Returns source references and a stable continuation cursor. Default 25, maximum 100 per page; bounded tree scans disclose incomplete coverage. Read only relevant sources.
script_result_readReadRead bounded retained detail from a large result in this tool group. Follow returned path arrays and offsets; expires after five minutes.
script_sourceReadRead a script's source. Works when the host can read or decompile it; when the host has no decompiler or it fails, the bundled luacid client and then the ByteFall service are tried. Many live scripts still cannot be read at all.
scripting_docsReadRead the offline guide to the live Roblox environment and script development. Start with quickstart; select environment/capabilities, native workflows, shared state/concurrency, executor APIs with sUNC references, paths, inspection, Luau, cleanup, UI, debugging, projects, editor or verification as needed. Reuse retained sections. No network, filesystem access or execution required.
file_appendWriteAppend up to 2 MiB to a workspace file, creating it if needed. Prefer small additions.
Requires fsfile_deleteHigh impactDelete a file or folder from your workspace. This cannot be undone.
Requires fsfile_editWriteReplace exact text in a workspace file without rewriting the whole file. Read it first. Refuses missing or ambiguous matches unless replace_all is true, and refuses an edit if the file changed while it was being prepared. Files and edited output are limited to 2 MB.
Requires fsfile_edit_manyWriteApply up to 20 exact edits to one workspace file in one write. Edits are evaluated in order. All must validate before writing; refuses stale contents. Empty new_text deletes. File/output limit 2 MB.
Requires fsfile_findReadFind workspace or saved-paste files by filename glob without reading their contents. Use when you know a name or extension; returns sorted reusable paths and offset pages. Searches subfolders within bounded inventory; incomplete results are explicit. Narrow path to the current game or known source directory.
Requires fsfile_listReadList files in a workspace directory. Returned files/ paths can be used unchanged with every file tool. Start with the current game path from the environment; omit path for all games.
Requires fsfile_readReadRead a contiguous slice of a workspace file or saved paste. Use file_read_many for several known files or slices. The result includes a continuation offset when more remains.
Requires fsfile_read_manyReadRead up to 12 workspace files or saved pastes in one call, sharing the result budget. Each slice includes continuation offsets. Individual failures preserve other results.
Requires fsfile_searchReadFind literal text in a known file or directory before reading relevant slices with file_read_many. Returns reusable files/ paths, matching lines, byte offsets and a continuation cursor. Searches subfolders; skips binary/files over 2 MB. Narrow path to the current game or known source directory to avoid unrelated games/dumps.
Requires fsfile_writeWriteCreate a workspace file or replace most of its content (up to 2 MiB per call). Parent folders are created. For existing files, prefer file_edit or file_edit_many for targeted changes. Build large new scripts in small sections with sequential file_write then file_append calls.
Requires fsagent_followupWriteContinue a completed subagent with its existing context. Returns its id immediately by default; do independent work while it runs, check agent_status periodically and collect the new report. Use the id from dispatch_agent or agent_status. Set background=false only when this call must wait for the answer.
agent_statusReadCheck subagents owned by this conversation. Omit id for compact statuses; give an exact id for current progress or its completed report. Reports and lists use bounded UTF-8 byte pages: follow nextOffset with offset until eof. Check after 2-3 work batches or about 15-30 seconds, while continuing independent work. When no independent work remains, wait_seconds=1-30 waits for a selected child to finish or the deadline; 0 returns immediately. Never tight-poll. Waiting does not stop the children.
ask_userReadAsk the user one question and wait for their answer. Use when a request is genuinely ambiguous -- two ways to read it, a choice of targets, a preference you cannot infer -- and answering it wrong would waste work. Offer concrete options when the plausible answers are few; omit them for an open question. The answer comes back as this call's result. You cannot ask from a subagent.
conversation_listReadList this user's other conversations for review, most recent first, each with its id, title, place, age, size and opening request. Use it to triage which past thread is relevant, then read that one with conversation_read. Untouched empty chats are omitted; the current conversation is marked and does not need reading. Query filters on the title or the opening request.
conversation_readReadRead one of this user's other conversations by id (from conversation_list or conversation_search). Condensed by default: the whole thread with long turns shortened and tool runs collapsed, so a review costs one bounded read. Pass full=true for the verbatim transcript in UTF-8-safe byte slices, following nextOffset for the rest. Use it after a list or search points at a relevant thread, so you carry forward what was decided instead of re-deriving or re-asking it.
conversation_renameWriteRename this conversation to a short, specific title based on what it is actually about, so the user can pick the thread out of their list later. Call it once the subject is clear -- usually after the first exchange -- and again only when the work has genuinely moved on. Name the job, not the tools used. Never use it to replace a name the user set themselves; a conversation the user has named is not offered this tool.
conversation_searchReadSearch other conversations and saved pastes for prior work using a literal query. Returns exact conversation IDs or paste paths and snippets; read details with conversation_read or file_read. scope can restrict the search. Work is bounded and incomplete searches are disclosed; narrow follow-ups rather than assuming absence. The current conversation is excluded.
dispatch_agentWriteStart a self-contained task in a background subagent and immediately receive its id. Keep doing your own independent work while it runs; check agent_status periodically and collect its report before your final answer. Give each worker a distinct scope and avoid concurrent edits to the same file or runtime state. A subagent cannot ask questions, so include the full task and completion criteria. Set background=false only when this tool call must wait for the report.
memory_forgetWriteDelete one remembered key.
memory_readReadRead a saved memory by exact key, search keys/values with a literal query, or list all memories. Historical facts may be stale; current instructions and observed state take precedence. Follow returned offsets with the same filters.
memory_writeWriteSave a durable fact about this user or project under a short key. Survives context compaction and restarts. Use for preferences, paths and goals, not for transcript chatter.
todo_readReadRead the current task list.
todo_writeWriteReplace the full task list. Use when substantial work benefits from a tracked plan; keep one item active while work remains. Routine tool sequences need no list.
waitReadPause for a few seconds before continuing, to let something in the game settle or a change take effect.
character_setWriteChange movement or health values on your own character. Values a server owns will snap back.
character_stateReadRead your character: position, health, movement values and what it is standing on.
character_teleportWriteMove your character straight to a position. Client-side only, so a server with position checks may revert it.
character_walkWriteUse Humanoid.MoveTo toward a position and wait for arrival. This does not compute an obstacle-avoiding path. Timeout, cancellation and respawn return failure with the observed position.
code_action_listReadList saved action snapshots and revisions in pages. Selecting an action does not run it.
code_action_readReadInspect a saved action's typed inputs and source snapshot before editing or running. Source is paged and the saved revision is explicit.
code_action_runHigh impactRun a saved action revision with validated data inputs. Input strings are never compiled or interpolated.
Requires execcode_action_saveWriteSave an inspectable source snapshot as an action with typed inputs. Updating an action is explicit and revision guarded.
code_editWriteReplace an inclusive line range against expected_revision, preserving source outside the range. Never selects or runs the document.
code_proposeWriteStore a reviewable candidate tied to a base revision. Reports proposed; does not overwrite, select, or run live source.
code_readReadRead the latest live source or a retained version/proposal. Returns the revision for edits and Run; source pages are at most 6,000 bytes.
code_runHigh impactRun an identified stored source revision through the shared engine. Rejects source changed during approval; no source retransmission needed.
Requires execcode_searchReadSearch live documents. Literal query is the default; pattern explicitly enables a Lua pattern. Results include source offsets and revisions.
code_selectWriteExplicitly select and open a document in the user's Code workspace.
code_tabsReadList the shared Code library, live document revisions, and open/active IDs. Source is read separately.
code_versionsReadList recoverable source versions and pending proposals without dumping source.
code_writeWriteCreate or conditionally replace shared source. Existing nonempty source requires expected_revision. Saves a recoverable checkpoint and never changes the user's selection.
project_buildWriteCompile/check a saved project and export one deterministic .lua bundle without running it. Module-local require resolves declared IDs only. Refuses output paths that overwrite project inputs. Existing output requires expected_hash; new output is created. Returns source line locations and a recovery checkpoint. Review inputs before building and output before tests.
Requires fs, execproject_mapReadRead a version-1 project manifest and return file hashes, lexical function/local outlines and literal require dependencies without full source. Modules map IDs to relative .lua/.luau files; entry names an ID; tests is an optional array of test IDs. Use project_scaffold for a working example. Lexical hints are not type analysis.
Requires fsproject_patchWriteStage 1-20 coordinated file creates/replacements/exact edits without writing files. Existing targets require expected_hash from project_map or script_analyze; new targets require create=true. Review with project_patch_read, then apply. Proposals/checkpoints are conversation-owned, expire in ten minutes and do not persist across unload.
Requires fsproject_patch_applyWriteApply the exact staged proposal after all file versions and unsaved editor drafts are checked. Writes are verified one by one, not filesystem-atomic. Partial failures retain original and proposed source for conditional recovery; inspect results before continuing.
Requires fsproject_patch_discardWriteRelease a staged proposal or recovery checkpoint. Does not change files; discarded recovery source is no longer available.
Requires fsproject_patch_readReadRead a staged file's before/after source or a bounded line diff. Without path, list proposal metadata. Follow source continuation offsets or retained workspace_result_read fields. Reading never applies a proposal.
Requires fsproject_patch_restoreHigh impactRestore an applied checkpoint only while files still match its recorded versions. Removes files that checkpoint created. Refuses external changes and unverified partial bytes; never claims to undo executed scripts or game effects.
Requires fsproject_scaffoldWriteStage a working modular script project: uai.project.json, main.lua, settings.lua and tests/settings.lua. All destinations must be new. Returns a proposal for review/apply; nothing runs. Generated require uses declared project IDs. Add interfaces through Project UAI UI LIB.
Requires fsscript_analyzeReadCompile saved source without executing it and return hashes, lexical outlines and structured diagnostics. Supply path for one file or manifest for project-wide syntax and literal require checks. Explicitly reports compiler availability; does NOT claim Luau type checking or Roblox API validation.
Requires fsscript_testHigh impactRun declared project tests; choose modules and a case-name filter to verify only relevant behavior. Test modules return named functions receiving t and fixtures (t.equal, t.truthy, t.raises). Fresh module cache/fixtures per case; native game state is shared. Managed deadlines apply; not a sandbox. Review source before running. No matching cases is an explicit failure.
Requires fs, execworkspace_result_readReadRead bounded retained detail for a large native tool result. Start with result_id; follow returned path arrays or offset. No source, object, or traffic is changed.
class_countsReadCount instances by class under a subtree. Good for sizing up an unfamiliar place before walking it.
client_statusReadReport the agent's own state: provider, model, token spend this session, context size, host capabilities and how many tools are available.
performanceReadMeasure frame rate over a short sample and report memory and network stats.
http_getReadGET a URL. HTTP errors fail the call. Large bodies retain a five-minute result reference for http_result_read without another request.
Requires httphttp_requestWriteSend one HTTP request with method and body. Writes are never retried. HTTP errors fail the call; large responses remain readable through http_result_read.
Requires httphttp_result_readReadRead bounded retained detail from a large result in this tool group. Follow returned path arrays and offsets; expires after five minutes.
json_apiReadGET JSON and read a field by dotted path or exact keys (including keys containing dots). Large values retain a reference for http_result_read; false is a valid value and HTTP errors fail.
Requires httpauto_chatWriteStart a background loop cycling through supplied Roblox chat messages. Returns immediately. Stop with chat_loop_stop.
auto_replyWriteStart keyword-based auto-replies to other players in Roblox chat. Uses supplied rules, ignores self/system messages, and sends at most one reply per interval. No ongoing inference requests.
chat_botWriteStart an independent AI chatbot in Roblox chat using the currently selected provider/model. Maintains its own conversation memory and replies to new player messages without keeping this agent turn open. Batches rapid messages, ignores self/system echoes, and suppresses duplicate inputs and repeated replies. Do not also reply with chat_send. Stop/status through chat_loop_stop/chat_loop_status.
chat_historyReadRead recent in-game chat in chronological pages. Continue backward with nextBeforeSequence and identical filters. History retains 100 messages; older evicted messages are unavailable.
chat_loop_statusReadList managed chat loops and independent chatbots, progress, failures, and quiz scores.
chat_loop_stopWriteStop a managed chat loop immediately, or use id='all' to stop every chat loop. An already submitted message cannot be recalled.
chat_sendWriteSend a message into Roblox chat. Reports a failure if no channel is available.
quiz_botWriteHost a quiz in Roblox chat: ask questions, detect the first correct player answer, keep scores, reveal unanswered answers, and repeat. Supply questions and answers. Returns a managed loop ID.
iy_cmdWriteRun an Infinite Yield command by its command string, exactly as typed into IY's own bar: 'speed 100', 'noclip', 'tp PlayerName', 'esp players'. Supports IY's repeat prefixes ('5^speed 100', 'inf^0.5^esp'). When the setting is on but IY is not loaded, this call loads it.
iy_cmdsReadList Infinite Yield commands, optionally filtered by a keyword or limited to one plugin's commands. Shows names, aliases, plugin origin, and argument signatures and descriptions when IY exposes them. Use it before iy_cmd to check syntax.
iy_controlWriteInspect and configure Infinite Yield's saved events, keybinds, aliases, waypoints and settings. Inspect first for current 1-based binding indexes, event fields and defaults. Supports OnExecute, OnSpawn, OnDied, OnDamage, OnKilled, OnJoin, OnLeave and OnChatted. Event commands can use $1/$2 arguments; native IY ignores commands containing 'plugin'. Edits refresh IY's editor and request its normal save. Waypoints default to the current place. Use iy_cmd to execute commands, iy_plugin_write for plugins/custom events. stop_loops sends breakloops.
iy_playersReadResolve an IY selector to concrete names in the live server (read-only). Keywords: all, others, me, random, #<n>, %<team>, allies, enemies, team, nonteam, friends, nonfriends, guests, bacons, age<n>, nearest, farthest, group<id>, alive, dead, rad<n>, cursor, npcs. Supports + include/- exclude, comma-separated lists, and @name for username-only prefix matching. Uses the running IY's selector behavior; resolve targets before iy_cmd.
iy_plugin_installWriteInstall a plugin from the Infinite Yield store: downloads its .iy file, saves it to the workspace and registers it with the running Infinite Yield, whose commands then work through iy_cmd. Accepts the plugin name ('dexrecontinued'), a filename ('dexrecontinued.iy') or the store id.
iy_plugin_readReadRead an authored .iy plugin from the executor workspace, or omit plugin to get a multi-command template. Follow nextOffset for long sources. Use this before updating a plugin with iy_plugin_write.
iy_plugin_searchReadSearch the Infinite Yield community plugin store (iyplugins.pages.dev, several hundred plugins) by name, author or filename. Returns matches with their authors. Use it when the user asks for a feature core IY does not have, then install with iy_plugin_install.
Requires httpiy_plugin_uninstallWriteRemove a plugin: unregisters its commands from Infinite Yield and deletes its .iy file. Accepts the name with or without the .iy ending.
iy_plugin_writeHigh impactCreate or update a custom Infinite Yield .iy plugin. Get the template with iy_plugin_read. Source may declare shared locals/globals above local Plugin, and must return a table with PluginName, PluginDescription and Commands. Each command has ListName, Description, Aliases and Function(args, speaker). Prefer a saved path for long source. Checks syntax before saving. By default executes setup once, validates the returned table and loads/reloads it through IY, returning actual registered command names. load=false only saves syntax-checked source. Set overwrite=true to replace an existing file. Reloading replaces commands; plugin-owned event connections or loops need cleanup in the plugin's own setup/unload command.
Requires fs, execiy_statusReadReport Infinite Yield: the Settings mode, whether it is loaded, how it was obtained (already running, or loaded by this client), the command count and prefix. This inspection does not load IY; command tools ensure availability themselves.
click_detector_fireHigh impactSubmit a ClickDetector, ProximityPrompt hold, or part touch interaction. Prompt/touch holds are released on cancellation or unload; host acceptance does not prove a server response.
clipboard_setWritePut text on the user's clipboard.
Requires clipboardgui_clickWritePress a GUI button by firing the handlers connected to it. Needs a host that exposes signal introspection.
Requires hooksgui_textReadRead visible text under GUI roots using bounded cooperative traversal. Checks ancestor visibility and ScreenGui.Enabled; include_hidden opts into hidden text. Traversal order is not visual stacking order. Continue with the returned offset and identical filters.
gui_treeReadPage top-level interfaces in PlayerGui and CoreGui, with enabled state and direct child counts. Does not enumerate every GUI descendant.
highlightWriteOutline an instance on screen for a few seconds so the user can see which one you mean.
notifyReadShow a short message to the user as a toast in the agent's own interface. Use it for something worth noticing, not for your reply.
ui_library_docsReadRead the bundled Project UAI UI LIB reference before creating a script UI. Covers responsive windows, controls, configuration, cleanup, embedding, application patterns, runtime integration and extending the shared library. Start with quickstart, controls and lifecycle; follow continuation offsets. No network or execution required.
game_infoReadIdentify the current place: name, IDs, creator, live player counts and uptime. Product metadata is cached for 60 seconds; refresh=true bypasses it.
place_infoReadLook up a Roblox place or asset by positive id. Native product metadata is cached for 60 seconds; refresh=true bypasses it. HTTP is a fallback when native lookup fails.
roblox_versionReadReport the current Roblox client release version.
Requires httpuser_lookupReadLook up a Roblox account by username or id.
Requires httpplayer_infoReadDetails for one player: ids, team, character state, position and distance.
players_listReadPage players by distance, with username/display-name filter and deterministic ties. Distances are captured once per call. Continue with offset; restart if players move or leave.
teleport_to_playerWriteMove your character next to another player. Client-side only: on a server with position checks this may be reverted or punished.
gravity_configureWriteChange Gravity engine, formation, interface, performance and Part Control panel defaults using native names. Validates the whole batch, applies native effects, refreshes controls and requests a save. PartCtl* are panel defaults; use gravity_part_control to change selected parts. Read gravity_status first.
Requires gravitygravity_controlWriteControl Gravity using native handlers: start/recenter (defaults to your character), stop and release parts, pause/resume, enable/disable, reroll, reset_settings (all engine/shape settings and keybinds to defaults), or launch/charge a manually controlled Slingshot.
Requires gravitygravity_favoriteWriteAdd/remove shape favorites or clear all favorites in Gravity's native selector. List favorite flags with gravity_shapes. Saves by default; persist=false keeps this session only.
Requires gravitygravity_keybindWriteSet or clear one native Gravity hotkey on desktop or mobile. Provide action or shape, and a Roblox KeyCode name (e.g. E, F5); key="" unbinds it. Refuses conflicts with other core/shape bindings. Read current keybinds in gravity_status.
Requires gravitygravity_launchHigh impactDownload and run the official Project Gravity loader in this client, then report the live status. Use this when gravity_status shows Gravity is not loaded. If Gravity is already connected this reports that without reloading; pass force=true to re-run the loader, which reloads Gravity and releases held parts. This fetches and executes remote code from the Project Gravity repository.
Requires http, execgravity_part_controlWriteUse native Gravity Part Control. select/add/deselect require IDs from gravity_parts; clear deselects without releasing overrides. select_all/select_overridden/invert replace the selection, capped at Gravity's native 512 parts. assign/move/ride/physics/release affect the current selection. assign supports pin/manual/shape/normal; a supplied position is shared by all assigned parts. move preserves group offsets and sets manual targets: use position for the group's center or offset for relative movement. physics replaces overrides; {} restores inheritance. release_all clears even unselected overrides. Selection and overrides are live session state.
Requires gravitygravity_partsReadInspect held Gravity parts with stable session-scoped IDs, paths, positions, selections and overrides. Paginated and sorted by claim ID; read nextOffset for more. IDs expire when the part is released or Gravity reloads.
Requires gravitygravity_plugin_readReadRead Gravity's module guide/template (omit plugin), or real local/official shape source. Bounded source slices include continuation offsets. Read the guide before authoring a plugin; section=template returns a working module.
gravity_plugin_writeHigh impactCreate/update a real GravityShapes/<plugin>.lua file from a saved source path or inline source. Prefer path for long scripts. Checks syntax and verifies disk contents. By default evaluates setup once with a deadline, validates f2/Controls and registers the module in Gravity. load=false saves without executing. overwrite=true is required for replacement. Does not select an inactive shape; existing active shapes reload with cleanup. Plugin callbacks need their own cleanup.
Requires fs, execgravity_shapeWriteSelect a Gravity shape, configure its control keys, or press one real Button. Inspect gravity_shapes(name=...) first. Values use stored units (display divided by Div). Buttons require that shape to be selected and never become settings.
Requires gravitygravity_shapesReadList the live Gravity shape catalog, or pass name to inspect a shape's real control keys, values, buttons and stored-unit slider ranges. No hardcoded catalog.
Requires gravitygravity_statusReadInspect the connected Project Gravity engine, selected shape, targets, held part count and settings. Reports when Gravity is not loaded.
gravity_targetWriteSet Gravity's anchor to yourself or all players, add/remove a specific target, or clear targeting. Ambiguous player names are refused. Preserves the native Targets table.
Requires gravityremote_caller_sourceWriteOpen a captured caller as a read-only source/decompile snapshot and annotate likely remote-name call sites outside interception hooks.
remote_capture_bytesReadRead retained text/binary bytes from a large captured value. Offsets address original bytes; hex output is explicit. Truncated prefixes never imply complete original data.
remote_capture_readReadRead a capture's summary, arguments, results or caller as bounded graph pages. Table nodes reference node_id; no remote calls occur.
remote_fireHigh impactFire a RemoteEvent to the server. This is a real server call: it can change the game and can be logged or punished by anticheat. Prefix an argument with a type when it is not a plain string or number, e.g. 'vec3:0, 10, 0' or 'instance:Workspace.Door'.
remote_invokeHigh impactInvoke a RemoteFunction and return what the server answers. Blocks until it replies, and can hang if the server never does.
remote_replayHigh impactDispatch a reviewed replay plan once. A timed-out InvokeServer remains outstanding and must not be automatically retried.
remote_replay_prepareWritePrepare an immutable five-minute replay plan from a captured revision or explicit remote/method and packed typed arguments. Preparation sends nothing.
remote_result_readReadRead bounded retained detail from a large result in this tool group. Follow returned path arrays and offsets; expires after five minutes.
remote_ruleHigh impactExplicit exact-target outgoing blocking rule. InvokeServer requires local_error policy. Stop disarms all rules; excluding logs is a separate operation.
remote_script_exportWriteExport the exact portable script that was reviewed. Requires its current review ID and digest; target or argument changes invalidate review.
Requires fsremote_script_prepareReadPrepare a portable Luau script for review. The script uses an exact game path and typed arguments, and requires no UAI binding. Preparation sends no traffic.
remote_watchReadListen to a RemoteEvent and report the next few things the server sends through it. Useful for learning a remote's argument shape before firing it.
remotes_callsReadRead captured call summaries with sequence gaps and continuation. Arguments/results are separate bounded reads.
remotes_captureWriteExplicit capture lifecycle. Start requires supported mode and exact scope. Tool default lifetime is 30 seconds; persistent is explicit. Stop/Clear remain available if hooks fail.
remotes_exportWriteExport explicit captures or a frozen bounded session snapshot to verified files. Large exports use numbered parts and a completion manifest.
Requires fsremotes_filterWriteChange admission filtering for future recordings. Excluded past calls cannot be recovered. This never blocks traffic.
remotes_importWriteOpen a validated capture file as offline records. Import never starts capture, resolves stale identities, or sends traffic.
Requires fsremotes_listReadFind remotes in the place, with how many client-side listeners each has when the host can tell.
remotes_stateReadRead capture state, actual coverage, scope, counts and traffic-rule status. Does not start capture or send traffic.
signal_watchReadListen to any instance signal for a short window and report what fired, with argument shapes. Unlike remote_watch this works on ordinary RBXScriptSignals -- Touched, Changed, ChildAdded, MouseButton1Click -- so a game's wiring can be understood without firing anything at the server.
ray_targetReadRaycast from a viewport fraction and return exact instance identity, hit position, normal, distance and material. Defaults to the crosshair, 10,000 studs, excluding your character and water. Does not capture pixels or infer ownership.
Requires guiskills_deleteWriteDelete a skill file. Its entry leaves the environment block from the next turn.
Requires fsskills_installWriteInstall a skill from GitHub: give owner/repo (e.g. 'DietrichGebert/ponytail'), a github.com URL, or a raw.githubusercontent.com URL. The .md is fetched, given proper frontmatter if it lacks it, and saved into skills/.
Requires http, fsskills_listReadList the installed markdown skills (playbooks) with their one-line descriptions and whether each is enabled. A bounded enabled index appears in the environment; use this for omitted entries or to refresh the inventory, including switched-off ones. Filter by name/filename/description with query to find relevant guidance. Follow continuation offsets to see every entry.
Requires fsskills_readReadRead an enabled skill requested by the user or relevant to the task before applying it. Follow continuation offsets for the complete body; inventory descriptions are not bodies. Reuse unchanged bodies still in context; skip unrelated skills.
Requires fsskills_writeWriteSave a skill: a named playbook with a one-line description and a markdown body. Overwrites an existing skill of the same name. Use it when the user asks to keep a working approach -- 'save that as a skill' -- or when you worked something out that a later session will need again.
Requires fstemplate_listReadList the ready-made script templates this client ships with. A template is a pre-written tool invocation for a common job -- player distances, ESP, FPS statistics, remote automation. Call with no arguments for the index; pass an id for one template's full detail.
template_runHigh impactRun a script template by id with the given values. The expanded code appears in the permission prompt before it runs -- what you approve is what runs, because placeholders are filled before the permission decision, not after.
Requires execkey_pressWritePress, hold or release a keyboard key. Holds belong to this conversation and release on up, cancellation or unload. Accepted/uncertain presses are never repeated through a fallback; after a release failure, use only action=up.
mouse_clickWriteClick, hold, release or move the mouse at screen coordinates. Held buttons release on up, cancellation or unload. Unknown or partial input outcomes are reported without repeating clicks; retry only an explicit up after release failure.
web_readReadFetch a web page as readable text or JSON. Returns contiguous UTF-8 pages: continue with page_id and offset without downloading it again. Snapshots last five minutes; four pages / 4 MiB retained. Reading does not execute page scripts.
Requires httpweb_searchReadSearch the web and return titles, URLs and snippets. Use when the answer depends on something current or outside the game.
Requires httpcamera_getReadRead the camera: position, field of view, type and subject.
camera_setWriteChange the camera's field of view, type, or position. Setting a position needs CameraType 'Scriptable' to stick.
lighting_getReadRead current lighting settings and up to 30 direct effects. Select properties to avoid unrelated reads.
lighting_setWriteChange a lighting property. Client-side, so a script that reasserts lighting will overwrite it.
parts_nearReadPage nearby parts sorted by captured distance. Uses the spatial query with a 20,000-part cap, or a cooperative subtree scan on older hosts. Incomplete results do not prove absence; restart pagination if the scene moves.
raycastReadCast a ray and report the first thing it hits. Origin defaults to your character; direction is a vector, not a target point.
Try a shorter search, a different category, or Clear filters.
05 / MAKE IT YOURS
Bring the interface to your scripts.
Bring the agent to your application.
THE INTERFACE LIBRARY
Declare your tabs, sections, and controls in Luau. Project UAI UI LIB handles the responsive layout, player profile, and lifecycle.
local UI = loadstring(game:HttpGet(
"https://raw.githubusercontent.com/Project-Ptolemy/ProjectUAI/main/dist/uai-ui.lua"
))()
local window = UI:CreateWindow({
Id = "my-session-tools",
Title = "Session tools",
Subtitle = "Everything you need for this session",
})
local main = window:Tab({ Title = "Main" })
local actions = main:Section({ Title = "Actions" })
local amount = actions:Slider({
Id = "amount", Text = "Amount", Min = 1, Max = 20, Step = 1, Default = 5,
})
actions:Button({
Text = "Process selection", ActionText = "Run", Style = "Primary",
Callback = function()
print("Process", amount:Get())
window:Notify({ Title = "Finished", Content = "Selection processed.", Kind = "Success" })
end,
})
return windowTHE EMBEDDING SDK
Boot without a UI, create dedicated sessions, and drive tools from your own code. Scoped resources keep cleanup predictable.
local uai = loadstring(game:HttpGet(
"https://raw.githubusercontent.com/Project-Ptolemy/ProjectUAI/main/dist/uai.lua"
))({ ui = false, reuse = true })
assert(uai and uai.alive, "UAI did not start")
local scope, scopeError = uai.sdk.createScope("myhost")
assert(scope, scopeError)
local session, sessionError = uai.sessions.open("myhost-assistant", {
title = "Host assistant", ephemeral = true,
toolFilter = {},
})
if not session then scope.destroy(); error(sessionError) end
uai.sdk.request(session, "Explain how this host uses a dedicated conversation.", {
onComplete = function(result)
if result.ok then print(result.text) else warn(result.error) end
end,
})
-- Call scope.destroy() when this host integration ends.06 / YOUR MOVE
Start with Project UAI Free. No API key to enter.
Or connect a model and endpoint of your own.
loadstring(game:HttpGet("https://raw.githubusercontent.com/Project-Ptolemy/ProjectUAI/main/dist/uai.lua"))()Run in a compatible executor with HTTP access.
Paste the loader into your executor. UAI opens inside your game.
Use Project UAI Free, or add a compatible endpoint and credentials.
Give it a task. New configurations use Allow everything; choose Ask first to approve tool calls.
Free capacity and speed vary. Thank you for supporting Project UAI.
Read the full documentationMORE WAYS TO CONNECT
Keep the conversation on your desktop, or connect your Android device with UAI Relay.
Cowork brings UAI to your browser beside Roblox. One desktop app handles setup, the local connection, and verified updates.
Download for Windows Desktop setup guideThe UAI Relay companion connects your Android device to supported provider routes, including OpenCode free models.
Download for Android Relay setup guideA FEW GOOD QUESTIONS
UAI detects the host’s capabilities. File access, code execution, virtual input, and other tools depend on the functions your host provides. Tools that need missing capabilities are omitted from the model’s available tools.
Models that support tool calls through compatible Chat Completions or Anthropic Messages endpoints. Hosted providers, relays, Ollama, LM Studio, and vLLM can work when they expose a compatible endpoint. Fetch the model list or enter a model by hand.
Stop cancels the current agent turn and managed Luau tasks cooperatively. Execution has a default 10-second deadline, adjustable up to 60 seconds. Native engine calls, dynamically loaded code, and persistent event callbacks can fall outside that cancellation. Changes that already happened are not rolled back.
Settings, conversations, and activity are stored in your executor’s workspace when filesystem support is available. Your inference provider receives the context and tool results used to answer a request. Provider keys belong in UAI’s settings.
Project UAI is open source under the MIT license. Project UAI Free needs no API key to enter; shared capacity and speed vary. Other model providers set their own pricing and availability.
Loading the same build toggles the interface. A newer build reloads when the client is idle. Cowork, UI LIB, and the embedding SDK provide other ways to work with the same project.