Jenny

Jenny

A local-first personal AI agent that lives on your Android phone.

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.

AGPL-3.0 · Android 8+ · your key, your device

Jenny reading back data from a mini-app she wrote herself, in chat
Mini-apps written by the AI agent, in its app grid
Graph view of a wiki Jenny compiled, linking the concepts and entities she extracted

Captured on a Unihertz Titan 2 (1440×1440 square display). Unretouched framebuffer grabs.

Why local-first

Mainstream assistants are guests, not hosts

They live in an app among many, forget you between sessions, and send your life to someone else's servers. Jenny inverts all three.

Presence

It can be the home screen. Apps live inside the assistant, not the reverse.

Continuity

One conversation that never resets, backed by structured on-device memory that gets better the longer you use it.

Ownership

No account, no sign-up, no telemetry, no subscription, no server of ours in the loop. Your key, your model, your storage.

Cloud assistant
(ChatGPT, Gemini, Siri)
Self-hosted agent
on a VPS
Jenny
Where your data livesthe vendor's serversyour server, your ops burdenthe phone in your pocket
Memory across sessionslimited, vendor-controlledwhatever you build yourselfpermanent, on-device, plain Markdown
Acts while you're not lookingnoif you wire it upbuilt in
Recurring hardware costfree tier, then a subscriptionmonthlya phone you already own
Model choicethe vendor'syoursyours — 40+ providers, or local
Works with no internetnonoyes, with a local model on your LAN
Setup effortnonerealbuild an APK, paste a key

Permanent on-device memory · "Dream"

It gets better the longer you use it

Every couple of hours, a background pass replays the recent conversation and distills it into structured files on disk. Noise is pruned, signal accumulates — and it's plain Markdown on the device, so switching model provider doesn't cost you your memory.

How Dream works →

What it can do

It acts on its own — and it writes its own apps

Time and initiative

Reminders, one-shot scheduled actions, recurring jobs ("every Monday, summarise my week"). When one fires, it messages you first, screen off.

Read more →

Files and documents

Read, write, organise and edit inside a workspace, with a real file browser and an editor in the UI.

Read more →

It writes its own mini-apps

Describe one in chat — "something to track my plants" — and it builds the UI, storage and a callable tool, so cron can act on it later.

Read more →

It can be your launcher

HOME + DEFAULT + LAUNCHER, seven visual themes, an animated mascot. Judged purely as a launcher it would be a bad one — the launcher is the how, not the what.

Read more →

Daily launcher

Your main phone's home screen becomes the agent. This is the whole point: presence, memory, proactivity, all day.

Dedicated device

A spare Android on your desk becomes an always-on AI device. Zero-risk trial: always powered, battery is a built-in UPS, own screen, already paid for. Reach it via the optional Telegram bridge.

The one honest exception to local-first

If the agent lives on a phone on your desk, connect your own Telegram bot token and its proactive messages reach wherever you are. Messages routed through the bridge pass through Telegram's servers — your memory, files, conversations and generated apps do not, whether the bridge is on or off. Off by default, and it requires an explicit pairing step.

Telegram bridge →

Privacy

Every outbound connection Jenny can make

Not "we promise not to look" — there is nowhere for us to look from. No account, no sign-up, no sync, no telemetry, no analytics SDK, no crash reporter. The claim is checkable: no phone-home in the code.

  1. Your configured LLM provider. Messages, session history, tool results, and any workspace file the agent reads — plus your last-known location, on every turn, if location sharing and the Android permission are both on.
  2. Bing. Your web_search queries, only when the agent actually calls the tool. The engine is fixed to Bing — there's no picker.
  3. Sites reached by web_fetch / download_file. Whatever a normal visit reveals: a real, hidden WebView with the phone's own IP, user-agent and cookies.
  4. api.telegram.org. Only if you paired a bot. Off by default. Your conversation transits Telegram's servers under Telegram's terms.

The one caveat we won't hide

android:allowBackup="true" is set on purpose — losing your agent's memory when you change phones would be worse than the alternative. The consequence is real: with Google's automatic backup enabled, the app's private storage — including config.json, which holds API keys in plain text — is eligible for backup to your Google account. Turn app backup off for Jenny if you don't want that, and use the app's own encrypted export instead.

Full privacy model, with every gating condition → · Security model →

Security, without a discount

Four containment levels — one of them real, three of them guards

Jenny reads and writes files, executes Python, fetches from the network and acts on a schedule while you're not watching. Pretending that's risk-free would be the fastest way to lose your trust.

SECURITY.md — the real trust model, every level, and the known limitations →

Bring your own key

40+ providers, two real integrations

First-run onboarding is a short wizard: pick a provider format, paste a key, choose a model. Under the hood there are only two real integrations — an Anthropic-format client and an OpenAI-compatible one — and every catalog entry is a preset on top of one of them.

That's the useful part: anything speaking either API works, including something that ships after this page. Point it at Ollama or LM Studio on your own LAN and the whole loop runs offline — no request ever leaves your network.

Providers and models → · Running fully offline →

Seven themes, one agent

Try a theme on this page

A draggable animated mascot you can also just switch off, and a full visual identity underneath it — not just an accent color swap.

Seven built-in themes, chosen from the same Settings screen as everything else. This button row previews them on this page — the app itself has the full picker with live thumbnails.

Quick start

Build it and install it

The whole thing builds from this repository with no extra steps. JDK 17, Android SDK Platform 34, adb, and network access on the first build (Gradle downloads the Chaquopy Python 3.11 runtime and every pinned wheel).

git clone https://github.com/flagdizero/jenny-android-ai-agent.git jenny
cd jenny/android
echo "sdk.dir=/path/to/your/Android/sdk" > local.properties
./gradlew app:installDebug

Then: launch, follow onboarding, paste your API key. Optionally set it as your default launcher. No account to create, at any point.

Is it for you?

Probably yes

  • You want an assistant that actually remembers you.
  • You have a spare Android phone doing nothing.
  • You'd rather hold your own API key than rent a subscription.
  • You enjoy reading the source of things you run.

Probably not

  • You want a polished one-tap install today.
  • You're on iOS.
  • You want a feature-complete launcher.
  • You need something audited and hardened to run models or content you don't trust.

The full checklist →

FAQ

Questions, answered plainly

Is this a launcher like Nova or Niagara?

No — the launcher is the how, not the what. Jenny is a personal AI agent; being the home screen is what makes it present instead of an app you remember to open.

Can I use it from my laptop?

Not the UI — it binds loopback by default, with nothing exposed to your network. You can talk to the agent from anywhere through the optional Telegram bridge. Android is the only supported runtime.

Does it really work offline, with local models?

Yes — Ollama and LM Studio through the OpenAI-compatible engine. With the model on your LAN and the bridge off, no traffic leaves your network at all. Expect quality to track the model.

What does it cost?

The app is free and open source. You pay your provider directly, or nothing with a local model. There's no incentive to ration your usage — that's architectural, not a pricing promise.

Why AGPL, if it never touches a server?

So a hosted fork can't take the work closed. Personal use is unaffected.

Is my data really on the device?

Yes, with two disclosures worth hearing directly: your prompts go to whichever model provider you chose, and Android Auto Backup is on by default — both covered in the privacy section above.

Is there a downloadable APK?

Not yet. Today the only path is building from source with Gradle and adb — see the install guide. If a signed release APK with a published hash becomes available, this answer changes with it.

Two promises

On the record, so they can be held against us

BYOK is free, forever

Using Jenny with your own key will never require a subscription, an account, or a payment to us. If a managed tier ever exists for people who don't want to handle API keys, it will be an addition, never a replacement.

Local-first, forever

Your data living on your device is the architecture, not a launch feature. Don't trust that sentence — check the permissions and the source. That's why they're public.