feat: add guided exploration and share user-started MCP backend
This commit is contained in:
1 parent
f86db1ced6
commit
ee256ad7ce
144 files changed
+8625
-2075
No files matched your search
@@ -0,0 +1,699 @@
|
||||
{
|
||||
"instructions": "ARTEMIS is an autonomous mobile AI agent and Android UI automation engine. For the full workflow use mobile_workspace (devices/queue), mobile_config (non-secret saved defaults), mobile_task_file (XLSX template/preview), mobile_batch (JSON cases + execution), mobile_search_history and mobile_export_report (Word/Excel/ZIP). For interactive test design use mobile_exploration: one conversation, user guidance, recorded demonstrations, resumable active-time limits and versioned cases for Flash/Pro. Task action replay is unavailable; trace inspection is read-only. Use mobile_run_task to launch autonomous UI workflows on connected Android devices or emulators, mobile_manage_task to check status or steer execution, mobile_get_device_state to inspect real-time device screen/hierarchy, mobile_inspect_trace to inspect detailed execution steps and visual action overlays, and mobile_diagnose whenever a tool errors, no device is found, or the user says ARTEMIS is not working: it checks the environment and returns ordered fix steps.",
|
||||
"tools": [
|
||||
{
|
||||
"name": "mobile_get_device_state",
|
||||
"description": "Real-time mobile device state observer (for debugging and validation).\n\nRetrieves a real-time screenshot or a simplified UI element tree from the\ntarget device — useful for inspecting device status or tracking a\nsubagent's progress.\n\nArgs:\n view_type: Observation type:\n - \"screenshot\": captures the screen, saves it to the workspace, and\n returns the image's local file URI.\n - \"hierarchy\": returns the simplified text-labeled element list —\n exactly what the automation subagent sees when making decisions.\n device_serial: Optional device serial (e.g. \"emulator-5554\") to inspect\n a specific device; omitted → the default connected device. With\n several devices attached, confirm the target with the user\n (`adb devices -l` lists serials).\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"view_type": {
|
||||
"title": "View Type",
|
||||
"type": "string"
|
||||
},
|
||||
"device_serial": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Device Serial"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"view_type"
|
||||
],
|
||||
"title": "mobile_get_device_stateArguments",
|
||||
"type": "object"
|
||||
},
|
||||
"outputSchema": {
|
||||
"properties": {
|
||||
"result": {
|
||||
"title": "Result",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"result"
|
||||
],
|
||||
"title": "mobile_get_device_stateOutput",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_diagnose",
|
||||
"description": "Diagnoses why ARTEMIS cannot run tasks from this IDE and returns the fixes.\n\nCall this FIRST whenever another ARTEMIS tool errors, a task fails to\nstart, no device is found, or the user says ARTEMIS \"does not work\".\nIt checks, in fix order: Python runtime, config file, the MCP host\n(interpreter vs project venv, .env location, traces directory, daemon\nport), LLM credentials, ADB + devices (authorization, lock screen, RSA\nkeys, emulators), and the optional video toolchain. A plain call takes a\nfew seconds; the optional extras cost more (see Args).\n\nReturns a dict:\n - `verdict`: \"ready\" | \"degraded\" (optional pieces missing) | \"blocked\".\n - `summary`: one line with the pass count and what needs attention.\n - `next_steps`: ordered instructions. `[REQUIRED]`/`[OPTIONAL]` lines\n name a problem; the indented lines under them are the fix. `Run:`\n lines are single, local, non-destructive shell commands you may\n execute yourself, one per line (ask before installing software).\n `Guidance:` lines need the user, explain a setting, or tell you\n which mobile_diagnose call to make next. Follow them top to bottom,\n then call this tool again until `verdict` is \"ready\".\n - `checks`: per-check status. Passing checks are one line (id, title,\n status, required, summary); failing ones add detail, fix, facts.\n Secrets are never included.\n - `host`: how the MCP server was launched: server_python,\n runner_python, interpreter_matches_venv, env_file, env_file_exists,\n traces_dir, mcp_client (when known), daemon {port, reachable,\n port_held_by_other_process, log_path}.\n - `device`: the device a task would use ({serial, state, model,\n android_version, is_locked, is_emulator, accessibility_helper}) or\n null. `accessibility_helper` describes the Artemis UI-hierarchy\n helper APK on that device ({installed, installed_version,\n bundled_version, outdated, enabled, forward_port, reachable,\n backend}); with backend \"auto\" a missing helper only degrades\n (UIAutomator2 fallback), with backend \"helper\" it blocks.\n - `emulator`: background emulator launch state ({avd_name, status,\n stage_message, error, serial, elapsed_seconds, progress_percent}) or\n null when nothing was launched. `status` is starting /\n waiting_for_adb / booting while it boots, then ready or failed.\n - `tasks`: {\"active\": [...], \"queued\": [...]} ARTEMIS tasks holding or\n waiting for a device (device, session_id, pid, description, ingress,\n started_at/created_at). Stop a stuck one with\n mobile_manage_task(action=\"stop\", trace_id=<session_id>).\n - `credentials`: null unless verify_credentials; else\n [{provider, label, valid, message}] per configured key.\n - `device_probe`: null unless probe_device; else {ok, serial,\n elapsed_seconds, screenshot_bytes, element_count, error, fix}.\n - `fixes_applied`: what `attempt_fix` did ({fix, success, skipped, message}).\n - `logs`: paths to the MCP server logs and the daemon log, recent\n error lines, and the most recent failed task with its error, log\n paths and `recent_errors` (tail of its stderr log).\n\nArgs:\n attempt_fix: When true, applies the safe self-heals the ARTEMIS\n console offers: remove device locks left by dead processes,\n regenerate corrupted ADB RSA keys, restart the ADB server (only\n when no device is ready and no task holds a device), and install,\n upgrade or enable the Artemis accessibility helper APK on the idle\n target device when it is missing, outdated or disabled. Then\n re-runs the checks. Nothing else is changed.\n device_serial: Optional serial the user wants to use; the report\n then states explicitly whether that device is attached, authorized\n and idle.\n launch_avd: Name of an installed Android Virtual Device to boot in\n the background (pick it from the `next_steps` guidance or the\n android_adb facts `installed_avds`). Returns immediately; boot\n takes 1-3 minutes, so call mobile_diagnose again (without\n launch_avd) after about 60 seconds and watch `emulator.status`.\n Never pass it while the status is starting/waiting_for_adb/booting.\n Use it when no device is attached and an AVD exists instead of\n asking the user to start an emulator.\n verify_credentials: When true, checks every configured API key\n against its provider over the network (about 12 seconds worst\n case, keys stay on the server). Use it when tasks fail with\n authentication, quota or model errors although the key check\n passes. An invalid primary key makes the verdict \"blocked\".\n probe_device: When true, drives the attached device end to end\n (screenshot + UI hierarchy, about 20 seconds) to prove a task can\n really start. Use it when the checks pass but tasks still fail on\n the device, or the screen stays black. A failed probeLine truncated
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"attempt_fix": {
|
||||
"default": false,
|
||||
"title": "Attempt Fix",
|
||||
"type": "boolean"
|
||||
},
|
||||
"device_serial": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Device Serial"
|
||||
},
|
||||
"launch_avd": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Launch Avd"
|
||||
},
|
||||
"verify_credentials": {
|
||||
"default": false,
|
||||
"title": "Verify Credentials",
|
||||
"type": "boolean"
|
||||
},
|
||||
"probe_device": {
|
||||
"default": false,
|
||||
"title": "Probe Device",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"title": "mobile_diagnoseArguments",
|
||||
"type": "object"
|
||||
},
|
||||
"outputSchema": {
|
||||
"additionalProperties": true,
|
||||
"title": "mobile_diagnoseDictOutput",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_inspect_trace",
|
||||
"description": "Retrieves execution details of a mobile automation task (running or finished).\n\nUse it to monitor progress, verify answers, and diagnose agent errors for\nboth Flash and Pro tasks. Every result includes the assigned `device_serial`.\n\n### Actions\n- **'view_summary'**: High-level execution summary across all steps.\n Pro: hierarchical task plan with per-step status; Flash: full execution\n chain with each step's reasoning and action.\n- **'search'**: Deterministic keyword / step-range lookup over the full\n stored history (screen descriptions, exact actions and results,\n reasoning, tool calls, notes, on-screen OCR/UI-tree text incl.\n package/activity names, compressed-history ledgers). Every hit carries\n its step number; a `step_range` also returns that range's per-step\n action ledger. Requires `query` and/or `step_range`.\n- **'view_step_screenshots'**: Local file paths of one step's screenshots:\n `before_screenshot` (what the agent saw), `after_screenshot` (only set\n when the action failed/was intercepted, else null), and\n `action_overlay_screenshot` (the action visually marked — e.g. red circle\n for taps — key for verifying the agent tapped the right element).\n- **'view_step_details'**: Stored details of one step exactly as the agent's\n own context showed it: what the screen showed, its reasoning, every tool\n call it made (name, arguments, result — e.g. what the explorer or OCR\n reported), the planned action, any safety-net interception and the\n execution result. Coordinates are normalized [x, y]. Works for Flash and\n Pro tasks.\n\nArgs:\n action: `\"view_summary\"`, `\"search\"`, `\"view_step_screenshots\"`, or\n `\"view_step_details\"`.\n trace_id: The task's session identifier from `mobile_run_task`.\n step_number: 1-indexed step to query; required for the two per-step\n actions, omit otherwise.\n query: Keywords for `\"search\"` (case-insensitive; every\n whitespace-separated term is matched independently).\n step_range: Optional `[start, end]` step range (inclusive) for\n `\"search\"`.\n max_results: Maximum `\"search\"` hits to return (server-side cap applies).\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"action": {
|
||||
"title": "Action",
|
||||
"type": "string"
|
||||
},
|
||||
"trace_id": {
|
||||
"title": "Trace Id",
|
||||
"type": "string"
|
||||
},
|
||||
"step_number": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Step Number"
|
||||
},
|
||||
"query": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Query"
|
||||
},
|
||||
"step_range": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"type": "integer"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Step Range"
|
||||
},
|
||||
"max_results": {
|
||||
"default": 5,
|
||||
"title": "Max Results",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"action",
|
||||
"trace_id"
|
||||
],
|
||||
"title": "mobile_inspect_traceArguments",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_manage_task",
|
||||
"description": "Manages the lifecycle and retrieves the status of a background mobile automation task.\n\nThis is your primary diagnostic and control tool for tasks started by\n`mobile_run_task` or the web workspace. You MUST use it to poll the task status when your\n1-minute fallback timer triggers (as required by `mobile_run_task`). You\ncan also steer a subagent that is stuck or off-track, or abort a task.\n\n### Actions\n- **'status'**: Returns `trace_id`, `status` ('running'/'pausing'/'task_paused'/\n 'resuming'/'completed'/'failed'/'cancelled'/'interrupted'), `device_serial` (which phone owns this task in multi-device\n setups), `task_desc`, `model`, `elapsed_seconds`, a `test_summary` (when\n the run declared verification check items: machine-readable\n passed/failed/inconclusive/unchecked counts plus failed-item details —\n no need to parse report prose), `test_result` (Flash and Pro: status\n passed/failed/inconclusive/blocked, reason and evidence; completed only\n means execution ended), and `progress` (Flash:\n current turn, latest thought/action — intervene if turns climb without\n progress or the thought indicates it is stuck; Pro: the active task plan\n — check it still aligns with your goal).\n- **'pause'**: Requests a pause, returning `pausing` until the runner releases\n the device. Pro can interrupt a pending model response or read-only diagnostic;\n a device action already in progress must finish safely first. Check status\n for `task_paused` before assuming the device is free.\n- **'resume'**: Queues a paused task for its device again; optional `instruction`\n provides guidance before the next action.\n- **'inject_instruction'**: Injects real-time guidance mid-flight when the\n subagent errs, stalls, or loops. An in-flight model response or read-only\n helper is cancelled immediately, then the runner observes the device again\n and consumes the new guidance. An already-started device action finishes\n safely before the runner changes direction. Requires\n `instruction` (unless `release_loop=True`). To end a continuous\n monitoring task ([Loop:continuous] milestone) gracefully, you MUST pass\n `release_loop=True` — this is the only signal that unlocks the\n milestone's completion; natural-language \"please stop\" phrasing in\n `instruction` is NOT interpreted as a stop signal.\n- **'guidance_history'**: Lists submitted instructions with `pending` or\n `consumed` status; a submitted instruction is not proof it was applied.\n- **'stop'**: Forcefully terminates the subagent, immediately halting\n device interactions and releasing the device. Use when the task is done,\n irreparably broken, or running out of control. Prefer\n `inject_instruction` with `release_loop=True` when a monitoring task\n should wind down cleanly instead of being killed.\n\nArgs:\n action: `\"status\"`, `\"pause\"`, `\"resume\"`, `\"inject_instruction\"`,\n `\"guidance_history\"`, or `\"stop\"`.\n trace_id: The task's session identifier from `mobile_run_task` or the web UI.\n instruction: Guidance string; required for `inject_instruction`\n (optional when `release_loop=True`), omit otherwise.\n release_loop: With `inject_instruction`: explicit user stop signal\n that authorizes the subagent to complete continuous monitoring\n loops and finish the task gracefully.\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"action": {
|
||||
"title": "Action",
|
||||
"type": "string"
|
||||
},
|
||||
"trace_id": {
|
||||
"title": "Trace Id",
|
||||
"type": "string"
|
||||
},
|
||||
"instruction": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Instruction"
|
||||
},
|
||||
"release_loop": {
|
||||
"default": false,
|
||||
"title": "Release Loop",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"action",
|
||||
"trace_id"
|
||||
],
|
||||
"title": "mobile_manage_taskArguments",
|
||||
"type": "object"
|
||||
},
|
||||
"outputSchema": {
|
||||
"additionalProperties": true,
|
||||
"title": "mobile_manage_taskDictOutput",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_run_task",
|
||||
"description": "Starts an autonomous mobile UI automation subagent on a connected Android device.\n\nDelegates a mobile workflow to a background agent. Non-blocking: returns\nimmediately with `trace_id` (for `mobile_manage_task` / `mobile_inspect_trace`),\n`device_serial`, `stdout_log`/`stderr_log` paths, and `notes_dir` (Pro only).\nOn completion (success or failure) a Reactive Wakeup notifies you — but only\nwhen `conversation_id` was provided; without it, rely on your fallback timer.\n\n### Model selection (routing)\n- **Flash** (default, preferred): simple, deterministic tasks with a clear\n UI path. No step cap by default (history is compressed, and the agent\n can recall earlier steps and query the session recording), but no ADB\n shell, no pre-execution safety net, no persistent plan or notes, and\n no midway checkpoints or persistent written notes. An exit-only read-only\n Checker judges the prompt's expectations and returns test_result;\n execution completion is separate from test pass. Unsuitable for exploration,\n multi-branch recovery, structured monitoring/polling, or tasks that\n must report back large amounts of detail.\n- **Pro**: complex, exploratory, or multi-branch tasks; continuous\n monitoring/polling; tasks needing ADB shell, system logs, verified\n checkpoints, multi-step planning, or detailed written output (via notes\n and `expected_output_desc`).\n\nTiming is not precise: the agent's own inference adds ~5 s per step (Flash)\nor ~30 s per turn (Pro) on top of any requested waits — account for this\nwhen the task involves waiting. For recurring workflows, run once to\ndiscover the path, then author a deterministic script instead of\nre-delegating.\n\n### Follow-up protocol (CRITICAL)\n1. **Fallback timer**: you MUST set a background timer and check the task\n status via `mobile_manage_task` at least once every 1 minute — mobile\n tasks can stall silently, so never rely on the completion wakeup alone.\n2. **Post-task inspection**: after completion, inspect the execution logs\n to verify success (`stderr_log` carries critical failures and Python\n tracebacks — essential for debugging).\n3. **Pro notes**: for Pro runs, read `notes_dir` to extract the results and\n plans the subagent recorded.\n\nArgs:\n task_desc: Clear, self-contained task description with all context,\n exact UI actions, and termination conditions (execution is one-shot).\n For Pro, may also specify what the subagent must record in its notes.\n conversation_id: Optional conversation ID used to route the completion\n wakeup notification back to the caller. Omit if unknown.\n model: `\"Flash\"` or `\"Pro\"` — see model selection above.\n locked_app_package: Optional package name to lock execution to; the\n agent auto-launches it and restricts actions to that app.\n app_path: Optional local APK path to install before running.\n expected_output_desc: Optional, Pro only. If set, a summarization agent\n writes a report to `output.md` in `notes_dir`. Ignored for Flash.\n device_serial: Optional device serial (e.g. \"emulator-5554\") to bind\n execution to a specific device; distinct devices run concurrently.\n If omitted, an available device is selected automatically. When\n several devices are attached, confirm the target with the user first\n (`adb devices -l` lists serials and authorization states).\n verification_level: Optional, Pro only. Coarse Checker preset: `\"off\"`\n (no audit; the Operator self-reports), `\"final\"` (one exit review\n against the goal, the default), `\"checkpoints\"` (every plan\n checkpoint is verified + exit review), `\"strict\"` (checkpoints with\n a larger repair budget; a failed assert halts the run). Ignored for\n Flash.\n explorer_mode: Optional, Pro only. Explorer perception version used\n by the Operator: `\"flash\"` (1-shot detection, the default),\n `\"pro\"` (3-turn ReAct), `\"ultra\"` (deep pixel reasoning; slowest).\n Ignored for Flash.\n runtime_overrides: Optional TaskOptions JSON for this task only. Supports\n execution_target ('android', 'computer', 'mixed') and plugins\n ([{id, profile}] references to saved authorized configurations; never secrets).\n Omitted plugins selects matching enabled defaults; [] disables plugins.\n Default Android tasks can use mixed extensions on demand without changing targets.\n Computer tasks require an observation plugin, not an Android device.\n Query mobile_workspace first; installation/authorization is in the plugin page.\n timeout_seconds (total execution, default 1800; excludes queue/pause),\n observation_timeout_seconds (60), observation_max_attempts (3),\n device_command_timeout_seconds (10), action_failure_attempts (3),\n worker_cleanup_timeout_seconds (30),\n model (API model name), reasoning_effort, request timeout/retries,\n reLine truncated
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"task_desc": {
|
||||
"title": "Task Desc",
|
||||
"type": "string"
|
||||
},
|
||||
"conversation_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Conversation Id"
|
||||
},
|
||||
"model": {
|
||||
"default": "Flash",
|
||||
"title": "Model",
|
||||
"type": "string"
|
||||
},
|
||||
"locked_app_package": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Locked App Package"
|
||||
},
|
||||
"app_path": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "App Path"
|
||||
},
|
||||
"expected_output_desc": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Expected Output Desc"
|
||||
},
|
||||
"device_serial": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Device Serial"
|
||||
},
|
||||
"verification_level": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Verification Level"
|
||||
},
|
||||
"explorer_mode": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Explorer Mode"
|
||||
},
|
||||
"runtime_overrides": {
|
||||
"anyOf": [
|
||||
{
|
||||
"additionalProperties": true,
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Runtime Overrides"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"task_desc"
|
||||
],
|
||||
"title": "mobile_run_taskArguments",
|
||||
"type": "object"
|
||||
},
|
||||
"outputSchema": {
|
||||
"additionalProperties": true,
|
||||
"title": "mobile_run_taskDictOutput",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_workspace",
|
||||
"description": "List connected Android devices and the unified running/queued task state.\n\nSelect the user's device; if multiple devices exist and none is chosen, ask first.\nThis does not submit tasks. On connection/device errors use mobile_diagnose.\nFor computer-only work use include_devices=false to skip ADB discovery entirely.\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"include_devices": {
|
||||
"default": true,
|
||||
"title": "Include Devices",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"title": "mobile_workspaceArguments",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_config",
|
||||
"description": "Read configuration or explicitly save non-secret defaults for FUTURE tasks.\n\nOnly set persist_defaults=true when the user requests saved/global configuration.\nmodel changes: model (preset or custom), base_url, reasoning_effort\n(default/none/minimal/low/medium/high/xhigh/max), timeout_seconds, max_retries,\nretry_interval_seconds, rate_limit_retry_seconds, tool_fallback_model,\ntool_fallback_reasoning_effort, tool_fallback_max_retries,\ntool_fallback_no_progress_attempts. 'default' omits reasoning;\nunsupported values fail visibly.\ncapabilities: video_enabled and recording_enabled are independent; outputter_enabled,\nstep_summarizer_enabled, screenshot_limit_enabled, task_timeout_seconds (default 1800),\nobservation_timeout_seconds (60), observation_max_attempts (3),\ndevice_command_timeout_seconds (10), action_failure_attempts (3),\nworker_cleanup_timeout_seconds (30), adb_auto_connect (true),\nadb_discovery_interval_seconds (10), adb_discovery_timeout_seconds (5).\nreports: formats=['docx','xlsx'] (at least one).\nexploration: model (default gpt-6.1-sol), reasoning_effort (high), timeout_seconds\n(1800 active seconds), demonstration_timeout_seconds (900), demonstration_warning_seconds (60).\nAPI keys are never accepted or returned: use the Web UI or .env for credentials.\nSaving settings does not change an already running task. Flash/Pro are execution\nprofiles, not model names. Model retries do not repeat device test cases.\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"section": {
|
||||
"default": "model",
|
||||
"enum": [
|
||||
"model",
|
||||
"capabilities",
|
||||
"reports",
|
||||
"exploration"
|
||||
],
|
||||
"title": "Section",
|
||||
"type": "string"
|
||||
},
|
||||
"changes": {
|
||||
"anyOf": [
|
||||
{
|
||||
"additionalProperties": true,
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Changes"
|
||||
},
|
||||
"persist_defaults": {
|
||||
"default": false,
|
||||
"title": "Persist Defaults",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"title": "mobile_configArguments",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_task_file",
|
||||
"description": "Download the standard XLSX task template, or validate a local XLSX without executing it.\n\npreview requires an absolute .xlsx path on the MCP host. Returns tasks, row errors,\nand valid. Correct all errors, strip preview-only 'row', then submit tasks via\nmobile_batch(create). Creating XLSX is optional: AI can submit JSON cases directly.\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"action": {
|
||||
"enum": [
|
||||
"template",
|
||||
"preview"
|
||||
],
|
||||
"title": "Action",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Path"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"action"
|
||||
],
|
||||
"title": "mobile_task_fileArguments",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_batch",
|
||||
"description": "Create, execute and manage durable batches on the unified device queue.\n\ncreate requires a unique request_id and batch={name,device_serial,cases:[{name,goal,\ncase_id?,category?,subcategory?,preconditions?,task_config?:{profile?,model?,\nreasoning_effort?,device_serial?,verification_level?,explorer_mode?,\nlocked_app_package?,record_video?,analyze_video?,request_timeout_seconds?,\nmax_retries?,retry_interval_seconds?,timeout_seconds?}}],profile?:flash|pro,\nformats?:[docx,xlsx],stop_on_failure?:false,timeout_seconds?:1800,repeat_count?:1}.\nrepeat_count is a positive integer: execute all selected cases in order for each\nround, with independent session IDs, statuses and reports. The default total limit\n(cases * repeat_count) is 10000, configurable via ARTEMIS_BATCH_MAX_EXECUTIONS.\nOnly include user-selected cases; get returns iteration/repeat_count per job.\nRequired device\nmust be user-selected. Creation validates and saves a DRAFT; start executes it.\nReuse the same request_id and exact payload after a connection failure; never invent\na new ID for the same submission. lookup(request_id) resolves an uncertain outcome.\nget returns per-case status. pause stops future dispatch, not the active task;\nuse mobile_manage_task(stop) to stop that task. resume never repeats finished cases.\nretry_failed copies each failed execution once into a new draft (repeat_count=1)\nonly after an explicit rerun request; it is not\ntransport-idempotent, so after an uncertain response use list instead of retrying.\ndelete removes a non-active batch and its task sessions, reports and files after\nan explicit user request. Confirm the batch ID with get first; deletion is irreversible.\nRestarted batches remain paused. No automatic failed-case retries or action replay.\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"action": {
|
||||
"enum": [
|
||||
"create",
|
||||
"list",
|
||||
"get",
|
||||
"lookup",
|
||||
"start",
|
||||
"pause",
|
||||
"resume",
|
||||
"retry_failed",
|
||||
"delete"
|
||||
],
|
||||
"title": "Action",
|
||||
"type": "string"
|
||||
},
|
||||
"batch_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Batch Id"
|
||||
},
|
||||
"request_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Request Id"
|
||||
},
|
||||
"batch": {
|
||||
"anyOf": [
|
||||
{
|
||||
"additionalProperties": true,
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Batch"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"action"
|
||||
],
|
||||
"title": "mobile_batchArguments",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_search_history",
|
||||
"description": "Search ALL persisted terminal tasks by name, prompt, ID or case metadata, with pagination.\n\nstart/end are Unix seconds, inclusive/exclusive; convert the user's local dates\nbefore calling. Status: completed/success/failed/cancelled/interrupted/skipped.\nReturn items,total,page,size; inspect evidence/report before claiming a test passed.\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"query": {
|
||||
"default": "",
|
||||
"title": "Query",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"default": "",
|
||||
"title": "Status",
|
||||
"type": "string"
|
||||
},
|
||||
"start": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Start"
|
||||
},
|
||||
"end": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "End"
|
||||
},
|
||||
"page": {
|
||||
"default": 1,
|
||||
"title": "Page",
|
||||
"type": "integer"
|
||||
},
|
||||
"size": {
|
||||
"default": 30,
|
||||
"title": "Size",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"title": "mobile_search_historyArguments",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_export_report",
|
||||
"description": "Export Word/Excel, ordered screenshots, saved recording segments or all task material.\n\nProvide exactly one of session_id/batch_id. Task formats omitted uses saved defaults;\nscreenshots/video/all produce ZIPs; video requires recording to have been enabled.\nbatch ZIP uses its frozen formats and includes summary + individual case reports.\nReturns absolute paths, download URLs and sizes; task results also include structured\nverdict/evidence. Running exports are snapshots. 'completed' is not proof of PASS;\nreport 'unverified' when checks/evidence are missing. Never fabricate test results.\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"session_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Session Id"
|
||||
},
|
||||
"batch_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Batch Id"
|
||||
},
|
||||
"formats": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"enum": [
|
||||
"docx",
|
||||
"xlsx",
|
||||
"screenshots",
|
||||
"video",
|
||||
"all"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Formats"
|
||||
}
|
||||
},
|
||||
"title": "mobile_export_reportArguments",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mobile_exploration",
|
||||
"description": "Explore ONE complex test with user guidance and produce a reusable case.\n\nRead-only list/get/case never execute tasks. create stores {goal,config?,task_config?};\nstart/continue explicitly enqueue or resume Pro exploration. Independent defaults:\ngpt-6.1-sol/high, 1800 active seconds; timeout pauses, never fails by itself.\nmessage payload={text}; answer pending questions or guide without discarding history.\ndemonstrate payload={source:'android'|'computer'|'both'} pauses at a safe point and\nrecords while retaining the device/plugin lease. Wait for recording before the user\noperates. demo_finish analyzes the SAVED clip; demo_extend payload={seconds:900};\ndemo_cancel preserves evidence. Default 900s, warning 60s before expiry, auto-pause.\nsave_case payload={expected_version,case:{name,goal,preconditions?,evidence?}};\ngenerate payload={source_run_id,expected_version} starts evidence-based synthesis,\npoll get.generations for completion. validate payload={version,profile,task_config?}\nexplicitly runs the saved version in Flash/Pro; batch additionally accepts name and\ncreates a DRAFT batch, never starts it. Exploration pass and rerun pass are separate.\nUse stable request_id for every mutation except pause/stop, reusing it on transport\nretries. No API keys; configure secrets in the Web UI. mobile_config(section='exploration')\ncontrols non-secret defaults. After errors call mobile_diagnose before resubmitting.\n",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"action": {
|
||||
"enum": [
|
||||
"list",
|
||||
"get",
|
||||
"create",
|
||||
"start",
|
||||
"message",
|
||||
"pause",
|
||||
"continue",
|
||||
"stop",
|
||||
"demonstrate",
|
||||
"demo_finish",
|
||||
"demo_cancel",
|
||||
"demo_extend",
|
||||
"case",
|
||||
"save_case",
|
||||
"generate",
|
||||
"validate",
|
||||
"batch"
|
||||
],
|
||||
"title": "Action",
|
||||
"type": "string"
|
||||
},
|
||||
"exploration_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Exploration Id"
|
||||
},
|
||||
"request_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Request Id"
|
||||
},
|
||||
"payload": {
|
||||
"anyOf": [
|
||||
{
|
||||
"additionalProperties": true,
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Payload"
|
||||
},
|
||||
"demonstration_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Demonstration Id"
|
||||
},
|
||||
"after": {
|
||||
"default": 0,
|
||||
"title": "After",
|
||||
"type": "integer"
|
||||
},
|
||||
"version": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Version"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"action"
|
||||
],
|
||||
"title": "mobile_explorationArguments",
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user