ESP32 iPhone Agent: לוח של 7 דולר שנותן ל-AI עיניים וידיים על אייפון אמיתי
פרויקט קוד פתוח שאסף 3,200 כוכבים בשמונה ימים: שיקוף AirPlay הוא העיניים, עכבר USB עם AssistiveTouch הוא הידיים, וכל מודל ראייה תואם OpenAI הוא המוח. מפרקים מהיסוד ובונים אחד בעצמנו.
XIAO ESP32S3 משמש כמקלט AirPlay וכעכבר ומקלדת USB, והסוכן רץ באפליקציה על אותו אייפון.
הפרויקט נשען על שיקוף מסך ו-AssistiveTouch, שתי יכולות רשמיות של אפל. מבחינת האייפון, זה אדם עם עכבר.
כל API תואם OpenAI, כולל Ollama, llama.cpp ו-vLLM. המודל מגיע דרך הסלולר, כי ה-Wi-Fi תפוס על ידי הלוח.
צילום מסך, THINK ו-DO, פעולה, ובדיקה אם המסך השתנה. פספוס מוביל לכיוון מחדש.
עד 5 פריימים לשנייה, כמה שניות לצעד, ASCII בלבד (בלי עברית), ולא רואה קוד נעילה או Apple Pay.
הכתבה ב־5 שניות · נבנה עם HyperFrames
ESP32 iPhone Agent הוא פרויקט קוד פתוח שנותן למודל AI להפעיל אייפון אמיתי בעזרת לוח אלקטרוניקה של 7.49 דולר, בלי ג'יילברייק ובלי מחשב בזמן הריצה. הפרויקט עלה ל-GitHub ב-11 באוקטובר, ותוך שמונה ימים כבר אסף מעל 3,200 כוכבים. הדמו שהכי תפס אותי: כותבים לטלפון "תקבע שעון מעורר ל-8:00 בבוקר שחוזר כל שני ושלישי, ותשמור", והסוכן יוצא מהאפליקציה של עצמו, פותח את השעון, מקליד את השעה בגלגלת, מסמן את הימים ושומר. כמו בן אדם.
את המשימה הזאת, השעון המעורר, אנחנו הולכים ללוות לאורך כל הכתבה: נבין מה רואה הסוכן, איך הוא מחליט, ואיך האצבע הווירטואלית שלו לוחצת בפועל על המסך. ובסוף נבנה אחד בעצמנו.
למה בכלל קשה לתת ל-AI להשתמש באייפון
מי שבנה פעם סוכן שמפעיל מחשב יודע שבמחשב זה יחסית פשוט: יש גישה למסך, יש גישה לעכבר ולמקלדת, ויש ספריות שעושות את זה. באייפון הסיפור שונה לגמרי. אפל סוגרת את המערכת חזק: אפליקציה אחת לא יכולה לצלם את המסך של אפליקציה אחרת, ובוודאי לא ללחוץ בה על כפתורים.
הדרכים המקובלות עד היום היו כבדות. הכלים הרציניים לבדיקות אוטומטיות של אפליקציות (כמו WebDriverAgent ו-XCUITest, שעליהם בנויים כלים כמו mobile-mcp ו-Midscene) דורשים מחשב Mac מחובר וחתימת קוד. פרויקטים אחרים לוכדים את המסך דרך HDMI עם חומרה ייעודית. ויש את הדרך שאף אחד לא רוצה: ג'יילברייק, כלומר פריצה של מערכת ההפעלה, שפוגעת באבטחה של הטלפון.
הקטע המדליק כאן הוא שהפרויקט לא פורץ שום דבר: הוא משתמש בשתי יכולות רשמיות שאפל בנתה בעצמה, שיקוף מסך ועכבר לנגישות, ומחבר אותן ללוח קטן. בואו נפרק את זה לשלושה איברים: עיניים, ידיים ומוח.
הגוף: לוח, עיניים וידיים
הלוח: מה זה ESP32-S3
ESP32-S3 הוא שבב קטן של חברת Espressif, מה שנקרא מיקרו-בקר: מחשב זעיר על שבב אחד, שעושה משימה אחת בלי מערכת הפעלה מלאה. תחשבו על זה כמו על ההבדל בין מחשב נייד לבין שלט של מזגן: לשלט אין מסך ואין אפליקציות, אבל הוא עושה דבר אחד מהר ובזול. לפי Espressif, בשבב יש שתי ליבות של 240MHz, זיכרון פנימי של 512KB, Wi-Fi ו-Bluetooth 5 בצריכת חשמל נמוכה (BLE).
הלוח שהפרויקט נבדק עליו הוא Seeed Studio XIAO ESP32S3, בגרסה הרגילה עם 8MB של PSRAM (זיכרון נוסף שמולחם ליד השבב), לא גרסת Sense ולא Plus. בחנות של Seeed הוא עולה היום 7.49 דולר. לפי ה-README, כל לוח ESP32-S3 עם USB מובנה בחיבור ה-USB-C ועם PSRAM אמור לעבוד.
למה דווקא השבב הזה? כי הוא יודע להיות שלושה דברים במקביל: נקודת Wi-Fi, מקלט Bluetooth, ומכשיר USB שמחשב (או טלפון) מזהה כעכבר ומקלדת. בדיוק מה שצריך.
העיניים והידיים: AirPlay ו-HID
העיניים הן AirPlay. שיקוף מסך (Screen Mirroring) הוא הפיצ'ר שבו אנחנו משדרים את מסך האייפון לטלוויזיה דרך מרכז הבקרה. כאן הלוח פותח נקודת Wi-Fi משלו ומופיע ברשימת השיקוף בשם "ESP32 Agent", כאילו היה Apple TV. הוא לא מפענח את הווידאו בעצמו (אין לו כוח לזה), אלא מעביר את זרם הווידאו הדחוס (H.264) הלאה לאפליקציה בטלפון דרך Bluetooth. תחשבו על שליח שמקבל חבילה סגורה ומעביר אותה הלאה בלי לפתוח.
הידיים הן HID. HID (ראשי תיבות של Human Interface Device) הוא התקן USB סטנדרטי לממשק אדם: עכבר, מקלדת, ג'ויסטיק. כל מחשב וטלפון יודעים לדבר איתו בלי דרייבר. הלוח מתחבר לאייפון בכבל ומציג את עצמו כעכבר ומקלדת רגילים. ומה אייפון עושה עם עכבר? כאן נכנס AssistiveTouch, פיצ'ר נגישות של אפל שנבנה לאנשים שקשה להם לגעת במסך. לפי התיעוד של אפל, כשמחברים עכבר ומפעילים AssistiveTouch, מופיע על המסך סמן אפור ועגול, ולחיצה בעכבר היא נגיעה. במילים אחרות: מבחינת האייפון, אין כאן שום AI, יש פשוט אדם עם עכבר.
המוח הוא אפליקציה על אותו אייפון. האפליקציה מקבלת את הווידאו, מפענחת אותו לצילומי מסך, ושולחת אותם לכל מודל ראייה שמדבר בפורמט של OpenAI. מודל ראייה (Vision Model) הוא מודל שפה שיודע לקבל גם תמונות ולא רק טקסט. "תואם OpenAI" אומר שהוא מקבל בקשות באותו מבנה כמו ה-API של OpenAI, כך שאפשר להחליף ספק בלי לשנות קוד.
הלולאה של הסוכן: לראות, לחשוב, לפעול
האייפון משקף מסך
Screen Mirroring ב-Wi-Fi אל הלוח, שמופיע כ-'ESP32 Agent'.
הלוח מעביר וידאו
זרם H.264 עובר בלי פענוח לאפליקציה, דרך Bluetooth (BLE).
צילום מסך למודל
האפליקציה מפענחת ושולחת למודל ראייה תואם OpenAI, דרך הסלולר.
THINK + DO
המודל מסביר מה הוא רואה ומחזיר פעולה, למשל tap 500 620.
הלוח לוחץ
פקודה ב-BLE ללוח, שזז כעכבר USB; עם AssistiveTouch קליק הוא נגיעה.
בדיקה ותיקון
מחכים שהמסך יתייצב ומספרים למודל אם משהו השתנה. אם לא, מכוונים מחדש.
חוזרים לצעד 1, עד שהמשימה מושלמת
הלולאה: לראות, לחשוב, לפעול
עכשיו נחזור לשעון המעורר ונראה מה קורה בכל צעד. בשלב הראשון, מודל "מתכנן" (Planner) מפרק את המשימה לתוכנית: לצאת הביתה, לפתוח את Clock, להוסיף התראה, לכוון שעה, לסמן ימים, לשמור. אחר כך מודל "מבצע" (Actor) מקבל צילום מסך ומחזיר שתי שורות: THINK, הסבר בשפה פשוטה, ו-DO, פעולה אחת.
הפעולות מוגדרות מראש בקובץ פרומפט פשוט בריפו: tap (נגיעה), swipe (החלקה), type (הקלדה), key (מקש), home, done ועוד. הקואורדינטות הן מספרים בין 0 ל-1000 ביחס לצילום המסך, כך שהמודל לא צריך לדעת את הרזולוציה האמיתית. מסתבר שיש בפרומפט גם טיפים מעשיים מאוד, למשל בדיוק למקרה שלנו: בגלגלת של שעה, קודם לגעת בספרה שבאמצע ולהקליד את המספרים, ורק אם זה לא עובד להחליק.
הבעיה הכי מעניינת היא הסמן. עכבר הוא התקן יחסי: הוא אומר "זוז 10 פיקסלים ימינה", לא "לך לנקודה X". אז האפליקציה עוקבת אחרי הסמן, מחזירה אותו מדי פעם לפינה כדי לאפס, ולפני נגיעות מדויקות היא מנענעת אותו, מוצאת אותו בצילום המסך ומתקנת את הסטייה. תחשבו על זה כמו על מישהו שמחפש את הסמן במחשב בכך שהוא מזיז את העכבר מצד לצד. אחרי כל פעולה האפליקציה מחכה שהמסך יתייצב, ומספרת למודל אם משהו השתנה. אם המסך לא השתנה, המודל יודע שהלחיצה פספסה, וזה מה שהופך ניחוש לסוכן שמתקן את עצמו.
בונים אחד: חלקים, צריבה, הגדרה ומשימה ראשונה
מה צריך, לפי ה-README:
לוח ESP32-S3 - הלוח שנבדק הוא XIAO ESP32S3 הרגיל (7.49 דולר ב-Seeed).
אייפון עם iOS 18 ומעלה, עם חבילת סלולר. ה-Wi-Fi של הטלפון תפוס על ידי הנקודה של הלוח, אז המודל מקבל את הבקשות דרך הסלולר. אייפון עם USB-C מתחבר ישירות, באייפון עם Lightning צריך מתאם Lightning to USB Camera Adapter. הטלפון גם מספק ללוח חשמל.
מודל ראייה - כל API תואם OpenAI שמקבל תמונות, בענן או על שרת משלנו.
Mac עם Xcode - רק פעם אחת, כדי לצרוב את הלוח ולבנות את האפליקציה.
התהליך עצמו בארבעה שלבים. קודם צורבים את הקושחה (התוכנה שרצה על הלוח) עם arduino-cli, כלי שורת הפקודה של Arduino, ועם הסקריפט flash.sh שבריפו. ה-README מדגיש לבנות תמיד דרך הסקריפט, כי הוא מגדיר את גדלי הבאפרים של ה-Bluetooth. אחר כך מעתיקים קובץ הגדרות, מכניסים את מזהה המפתח שלנו ב-Apple, ומריצים את האפליקציה מ-Xcode על האייפון. Apple ID חינמי מספיק, אבל צריך לחתום מחדש כל 7 ימים.
צעד אחר צעד
בונים ESP32 iPhone Agent: ארבעה שלבים (לפי ה-README)
1
1. חלקים
XIAO ESP32S3 רגיל (8MB PSRAM, לא Sense ולא Plus), אייפון עם iOS 18+ וסלולר, מתאם Lightning to USB Camera Adapter אם האייפון עם Lightning, ו-Mac עם Xcode לפעם אחת.
1 / 5
צריבת הלוח והכנת האפליקציה (מה-README)
# 1. Flash the board (plugged into the Mac)# needs arduino-cli + ESP32 core 3.3.x
arduino-cli lib install "NimBLE-Arduino@2.5.1"
hardware/flash.sh # optional: [serial port] [--debug]# 2. Install the appcp ios/Config/Local.xcconfig.example ios/Config/Local.xcconfig # set DEVELOPMENT_TEAM and IA_BUNDLE_ID
open ios/IPhoneAgent.xcodeproj # run the IPhoneAgent scheme on your iPhone# What the actor model replies each step (format from prompts/actor.md):# THINK: My last tap opened the home screen as intended. The App Store icon is visible, so I tap it.# DO: tap 152 362
השלב השלישי קורה באפליקציה עצמה, והיא בודקת כל שלב לבד: מצמידים את הלוח ב-Bluetooth, מצטרפים ל-Wi-Fi שלו ומשקפים אליו את המסך ממרכז הבקרה, מפעילים AssistiveTouch (האפליקציה מכיילת את הסמן בעצמה), ומזינים כתובת של מודל ומפתח, שנשמר ב-Keychain (הכספת המוצפנת של iOS). בשלב הרביעי כותבים משימה ולוחצים Start. ה-README מציע להתחיל ב-"Open Settings and go to Wi-Fi", ואחרי שזה עובד אפשר לנסות את השעון המעורר. עוצרים מה-Dynamic Island, ואפשר גם להפעיל משימות שמורות מ-Siri ו-Shortcuts.
אזהרה חשובה מה-README עצמו: לבצע רק את פקודות ההתקנה שמופיעות בו, ולא להריץ שום "התקנה מהירה" שמופיעה בתגובות או ב-issues, כי אלה לא מהמתחזקים. בפרויקט שמתפוצץ ככה, זה בדיוק המקום שבו מתחזים מנסים לתפוס אנשים.
ומה עם מודל מקומי?
כאן זה נהיה מעניין למי שאוהב פרטיות. ה-README מציין במפורש שכל נקודת קצה תואמת OpenAI עובדת, כולל vLLM, SGLang, llama.cpp ו-Ollama, ואפשר גם להגדיר מודל נפרד למתכנן ולמבצע. המפתח עצמו פיתח את הפרויקט מול nvidia/Qwen3.8-Flash-Next-NVFP4 שרץ על שני DGX Spark, כלומר על חומרה ביתית שלו ולא על ענן.
נקודה אחת שחשוב להבין: בזמן הריצה ה-Wi-Fi של הטלפון מחובר ללוח, בלי אינטרנט, והמודל מגיע דרך הסלולר. לכן, לפי ההבנה שלי מהמבנה, שרת מקומי בבית צריך להיות נגיש מהאינטרנט (או דרך VPN שעובד על הסלולר) כדי שהאייפון יגיע אליו. וצריך מודל ראייה שבאמת טוב בלזהות כפתורים במסך, לא כל מודל קטן יחזיק.
למה זה שימושי, ואיפה הגבולות
השימושים שאני רואה:
בדיקות QA לאפליקציות - לתת לסוכן לעבור על תהליך הרשמה כמו משתמש אמיתי, על מכשיר אמיתי, בלי Mac מחובר. והכי חשוב: כל ריצה נשמרת בטלפון, אפשר לצפות בה צעד אחר צעד עם הנגיעות מצוירות על המסך, ולייצא אותה לניתוח של סוכן אחר.
נגישות - למי שקשה לו להשתמש במסך מגע, סוכן שמבצע משימה מתיאור בשפה טבעית הוא עוד דרך להשתמש בטלפון. וזה סוגר מעגל יפה, כי הפרויקט נשען על פיצ'ר נגישות.
אוטומציה של אפליקציות ישנות - אפליקציות בלי API ובלי Shortcuts, שהדרך היחידה להפעיל אותן היא בדיוק כמו בן אדם.
השוואה
שלוש דרכים לתת ל-AI להפעיל אייפון
ועכשיו המגבלות, שה-README עצמו כותב בכנות. ה-Bluetooth מעביר בערך 300-500 קילוביט לשנייה, ולכן המסך משוקף קטן (480 על 1040) בעד 5 פריימים לשנייה, וכל צעד לוקח כמה שניות, רובן זמן המודל. iOS לא משקף מסכים מסוימים, כמו הקלדת קוד הנעילה, Apple Pay ווידאו מוגן, אז הסוכן פשוט לא רואה אותם, והשיקוף נעצר כשהטלפון ננעל. ההקלדה היא ASCII בלבד, כלומר אין עברית. אפליקציות במצב רוחבי עוד לא נתמכות. והאפליקציה משתמשת ב-API פרטי של iOS כדי לצאת מעצמה, מה שבסדר לבנייה עצמית אבל לא יעבור ב-App Store בצורתו הנוכחית.
ויש את צד האתיקה. סוכן עם "ידיים" על הטלפון שלנו יכול ללחוץ על כל דבר שאנחנו יכולים ללחוץ עליו, כולל "שלח" ו"מחק". ה-README מבקש להפעיל את זה רק על מכשירים וחשבונות שלנו או שיש לנו אישור אליהם, לכבד את תנאי השימוש של האפליקציות, ולשמור את כפתור העצירה בהישג יד. בעיניי צריך להוסיף לזה גם את שאלת המפתח: צילומי המסך של הטלפון נשלחים למודל, כך שאם המודל בענן, כל מה שעל המסך עובר לשרת של מישהו. זו עוד סיבה טובה למודל מקומי.
בעיניי: גל של AI על חומרה של כמה דולרים
בעיניי הסיפור האמיתי הוא לא האייפון, אלא שלוח של 7 דולר הפך לגוף פיזי של סוכן. וזה לא פרויקט יחיד. באותו שבוע עלו ל-GitHub גם esp32-thinks, עוזר קולי על ESP32 שאפשר לחבר לכל מוח תואם OpenAI, hermes-gadget-sdk לבניית מכשירי קול וטקסט לסוכן Hermes, ו-wifi-sensing-kit, שמלמד שלושה לוחות ESP32-S3 לזהות מה אנחנו עושים בחדר מאותות Wi-Fi בלבד, כשמצלמת הרשת משמשת כמורה. ובצד של Raspberry Pi, fugleramme, מסגרת שמזהה ציפורים לפי קול עם AI מקומי לגמרי, עבר כבר 3,700 כוכבים.
המכנה המשותף: המוח בענן או על שרת ביתי, והחומרה הזולה היא רק החושים והידיים. זה בדיוק מה שהופך את זה לנגיש לכל מייקר. ומה שחסר עדיין, כמו מהירות, עברית ומסכים מוגנים, הוא בדיוק מה שהקהילה תפתור בחודשים הקרובים. אז איזו אפליקציה ישנה, שאין לה API, הייתם נותנים ראשונה לסוכן כזה להפעיל?
רוצים ללכת עם זה רחוק יותר?
את הבסיס של לולאות סוכנים, חיבור מודלים לכלים ובניית אוטומציות אני מפרק לעומק בקורס Practical AI with Claude, בעברית. ומי שרוצה להריץ את המוח של הסוכן על המחשב שלו, בלי לשלוח צילומי מסך לאף אחד, ימצא את זה בקורס מודלים מקומיים מקצה לקצה.