Andee's Silent Turns: Android Agent Runs Unattended with a Two-Tool Whitelist and an Empty-Result Contract
The design choices here, whitelist over blacklist, empty output as success, and separating attempt from success timestamps, prevent the invisible retry loops and permission drift that break unattended agent runs in production, a failure mode Western devs building background agents will recognize.
Andee, an Android agent with its brain on the device, now runs unattended turns triggered by silence. After a configurable quiet period (default 20 minutes) it reviews the recent conversation and writes notes to a local notebook, without any user present. The design is built around four invariants: re-arm after each turn, re-check quietness at fire time, cap daily runs at 12, and recover from process death using a catch-up sweep that distinguishes last attempt from last success.
The permission surface is deliberately narrow. Silent turns may call only tools under the note.* prefix plus a whitelist of two gear methods, and the gate lives in the dispatcher, not the schema, because the schema can't tell who is calling. Empty output is defined as a valid completion, so there is no retry branch for zero results; this matters because a failed harvest previously caused 218 retries about 5 seconds apart until reinstall. The daily budget counts only the optional sweep turns, not the forced harvest, to keep the quota interpretable.
A blacklist is doomed when tool surfaces evolve; a whitelist forces review for any addition, which keeps the contract auditable rather than merely safe.
Treating empty output as success is the only way to avoid invisible retry loops; the 218-attempt incident is a concrete price of treating emptiness as failure.
Budgeting only optional actions keeps the quota interpretable, even though it makes the bill incomplete. The trade-off is honest: the user controls only what they can control.