droidrun 0.3.1__tar.gz → 0.3.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. droidrun-0.3.3/.github/workflows/bounty.yml +134 -0
  2. {droidrun-0.3.1 → droidrun-0.3.3}/.github/workflows/publish.yml +2 -1
  3. {droidrun-0.3.1 → droidrun-0.3.3}/.gitignore +4 -0
  4. {droidrun-0.3.1 → droidrun-0.3.3}/PKG-INFO +31 -29
  5. {droidrun-0.3.1 → droidrun-0.3.3}/README.md +25 -27
  6. droidrun-0.3.3/docs/.generated-files.txt +5 -0
  7. droidrun-0.3.3/docs/docs.json +147 -0
  8. droidrun-0.3.3/docs/v3/concepts/agent.mdx +122 -0
  9. droidrun-0.3.3/docs/v3/concepts/android-tools.mdx +103 -0
  10. droidrun-0.3.3/docs/v3/concepts/models.mdx +31 -0
  11. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v3/concepts/portal-app.mdx +12 -17
  12. droidrun-0.3.3/docs/v3/guides/cli.mdx +171 -0
  13. droidrun-0.3.3/docs/v3/guides/gemini.mdx +90 -0
  14. droidrun-0.3.3/docs/v3/guides/ollama.mdx +108 -0
  15. droidrun-0.3.3/docs/v3/guides/openailike.mdx +104 -0
  16. droidrun-0.3.3/docs/v3/guides/overview.mdx +58 -0
  17. droidrun-0.3.3/docs/v3/guides/telemetry.mdx +36 -0
  18. droidrun-0.3.3/docs/v3/images/portal_apk.png +0 -0
  19. droidrun-0.3.3/docs/v3/overview.mdx +35 -0
  20. droidrun-0.3.3/docs/v3/quickstart.mdx +94 -0
  21. droidrun-0.3.3/docs/v3/sdk/adb-tools.mdx +330 -0
  22. droidrun-0.3.3/docs/v3/sdk/adb-utils.mdx +399 -0
  23. droidrun-0.3.3/docs/v3/sdk/base-tools.mdx +160 -0
  24. droidrun-0.3.3/docs/v3/sdk/droid-agent.mdx +66 -0
  25. droidrun-0.3.3/docs/v3/sdk/ios-tools.mdx +276 -0
  26. droidrun-0.3.3/droidrun/__init__.py +26 -0
  27. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/codeact/codeact_agent.py +9 -7
  28. droidrun-0.3.3/droidrun/agent/common/events.py +47 -0
  29. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/personas/__init__.py +2 -2
  30. droidrun-0.3.3/droidrun/agent/context/personas/big_agent.py +96 -0
  31. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/personas/ui_expert.py +1 -0
  32. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/droid/droid_agent.py +63 -11
  33. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/droid/events.py +4 -0
  34. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/planner/planner_agent.py +2 -2
  35. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/utils/executer.py +10 -2
  36. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/utils/llm_picker.py +1 -0
  37. droidrun-0.3.3/droidrun/agent/utils/trajectory.py +431 -0
  38. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/cli/main.py +179 -86
  39. droidrun-0.3.3/droidrun/macro/__init__.py +14 -0
  40. droidrun-0.3.3/droidrun/macro/__main__.py +10 -0
  41. droidrun-0.3.3/droidrun/macro/cli.py +228 -0
  42. droidrun-0.3.3/droidrun/macro/replay.py +309 -0
  43. droidrun-0.3.3/droidrun/portal.py +138 -0
  44. droidrun-0.3.3/droidrun/telemetry/__init__.py +4 -0
  45. droidrun-0.3.3/droidrun/telemetry/events.py +27 -0
  46. droidrun-0.3.3/droidrun/telemetry/tracker.py +84 -0
  47. droidrun-0.3.3/droidrun/tools/adb.py +1139 -0
  48. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/tools/ios.py +169 -166
  49. droidrun-0.3.3/droidrun/tools/tools.py +148 -0
  50. droidrun-0.3.3/gen-docs-sdk-ref.sh +19 -0
  51. {droidrun-0.3.1 → droidrun-0.3.3}/pyproject.toml +82 -2
  52. droidrun-0.3.1/docs/conf.py +0 -25
  53. droidrun-0.3.1/docs/docs.json +0 -107
  54. droidrun-0.3.1/docs/introduction.mdx +0 -97
  55. droidrun-0.3.1/docs/v1/quickstart.mdx +0 -293
  56. droidrun-0.3.1/docs/v3/concepts/agent.mdx +0 -227
  57. droidrun-0.3.1/docs/v3/concepts/android-control.mdx +0 -233
  58. droidrun-0.3.1/docs/v3/concepts/ios-control.mdx +0 -192
  59. droidrun-0.3.1/docs/v3/concepts/planning.mdx +0 -140
  60. droidrun-0.3.1/docs/v3/concepts/tracing.mdx +0 -160
  61. droidrun-0.3.1/docs/v3/overview.mdx +0 -122
  62. droidrun-0.3.1/docs/v3/quickstart.mdx +0 -356
  63. droidrun-0.3.1/droidrun/__init__.py +0 -31
  64. droidrun-0.3.1/droidrun/adb/__init__.py +0 -13
  65. droidrun-0.3.1/droidrun/adb/device.py +0 -315
  66. droidrun-0.3.1/droidrun/adb/manager.py +0 -93
  67. droidrun-0.3.1/droidrun/adb/wrapper.py +0 -226
  68. droidrun-0.3.1/droidrun/agent/common/events.py +0 -4
  69. droidrun-0.3.1/droidrun/agent/context/personas/extractor.py +0 -52
  70. droidrun-0.3.1/droidrun/agent/utils/trajectory.py +0 -184
  71. droidrun-0.3.1/droidrun/tools/adb.py +0 -807
  72. droidrun-0.3.1/droidrun/tools/tools.py +0 -95
  73. {droidrun-0.3.1 → droidrun-0.3.3}/CHANGELOG.md +0 -0
  74. {droidrun-0.3.1 → droidrun-0.3.3}/CONTRIBUTING.md +0 -0
  75. {droidrun-0.3.1 → droidrun-0.3.3}/LICENSE +0 -0
  76. {droidrun-0.3.1 → droidrun-0.3.3}/MANIFEST.in +0 -0
  77. {droidrun-0.3.1 → droidrun-0.3.3}/docs/favicon.png +0 -0
  78. {droidrun-0.3.1 → droidrun-0.3.3}/docs/logo/dark.svg +0 -0
  79. {droidrun-0.3.1 → droidrun-0.3.3}/docs/logo/light.svg +0 -0
  80. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v1/concepts/agent.mdx +0 -0
  81. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v1/concepts/android-control.mdx +0 -0
  82. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v1/concepts/portal-app.mdx +0 -0
  83. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v1/overview.mdx +0 -0
  84. {droidrun-0.3.1/docs → droidrun-0.3.3/docs/v1}/quickstart.mdx +0 -0
  85. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v2/concepts/agent.mdx +0 -0
  86. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v2/concepts/android-control.mdx +0 -0
  87. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v2/concepts/planning.mdx +0 -0
  88. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v2/concepts/portal-app.mdx +0 -0
  89. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v2/concepts/tracing.mdx +0 -0
  90. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v2/overview.mdx +0 -0
  91. {droidrun-0.3.1 → droidrun-0.3.3}/docs/v2/quickstart.mdx +0 -0
  92. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/__main__.py +0 -0
  93. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/__init__.py +0 -0
  94. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/codeact/__init__.py +0 -0
  95. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/codeact/events.py +0 -0
  96. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/codeact/prompts.py +0 -0
  97. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/common/default.py +0 -0
  98. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/__init__.py +0 -0
  99. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/agent_persona.py +0 -0
  100. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/context_injection_manager.py +0 -0
  101. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/episodic_memory.py +0 -0
  102. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/personas/app_starter.py +0 -0
  103. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/personas/default.py +0 -0
  104. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/reflection.py +0 -0
  105. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/context/task_manager.py +0 -0
  106. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/droid/__init__.py +0 -0
  107. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/oneflows/reflector.py +0 -0
  108. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/planner/__init__.py +0 -0
  109. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/planner/events.py +0 -0
  110. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/planner/prompts.py +0 -0
  111. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/utils/__init__.py +0 -0
  112. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/utils/async_utils.py +0 -0
  113. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/agent/utils/chat_utils.py +0 -0
  114. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/cli/__init__.py +0 -0
  115. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/cli/logs.py +0 -0
  116. {droidrun-0.3.1 → droidrun-0.3.3}/droidrun/tools/__init__.py +0 -0
  117. {droidrun-0.3.1 → droidrun-0.3.3}/setup.py +0 -0
  118. {droidrun-0.3.1 → droidrun-0.3.3}/static/droidrun-dark.png +0 -0
  119. {droidrun-0.3.1 → droidrun-0.3.3}/static/droidrun.png +0 -0
