Agent skill

Axe Simulator Control

by n0an in n0an/VivaDicta

Automate iOS Simulator interactions using AXe for taps, gestures, text input, hardware buttons, and video recording

MITAuto-check passedMobile

Install Axe Simulator Control

skills CLI
$ npx skills add n0an/VivaDicta --skill axe-simulator-control -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install n0an/VivaDicta axe-simulator-control --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/n0an/VivaDicta.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/axe-simulator-control .claude/skills/axe-simulator-control && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
axe-simulator-control
GitHub stars
131
Token cost
~2.7k tokens
SKILL.md length
936 words
Files
2
Skills in repo
20
Repo updated
First seen
Licence
MIT

At a glance

Automate iOS Simulator interactions using AXe for taps, gestures, text input, hardware buttons, and video recording

  • Works in 3 steps: Get y-center from frame: y + (height / 2) → Divide x-axis by number of tabs to… → Test and adjust x-coordinates based on…
  • Tasks that involve Accessibility
  • SKILL.md covers Related Skills, Skill Flow, Path A: Touch & Tap and Path B: Text Input, plus 7 more sections
  • Calls brew and xcrun

What it does

Axe Simulator Control is an agent skill from n0an/VivaDicta. Automate iOS Simulator interactions using AXe for taps, gestures, text input, hardware buttons, and video recording

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).

It sits in Mobile, covering Accessibility. It works with iOS. The repository describes itself as: iOS & watchOS speech-to-text app with AI voice keyboard, on-device RAG, and chat with your notes - powered by Apple Foundation Models, WhisperKit, NVIDIA Parakeet, and 20+ AI…. The licence is MIT.

When your agent uses it

  • Tasks that involve Accessibility

Example prompts

  • “/axe-simulator-control”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Get y-center from frame: y + (height / 2)
  2. Divide x-axis by number of tabs to estimate positions
  3. Test and adjust x-coordinates based on actual tab spacing

What it can do on your machine

Read from SKILL.md and the folder at commit b141304. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • brew
    • xcrun

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Axe Simulator Control loads about 2.7k tokens when it runs. Until then it costs about 34 tokens; SKILL.md has 936 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~34
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from n0an/VivaDicta at commit b141304, republished under its MIT licence (© n0an). 936 words, ~2,663 tokens.

Download SKILL.mdSave it as .claude/skills/axe-simulator-control/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
axe-simulator-control
description
Automate iOS Simulator interactions using AXe for taps, gestures, text input, hardware buttons, and video recording

AXe Simulator Control

Use this skill when you need to automate iOS Simulator interactions, including taps, gestures, text input, hardware buttons, or video recording.

  • See xcodebuild-testing for running tests that might require simulator interactions
  • See screenshot for capturing screenshots from the simulator

Skill Flow

  • Example queries:
    • "tap at coordinates (100, 200) in the simulator"
    • "type 'hello world' into the simulator"
    • "press the home button in the simulator"
    • "record a video of the simulator"
    • "perform a scroll up gesture"
  • Notes:
    • AXe is installed via Homebrew: brew tap cameroncooke/axe && brew install axe
    • Most commands require a simulator UDID (use axe list-simulators to find it)
    • The simulator must be booted and running for most operations
    • AXe uses the iOS Simulator's accessibility framework
    • For VivaDicta project, the default simulator is: iPhone 17 Pro Max, OS=26.4
    • Save screenshots to llmtemp/screenshots/ directory for temporary test artifacts
1. Determine the Required Action

Touch/Tap Actions if:

  • Need to tap at specific coordinates
  • Need to add delays before/after taps
  • Need to simulate touch gestures

→ Continue with Path A: Touch & Tap (steps 2A-4A)

Text Input if:

  • Need to type text into the simulator
  • Need to test keyboard input
  • Need to simulate user text entry

→ Continue with Path B: Text Input (step 2B)

