v3.6.1A little more possibility.

An agent.
In your world.

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.

Built for the way you think.Open source Your choice of model Made by CarlDV
ONE WORKSPACE.

A whole lot
of capability.

174Purpose-built tools
21Tool groups
12×Files per batch read
20×Edits in one write

01 / FROM INTENT TO ACTION

Less explaining.
More making.

Give UAI the goal. It finds the right tools, works through the steps, and keeps you close to what is changing.

01OBSERVE

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.
02CREATE

Make the change.

Write Luau, search your workspace, and edit files together. Run several tasks in parallel with subagents.

From a single line to the next idea.
03VERIFY

Close the loop.

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.

Chat CompletionsAnthropic MessagesLocal models

02 / A CONVERSATION THAT GOES SOMEWHERE

Right beside
your next idea.

The conversation, the tools, and the world they are changing. Together in one workspace.

New possibilitiesExample session

Find the doors and show me which ones are locked.

Project UAI

Two doors. One way through.

I found two doors in Workspace and checked their Locked attributes.

Lobby.DoorLocked
Garden.DoorUnlocked

The garden door is unlocked. No changes were made.

Activity1 step

instance_query searched Workspace for Door and read the Locked attribute.

See the actual workspacePlay recorded workflow

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

Start with “what if.”

Take a prompt. Make it your own.
Let UAI work out the next step.

01 / EXPLORE

Get to know the game.

Find the checkpoints in Workspace and show their positions and any checkpoint attributes. Inspect first.

02 / UNDERSTAND

Find the moving parts.

Search my workspace Lua files for WalkSpeed, read the relevant sections together, and explain where movement speed is set.

03 / BUILD

Try something different.

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

Curiosity,
equipped.

Every tool in the current build. Availability follows your host’s capabilities, enabled groups, and permission mode.

174 tools across 21 groups

BUILD 3.6.1
Instance tree25 tools
  • changes_listRead

    List recorded UAI property/attribute changes and Undo status. Other game effects are outside this history.

  • changes_readRead

    Inspect recorded before/after values for one supported game-change batch.

  • changes_undoWrite

    Undo one recorded property/attribute batch. Rechecks every target/value and never overwrites a conflicting newer edit.

  • code_extract_sourceWrite

    Extract a UTF-8 byte range from an immutable source snapshot into a separate editable document. Opening or extracting never runs source.

  • code_open_sourceWrite

    Open 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_childrenRead

    Read a bounded child page by exact parent handle or logical root (nil/bookmarks). Cursors reject changed branches.

  • explorer_exportWrite

    Export explicitly selected object metadata to a verified user file. Model export and full-place saving are not provided.

    Requires fs
  • explorer_propertiesRead

    Read 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_searchRead

    Search by literal name, class, tag and subtree with bounded cooperative traversal and snapshot pages.

  • explorer_selectWrite

    Explicitly change shared Explorer selection (maximum 20). Existing selection requires expected_revision. focus optionally opens the native workspace.

  • explorer_stateRead

    Read native Explorer selection, root handles, metadata coverage and capabilities. Does not scan or change selection.

  • instance_attributeWrite

    Read or write an attribute on an instance. Omit value to read.

  • instance_cloneWrite

    Clone an instance. The copy keeps its children.

  • instance_createWrite

    Create 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 impact

    Destroy an instance and everything under it. This cannot be undone.

  • instance_edit_manyWrite

    Apply 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_findRead

    Search 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_getRead

    Read an instance's properties, attributes and tags. Do this before setting anything.

  • instance_get_manyRead

    Inspect 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_parentWrite

    Reparent an instance.

  • instance_queryRead

    Find 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_readRead

    Read bounded retained detail from a large result in this tool group. Follow returned path arrays and offsets; expires after five minutes.

  • instance_setWrite

    Set 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_taggedRead

    List instances carrying a CollectionService tag, or list every tag in use.

  • instance_treeRead

    Read a depth-limited tree within the result budget. Reports omitted/unreadable branches; use explorer_children for complete paginated children of a known handle.

Code6 tools
  • check_luauRead

    Check 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 exec
  • run_luauHigh impact

    Run 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 exec
  • script_listRead

    Find 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_readRead

    Read bounded retained detail from a large result in this tool group. Follow returned path arrays and offsets; expires after five minutes.

  • script_sourceRead

    Read 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_docsRead

    Read 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.

