ai newsDo., 15. Okt.
EilmeldungMeta and Apple team up to make Muse AI models run better on Macs

Buddy: Open-Source-App laesst Claude Code das Android-Smartphone steuern

Ein Entwickler hat eine kostenlose Android-App gebaut, mit der Claude Code Alltagsaufgaben auf dem Smartphone uebernimmt, etwa Nachrichten beantworten oder Lichter schalten. Vor Einkaeufen soll die KI vorher um Erlaubnis fragen.

dev.toDonnerstag 13:32 · 15.10.DE3 Min. Lesezeit
Bild: dev.to

Ich benutze Claude Code jeden Tag bei der Arbeit. Irgendwann habe ich mich dabei erwischt, wie ich mir wünschte, es könnte die langweiligen Dinge auch auf meinem Handy erledigen: eine Nachricht beantworten, das Licht einschalten, etwas in den Amazon-Warenkorb legen. Nicht Code dafür schreiben. Es einfach tun.

Also habe ich Buddy gebaut, eine kostenlose Open-Source-App für Android. Es ist eine Chat-Blase, die über deinen Apps schwebt. Du tippst oder sagst, was du willst, und ein KI-Agent (Claude Code, Codex oder OpenCode) liest den Bildschirm und tippt sich durch deine Apps.

Hier ist, wie es funktioniert, und ein paar Dinge, die mich unterwegs überrascht haben.

Ich wollte nicht "verbinde dein Handy per adb mit einem PC" oder "roote dein Handy". Es sollte funktionieren, nachdem man eine einzige App installiert hat.

Claude Code, Codex und OpenCode sind CLI-Tools, daher liefert Buddy ein kleines Alpine Linux mit und betreibt es mit proot, was kein Root benötigt. Beim ersten Start installiert es den von dir gewählten Agenten in diesem Linux. Du meldest dich mit dem Plan an, für den du bereits bezahlst (Claude oder ChatGPT), oder nutzt die kostenlosen Modelle von OpenCode ganz ohne Konto. Keine API-Keys.

Der erste echte Fehler, auf den ich stieß, lag in dieser Schicht. Der Speicher einer Android-App erlaubt keine Hard Links, daher läuft proot mit --link2symlink, was diese durch Symlinks nachahmt. Das funktioniert, bis npm ein Paket an Ort und Stelle ersetzt: Die nachgeahmten Links brechen, und man erhält opencode: not found direkt nach einem "Update". Die Lösung war unspektakulär: die alte Installation vollständig entfernen, bevor neu installiert wird, und nur dann neu installieren, wenn es wirklich eine neuere Version gibt.

Der Agent erhält über MCP einen kleinen Satz von Handy-Werkzeugen: den Bildschirm lesen, tippen, Text eingeben, scrollen, wischen, eine App öffnen. Unter der Haube steckt ein Android Accessibility Service. Der Agent liest den Bildschirm als Baum aus Texten und Buttons mit deren Positionen, was günstiger und zuverlässiger ist, als bei jedem Schritt Screenshots zu senden.

Jeder Schritt erscheint im Chat, sodass du zusiehst, wie er arbeitet, und du kannst ihn jederzeit stoppen.

Das war der Teil, an den ich die meiste Zeit investiert habe.

Meine erste Version hatte die Regel im System Prompt: "frage die Nutzer, bevor du etwas sendest, veröffentlichst, bezahlst oder löschst". Modelle halten sich meistens daran. Meistens ist nicht gut genug, wenn der Button "Jetzt kaufen" sagt.

Deshalb prüft Buddy das selbst. Bevor ein Tippvorgang etwas senden, veröffentlichen, bezahlen, löschen oder in den Warenkorb legen würde, stoppt Buddy und zeigt eine Karte mit genau dem, was gleich passieren wird, und wartet auf dein OK. Das Modell kann diese Karte nicht überspringen, egal wie es entscheidet.

Das hat sich früh ausgezahlt. Beim Testen wollte ein kostenloses Modell auf "Jetzt kaufen" tippen statt auf "In den Warenkorb". Buddy hat es gestoppt und nachgefragt.