Gestures if:

  • Need to scroll, swipe, or perform system gestures
  • Need to test gesture recognizers
  • Need to navigate using gestures

→ Continue with Path C: Gestures (steps 2C-3C)

Hardware Buttons if:

  • Need to press home, lock, volume buttons
  • Need to test app lifecycle events
  • Need to simulate device rotation

→ Continue with Path D: Hardware Buttons (steps 2D-3D)

Video Operations if:

  • Need to record simulator video
  • Need to stream simulator output
  • Need to capture simulator for documentation

→ Continue with Path E: Video Operations (steps 2E-3E)

List Simulators if:

  • Need to find available simulators
  • Need to get a simulator UDID
  • First time setup

→ Continue with Path F: List Simulators (step 2F)

Path A: Touch & Tap

2A. Get Simulator UDID
bash
# List available simulators
axe list-simulators

# Store the UDID for the target simulator
UDID="B34FF305-5EA8-412B-943F-1D0371CA17FF"
3A. Get Accurate Coordinates Using describe-ui

IMPORTANT: Always use axe describe-ui to get accurate coordinates instead of guessing from screenshots.

bash
# Get the full UI accessibility tree
axe describe-ui --udid $UDID > ui_tree.json

# Example output for a button:
# {
#   "AXFrame" : "{{175, 741}, {52, 50}}",
#   "AXLabel" : "stop.circle.fill",
#   "type" : "Button",
#   ...
# }

# Calculate center coordinates:
# x_center = x + (width / 2)  →  175 + (52 / 2) = 201
# y_center = y + (height / 2)  →  741 + (50 / 2) = 766

Why this matters:

  • Visual appearance in screenshots doesn't always match accessibility frame coordinates
  • UI elements that change state (e.g., record → stop button) may have different positions than they appear
  • The accessibility frame is what AXe actually uses for tap detection
4A. Perform Tap Action
bash
# Simple tap at coordinates (use coordinates from describe-ui)
axe tap -x 201 -y 766 --udid $UDID

# Tap with delays before and after
axe tap -x 201 -y 766 --pre-delay 1.0 --post-delay 0.5 --udid $UDID

Available tap options:

  • -x and -y: Coordinates (required) - get these from describe-ui output
  • --pre-delay: Delay in seconds before tapping
  • --post-delay: Delay in seconds after tapping
  • --udid: Simulator UDID (required)

Note: The tap command does NOT support --duration for long press. Use --pre-delay and --post-delay for timing control.

5A. Verify the Action
  • Check the simulator visually or via app logs
  • If tap didn't register, ensure:
    • Simulator is in foreground
    • Coordinates are correct (origin is top-left)
    • Target element is interactive
    • You used coordinates from describe-ui, not visual estimates

Path B: Text Input

2B. Type Text into Simulator
bash
# Get simulator UDID first
UDID="B34FF305-5EA8-412B-943F-1D0371CA17FF"

# Type text (ensure a text field is focused first)
axe type 'Hello World!' --udid $UDID

# Type text with special characters (use single quotes)
axe type 'user@example.com' --udid $UDID

Notes:

  • The text field must be focused before typing (tap it first if needed)
  • Use single quotes to avoid shell interpretation
  • Special characters and emojis are supported

Path C: Gestures

2C. Choose Gesture Type

Available gestures:

  • scroll-up / scroll-down / scroll-left / scroll-right
  • swipe-from-left-edge / swipe-from-right-edge
  • swipe-from-top-edge / swipe-from-bottom-edge
3C. Execute Gesture
bash
# Get simulator UDID first
UDID="B34FF305-5EA8-412B-943F-1D0371CA17FF"

# Perform scroll gesture
axe gesture scroll-up --udid $UDID

# Perform edge swipe (for navigation)
axe gesture swipe-from-left-edge --udid $UDID

# Perform swipe gesture
axe gesture swipe-from-bottom-edge --udid $UDID

Path D: Hardware Buttons

2D. Choose Button Action

