Python automation for real iPhones — direct control, AI screen recognition, and autonomous agents.
Project description
NomixClicker
Python automation for real iPhones.
The Clicker is a small hardware device that plugs into an iPhone and controls it the way a person would — it taps, swipes, and types on the actual screen. This library is its Python API.
from nomix_clicker import Clicker, Agent, open_app, DEVICE_ID
clicker = Clicker(DEVICE_ID)
open_app(clicker, "Notes")
clicker.type("Hello from Python")
# or hand the whole task to the AI agent
Agent(DEVICE_ID).run("Open Settings and enable Dark Mode")
- Real devices. Works with any app on a physical iPhone — no simulators, no test frameworks, nothing installed on the phone's OS.
- AI screen recognition. Find and tap elements by what they mean ("the like button"), not by selectors or view hierarchies.
- Autonomous agent. Describe a task in plain language — the agent looks at the screen, decides, and acts, step by step.
Get a Clicker · nomixclicker.com · API docs
Installation
Requires Python 3.10+. Install from PyPI:
pip install nomix-clicker
Don't have a Clicker yet? Get one on the official site — worldwide delivery in about two weeks. Then open the Panel and grab your API token.
Configuration
Provide your API token and device id in either of two ways (environment variables take precedence):
Environment variables:
export NOMIX_API_KEY="your-api-key"
export NOMIX_DEVICE_ID="your-device-id"
Or a config.json in your working directory or next to the script (copy config.example.json):
{
"API_KEY": "your-api-key",
"DEVICE_ID": "your-device-id",
"API_URL": "https://panel.nomixclicker.com/clicker/v1"
}
Quick start
from nomix_clicker import Clicker, parse_screen, open_app, DEVICE_ID
clicker = Clicker(DEVICE_ID)
open_app(clicker, "Calculator")
screen = parse_screen(clicker) # returns None on network/timeout errors
if screen:
print(screen.description) # what the AI recognizer sees on screen
Examples
Ready-made example scripts live in the examples/ folder of the repository (not included in the pip package — clone the repo to get them). With the package installed, run one directly:
python3 examples/notes.py
Start here:
- notes.py - Safe, offline reference — opens the Notes app, creates a note, and types into it.
- ai_agent.py - Runs an autonomous AI agent task with real-time progress streaming — the agent drives the device on its own.
Device utilities live in tools/ — ⚠️ these change connectivity or the stream; running them may drop the device's broadcast:
- restart_all_devices.py - Restarts all devices associated with your account.
- wake-up-phone.py - Wakes, unlocks, and restarts the screen broadcast on a locked device.
- airplane-mode-iphone-12.py - Toggles airplane mode on and off on iPhone 12.
- switch-screen-viewing-iphone-12.py - Turns Clicker screen viewing on/off.
Local development
To work on the library itself, install it in editable mode:
pip install -e .
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nomix_clicker-0.1.2.tar.gz.
File metadata
- Download URL: nomix_clicker-0.1.2.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c9e3fb9496f792794307e7374b8c139fe93bea78578df235cbfda0615316a0f
|
|
| MD5 |
7ba1a8374d19476c628aa6d46c485d6b
|
|
| BLAKE2b-256 |
bf6711d7aa55a06215cb8ecb8bc9c42b00a18d24ca2fda4228200cea1a0acb0d
|
Provenance
The following attestation bundles were made for nomix_clicker-0.1.2.tar.gz:
Publisher:
publish.yml on nomix-ai/ClickerScriptingLibrary
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nomix_clicker-0.1.2.tar.gz -
Subject digest:
1c9e3fb9496f792794307e7374b8c139fe93bea78578df235cbfda0615316a0f - Sigstore transparency entry: 2201034339
- Sigstore integration time:
-
Permalink:
nomix-ai/ClickerScriptingLibrary@75ef6f3ec58415fa353247f6a40d41ea8e2fb892 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/nomix-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@75ef6f3ec58415fa353247f6a40d41ea8e2fb892 -
Trigger Event:
push
-
Statement type:
File details
Details for the file nomix_clicker-0.1.2-py3-none-any.whl.
File metadata
- Download URL: nomix_clicker-0.1.2-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2dbe9b83d596953a9095bb2f7bab03ed8e29da6a05971046fb36e396f5099495
|
|
| MD5 |
5a8eada19345627ba99e20ee7f7626bf
|
|
| BLAKE2b-256 |
ed7f5b77372c852934b090d88b56c1ff0abf58db69fe4ffc9282f32589a3f2aa
|
Provenance
The following attestation bundles were made for nomix_clicker-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on nomix-ai/ClickerScriptingLibrary
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nomix_clicker-0.1.2-py3-none-any.whl -
Subject digest:
2dbe9b83d596953a9095bb2f7bab03ed8e29da6a05971046fb36e396f5099495 - Sigstore transparency entry: 2201034382
- Sigstore integration time:
-
Permalink:
nomix-ai/ClickerScriptingLibrary@75ef6f3ec58415fa353247f6a40d41ea8e2fb892 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/nomix-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@75ef6f3ec58415fa353247f6a40d41ea8e2fb892 -
Trigger Event:
push
-
Statement type: