TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
A persistent personal AI assistant for Android — one conversation, long-term memory, goals, calendar, and proactive follow-ups.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A persistent, text-only personal AI assistant for Android. One conversation for the life of the app. You talk; she remembers, organizes, and follows up.
Download from stores
Site · Download · Changelog · Wiki · Architecture · Scenarios · Contribute
Her is not a chat app. There is one continuous conversation for the life of the app, but the screen shows only her latest message — no scrolling thread, no history to manage.
You talk naturally. Her decides what becomes a memory, a goal, a grocery item, a date, or something she should follow up on later. Natural language goes in; structured records live underneath. You never need to learn tool vocabulary.
Core principles:
| Feature | What she does |
|---|---|
| Wondering | Revisits memories and unfinished items, saves tentative questions, and learns from occasional conversations. How it works |
| 📚 Learning in chat | Builds personal roadmaps, teaches short lessons, checks answers, saves progress, and schedules reviews — all in the conversation |
| 🧠 Memory | Learns facts about you and recalls them by meaning when embeddings are enabled |
| Correctable memory | Explains sources, preserves history when facts change, and supports scoped forgetting |
| Daily planning | Suggests work that fits available time, stated energy, prerequisites and known calendar events |
| Recurring responsibilities | Skips, postpones, pauses and completes individual occurrences conversationally |
| Executive delegation | Tracks owned outcomes, dependencies, reported blockers and decisions needed; gives an on-demand briefing of exceptions with evidence and coverage limits |
| Decision memory | Preserves actual reasons for choices and supports optional later reflection |
| Situation briefings | Gives focused catch-up, leaving, person-specific and weekly summaries with coverage limits |
| 🧵 Ongoing support | Keeps evolving life situations, tracks replies owed by others, resumes working drafts, and prepares meeting context; personalized check-ins are opt-in |
| 🎯 Goals & commitments | Tracks tasks, goals, and promises — and checks in on them |
| 🛒 Groceries | Maintains a shopping list from casual mentions |
| 📅 Calendar | Creates and reads events via the system calendar or Google Calendar |
| ⏰ Reminders & alarms | "Remind me at 6", "next time I see Reza", "only if I haven't sent it", or "wake me up at 7". Reminders ring on time without the network; alarms go to your clock app |
| 🔔 Follow-ups & briefings | Hourly and nightly background passes plus a morning briefing, respecting quiet hours on your clock |
Get Her on Cafe Bazaar, or grab the signed APK from the latest release, and install it on an Android 10+ device.
A local toolchain under .toolchain/ (gitignored) can be used:
source scripts/env.sh
./gradlew assembleDebug
local.properties should contain:
sdk.dir=/absolute/path/to/android-sdk
[!TIP] If
dl.google.comis unreachable, the Gradle files already prefer Aliyun / JetBrains mirrors for Google Maven artifacts.
See Local development for emulator and Make targets.
Unit tests (run in CI):
./gradlew testDebugUnitTest
Scenarios exercise real behavior against a live LLM and are not part of CI. They read LLM_API_BASE_URL, LLM_MODEL_IDENTIFIER, and LLM_API_SECRET_KEY from the repo-root .env:
make scenarios
make scenario ID=system-calendar-create-event
See Scenario engine.
UI → Agent runners → Tool registry → Repositories → Room
↘ OpenAI-compatible LLM (streaming chat, blocking background)
Background: hourly (≤10 calls), nightly (≤50), morning briefing
Sync: Drive appDataFolder NDJSON change log (not whole-database overwrite)
The model only proposes tool calls. The app validates schemas and enforces call budgets, permissions, timestamps, and confirmation for destructive actions.
Drive sync and direct Google Calendar access use Settings → Connect Google. Each device configures its API credentials independently. Developers register Android OAuth clients once in Google Cloud; see Local development.
GitHub Actions runs unit tests and uploads a debug APK on every push and pull request. Pushing a version tag (vMAJOR.MINOR.PATCH) publishes a signed APK to a GitHub Release:
git tag v0.1.0
git push origin v0.1.0
Create a keystore (keep the .jks file private; you need the same one for every update):
keytool -genkeypair -v \
-keystore her-release.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias her
Then add these repository secrets (Settings → Secrets and variables → Actions):
| Secret | Value |
|---|---|
RELEASE_KEYSTORE_BASE64 | base64 -w 0 her-release.jks |
RELEASE_STORE_PASSWORD | keystore password |
RELEASE_KEY_ALIAS | key alias (her if you used the command above) |
RELEASE_KEY_PASSWORD | key password |
| Page | What it covers |
|---|---|
| Product | Personality, classification rules, what the user never has to say |
| Architecture | Packages, data flow, entry points |
| UI and flows | Screens, first run, single-utterance Her, SQL Memory tab, share |
| Emotional understanding | Experiences, purpose, mixed feelings, corrections and reflection |
| Wondering | Memory review, unanswered questions and learning from answers |
| Personal support | Correctable memory, capacity planning, recurrence, decisions and focused briefings |
| Ongoing support | Life threads, waiting-on tracking, check-ins, meeting preparation and working sessions |
| Learning | Conversational roadmaps, lessons, practice, review and study nudges |
| Agent | LLM loop, tools, context, call budgets |
| Data and sync | Room, secrets, Drive, calendar, search |
The loading orbs are thinking-orbs by Jakub Antalik (MIT), ported to Kotlin and checked against its golden vectors. See third_party/thinking-orbs.
Pull requests are welcome anytime, no issue needed first. See CONTRIBUTING.md for why and when to help, the product rules every change keeps, and how to test it.
Released under the MIT License. © 2026 Alireza Azadbakht
| 💗 Emotional understanding | Feels how each message landed right after replying and sorts it out in a nightly review; keeps an unresolved worry in mind and asks after it later; is glad for your good news; assesses her contribution and uncertainty, remembers ongoing experiences, learns scoped support lessons from feedback, and keeps her internal feelings separate from the tone you need; keeps feelings scoped to individual situations and recognizes emotional transitions; her orb can mix two feelings |
| 🌐 Persian & RTL | Persian replies read right to left; understands Persian times and Jalali dates |
| 📴 Offline queue | Messages sent without a connection are processed in one batch later |
| ☁️ Multi-device sync | Every record syncs through a Google Drive appDataFolder change log |
| 🔎 Web search | Optional, when she needs current information |
| 🗄️ Memory SQL navigator | Inspect exactly what she has stored |
| 🔑 Her Cloud | No API key? Buy credit on Her Cloud, then paste or scan the settings it gives you, on the first screen or in Settings |
| 🔐 Private by design | API keys in Android Keystore-backed storage; never written to the database, never synced |
| Background work |
| Hourly / nightly / briefing / sync, quiet hours |
| Local development | Toolchain, Make, emulator, tests |
| Scenario engine | Live-LLM capability pool, JSON format, how to run |
| CI and release | GitHub Actions, tags, signing, published APKs |
| Store listing | Store icon, feature graphic, screenshots and descriptions in Persian and English |