@@ -0,0 +1,134 @@
1
+ name: "Project V2: Status ← issue label"
2
+
3
+ on:
4
+ issues:
5
+ types: [labeled]
6
+
7
+ env:
8
+ ORG: droidrun
9
+ PROJECT_NUMBER: 2
10
+ PROJECT_TOKEN: ${{ secrets.BOUNTY_SECRET }}
11
+
12
+ jobs:
13
+ update_status:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+
17
+ - name: Fetch project & field metadata
18
+ id: metadata
19
+ env:
20
+ GH_TOKEN: ${{ env.PROJECT_TOKEN }}
21
+ run: |
22
+ # 1) Query projectV2 ID and the Status field + its options
23
+ gh api graphql -f query='
24
+ query($org:String!,$num:Int!){
25
+ organization(login:$org){
26
+ projectV2(number:$num){
27
+ id
28
+ fields(first:20){
29
+ nodes{
30
+ ... on ProjectV2SingleSelectField{
31
+ id
32
+ name
33
+ options { id name }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }' \
40
+ -f org="${ORG}" -F num=${PROJECT_NUMBER} \
41
+ --jq '
42
+ .data.organization.projectV2 as $p |
43
+ ($p.id) as $projId |
44
+ ($p.fields.nodes[] | select(.name=="Status")) as $f |
45
+ {
46
+ projectId: $projId,
47
+ statusFieldId: $f.id,
48
+ options: ($f.options | map({(.name): .id}) | add)
49
+ }
50
+ ' > meta.json
51
+
52
+ # expose to GH env
53
+ echo "PROJECT_ID=$(jq -r .projectId meta.json)" >> $GITHUB_ENV
54
+ echo "STATUS_FIELD_ID=$(jq -r .statusFieldId meta.json)" >> $GITHUB_ENV
55
+ # options is an object like {"Eligible":"ID1","Bounty Posted":"ID2",...}
56
+ echo "STATUS_OPTIONS=$(jq -c .options meta.json)" >> $GITHUB_ENV
57
+
58
+ - name: Determine target option ID
59
+ id: pick
60
+ run: |
61
+ LABEL="${{ github.event.label.name }}"
62
+ # map label→ field option name
63
+ case "$LABEL" in
64
+ eligible) OPT_NAME="📝 Eligible" ;;
65
+ bounty-official) OPT_NAME="💰 Bounty" ;;
66
+ claimed) OPT_NAME="🛠️ In Progress" ;;
67
+ *) echo "No matching status for $LABEL"; exit 0 ;;
68
+ esac
69
+
70
+ # extract from JSON map
71
+ OPT_ID=$(echo "$STATUS_OPTIONS" | jq -r --arg name "$OPT_NAME" '.[$name]')
72
+ echo "OPTION_ID=$OPT_ID" >> $GITHUB_ENV
73
+
74
+ - name: Ensure issue is in the project
75
+ id: add_if_missing
76
+ env:
77
+ GH_TOKEN: ${{ env.PROJECT_TOKEN }}
78
+ run: |
79
+ ISSUE_NODE_ID=$(gh api graphql -f query='
80
+ query($owner:String!,$repo:String!,$number:Int!){
81
+ repository(owner:$owner, name:$repo){
82
+ issue(number:$number){
83
+ id
84
+ projectItems(first:1){
85
+ nodes{ id }
86
+ }
87
+ }
88
+ }
89
+ }' \
90
+ -f owner="droidrun" \
91
+ -f repo="droidrun" \
92
+ -F number=104 \
93
+ --jq '.data.repository.issue as $i |
94
+ { issueId: $i.id,
95
+ itemId: ($i.projectItems.nodes[0]?.id // "") }' )
96
+
97
+ # Save to file
98
+ echo "$ISSUE_NODE_ID" > issue.json
99
+ ISSUE_ID=$(jq -r .issueId issue.json)
100
+ ITEM_ID=$(jq -r .itemId issue.json)
101
+
102
+ if [ -z "$ITEM_ID" ]; then
103
+ ITEM_ID=$(gh api graphql -f query='
104
+ mutation($proj:ID!,$content:ID!){
105
+ addProjectV2ItemById(input:{projectId:$proj, contentId:$content}){
106
+ item { id }
107
+ }
108
+ }' \
109
+ -f proj="${PROJECT_ID}" -f content="$ISSUE_ID" \
110
+ --jq '.data.addProjectV2ItemById.item.id')
111
+ fi
112
+ echo "ITEM_ID=$ITEM_ID" >> $GITHUB_ENV
113
+
114
+ - name: Update Status field
115
+ env:
116
+ GH_TOKEN: ${{ env.PROJECT_TOKEN }}
117
+ run: |
118
+ gh api graphql -f query='
119
+ mutation($proj:ID!,$item:ID!,$field:ID!,$opt:String!){
120
+ updateProjectV2ItemFieldValue(input:{
121
+ projectId: $proj,
122
+ itemId: $item,
123
+ fieldId: $field,
124
+ value: {
125
+ singleSelectOptionId: $opt
126
+ }
127
+ }) {
128
+ projectV2Item { id }
129
+ }
130
+ }' \
131
+ -f proj="${PROJECT_ID}" \
132
+ -f item="${ITEM_ID}" \
133
+ -f field="${STATUS_FIELD_ID}" \
134
+ -f opt="${OPTION_ID}"
@@ -53,6 +53,7 @@ jobs:
53
53
 
54
54
  publish-to-testpypi:
55
55
  name: Publish Python 🐍 distribution 📦 to TestPyPI
56
+ if: startsWith(github.ref, 'refs/tags/')
56
57
  needs:
57
58
  - build
58
59
  runs-on: ubuntu-latest
@@ -73,4 +74,4 @@ jobs:
73
74
  - name: Publish distribution 📦 to TestPyPI
74
75
  uses: pypa/gh-action-pypi-publish@release/v1
75
76
  with:
76
- repository-url: https://test.pypi.org/legacy/
77
+ repository-url: https://test.pypi.org/legacy/
@@ -1,4 +1,5 @@
1
1
  dist/
2
+ build/
2
3
  # Python bytecode files
3
4
  __pycache__/
4
5
  *.py[cod]
@@ -21,3 +22,6 @@ messages_log.json
21
22
  patch_apis.py
22
23
  .git
23
24
  .arize-phoenix
25
+
26
+
27
+ uv.lock
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: droidrun
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: A framework for controlling Android devices through LLM agents
5
5
  Project-URL: Homepage, https://github.com/droidrun/droidrun
6
6
  Project-URL: Bug Tracker, https://github.com/droidrun/droidrun/issues
@@ -25,9 +25,11 @@ Classifier: Topic :: Software Development :: Testing
25
25
  Classifier: Topic :: Software Development :: Testing :: Acceptance
26
26
  Classifier: Topic :: System :: Emulators
27
27
  Classifier: Topic :: Utilities
28
- Requires-Python: >=3.10
28
+ Requires-Python: >=3.11
29
+ Requires-Dist: adbutils==2.10.0
29
30
  Requires-Dist: aiofiles>=23.0.0
30
31
  Requires-Dist: anthropic>=0.7.0
32
+ Requires-Dist: apkutils==2.0.0
31
33
  Requires-Dist: arize-phoenix
32
34
  Requires-Dist: click>=8.1.0
33
35
  Requires-Dist: llama-index
@@ -40,9 +42,11 @@ Requires-Dist: llama-index-llms-openai
40
42
  Requires-Dist: llama-index-llms-openai-like
41
43
  Requires-Dist: openai>=1.0.0
42
44
  Requires-Dist: pillow>=10.0.0
45
+ Requires-Dist: posthog==6.0.2
43
46
  Requires-Dist: pydantic>=2.0.0
44
47
  Requires-Dist: python-dotenv>=1.0.0
45
48
  Requires-Dist: rich>=13.0.0
49
+ Requires-Dist: typing-extensions
46
50
  Provides-Extra: dev
47
51
  Requires-Dist: bandit>=1.7.0; extra == 'dev'
48
52
  Requires-Dist: black>=23.0.0; extra == 'dev'
@@ -63,10 +67,18 @@ Description-Content-Type: text/markdown
63
67
  [![Benchmark](https://img.shields.io/badge/Benchmark-🏅-teal)](https://droidrun.ai/benchmark)
64
68
  [![Twitter Follow](https://img.shields.io/twitter/follow/droid_run?style=social)](https://x.com/droid_run)
65
69
 
70
+ <picture>
71
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=dark&period=daily&t=1753948032207">
72
+ <source media="(prefers-color-scheme: light)" srcset="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=neutral&period=daily&t=1753948125523">
73
+ <a href="https://www.producthunt.com/products/droidrun-framework-for-mobile-agent?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_source=badge-droidrun" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=neutral&period=daily&t=1753948125523" alt="Droidrun - Give&#0032;AI&#0032;native&#0032;control&#0032;of&#0032;physical&#0032;&#0038;&#0032;virtual&#0032;phones&#0046; | Product Hunt" style="width: 200px; height: 54px;" width="200" height="54" /></a>
74
+ </picture>
75
+
66
76
 
67
77
 
68
78
  DroidRun is a powerful framework for controlling Android and iOS devices through LLM agents. It allows you to automate device interactions using natural language commands. [Checkout our benchmark results](https://droidrun.ai/benchmark)
69
79
 
80
+ ## Why Droidrun?
81
+
70
82
  - 🤖 Control Android and iOS devices with natural language commands
71
83
  - 🔀 Supports multiple LLM providers (OpenAI, Anthropic, Gemini, Ollama, DeepSeek)
72
84
  - 🧠 Planning capabilities for complex multi-step tasks
@@ -82,22 +94,28 @@ pip install droidrun
82
94
  ```
83
95
 
84
96
  ## 🚀 Quickstart
85
- Read on how to get droidrun up and running within seconds in [our docs](https://docs.droidrun.ai/v3/quickstart)!
97
+ Read on how to get droidrun up and running within seconds in [our docs](https://docs.droidrun.ai/v3/quickstart)!
86
98
 
99
+ [![Quickstart Video](https://img.youtube.com/vi/4WT7FXJah2I/0.jpg)](https://www.youtube.com/watch?v=4WT7FXJah2I)
87
100
 
88
101
  ## 🎬 Demo Videos
89
102
 
90
- 1. **Shopping Assistant**: Watch how DroidRun searches Amazon for headphones and sends the top 3 products to a colleague on WhatsApp.
91
-
92
- Prompt: "Go to Amazon, search for headphones and write the top 3 products to my colleague on WhatsApp."
93
-
94
- [![Shopping Assistant Demo](https://img.youtube.com/vi/VQK3JcifgwU/0.jpg)](https://www.youtube.com/watch?v=VQK3JcifgwU)
103
+ 1. **Accommodation booking**: Let Droidrun search for an apartment for you
104
+
105
+ [![Droidrun Accommodation Booking Demo](https://img.youtube.com/vi/VUpCyq1PSXw/0.jpg)](https://youtu.be/VUpCyq1PSXw)
106
+
107
+ <br>
108
+
109
+ 2. **Trend Hunter**: Let Droidrun hunt down trending posts
110
+
111
+ [![Droidrun Trend Hunter Demo](https://img.youtube.com/vi/7V8S2f8PnkQ/0.jpg)](https://youtu.be/7V8S2f8PnkQ)
112
+
113
+ <br>
114
+
115
+ 3. **Streak Saver**: Let Droidrun save your streak on your favorite language learning app
116
+
117
+ [![Droidrun Streak Saver Demo](https://img.youtube.com/vi/B5q2B467HKw/0.jpg)](https://youtu.be/B5q2B467HKw)
95
118
 
96
- 2. **Social Media Automation**: See DroidRun open X (Twitter) and post "Hello World".
97
-
98
- Prompt: "Open up X and post Hello World."
99
-
100
- [![Social Media Automation Demo](https://img.youtube.com/vi/i4-sDQhzt_M/0.jpg)](https://www.youtube.com/watch?v=i4-sDQhzt_M)
101
119
 
102
120
  ## 💡 Example Use Cases
103
121
 
@@ -107,22 +125,6 @@ Read on how to get droidrun up and running within seconds in [our docs](https://
107
125
  - Remote assistance for less technical users
108
126
  - Exploring mobile UI with natural language commands
109
127
 
110
- ## 🗺️ Roadmap
111
-
112
- ### 🤖 Agent:
113
- - **Improve memory**: Enhance context retention for complex multi-step tasks
114
- - **Expand planning capabilities**: Add support for more complex reasoning strategies
115
- - **Add Integrations**: Support more LLM providers and agent frameworks (LangChain, Agno etc.)
116
-
117
- ### ⚙️ Automations:
118
- - **Create Automation Scripts**: Generate reusable scripts from agent actions that can be scheduled or shared
119
-
120
- ### ☁️ Cloud:
121
- - **Hosted version**: Remote device control via web interface without local setup
122
- - **Add-Ons**: Marketplace for extensions serving specific use cases
123
- - **Proxy Hours**: Cloud compute time with tiered pricing for running automations
124
- - **Droidrun AppStore**: Simple installation of Apps on your hosted devices
125
-
126
128
  ## 👥 Contributing
127
129
 
128
130
  Contributions are welcome! Please feel free to submit a Pull Request.
@@ -10,10 +10,18 @@
10
10
  [![Benchmark](https://img.shields.io/badge/Benchmark-🏅-teal)](https://droidrun.ai/benchmark)
11
11
  [![Twitter Follow](https://img.shields.io/twitter/follow/droid_run?style=social)](https://x.com/droid_run)
12
12
 
13
+ <picture>
14
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=dark&period=daily&t=1753948032207">
15
+ <source media="(prefers-color-scheme: light)" srcset="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=neutral&period=daily&t=1753948125523">
16
+ <a href="https://www.producthunt.com/products/droidrun-framework-for-mobile-agent?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_source=badge-droidrun" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=neutral&period=daily&t=1753948125523" alt="Droidrun - Give&#0032;AI&#0032;native&#0032;control&#0032;of&#0032;physical&#0032;&#0038;&#0032;virtual&#0032;phones&#0046; | Product Hunt" style="width: 200px; height: 54px;" width="200" height="54" /></a>
17
+ </picture>
18
+
13
19
 
14
20
 
15
21
  DroidRun is a powerful framework for controlling Android and iOS devices through LLM agents. It allows you to automate device interactions using natural language commands. [Checkout our benchmark results](https://droidrun.ai/benchmark)
16
22
 
23
+ ## Why Droidrun?
24
+
17
25
  - 🤖 Control Android and iOS devices with natural language commands
18
26
  - 🔀 Supports multiple LLM providers (OpenAI, Anthropic, Gemini, Ollama, DeepSeek)
19
27
  - 🧠 Planning capabilities for complex multi-step tasks
@@ -29,22 +37,28 @@ pip install droidrun
29
37
  ```
30
38
 
31
39
  ## 🚀 Quickstart
32
- Read on how to get droidrun up and running within seconds in [our docs](https://docs.droidrun.ai/v3/quickstart)!
40
+ Read on how to get droidrun up and running within seconds in [our docs](https://docs.droidrun.ai/v3/quickstart)!
33
41
 
42
+ [![Quickstart Video](https://img.youtube.com/vi/4WT7FXJah2I/0.jpg)](https://www.youtube.com/watch?v=4WT7FXJah2I)
34
43
 
35
44
  ## 🎬 Demo Videos
36
45
 
37
- 1. **Shopping Assistant**: Watch how DroidRun searches Amazon for headphones and sends the top 3 products to a colleague on WhatsApp.
38
-
39
- Prompt: "Go to Amazon, search for headphones and write the top 3 products to my colleague on WhatsApp."
40
-
41
- [![Shopping Assistant Demo](https://img.youtube.com/vi/VQK3JcifgwU/0.jpg)](https://www.youtube.com/watch?v=VQK3JcifgwU)
46
+ 1. **Accommodation booking**: Let Droidrun search for an apartment for you
47
+
48
+ [![Droidrun Accommodation Booking Demo](https://img.youtube.com/vi/VUpCyq1PSXw/0.jpg)](https://youtu.be/VUpCyq1PSXw)
49
+
50
+ <br>
51
+
52
+ 2. **Trend Hunter**: Let Droidrun hunt down trending posts
53
+
54
+ [![Droidrun Trend Hunter Demo](https://img.youtube.com/vi/7V8S2f8PnkQ/0.jpg)](https://youtu.be/7V8S2f8PnkQ)
55
+
56
+ <br>
57
+
58
+ 3. **Streak Saver**: Let Droidrun save your streak on your favorite language learning app
59
+
60
+ [![Droidrun Streak Saver Demo](https://img.youtube.com/vi/B5q2B467HKw/0.jpg)](https://youtu.be/B5q2B467HKw)
42
61
 
43
- 2. **Social Media Automation**: See DroidRun open X (Twitter) and post "Hello World".
44
-
45
- Prompt: "Open up X and post Hello World."
46
-
47
- [![Social Media Automation Demo](https://img.youtube.com/vi/i4-sDQhzt_M/0.jpg)](https://www.youtube.com/watch?v=i4-sDQhzt_M)
48
62
 
49
63
  ## 💡 Example Use Cases
50
64
 
@@ -54,22 +68,6 @@ Read on how to get droidrun up and running within seconds in [our docs](https://
54
68
  - Remote assistance for less technical users
55
69
  - Exploring mobile UI with natural language commands
56
70
 
57
- ## 🗺️ Roadmap
58
-
59
- ### 🤖 Agent:
60
- - **Improve memory**: Enhance context retention for complex multi-step tasks
61
- - **Expand planning capabilities**: Add support for more complex reasoning strategies
62
- - **Add Integrations**: Support more LLM providers and agent frameworks (LangChain, Agno etc.)
63
-
64
- ### ⚙️ Automations:
65
- - **Create Automation Scripts**: Generate reusable scripts from agent actions that can be scheduled or shared
66
-
67
- ### ☁️ Cloud:
68
- - **Hosted version**: Remote device control via web interface without local setup
69
- - **Add-Ons**: Marketplace for extensions serving specific use cases
70
- - **Proxy Hours**: Cloud compute time with tiered pricing for running automations
71
- - **Droidrun AppStore**: Simple installation of Apps on your hosted devices
72
-
73
71
  ## 👥 Contributing
74
72
 
75
73
  Contributions are welcome! Please feel free to submit a Pull Request.
@@ -0,0 +1,5 @@
1
+ md5 1075080038db59977da1586c48d421fb v3/sdk/droid-agent.mdx
2
+ md5 cbccf5efa2fd001f990078cbb05a8d98 v3/sdk/base-tools.mdx
3
+ md5 58f64ddcf2c976b6804894c5c4798a6f v3/sdk/adb-tools.mdx
4
+ md5 3e8a7d303e264b8a8f22b16f45fbde1a v3/sdk/ios-tools.mdx
5
+ md5 fa5a80e8c823f705fce0ea914b85ea41 v3/sdk/adb-utils.mdx
@@ -0,0 +1,147 @@
1
+ {
2
+ "$schema": "https://mintlify.com/docs.json",
3
+ "theme": "mint",
4
+ "name": "DroidRun",
5
+ "colors": {
6
+ "primary": "#0D9373",
7
+ "light": "#07C983",
8
+ "dark": "#0D9373"
9
+ },
10
+ "favicon": "/favicon.png",
11
+ "navigation": {
12
+ "tabs": [
13
+ {
14
+ "tab": "Framework",
15
+ "versions": [
16
+ {
17
+ "version": "0.3.2",
18
+ "groups": [
19
+ {
20
+ "group": "Introduction",
21
+ "pages": [
22
+ "v3/overview",
23
+ "v3/quickstart"
24
+ ]
25
+ },
26
+ {
27
+ "group": "Guides",
28
+ "pages": [
29
+ "v3/guides/overview",
30
+ "v3/guides/cli",
31
+ "v3/guides/gemini",
32
+ "v3/guides/openailike",
33
+ "v3/guides/ollama",
34
+ "v3/guides/telemetry"
35
+ ]
36
+ },
37
+ {
38
+ "group": "Core Concepts",
39
+ "pages": [
40
+ "v3/concepts/agent",
41
+ "v3/concepts/models",
42
+ "v3/concepts/android-tools",
43
+ "v3/concepts/portal-app"
44
+ ]
45
+ },
46
+ {
47
+ "group": "SDK Reference",
48
+ "pages": [
49
+ "v3/sdk/droid-agent",
50
+ "v3/sdk/adb-tools",
51
+ "v3/sdk/ios-tools",
52
+ "v3/sdk/base-tools",
53
+ "v3/sdk/adb-utils"
54
+ ]
55
+ }
56
+ ]
57
+ },
58
+ {
59
+ "version": "0.2.0",
60
+ "groups": [
61
+ {
62
+ "group": "Getting Started",
63
+ "pages": [
64
+ "v2/overview",
65
+ "v2/quickstart"
66
+ ]
67
+ },
68
+ {
69
+ "group": "Core Concepts",
70
+ "pages": [
71
+ "v2/concepts/agent",
72
+ "v2/concepts/planning",
73
+ "v2/concepts/android-control",
74
+ "v2/concepts/portal-app",
75
+ "v2/concepts/tracing"
76
+ ]
77
+ }
78
+ ]
79
+ },
80
+ {
81
+ "version": "0.1.0",
82
+ "groups": [
83
+ {
84
+ "group": "Getting Started",
85
+ "pages": [
86
+ "v1/overview",
87
+ "v1/quickstart"
88
+ ]
89
+ },
90
+ {
91
+ "group": "Core Concepts",
92
+ "pages": [
93
+ "v1/concepts/agent",
94
+ "v1/concepts/android-control",
95
+ "v1/concepts/portal-app"
96
+ ]
97
+ }
98
+ ]
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "tab": "Cloud API",
104
+ "versions": [
105
+ {
106
+ "version": "0.1.0",
107
+ "openapi": "https://api.droidrun.ai/v1/openapi.json"
108
+ }
109
+ ]
110
+ }
111
+ ]
112
+ },
113
+ "logo": {
114
+ "light": "/logo/light.svg",
115
+ "dark": "/logo/dark.svg"
116
+ },
117
+ "navbar": {
118
+ "links": [
119
+ {
120
+ "label": "GitHub",
121
+ "href": "https://github.com/droidrun/droidrun"
122
+ },
123
+ {
124
+ "label": "Benchmark",
125
+ "href": "https://droidrun.ai/benchmark"
126
+ }
127
+ ],
128
+ "primary": {
129
+ "type": "button",
130
+ "label": "Join Discord",
131
+ "href": "https://discord.gg/gdekvkJFvn"
132
+ }
133
+ },
134
+ "footer": {
135
+ "socials": {
136
+ "github": "https://github.com/droidrun/droidrun",
137
+ "x": "https://x.com/droid_run",
138
+ "discord": "https://discord.gg/gdekvkJFvn",
139
+ "website": "https://droidrun.ai"
140
+ }
141
+ },
142
+ "errors": {
143
+ "404": {
144
+ "redirect": false
145
+ }
146
+ }
147
+ }
@@ -0,0 +1,122 @@
1
+ ---
2
+ title: 'Agent & Execution Modes'
3
+ description: 'Understanding the DroidAgent system in DroidRun'
4
+ ---
5
+
6
+
7
+ ## Configuration
8
+
9
+ ```python
10
+ # The parameters for the DroidAgent
11
+ def __init__(
12
+ self,
13
+ goal: str, # The goal for the agent to reach
14
+ llm: LLM, # Language model to use
15
+ tools: Tools, # Loaded tools
16
+ personas: List[AgentPersona] = [DEFAULT], # Experimental: custom system prompt for agent
17
+ max_steps: int = 15, # Maximum steps the agent takes
18
+ timeout: int = 1000, # Global Timeout
19
+ vision: bool = False, # Whether the agent shall also utilize screenshots
20
+ reasoning: bool = False, # Enable reasoning
21
+ reflection: bool = False, # Enable reflection
22
+ enable_tracing: bool = False, # Enable tracing (this requires arize phoenix)
23
+ debug: bool = False, # Enable additional debug logs
24
+ save_trajectories: bool = False, # Save the Trajectory data of the run (GIF + logs)
25
+ *args,
26
+ **kwargs
27
+ )
28
+ ```
29
+
30
+ ## Execution Modes
31
+
32
+ The agent operates in three distinct modes, each optimized for different complexity levels and use cases.
33
+
34
+ ### Direct Execution
35
+ <div style={{display: 'flex', gap: '8px', marginBottom: '16px'}}>
36
+ <span style={{background: 'rgba(107, 114, 128, 0.2)', color: '#6b7280', padding: '4px 8px', borderRadius: '8px', fontSize: '12px', fontWeight: 'bold'}}>REASONING: LOW</span>
37
+ <span style={{background: 'rgba(13, 147, 115, 0.2)', color: '#0D9373', padding: '4px 8px', borderRadius: '8px', fontSize: '12px', fontWeight: 'bold'}}>SPEED: HIGH</span>
38
+ </div>
39
+
40
+ ```python
41
+ # Simple tasks
42
+ agent = DroidAgent(
43
+ goal="Take a screenshot of the current screen",
44
+ llm=llm,
45
+ tools=tools,
46
+ reasoning=False
47
+ )
48
+ ```
49
+ **Flow:** Goal → Direct Execution → Result
50
+
51
+ **Best Practices:**
52
+ - Use for single-action tasks (1-15 steps)
53
+ - Keep goals specific and atomic
54
+ - Faster execution with no planning overhead
55
+
56
+ ### Planning Mode
57
+ <div style={{display: 'flex', gap: '8px', marginBottom: '16px'}}>
58
+ <span style={{background: 'rgba(217, 119, 6, 0.2)', color: '#d97706', padding: '4px 8px', borderRadius: '8px', fontSize: '12px', fontWeight: 'bold'}}>REASONING: MEDIUM</span>
59
+ <span style={{background: 'rgba(217, 119, 6, 0.2)', color: '#d97706', padding: '4px 8px', borderRadius: '8px', fontSize: '12px', fontWeight: 'bold'}}>SPEED: MEDIUM</span>
60
+ </div>
61
+
62
+ ```python
63
+ # Multi-step tasks requiring navigation and decision-making
64
+ agent = DroidAgent(
65
+ goal="Set up a new alarm for 7 AM with custom ringtone and label 'Work'",
66
+ llm=llm,
67
+ tools=tools,
68
+ reasoning=True
69
+ )
70
+ ```
71
+ **Flow:** Goal → Planning → Step-by-step Execution → Result
72
+
73
+ **Best Practices:**
74
+ - Use for multi-step tasks (15-50 steps)
75
+ - Ideal for navigation between apps/screens
76
+ - Good for tasks requiring step-by-step breakdown
77
+
78
+
79
+ ### Reflection Mode
80
+ <div style={{display: 'flex', gap: '8px', marginBottom: '16px'}}>
81
+ <span style={{background: 'rgba(13, 147, 115, 0.2)', color: '#0D9373', padding: '4px 8px', borderRadius: '8px', fontSize: '12px', fontWeight: 'bold'}}>REASONING: HIGH</span>
82
+ <span style={{background: 'rgba(107, 114, 128, 0.2)', color: '#6b7280', padding: '4px 8px', borderRadius: '8px', fontSize: '12px', fontWeight: 'bold'}}>SPEED: LOW</span>
83
+ </div>
84
+
85
+ ```python
86
+ # Complex, multi-app workflows requiring verification and adaptive planning
87
+ agent = DroidAgent(
88
+ goal="Find the cheapest hotel in Manhattan for next weekend, compare prices across multiple booking apps, and share the best option with my team on Slack",
89
+ llm=llm,
90
+ tools=tools,
91
+ reasoning=True,
92
+ reflection=True
93
+ )
94
+ ```
95
+ **Flow:** Goal → Planning → Execution → Reflection → Re-planning (if needed) → Result
96
+
97
+ **Best Practice:**
98
+ - Use for complex workflows (50+ steps)
99
+ - Essential for quality control and verification
100
+ - Best when context preservation is critical
101
+
102
+ ## Vision capabilities
103
+ <Warning>Vision capabilities are deactivated for the DeepSeek provider and require an LLM model with vision capabilities (e.g., GPT-4o, Gemini-2.5-Flash etc.).</Warning>
104
+
105
+ By default, DroidAgent operates entirely without vision by leveraging Android's Accessibility API to extract the UI hierarchy as XML. This approach is efficient and works well for most automation tasks.
106
+
107
+ However, enabling vision capabilities allows the agent to take screenshots and visually analyze the device screen, which can be beneficial in specific scenarios:
108
+ ```python
109
+ # To enable vision capabilities, set `vision=True` in your agent configuration.
110
+ agent = DroidAgent(
111
+ goal="Open up TikTok and describe the content of the video you are seeing",
112
+ llm=llm,
113
+ tools=tools,
114
+ vision=True
115
+ )
116
+ ```
117
+
118
+
119
+ - **Content-heavy applications**: When apps contain complex visual elements, images, or layouts that aren't fully captured by the XML hierarchy
120
+ - **Visual verification**: For tasks requiring confirmation of visual elements or layouts
121
+ - **Enhanced context understanding**: When UI structure alone doesn't provide sufficient information for decision-making
122
+