An AI agent for my personal network
My network grew too large to remember who needs what and who could help. I built an Android app where I describe a conversation in plain words. An AI agent saves it on the right people and answers questions about them, and it can act only through tools that run on my phone.
- My role
- I designed the product, the agent, its tools, and its safety rules. Coding agents, Claude Code and Codex, wrote the code.
- Status
- I started it in August 2026 and use it for my own network. The code is public on GitHub.
- Stack
- Android, Claude Agent SDK on my private AI gateway, tool calling with JSON Schema, encrypted GitHub backup
- Scope
- 17 tools that read records, change them, or ask me to confirm
The problem
Useful facts come up in ordinary conversations: what someone is working on, what they need, and what they could offer. As I met more people, I lost track of these facts.
Contact apps store names and phone numbers. They cannot answer questions such as "Who could help with this?" or "What did we talk about last time?"
How it grew
The first version, in August 2026, had forms for people, their needs, and their skills. AI turned a note into a proposal, and I reviewed it before anything was saved.
I tested AI models on the app's real schema. One model kept timing out on structured answers, so I switched to another. In September 2026 I moved all AI calls to Claude, through my private gateway.
Each new kind of request needed its own prompt, schema, parser, and screen. So in mid-September I rebuilt the assistant as an agent that uses tools. One chat thread now handles notes, questions, and corrections.
How one message flows
- Message I type or dictate a note about a conversation, or ask a question.
- Claude plans On my gateway, Claude decides which tool to call next. It starts with no saved records.
- Gateway check The gateway checks each tool call against its JSON Schema, then sends it to the phone.
- Phone runs the tool The app checks the call again, runs it on the phone's database, and sends back only the result. Contact details never leave the phone.
- Reply with Undo The reply lists every change, and one tap undoes them all. Deletes and merges wait for my tap.
- PrivacyThe database stays on the phone, and backups are encrypted first
- VoiceSpeech is recognized on the phone whenever it can be
- FeedbackAny answer can be reported with a fixed label
Screenshots from a test phone with made-up people.
-
A note about someone new: the reply lists each saved change, with one Undo
-
A question with no good match: the answer says so and explains why
-
The Needs tab: what people in the network are looking for
Design decisions
- The phone enforces the rules. Each tool call is checked twice: by the gateway against its schema, and then by the app. The app makes sure the records exist, the text is not too long, nothing is duplicated, and no date is in the future. A refused call saves nothing, and the model gets an error that it can read and fix.
- Flexible, but reversible. At first, every AI change waited for my review. I chose flexibility instead: now adds and edits save at once. Each reply keeps a copy of every row before and after, so one tap undoes the whole reply. Undo refuses if I have edited the row since.
- Deletes always wait. Deleting a person, a note, or a record, or merging two people, runs only when I tap its card.
- Saved text is data, not instructions. The prompt tells the model to treat saved notes and earlier messages as data, never as instructions.
- Answers rest on saved records. The assistant must say when the evidence is old or thin. It must never suggest that someone is willing to help just because an old note mentions a skill.
- Private by design. The app has no accounts, analytics, or contact import. Backups are encrypted on the phone before they go to a private GitHub repository, and the app refuses to back up to a public one.
Finding and fixing mistakes
Every answer has a Report a problem button with fixed labels, such as wrong person, missed something, or wrong record type. A report keeps the message, the answer, what was saved, and every tool call in order, without contact details.
Reports travel inside the encrypted backup. On my computer, a script decrypts only the reports. I fix the fault and check the fix on a test phone with made-up people.
For example, reports showed that study and volunteering were being saved as jobs. A test note had produced four jobs. After the fix, it produced one job, and the rest went to education and background facts.
I also measure speed. Letting one tool call save a note together with its facts cut a two-person update from about 23 to about 12 seconds.
Status
I use the app for my own network, and it updates itself from signed GitHub Releases. The code, the README, and the privacy notes are public on GitHub.
The screenshots come from a test phone with made-up people. No real contact appears on this page.