Files10 tools
  • file_appendWrite

    Append up to 2 MiB to a workspace file, creating it if needed. Prefer small additions.

    Requires fs
  • file_deleteHigh impact

    Delete a file or folder from your workspace. This cannot be undone.

    Requires fs
  • file_editWrite

    Replace 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 fs
  • file_edit_manyWrite

    Apply 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 fs
  • file_findRead

    Find 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 fs
  • file_listRead

    List 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 fs
  • file_readRead

    Read 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 fs
  • file_read_manyRead

    Read 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 fs
  • file_searchRead

    Find 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 fs
  • file_writeWrite

    Create 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 fs
Agent14 tools
  • agent_followupWrite

    Continue 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_statusRead

    Check 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_userRead

    Ask 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_listRead

    List 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_readRead

    Read 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_renameWrite

    Rename 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_searchRead

    Search 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_agentWrite

    Start 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_forgetWrite

    Delete one remembered key.

  • memory_readRead

    Read 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_writeWrite

    Save 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_readRead

    Read the current task list.

  • todo_writeWrite

    Replace 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.

  • waitRead

    Pause for a few seconds before continuing, to let something in the game settle or a change take effect.

Character4 tools
  • character_setWrite

    Change movement or health values on your own character. Values a server owns will snap back.

  • character_stateRead

    Read your character: position, health, movement values and what it is standing on.

  • character_teleportWrite

    Move your character straight to a position. Client-side only, so a server with position checks may revert it.

  • character_walkWrite

    Use 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 workspace24 tools
  • code_action_listRead

    List saved action snapshots and revisions in pages. Selecting an action does not run it.

  • code_action_readRead

    Inspect 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 impact

    Run a saved action revision with validated data inputs. Input strings are never compiled or interpolated.

    Requires exec
  • code_action_saveWrite

    Save an inspectable source snapshot as an action with typed inputs. Updating an action is explicit and revision guarded.

  • code_editWrite

    Replace an inclusive line range against expected_revision, preserving source outside the range. Never selects or runs the document.

  • code_proposeWrite

    Store a reviewable candidate tied to a base revision. Reports proposed; does not overwrite, select, or run live source.

  • code_readRead

    Read 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 impact

    Run an identified stored source revision through the shared engine. Rejects source changed during approval; no source retransmission needed.

    Requires exec
  • code_searchRead

    Search live documents. Literal query is the default; pattern explicitly enables a Lua pattern. Results include source offsets and revisions.

  • code_selectWrite

    Explicitly select and open a document in the user's Code workspace.

  • code_tabsRead

    List the shared Code library, live document revisions, and open/active IDs. Source is read separately.

  • code_versionsRead

    List recoverable source versions and pending proposals without dumping source.

  • code_writeWrite

    Create or conditionally replace shared source. Existing nonempty source requires expected_revision. Saves a recoverable checkpoint and never changes the user's selection.

  • project_buildWrite

    Compile/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, exec
  • project_mapRead

    Read 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 fs
  • project_patchWrite

    Stage 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 fs
  • project_patch_applyWrite

    Apply 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 fs
  • project_patch_discardWrite

    Release a staged proposal or recovery checkpoint. Does not change files; discarded recovery source is no longer available.

    Requires fs
  • project_patch_readRead

    Read 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 fs
  • project_patch_restoreHigh impact

    Restore 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 fs
  • project_scaffoldWrite

    Stage 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 fs
  • script_analyzeRead

    Compile 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 fs
  • script_testHigh impact

    Run 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, exec
  • workspace_result_readRead

    Read 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.

Diagnostics3 tools
  • class_countsRead

    Count instances by class under a subtree. Good for sizing up an unfamiliar place before walking it.

  • client_statusRead

    Report the agent's own state: provider, model, token spend this session, context size, host capabilities and how many tools are available.

  • performanceRead

    Measure frame rate over a short sample and report memory and network stats.

HTTP4 tools
  • http_getRead

    GET a URL. HTTP errors fail the call. Large bodies retain a five-minute result reference for http_result_read without another request.

    Requires http
  • http_requestWrite

    Send 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 http
  • http_result_readRead

    Read bounded retained detail from a large result in this tool group. Follow returned path arrays and offsets; expires after five minutes.

  • json_apiRead

    GET 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 http