Available buttons:

  • home - Press home button
  • lock - Press lock/power button
  • volume-up / volume-down
  • siri - Activate Siri
3D. Execute Button Press
bash
# Get simulator UDID first
UDID="B34FF305-5EA8-412B-943F-1D0371CA17FF"

# Press home button
axe button home --udid $UDID

# Press lock button with custom duration
axe button lock --duration 2.0 --udid $UDID

# Press volume up
axe button volume-up --udid $UDID

Notes:

  • Lock duration determines press-and-hold behavior
  • Home button triggers app backgrounding
  • Use for testing app lifecycle events
Show full SKILL.md (366 more words)Show less

Path E: Video Operations

2E. Choose Operation Type

Stream Video if:

  • Need real-time video output
  • Building automation tools
  • Need MJPEG format

Record Video if:

  • Need to save video file
  • Creating documentation
  • Need MP4 format
3E. Execute Video Operation

Stream Video:

bash
UDID="B34FF305-5EA8-412B-943F-1D0371CA17FF"

# Stream at 10 FPS in MJPEG format
axe stream-video --udid $UDID --fps 10 --format mjpeg > stream.mjpeg

Record Video:

bash
UDID="B34FF305-5EA8-412B-943F-1D0371CA17FF"

# Record at 15 FPS and save to file
axe record-video --udid $UDID --fps 15 --output recording.mp4

# Stop recording with Ctrl+C

Path F: List Simulators

2F. List Available Simulators
bash
# List all available simulators with their UDIDs
axe list-simulators

# Example output:
# iPhone 17 Pro Max (26.0) - B34FF305-5EA8-412B-943F-1D0371CA17FF
# iPhone 16 (25.0) - A12BC456-7DEF-89GH-IJKL-MNOPQRSTUVWX

Notes:

  • Copy the UDID for use in other commands
  • Only booted simulators can be controlled
  • Use xcrun simctl list for more detailed simulator information

Common Workflows

Automated Testing Workflow
bash
# 1. Get the simulator UDID
UDID=$(axe list-simulators | grep "iPhone 17 Pro Max" | awk '{print $NF}')

# 2. Tap to focus text field
axe tap -x 200 -y 300 --udid $UDID

# 3. Type text
axe type 'test@example.com' --udid $UDID

# 4. Tap submit button
axe tap -x 200 -y 400 --udid $UDID

# 5. Wait and verify (app-specific)
Video Documentation Workflow
bash
# 1. Get simulator UDID
UDID="B34FF305-5EA8-412B-943F-1D0371CA17FF"

# 2. Start recording
axe record-video --udid $UDID --fps 30 --output demo.mp4 &
RECORD_PID=$!

# 3. Perform actions
axe tap -x 100 -y 200 --udid $UDID
sleep 1
axe gesture scroll-up --udid $UDID
sleep 1
axe button home --udid $UDID

# 4. Stop recording
kill $RECORD_PID

Known Limitations

SwiftUI TabView Navigation

Issue: SwiftUI's modern TabView component (iOS 18+) doesn't expose individual tab buttons in the accessibility hierarchy.

What you'll see:

  • axe describe-ui shows the tab bar as a single AXGroup with no children
  • Individual tab buttons are NOT listed as separate accessible elements

Example:

json
{
  "AXFrame" : "{{0, 791}, {402, 83}}",
  "AXLabel" : "Tab Bar",
  "type" : "Group",
  "children" : []  // ← No individual tab buttons exposed
}

✅ However, tab navigation DOES work with calculated coordinates!

Even though tab buttons aren't in the accessibility tree, you can still tap them using estimated positions within the Tab Bar frame:

bash
# Tab Bar frame: x: 0, y: 791, width: 402, height: 83
# Calculate y-center: 791 + (83/2) = 832

# For a 3-tab layout (Record, Notes, Settings):
UDID="D28078F6-0BE9-4EB8-BEBE-BF8EBEA5CA75"

