Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ build/
assets/
*.Dockerfile
*.dockerignore
minitap.ps1
minitap.sh
mobile-use.ps1
mobile-use.sh
llm-config.override.jsonc
docker-compose.yml
12 changes: 6 additions & 6 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
LLM_PROVIDER="openai" # openai, google, openrouter, xai
LLM_MODEL="o3" # o3, gemini-2.5-pro.. Any model supported by the provider

OPENAI_API_KEY="..."
GOOGLE_API_KEY="..."
XAI_API_KEY="..."
OPEN_ROUTER_API_KEY="..."
OPENAI_API_KEY='...' # At least the openai api key is required
XAI_API_KEY='...'
OPEN_ROUTER_API_KEY='..'

EVENTS_OUTPUT_PATH="..."
RESULTS_OUTPUT_PATH="..."
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.env
__pycache__
**/minitap.egg-info
**/mobile-use.egg-info
.vscode/settings.json
.venv/

Expand Down
12 changes: 6 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@ RUN apt-get update && \
apt-get clean && rm -rf /var/lib/apt/lists/*

# Use non-root user
RUN useradd -m -s /bin/bash --create-home minitap && \
chown -R minitap:minitap /opt/ && \
mkdir -p /home/minitap/.android && \
chown -R minitap:minitap /home/minitap/.android
USER minitap
RUN useradd -m -s /bin/bash --create-home mobile-use && \
chown -R mobile-use:mobile-use /opt/ && \
mkdir -p /home/mobile-use/.android && \
chown -R mobile-use:mobile-use /home/mobile-use/.android
USER mobile-use

# Download & install Maestro
RUN mkdir -p /opt/maestro && \
Expand All @@ -66,5 +66,5 @@ COPY --from=builder --chown=python:python /python /python
COPY --from=builder --chown=app:app /app /app
ENV PATH="/app/.venv/bin:$PATH"

COPY --chown=minitap:minitap docker-entrypoint.sh /app/docker-entrypoint.sh
COPY --chown=mobile-use:mobile-use docker-entrypoint.sh /app/docker-entrypoint.sh
ENTRYPOINT ["/app/docker-entrypoint.sh"]
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Then run in your terminal:

```bash
# At some point, Maestro will ask you `Maestro CLI would like to collect anonymous usage data to improve the product.`. It's up to you whether you accept (i.e enter 'Y') or not (i.e. enter 'n').
minitap.sh \
mobile-use.sh \
"Open Gmail, find first 3 unread emails, and list their sender and subject line" \
--output-description "A JSON list of objects, each with 'sender' and 'subject' keys"
```
Expand All @@ -67,7 +67,7 @@ minitap.sh \

```powershell
# At some point, Maestro will ask you `Maestro CLI would like to collect anonymous usage data to improve the product.`. It's up to you whether you accept (i.e enter 'Y') or not (i.e. enter 'n').
powershell.exe -ExecutionPolicy Bypass -File minitap.ps1 `
powershell.exe -ExecutionPolicy Bypass -File mobile-use.ps1 `
"Open Gmail, find first 3 unread emails, and list their sender and subject line" `
--output-description "A JSON list of objects, each with 'sender' and 'subject' keys"
```
Expand Down Expand Up @@ -156,15 +156,15 @@ To run mobile-use, simply pass your command as an argument.
**Example 1: Basic Command**

```bash
python ./src/minitap/main.py "Go to settings and tell me my current battery level"
python ./src/mobile_use/main.py "Go to settings and tell me my current battery level"
```

**Example 2: Data Scraping**

Extract specific information and get it back in a structured format. For instance, to get a list of your unread emails:

```bash
python ./src/minitap/main.py \
python ./src/mobile_use/main.py \
"Open Gmail, find all unread emails, and list their sender and subject line" \
--output-description "A JSON list of objects, each with 'sender' and 'subject' keys"
```
Expand Down
14 changes: 7 additions & 7 deletions assets/maestro/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@ RUN apt-get update && \
apt-get clean && rm -rf /var/lib/apt/lists/*

# Use non-root user
RUN useradd -m -s /bin/bash --create-home minitap && \
chown -R minitap:minitap /opt/ && \
mkdir -p /home/minitap/.android && \
chown -R minitap:minitap /home/minitap/.android
USER minitap
RUN useradd -m -s /bin/bash --create-home mobile-use && \
chown -R mobile-use:mobile-use /opt/ && \
mkdir -p /home/mobile-use/.android && \
chown -R mobile-use:mobile-use /home/mobile-use/.android
USER mobile-use

# Download & install Maestro
RUN mkdir -p /opt/maestro && \
wget -q -O /tmp/${MAESTRO_VERSION} "https://github.com/mobile-dev-inc/maestro/releases/download/cli-${MAESTRO_VERSION}/maestro.zip" && \
wget -q -O /tmp/${MAESTRO_VERSION} "https://github.com/mobile-use-use-use-dev-inc/maestro/releases/download/cli-${MAESTRO_VERSION}/maestro.zip" && \
unzip -q /tmp/${MAESTRO_VERSION} -d /opt/ && \
rm /tmp/${MAESTRO_VERSION}
ENV PATH="/opt/maestro/bin:${PATH}"

COPY --chown=minitap:minitap docker-entrypoint.sh /docker-entrypoint.sh
COPY --chown=mobile-use:mobile-use docker-entrypoint.sh /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
26 changes: 13 additions & 13 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
services:
mobile-use-full-ip:
container_name: mobile-use-full
user: "minitap:minitap"
user: "mobile-use:mobile-use"
restart: no
build:
context: .
Expand All @@ -10,15 +10,15 @@ services:
- .env
environment:
ADB_CONNECT_ADDR: "${ADB_CONNECT_ADDR}"
RESULTS_OUTPUT_PATH: "/home/minitap/results.txt"
EVENTS_OUTPUT_PATH: "/home/minitap/events.json"
RESULTS_OUTPUT_PATH: "/home/mobile-use/results.txt"
EVENTS_OUTPUT_PATH: "/home/mobile-use/events.json"
volumes:
- mobile-use-adb-keys:/home/minitap/.android
- mobile-use-adb-keys:/home/mobile-use/.android
- ./llm-config.override.jsonc:/app/llm-config.override.jsonc

mobile-use-ip:
container_name: mobile-use
user: "minitap:minitap"
user: "mobile-use:mobile-use"
restart: no
build:
context: .
Expand All @@ -29,46 +29,46 @@ services:
ADB_CONNECT_ADDR: "${ADB_CONNECT_ADDR}"
DEVICE_HARDWARE_BRIDGE_BASE_URL: "http://maestro:9999"
DEVICE_SCREEN_API_BASE_URL: "http://screen-api:9998"
RESULTS_OUTPUT_PATH: "/home/minitap/results.txt"
EVENTS_OUTPUT_PATH: "/home/minitap/events.json"
RESULTS_OUTPUT_PATH: "/home/mobile-use/results.txt"
EVENTS_OUTPUT_PATH: "/home/mobile-use/events.json"
MOBILE_USE_HEALTH_RETRIES: "150"
MOBILE_USE_HEALTH_DELAY: "2"
volumes:
- mobile-use-adb-keys:/home/minitap/.android
- mobile-use-adb-keys:/home/mobile-use/.android
- ./llm-config.override.jsonc:/app/llm-config.override.jsonc
depends_on:
- maestro
- screen-api

maestro:
container_name: maestro
user: "minitap:minitap"
user: "mobile-use:mobile-use"
restart: unless-stopped
build:
context: ./assets/maestro
dockerfile: Dockerfile
environment:
ADB_CONNECT_ADDR: "${ADB_CONNECT_ADDR}"
volumes:
- maestro-adb-keys:/home/minitap/.android
- maestro-adb-keys:/home/mobile-use/.android
ports:
- "9999:9999"

screen-api:
container_name: screen-api
user: "minitap:minitap"
user: "mobile-use:mobile-use"
restart: unless-stopped
build:
context: .
dockerfile: slim.Dockerfile
entrypoint: ["python", "/app/src/minitap/servers/start_servers.py"]
entrypoint: ["python", "/app/src/mobile_use/servers/start_servers.py"]
command: ["--only", "screen_api"]
environment:
DEVICE_HARDWARE_BRIDGE_BASE_URL: "http://maestro:9999"
DEVICE_SCREEN_API_PORT: "9998"
depends_on:
- maestro

volumes:
mobile-use-adb-keys:
maestro-adb-keys:
2 changes: 1 addition & 1 deletion docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@ while true; do
sleep 2
done

minitap "$@"
mobile-use "$@"
20 changes: 10 additions & 10 deletions llm-config.defaults.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -3,39 +3,39 @@
"default": {
"planner": {
"provider": "openai",
"model": "gpt-5-mini"
"model": "gpt-5-nano"
},
"orchestrator": {
"provider": "openai",
"model": "gpt-5-mini"
"model": "gpt-5-nano"
},
"cortex": {
"provider": "openai",
"model": "gpt-5"
},
"executor": {
"provider": "openai",
"model": "gpt-5"
"model": "gpt-5-nano"
}
},
// This is the config we recommend.
// To use it, copy it to llm.override.jsonc, following llm.override.template.jsonc.
"recommended": {
"planner": {
"provider": "google",
"model": "gemini-2.5-pro"
"provider": "openrouter",
"model": "meta-llama/llama-4-scout"
},
"orchestrator": {
"provider": "google",
"model": "gemini-2.5-pro"
"provider": "openrouter",
"model": "meta-llama/llama-4-scout"
},
"cortex": {
"provider": "openai",
"model": "gpt-5"
"provider": "google",
"model": "gemini-2.5-pro"
},
"executor": {
"provider": "openai",
"model": "gpt-5"
"model": "gpt-5-nano"
}
}
}
File renamed without changes.
0 minitap.sh → mobile-use.sh
100755 → 100644
File renamed without changes.
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
name = "minitap"
name = "mobile-use"
version = "0.0.1"
description = "AI-powered multi-agent system that automates real Android and iOS devices through low-level control using LangGraph."
readme = "README.md"
Expand Down Expand Up @@ -42,11 +42,11 @@ dev = [
]

[project.scripts]
minitap = "minitap.main:cli"
mobile-use = "mobile_use.main:cli"

[project.urls]
"Homepage" = "https://minitap.ai/"
"Source" = "https://github.com/minitap-ai/minitap"
"Source" = "https://github.com/minitap-ai/mobile-use"

[build-system]
requires = ["uv_build>=0.7.20,<0.8.0"]
Expand Down
Loading