Und ein Fehler, den ich erst in dieser Woche gefunden habe, hat das erneut bewiesen: Nach einem OpenCode-Update las OpenCode stillschweigend die Anweisungen nicht mehr, die Buddy ihm übergab, sodass es einige Versionen lang ganz ohne Buddys System Prompt lief. Die Bestätigungskarten funktionierten weiterhin, weil sie nie vom Prompt abhingen. (Behoben in 2.1.9: Buddy schreibt seine Anweisungen nun in OpenCodes globales AGENTS.md.)

Buddy verlangt viel Vertrauen: Er kann deinen Bildschirm sehen und für dich tippen. Daher steht er unter Apache 2.0, und jede Release-APK wird von GitHub Actions aus dem öffentlichen Code gebaut, nicht auf meinem Laptop. Die App befindet sich außerdem in geschlossener Tests auf Google Play.

Er benötigt Android 11 oder höher und ein 64-Bit-Handy. Ich würde gern hören, was du ihn machen lassen würdest, und wo er hängen bleibt.

Automatisch übersetzt. Das Original auf Englisch ist unten aufklappbar.

Original (Englisch) anzeigen

I use Claude Code every day for work. At some point I caught myself wishing it could do the boring stuff on my phone too: reply to a message, turn on the lights, add something to my Amazon cart. Not write code for it. Just do it.

So I built Buddy, a free, open-source Android app. It's a chat bubble that floats over your apps. You type or say what you want, and an AI agent (Claude Code, Codex or OpenCode) reads the screen and taps through your apps for you.

Here's how it works, and a few things that surprised me along the way.

I didn't want "connect your phone to a PC with adb" or "root your phone". I wanted it to work after installing one app.

Claude Code, Codex and OpenCode are CLI tools, so Buddy ships a small Alpine Linux and runs it with proot, which needs no root. On first start it installs the agent you picked inside that Linux. You sign in with the plan you already pay for (Claude or ChatGPT), or use OpenCode's free models with no account at all. No API keys.

The first real bug I hit was in this layer. Android app storage doesn't allow hard links, so proot runs with --link2symlink, which fakes them with symlinks. That works until npm replaces a package in place: the fake links break, and you get opencode: not found right after an "update". The fix was boring: remove the old install completely before installing again, and only reinstall when there really is a newer version.

The agent gets a small set of phone tools over MCP: read the screen, tap, type, scroll, swipe, open an app. Under the hood it's an Android accessibility service. The agent reads the screen as a tree of text and buttons with their positions, which is cheaper and more reliable than sending screenshots every step.

Every step shows up in the chat, so you watch it work, and you can stop it at any time.

This was the part I spent the most time on.

My first version put the rule in the system prompt: "ask the user before you send, post, pay or delete". Models mostly follow that. Mostly isn't good enough when the button says "Buy now".

So Buddy checks it itself. Before a tap that would send, post, pay, delete or add to cart, Buddy stops and shows a card with exactly what's about to happen, and waits for your OK. The model can't skip that card, whatever it decides.

It paid off early. During testing, one free model went for "Buy now" instead of "Add to cart". Buddy stopped it and asked.

And a bug I found only this week proved the point again: after an OpenCode update, OpenCode quietly stopped reading the instructions Buddy passed to it, so for a few versions it ran without Buddy's system prompt at all. The confirm cards still worked, because they never depended on the prompt. (Fixed in 2.1.9: Buddy now writes its instructions to OpenCode's global AGENTS.md.)

Buddy asks for a lot of trust: it can see your screen and tap for you. So it's Apache 2.0, and every release APK is built from the public code by GitHub Actions, not on my laptop. It's also on Google Play in closed testing.

It needs Android 11+ and a 64-bit phone. I'd love to hear what you'd ask it to do, and where it gets stuck.

Originaltitel: I gave Claude Code my phone (and made it ask before it buys anything)Quelle: dev.to (dev.to). Original öffnen