# Tap Record tab (left third)
axe tap -x 103 -y 832 --udid $UDID    # x ≈ 402 * 1/4

# Tap Notes tab (center)
axe tap -x 201 -y 832 --udid $UDID    # x ≈ 402 * 1/2

# Tap Settings tab (right third)
axe tap -x 268 -y 832 --udid $UDID    # x ≈ 402 * 2/3

Key insight: The Tab Bar frame tells you the tappable area. Calculate positions by:

  1. Get y-center from frame: y + (height / 2)
  2. Divide x-axis by number of tabs to estimate positions
  3. Test and adjust x-coordinates based on actual tab spacing

Alternative workarounds:

  • Use XCUITest for UI testing that requires guaranteed tab detection
  • Add custom accessibility identifiers if you control the app code
  • Use deep linking or keyboard shortcuts for tab navigation in automation
Other SwiftUI Components

Some SwiftUI components may have limited accessibility exposure. Always use axe describe-ui to verify an element is accessible before attempting to interact with it.

Troubleshooting

"Simulator not found" error:

  • Ensure simulator is booted: xcrun simctl list | grep Booted
  • Verify UDID is correct: axe list-simulators

Tap not registering:

  • FIRST: Use axe describe-ui to get accurate coordinates (don't guess from screenshots)
  • Check coordinates are within screen bounds
  • Ensure element is visible and interactive
  • Verify the element appears in the accessibility tree with describe-ui
  • Try adding small delay between taps

Text not appearing:

  • Tap text field first to focus it
  • Check keyboard is visible in simulator
  • Verify text encoding with single quotes

Video recording issues:

  • Ensure sufficient disk space
  • Check file permissions in output directory
  • Verify FPS is reasonable (10-30 recommended)

© n0an, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .agents/skills/axe-simulator-control of n0an/VivaDicta.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit b141304

Compare with similar skills

Axe Simulator Control next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Axe Simulator Control compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Axe Simulator Control this skilln0an/VivaDicta131—~2.7kAutomated safety check: PassMIT
Hig Components Contentraintree-technology/hig-doctor1435 repos~1.3kAutomated safety check: PassMIT
Simulatorkmworks/kmreader111—~797Automated safety check: PassMIT
iOS Accessibilitydpearson2699/swift-ios-skills1.2k—~4.6kAutomated safety check: PassCustom licence
Mobile AccessibilityCommunity-Access/accessibility-agents422—~1.1kAutomated safety check: PassMIT
Kb Mobile AccessibilityCommunity-Access/accessibility-agents422—~3.8kAutomated safety check: PassMIT

Similar skills

  • Hig Components Content

    raintree-technology/hig-doctor

    Apple Human Interface Guidelines for content display components.

    143 GitHub starsUsed in 5 repos~1.3k tokens
    MobileAuto-check passed
  • Simulator

    kmworks/kmreader

    A skill your agent uses when observing or driving an iOS simulator for KMReader debugging — screenshots, accessibility tree, tap/swipe/gestures, hardware buttons, orientation, and unified logs via…

    111 GitHub stars~797 tokensUpdated today
    MobileAuto-check passed
  • iOS Accessibility

    dpearson2699/swift-ios-skills

    Build and audit SwiftUI, UIKit, and AppKit accessibility for VoiceOver, Voice Control, Switch Control, Full Keyboard Access, Dynamic Type, focus restoration, labels/traits/actions, traversal, custom…

    1.2k GitHub stars~4.6k tokensUpdated 2 mo ago
    MobileAuto-check passed
  • Mobile Accessibility

    Community-Access/accessibility-agents

    React Native, Expo, iOS and Android: labels, roles and touch targets.

    422 GitHub stars~1.1k tokensUpdated 15 days ago
    MobileAuto-check passed
  • Kb Mobile Accessibility

    Community-Access/accessibility-agents

    Reference data, not a reviewer. An agent skill from Community-Access/accessibility-agents.

    422 GitHub stars~3.8k tokensUpdated 15 days ago
    MobileAuto-check passed
  • Assistive Access

    gustavscirulis/snapgrid

    Assistive Access implementation for cognitive accessibility including simplified scenes, navigation icons, runtime detection, and design principles.

    117 GitHub starsUsed in 1 repo~2.5k tokens
    MobileAuto-check passed

More from n0an/VivaDicta

All 20 skills in this repo
  • Swiftdata Pro

    n0an/VivaDicta

    Writes, reviews, and improves SwiftData code using modern APIs and best practices.

    131 GitHub starsUsed in 1 repo~930 tokens
    Auto-check passed
  • iOS Simulator Skill

    n0an/VivaDicta

    21 production-ready scripts for iOS app testing, building, and automation.

    131 GitHub starsUsed in 1 repo~2.5k tokens
    Auto-check passed
  • Asc Metadata Sync

    n0an/VivaDicta

    Sync and validate App Store metadata and localizations with asc, including legacy metadata format migration.

    131 GitHub starsUsed in 1 repo~1k tokens
    Auto-check passed
  • Asc Aso Rankings

    n0an/VivaDicta

    Pull current keyword rankings from Astro MCP, compare against the previous rankings check, and save a new rankings file to the vault.

    131 GitHub stars~985 tokensUpdated 3 days ago
    Auto-check passed
  • Coverage Report

    n0an/VivaDicta

    Measure VivaDicta test code coverage from the terminal. An agent skill from n0an/VivaDicta.

    131 GitHub stars~1.2k tokensUpdated 3 days ago
    Auto-check passed
  • Loc Report

    n0an/VivaDicta

    Count Swift lines of code across the VivaDicta codebase and refresh the production-vs-test history chart.

    131 GitHub stars~825 tokensUpdated 3 days ago
    Auto-check passed

Works with

Questions about Axe Simulator Control

What does Axe Simulator Control do?

Automate iOS Simulator interactions using AXe for taps, gestures, text input, hardware buttons, and video recording. Axe Simulator Control is an agent skill from n0an/VivaDicta.

When should I use Axe Simulator Control?

Axe Simulator Control fits situations like: tasks that involve Accessibility.

How do I install Axe Simulator Control in Claude Code?

Run `npx skills add n0an/VivaDicta --skill axe-simulator-control -a claude-code`. Or copy the skill folder (.agents/skills/axe-simulator-control in n0an/VivaDicta) into .claude/skills/axe-simulator-control in your project. Claude Code loads it when a task matches its description.

How do I install Axe Simulator Control in Codex?

Run `npx skills add n0an/VivaDicta --skill axe-simulator-control -a codex`. Or copy the skill folder (.agents/skills/axe-simulator-control in n0an/VivaDicta) into .agents/skills/axe-simulator-control in your project. Codex loads it when a task matches its description.

Can I use Axe Simulator Control in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add n0an/VivaDicta --skill axe-simulator-control -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/axe-simulator-control, .gemini/skills/axe-simulator-control, .github/skills/axe-simulator-control and .opencode/skills/axe-simulator-control in your project.

What does Axe Simulator Control need to run?

Going by SKILL.md and its folder, Axe Simulator Control needs the command-line tools its instructions call (brew and xcrun).

Does Axe Simulator Control access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Axe Simulator Control safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Axe Simulator Control use?

Axe Simulator Control is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Axe Simulator Control use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Axe Simulator Control?

Skills that share tags, products or a category with Axe Simulator Control: Hig Components Content (raintree-technology/hig-doctor, 143 stars), Simulator (kmworks/kmreader, 111 stars), iOS Accessibility (dpearson2699/swift-ios-skills, 1.2k stars) and Mobile Accessibility (Community-Access/accessibility-agents, 422 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Axe Simulator Control?

n0an (a GitHub user) maintains it in n0an/VivaDicta, which has 131 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 5, 2026.

Source: n0an/VivaDicta on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.