by flagdizero
A local-first personal AI agent that lives on your Android phone. Permanent memory, scheduled autonomous work, self-written mini-apps, and an optional home-screen launcher. Your data stays on the device — bring your own API key, or run a local model and keep the whole loop offline.
# Add to your Claude Code skills
git clone https://github.com/flagdizero/jenny-android-ai-agentGuides for using ai agents skills like jenny-android-ai-agent.
jenny-android-ai-agent is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by flagdizero. A local-first personal AI agent that lives on your Android phone. Permanent memory, scheduled autonomous work, self-written mini-apps, and an optional home-screen launcher. Your data stays on the device — bring your own API key, or run a local model and keep the whole loop offline. It has 52 GitHub stars.
jenny-android-ai-agent's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/flagdizero/jenny-android-ai-agent" and add it to your Claude Code skills directory (see the Installation section above).
jenny-android-ai-agent is primarily written in Python. It is open-source under flagdizero on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh jenny-android-ai-agent against similar tools.
No comments yet. Be the first to share your thoughts!
Unlocks once the catalog security scan passes (runs nightly).
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
It remembers you permanently, acts on a schedule without being asked, writes its own mini-apps on request, and can be your phone's home screen. Your memory, files and conversations stay on the device. Bring your own API key — or run a model on your own hardware and keep the whole loop offline.
Documentation · Quick start · Features · Privacy & security · Limitations · FAQ
Jenny is an Android app with an embedded Python runtime. It registers as a HOME activity, so if you want, pressing Home lands you in a conversation instead of a grid of icons. A foreground service keeps the agent alive with the screen off — which is what makes scheduled work and proactive messages possible at all.
If you have ever self-hosted an AI agent on a server, this is that: except the host is a phone you already own, it has a screen, and its battery is the UPS.
It is a pre-release prototype. Sideloaded, no store and no auto-updates, and the known limitations are listed in full rather than discovered later.
The question worth answering first, because "AI agent" plus "API key" usually means a proprietary service with an open-source shell.
If you use a hosted provider, then yes — your prompts go to that provider under your own key, and Jenny depends on a non-free network service for as long as you choose one. That is your decision per install, not a property of the app.
🧠 Permanent on-device memory. Every couple of hours a background pass replays the recent conversation and distils it into structured Markdown on disk: who you are, the agent's own behavioural notes, an index of durable context, and any procedure it saw you repeat, written down as a reusable skill. Noise is pruned, signal accumulates. It's plain Markdown on the device, so switching provider doesn't cost you your memory. → Memory
📚 It builds you a wiki. Feed it articles, notes, PDFs or web pages and ask it to compile
them: you get cross-linked Markdown pages — concepts and entities, joined by [[wikilinks]] —
browsable in their own tab, with a graph view of how they connect (that's the fourth screenshot
above). Driven entirely from chat through a built-in llm-wiki skill: create one, ingest a
source, compile, ask it questions, run a lint pass for dead links and orphan pages. It does
not update itself — every step is a request you make, or a job you schedule. Multiple wikis
live side by side as plain files in the workspace, so they're editable and backed up like
everything else. → Wiki
⚡ It acts on its own. Reminders, one-shot actions and recurring jobs ("every Monday, summarise my week"). When one fires, it messages you first, screen off. It reads and writes files, executes Python, and searches the web through a real hidden Chrome WebView rather than a plain fetch, so JavaScript-rendered pages work. → Scheduling · Tools
🛠️ It writes its own Android mini-apps. Describe one in chat — "something to track my plants" — and the agent builds it: UI, typed actions, persistent storage, installed into its own app grid. Each action becomes a callable tool, so the same app is usable by you, by the agent in conversation, and by anything that triggers a turn, including cron. That last one is what makes "alert me if the basil needs water" work end to end. → Mini-apps
📱 It can be your Android launcher. It declares HOME + DEFAULT + LAUNCHER and handles
the Home gesture, listing and launching your installed apps from a panel inside the UI. Seven
visual themes and a draggable mascot you can switch off. Judged purely as a launcher it would
be a bad one — no widgets, folders or icon packs. The launcher part is the how, not the
what. → Launcher setup
💬 Optional Telegram bridge for reaching the agent from anywhere — outbound-only, your own bot token, so nothing on your network becomes reachable from the internet. Messages through it pass through Telegram's servers; your memory and files never do. Off by default.
Download the APK from Releases — Android 8.0 or newer, ~67 MB, most of which is the embedded CPython runtime. Verify it against the hash published on the release page:
shasum -a 256 jenny-0.3.0.apk
Android will ask you to allow installing from outside the Play Store. The APK is signed with my own key (RSA 4096, schemes v2 and v3) — no store vouches for it, which is the deal with sideloading, and checking the hash is how you confirm you got the file I built. Then launch it, follow onboarding, paste your API key. No account to create, at any point.
Or build it yourself — the whole thing builds from this repository, which is rather the point of not having a store in the middle.
Installing · first run · build from source · is it for you?
Memory, conversations, files and generated apps live in the app's private storage. The web UI
is served on loopback by default (127.0.0.1) — no port exposed to your network, nothing
to reverse-proxy, no inbound attack surface unless you deliberately rebind it. The API is
token-gated even on loopback, because Android does not isolate loopback TCP between apps.
Jenny makes exactly five kinds of outbound connection — your provider, Bing when it searches,
api.telegram.org if you enabled the bridge, any URL you or the agent explicitly fetch, and
OpenRouter's attribution headers when that's your provider. No sixth item, no phone-home. It
declares ten permissions and asks for no camera, microphone, contacts, SMS, call log,
background location or storage.
→ Every connection and permission
Two disclosures I would rather you hear from me than discover:
android:allowBackup="true" is set on purpose — losing your memory when you change
phone would be worse. But with Google backup on, the app's private storage, including the
config file that holds your API keys in plain text, is eligible for your Google account's
backup. Turn backup off for this app and use Jenny's own encrypted backup instead.
→ Privacy in detailSecurity, short version: python_exec is not a sandbox — arbitrary Python, in-process; the
module lists are a usability guardrail, not containment. Provider keys are plain text,
protected by the app sandbox and readable by the agent's own