EchoList
An AI-powered Android task manager: describe what you need in natural language and a GLM tool-calling agent turns it into structured todos — with a fully offline fallback.
The problem#
Task apps lose to a text file because thinking in forms is slower than thinking in sentences. EchoList lets you type "remind me to email the lab supervisor tomorrow about the Robotics lab report" and watch it become a structured task: title, due date, project tag, priority — no date picker in sight.
Tool-calling, not free text#
The obvious approach — ask the model to return JSON — is brittle the moment the model is creative. Instead, EchoList gives the GLM model a small set of tools and lets it call them:
val tools = listOf(
CreateTask(title, dueDate, tags, priority),
UpdateTask(id, field, value),
QueryTasks(filter),
CompleteTask(id),
)The model's job shrinks from "generate the right structure" to "choose the right function with the right arguments". Failures become typed and recoverable: a malformed date fails validation at the tool boundary, not silently in your task list.
The offline fallback ladder#
An Android app that dies without a network is a bad Android app. EchoList degrades in explicit steps:
- Online — GLM tool calling, streaming feedback while the model thinks.
- Flaky — requests time out at 2.5s; the app retries once, then drops a level.
- Offline — a deterministic on-device parser (regex dates, keyword tags) handles the common cases, and a "couldn't reach Echo" banner explains the downgrade instead of failing mysteriously.
Details that made it feel finished#
- Undo everywhere. Every agent-initiated change lands as a diff you can reverse; trust matters more in AI features than in manual ones.
- Optimistic UI. Tasks appear instantly, then reconcile — network round-trips never block the interaction.
- Tool-call logging. Every model decision is inspectable in a debug screen: prompt, tool chosen, arguments, result. My first two weeks of bugs were found there, not in my own code.
What I took from it#
The agent is the easy 20%. Ship-quality comes from everything around it: permissions prompts, timeouts, retry policy, undo, and telling the user when the smart part has gone dumb.