0.0 / 30
What changed in the harness
Selection accuracy 92→96, token cost up 16%, unconfirmed writes 0%→0%.
Category breakdown
Where the score comes from.
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
01Safety
02Legibility
23.3 / 30
03Economics
19.0 / 20
04Discoverability
8.3 / 20
Highest-impact fix
Estimated gain +30 pointsAdd explicit identity and permission preflight tools
Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
Defects and rewrites.
12 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
get_booted_sim_id |
name_restates_behavior no_return_description |
Queries the currently booted iOS Simulator via simctl and returns its UDID string, or an error if no simulator is booted. Takes no parameters. |
open_simulator |
name_restates_behavior no_return_description |
Launches the Simulator.app application, booting the default or last-used device if none is running. Takes no parameters and returns a confirmation message once the app has opened. |
ui_describe_all |
no_return_description |
Describes accessibility information for the entire screen in the iOS Simulator, returning a JSON list of accessibility elements (labels, types, frames) for the given device. Optional 'udid' selects the target simulator; if omitted, uses the IDB_UDID env var or the sole booted device. |
ui_tap |
no_return_description |
Simulates a tap at the given (x, y) screen coordinates in the iOS Simulator and returns a success/failure status. 'x' and 'y' set the tap location, optional 'duration' sets how long the press is held (seconds), and optional 'udid' selects the target simulator (defaults to IDB_UDID env var or the sole booted device). |
ui_type |
params_unexplained no_return_description |
Sends keyboard input to the focused field in the iOS Simulator and returns a success/failure status. 'text' is the printable ASCII string (max 500 chars) to type; optional 'udid' selects the target simulator (defaults to IDB_UDID env var or the sole booted device). |
ui_swipe |
no_return_description |
Performs a swipe gesture from (x_start, y_start) to (x_end, y_end) on the iOS Simulator screen and returns a success/failure status. Optional 'duration' sets the swipe time in seconds, 'delta' sets the step size of the swipe motion (default 1), and 'udid' selects the target simulator (defaults to IDB_UDID env var or the sole booted device). |
ui_view |
no_return_description |
Captures a compressed screenshot of the current simulator view and returns it as inline image content for visual inspection. Optional 'udid' selects the target simulator (defaults to IDB_UDID env var or the sole booted device). |
screenshot |
name_restates_behavior no_return_description |
Captures a screenshot of the iOS Simulator and saves it to disk, returning the saved file path. 'output_path' sets the destination (relative paths resolve under IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR or ~/Downloads); optional 'type' sets image format (default png), 'display' selects internal/external display, 'mask' controls non-rectangular display masking, and 'udid' selects the target simulator. |
record_video |
name_restates_behavior no_return_description |
Starts recording a video of the iOS Simulator screen using simctl and returns once recording has begun, along with the output file path. Optional 'output_path' sets the destination file (defaults to a generated name under IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR or ~/Downloads), 'codec' selects h264/hevc (default hevc), 'display' and 'mask' control non-rectangular display capture, 'force' allows overwriting an existing file, and 'udid' selects the target simulator. |
stop_recording |
name_restates_behavior no_return_description |
Stops any in-progress simulator video recording by killing the recording process, and returns a success/failure status. Takes no parameters. |
install_app |
name_restates_behavior no_return_description |
Installs the app bundle at 'app_path' (.app directory or .ipa file) onto the target iOS Simulator and returns a success/failure status. Optional 'udid' selects the target simulator (defaults to IDB_UDID env var or the sole booted device). |
launch_app |
no_return_description |
Launches the app identified by 'bundle_id' (e.g., com.apple.mobilesafari) on the iOS Simulator and returns a success/failure status. Optional 'terminate_running' kills any existing instance first, 'env' passes environment variables to the launched process via simctl, and 'udid' selects the target simulator (defaults to IDB_UDID env var or the sole booted device). |
Selection evidence
Confusable tool pairs.
3 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
ui_describe_all |
ui_describe_point |
medium | Both return accessibility info; a task like 'what's on screen at this location' could lead the agent to pick the whole-screen describe instead of the point-specific one, or vice versa if coordinates aren't clearly emphasized. |
ui_describe_point |
ui_find_element |
low | Both locate/describe elements, but one requires coordinates and the other a search string; a vague 'find this element' task is unlikely to be confused since inputs differ substantially. |
install_app |
launch_app |
low | Sequential but distinct lifecycle steps (install vs run); a task like 'open the app' is unlikely to be mapped to install_app since descriptions clearly differentiate install vs launch. |
Compare the field