In-game chat8 tools
  • auto_chatWrite

    Start a background loop cycling through supplied Roblox chat messages. Returns immediately. Stop with chat_loop_stop.

  • auto_replyWrite

    Start 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_botWrite

    Start 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_historyRead

    Read 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_statusRead

    List managed chat loops and independent chatbots, progress, failures, and quiz scores.

  • chat_loop_stopWrite

    Stop a managed chat loop immediately, or use id='all' to stop every chat loop. An already submitted message cannot be recalled.

  • chat_sendWrite

    Send a message into Roblox chat. Reports a failure if no channel is available.

  • quiz_botWrite

    Host 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.

Infinite Yield10 tools
  • iy_cmdWrite

    Run 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_cmdsRead

    List 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_controlWrite

    Inspect 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_playersRead

    Resolve 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_installWrite

    Install 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_readRead

    Read 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_searchRead

    Search 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 http
  • iy_plugin_uninstallWrite

    Remove 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 impact

    Create 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, exec
  • iy_statusRead

    Report 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.

Interface8 tools
  • click_detector_fireHigh impact

    Submit 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_setWrite

    Put text on the user's clipboard.

    Requires clipboard
  • gui_clickWrite

    Press a GUI button by firing the handlers connected to it. Needs a host that exposes signal introspection.

    Requires hooks
  • gui_textRead

    Read 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_treeRead

    Page top-level interfaces in PlayerGui and CoreGui, with enabled state and direct child counts. Does not enumerate every GUI descendant.

  • highlightWrite

    Outline an instance on screen for a few seconds so the user can see which one you mean.

  • notifyRead

    Show 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_docsRead

    Read 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.

Metadata4 tools
  • game_infoRead

    Identify the current place: name, IDs, creator, live player counts and uptime. Product metadata is cached for 60 seconds; refresh=true bypasses it.

  • place_infoRead

    Look 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_versionRead

    Report the current Roblox client release version.

    Requires http
  • user_lookupRead

    Look up a Roblox account by username or id.

    Requires http
Players3 tools
  • player_infoRead

    Details for one player: ids, team, character state, position and distance.

  • players_listRead

    Page 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_playerWrite

    Move your character next to another player. Client-side only: on a server with position checks this may be reverted or punished.

Project Gravity13 tools
  • gravity_configureWrite

    Change 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 gravity
  • gravity_controlWrite

    Control 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 gravity
  • gravity_favoriteWrite

    Add/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 gravity
  • gravity_keybindWrite

    Set 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 gravity
  • gravity_launchHigh impact

    Download 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, exec
  • gravity_part_controlWrite

    Use 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 gravity
  • gravity_partsRead

    Inspect 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 gravity
  • gravity_plugin_readRead

    Read 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 impact

    Create/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, exec
  • gravity_shapeWrite

    Select 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 gravity
  • gravity_shapesRead

    List 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 gravity
  • gravity_statusRead

    Inspect the connected Project Gravity engine, selected shape, targets, held part count and settings. Reports when Gravity is not loaded.

  • gravity_targetWrite

    Set 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 gravity
Remotes20 tools
  • remote_caller_sourceWrite

    Open a captured caller as a read-only source/decompile snapshot and annotate likely remote-name call sites outside interception hooks.

  • remote_capture_bytesRead

    Read 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_readRead

    Read a capture's summary, arguments, results or caller as bounded graph pages. Table nodes reference node_id; no remote calls occur.

  • remote_fireHigh impact

    Fire 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 impact

    Invoke a RemoteFunction and return what the server answers. Blocks until it replies, and can hang if the server never does.

  • remote_replayHigh impact

    Dispatch a reviewed replay plan once. A timed-out InvokeServer remains outstanding and must not be automatically retried.

  • remote_replay_prepareWrite

    Prepare an immutable five-minute replay plan from a captured revision or explicit remote/method and packed typed arguments. Preparation sends nothing.

  • remote_result_readRead

    Read bounded retained detail from a large result in this tool group. Follow returned path arrays and offsets; expires after five minutes.

  • remote_ruleHigh impact

    Explicit exact-target outgoing blocking rule. InvokeServer requires local_error policy. Stop disarms all rules; excluding logs is a separate operation.

  • remote_script_exportWrite

    Export the exact portable script that was reviewed. Requires its current review ID and digest; target or argument changes invalidate review.

    Requires fs
  • remote_script_prepareRead

    Prepare 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_watchRead

    Listen 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_callsRead

    Read captured call summaries with sequence gaps and continuation. Arguments/results are separate bounded reads.

  • remotes_captureWrite

    Explicit 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_exportWrite

    Export explicit captures or a frozen bounded session snapshot to verified files. Large exports use numbered parts and a completion manifest.

    Requires fs
  • remotes_filterWrite

    Change admission filtering for future recordings. Excluded past calls cannot be recovered. This never blocks traffic.

  • remotes_importWrite

    Open a validated capture file as offline records. Import never starts capture, resolves stale identities, or sends traffic.

    Requires fs
  • remotes_listRead

    Find remotes in the place, with how many client-side listeners each has when the host can tell.

  • remotes_stateRead

    Read capture state, actual coverage, scope, counts and traffic-rule status. Does not start capture or send traffic.

  • signal_watchRead

    Listen 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.

