Account workflows and AI connections
Implementation was added without tests or live verification at the user's request. Player access requires a compatible runtime; the standalone source VM lacks Roblox bindings. The Studio plugin uses Studio APIs without Player injection.
1. Example: VIP → spawn → close → next account
- Accounts → select account → Account settings → Account setup.
- Save Game / VIP, assign Script, enable auto-attach and submission after attach.
- Enable game-script signals under Session cache, script signals & schedule.
- Workflow · conditions & account rotation → Create workflow.
- Select All conditions (AND) in the first group and add:
| Source | Comparison | Text | Count |
|---|
| Named event / HTTP | Equals | vip_joined | 1 |
| Log message | Contains | spawned | 1 |
- When satisfied → Close & next account. Select the next profile, which needs its own account and Game / VIP.
- Action delay is the wait after matching conditions. Pause before next account starts after confirmed old-process exit.
- Timeout counts from bridge installation, e.g. 600 seconds; On timeout selects a separate action.
- Wait for settings to save, then start through Launch & status.
After your script actually verifies the intended server:
local session = getgenv().PotassiumSession
assert(session, "Session bridge is not ready")
session.Event("vip_joined")
-- Your code waits for and verifies spawning here.
-- Only once that condition is satisfied:
print("spawned")
These lines do not themselves verify VIP/spawn. Your script makes that decision; ExtraExecutor counts matching messages. A nonempty Job ID or Place ID alone does not establish a private server.
2. AND / OR behavior
Each group has its own All/Any, with an outer Combine groups. For (vip_joined AND spawned) OR completed, use two groups with outer Any.
- Equals: full case-sensitive text match.
- Contains: plain substring, not regex.
- Count: required messages, 1–1000.
- Logs come from LogService.MessageOut after listener installation only.
- Event: PotassiumSession.Event, HTTP /signals, or MCP workflow_event.
- Matches accumulate until the run ends; order is irrelevant.
- 1–16 groups, up to 32 conditions per group; values up to 512 bytes.
- One action per run; later messages do not queue another action.
- Repeated identical HTTP delivery increments Count before triggering; no request deduplication.
Enabled Workflow overrides the simple Close Roblox when a log matches rule. For ordered steps, let your script send one final event after completing its sequence.
Refresh progress displays state/counters. Active workflow is removed after stopping; see Launch & status history for results. Changed settings require a new bridge/session launch.
3. Actions, queue, and loops
| Action | Result |
|---|
| Close Roblox | Disable recovery for this run; close verified PID/instance |
| Close & reconnect | Close this instance; profile Recovery determines later attempts |
| Close & next account | Cancel recovery, close, confirm exit, wait, launch next profile |
| Stop automation | Cancel timers/recovery, leave Player open |
Link profiles A → B → C; set C → A for a loop. Each uses its own script, VIP, memory, and workflow. One session is active per chain unless you separately start others. Multiple chains do not become a global queue.
Exit confirmation uses the saved Windows process handle, not disappearance of a window. If exit is not confirmed within 120 seconds plus the configured pause, transition stops. Close failure prevents the next launch. Next-launch failure enters the source profile's history; the transition does not retry that launch.
Vault locking cancels conditions/queues/timers. Stop recovery for this run also cancels that profile's pending transition. Restarting ExtraExecutor does not restore counters/queues. Recovery retains its own bounded attempts/delay; it is not an unlimited error bypass.
4. External HTTP signals
Enable MCP in integrations. Workflow shows URL/Profile ID. Default: http://127.0.0.1:8225/signals, local computer only. Use the actual configured port.
POST headers:
Content-Type: application/json
Authorization: Bearer YOUR_LOCAL_MCP_TOKEN
Send an event to an active workflow:
{"profileId":"PROFILE_ID_FROM_UI","action":"event","event":"vip_joined"}
Launch a saved profile:
{"profileId":"PROFILE_ID_FROM_UI","action":"launch"}
Vault must be unlocked. Launch uses saved settings and launcher validation. Events for inactive workflows are rejected. HTTP accepted does not mean game entry or script completion.
The MCP token grants broader local tools, not just one account's events. Do not give it to game scripts. Session bridge uses a different auto-generated account/instance capability.
5. Outgoing webhook
Send result to webhook takes your HTTP(S) URL, e.g. your local server/API. On match or timeout it sends:
{"profileId":"...","instanceId":"...","reason":"conditionsMatched"}
Timeout uses reason timeout. This reports the workflow decision, not confirmed closure/new entry. No cookies, VIP links, raw logs, or capabilities are sent. One POST, 10-second timeout, no redirects/retries. Delivery failure does not block the action; generic stderr errors omit URL/body. Custom webhook authorization headers are not configurable yet.
The URL is stored in encrypted profile settings. Backup v2 excludes workflows; use Copy settings within the same vault to copy them.
6. Player: MCP, Dex, and game data
Workflow creation enables these two switches by default according to the requested behavior; they can be disabled independently. Existing profiles are not changed automatically.
- Install MCP game bridge after attach: sends bridge to this Player; requires enabled MCP and runtime HTTP request API.
- Run Dex++ loader after session bridge is ready: sends DEX-LOADER.luau after heartbeat, separately from the assigned script.
Launcher waits up to 20 seconds for session heartbeat before submitting the assigned script. Missing heartbeat produces an error and no submission. Standalone source VM does not supply Roblox/WebSocket bindings.
MCP installgamebridge accepts the current pid. After first poll, listgametargets should show player:PID with online=true. opendex is separate and requires explicit PID. Dex is visual; gamerequest is a separate AI data channel.
7. Roblox Studio
integrations/ExtraExecutor.plugin.luau is generated from the template/shared operations. For local installation, create a temporary Script in Studio, paste the entire file, and use Save as Local Plugin on that Script. Remove the temporary Script afterwards. Do not publish it as LocalScript or run it as a server Script: it requires plugin context.
- Enable MCP in ExtraExecutor.
- Open the ExtraExecutor Studio panel using its toolbar button.
- Enter http://127.0.0.1:8225, a unique session name, and MCP token.
- Connect; approve local HTTP access if Studio asks.
- Token field clears after the attempt. It is not stored in plugin settings/game; subsequent requests use this target's separate capability.
- listgametargets returns studio:your-session-name.
- Disconnect/plugin unloading stops polling. Duplicate names replace the previous capability, so use unique names for simultaneous Studio instances.
The plugin provides defined read/property-update operations, not arbitrary Studio loadstring. Changes use ChangeHistoryService for Undo. Source/property access depends on actual Studio/Player permissions; denials are returned as errors.
| Tool | Arguments / purpose |
|---|
| list_clients | Connected Player PIDs |
| execute_script | source, pid; Luau delivery |
| read_console | limit 1–500; shared log |
| session_status | Sessions, heartbeat, Place/Job |
| workflow_status | Workflow states/counters |
| workflow_event | profileId, event |
| open_dex | pid |
| installgamebridge | pid |
| listgametargets | Player/Studio targets and online state |
| game_request | target, operation, path, operation arguments |
Example game_request arguments:
{"target":"studio:studio-123","operation":"get_tree","path":["Workspace"],"depth":2,"limit":200}
Operations:
- get_tree: depth 0–5, limit 1–500; truncated/hasChildren indicates limits.
- get_properties: up to 64 property names; defaults Name/ClassName/Parent/Archivable.
- read_script: selected object's Source up to 192 KiB, subject to permissions.
- set_property: property/value as string, number, boolean, or
{type:"Vector3",x,y,z} / {type:"Color3",r,g,b}. API errors are returned.
path is exact child names starting at game. Duplicate sibling names make it ambiguous and return an error; no object-ID addressing yet. Response up to 256 KiB, wait up to 15 seconds. Timeouts are not success; late responses are rejected. For set_property, timeout means unknown outcome: read the property before retrying.
9. Claude, Codex, Antigravity, OpenCode
integrations/mcp-stdio.mjs has no npm dependencies and needs Node 18+ with fetch. AI clients launch it as stdio MCP; it forwards to local ExtraExecutor HTTP. ExtraExecutor must already be open with MCP enabled; the adapter does not start it.
Templates contain the current package's absolute path and PASTELOCALTOKEN. Update paths after moving, replace token locally, never in chat. Specify full node.exe path if node is unavailable.
- Claude Desktop: merge claude-desktop.example.json server section into MCP config, preserving existing servers.
- Codex: add codex.example.toml section to your MCP config.
- Antigravity: merge antigravity.example.json server into local MCP config.
- OpenCode: merge opencode.example.json mcp section.
These are templates, not automatic client changes. Live connections were not verified. References: Codex MCP, OpenCode MCP, Antigravity MCP.
10. Common errors
- Unauthorized: wrong MCP token; Studio/Player capability cannot authorize MCP /signals.
- No active workflow: profile inactive, workflow disabled, or already complete.
- Conditions do not count: inspect log/event source, case, exact text, Count, group modes, heartbeat. Old logs are not replayed.
- Player closes early: Contains matched unrelated output; use unique Equals/event.
- Next profile does not launch: inspect its target/account, old-instance exit, history. Running accounts are not duplicated.
- Game bridge offline: missing compatible runtime, HTTP API, Studio permission, or active MCP. Check URL/port/first poll.
- Source/property denied: real API permission denial; bridge does not bypass it.
- game/task/WebSocket errors in standalone VM: missing Roblox bindings; submitted is not execution.