Screen & aiming1 tools
  • ray_targetRead

    Raycast 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 gui
Skills5 tools
  • skills_deleteWrite

    Delete a skill file. Its entry leaves the environment block from the next turn.

    Requires fs
  • skills_installWrite

    Install 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, fs
  • skills_listRead

    List 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 fs
  • skills_readRead

    Read 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 fs
  • skills_writeWrite

    Save 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 fs
Templates2 tools
  • template_listRead

    List 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 impact

    Run 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 exec
Virtual input2 tools
  • key_pressWrite

    Press, 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_clickWrite

    Click, 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.

Web2 tools
  • web_readRead

    Fetch 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 http
  • web_searchRead

    Search the web and return titles, URLs and snippets. Use when the answer depends on something current or outside the game.

    Requires http
World6 tools
  • camera_getRead

    Read the camera: position, field of view, type and subject.

  • camera_setWrite

    Change the camera's field of view, type, or position. Setting a position needs CameraType 'Scriptable' to stick.

  • lighting_getRead

    Read current lighting settings and up to 30 direct effects. Select properties to avoid unrelated reads.

  • lighting_setWrite

    Change a lighting property. Client-side, so a script that reasserts lighting will overwrite it.

  • parts_nearRead

    Page 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.

  • raycastRead

    Cast a ray and report the first thing it hits. Origin defaults to your character; direction is a vector, not a target point.

05 / MAKE IT YOURS

A foundation for
your next thing.

Bring the interface to your scripts.
Bring the agent to your application.

THE INTERFACE LIBRARY

Beautiful by default.

Declare your tabs, sections, and controls in Luau. Project UAI UI LIB handles the responsive layout, player profile, and lifecycle.

Try the library
starter.lua
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 window

THE EMBEDDING SDK

Your app. UAI underneath.

Boot without a UI, create dedicated sessions, and drive tools from your own code. Scoped resources keep cleanup predictable.

Try the SDK
myhost.lua
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

Make something
only you would.

Start with Project UAI Free. No API key to enter.
Or connect a model and endpoint of your own.

THE ROBLOX LOADER
loadstring(game:HttpGet("https://raw.githubusercontent.com/Project-Ptolemy/ProjectUAI/main/dist/uai.lua"))()

Run in a compatible executor with HTTP access.

  1. 01

    Load the workspace.

    Paste the loader into your executor. UAI opens inside your game.

  2. 02

    Choose your model.

    Use Project UAI Free, or add a compatible endpoint and credentials.

  3. 03

    Follow an idea.

    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 documentation

MORE WAYS TO CONNECT

Same agent.
More room.

Keep the conversation on your desktop, or connect your Android device with UAI Relay.

WINDOWS · x64v3.6.0

A little space to think.

Cowork brings UAI to your browser beside Roblox. One desktop app handles setup, the local connection, and verified updates.

Download for Windows Desktop setup guide
ANDROID · RELAYv3.6.0

Keep the connection close.

The UAI Relay companion connects your Android device to supported provider routes, including OpenCode free models.

Download for Android Relay setup guide

A FEW GOOD QUESTIONS

Before
you begin.

Does every tool work in every executor?

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.

Which models can I use?

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.

What happens when I press Stop?

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.

Where do my data and requests go?

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.

Is Project UAI free?

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.

What if I already have UAI running?

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.