Apps
Dayhand for Android
The Android app is the fullest Dayhand client: Today with quick add, the week and day calendar, the board, task details with repeats, checklists and reminders, the trash, a backup file, and, with a server, phone pairing, the calendar address, agent connections and the controls for your agents. It works offline, and reminders and the morning summary are worked out on the phone.
It runs on Android 8.0 or newer and speaks English, Polish, German, Spanish, French, Brazilian Portuguese, Japanese and Simplified Chinese. No APK is published yet; Install says how to build it. How the app is built and tested: android/README.md.
First start: where the plan lives
The first start asks where your plan lives, on two cards:
- On this phone only: no account and no server. Start with an empty plan, or Try with sample data to look around first: a few overdue, today’s and done tasks, a repeating one, a checklist and labels. One tap removes the sample tasks (on Today, or Settings → Data), and they are never sent to a server.
- Connect to my server: the pairing form (below). Back returns to the two cards.
Without a server, the plan lives only on this phone. Android’s own backup is off for Dayhand, so keep a backup file (Backups).
Today
From top to bottom:
- Overdue: not done and due before today in your time zone. Tick it off, move it To today, or pick another day or archive it from the menu.
- Now: the one task you are working on, with “where I stopped / next step” under its title. Tap the note to edit it. Choose the task with Work on it now in a task’s menu.
- Today: tasks due today, timed ones first, by time.
- Done: what you finished today, folded.
A line at the top says when the phone is offline and how many changes wait, while changes are sent, or when the server signed the phone out.
With a server, a plan health card sits above the lists: one sentence with what needs a look, the most pressing first (agents paused, overdue tasks, claims that ran out, approval requests, blocked tasks, proposals, tasks done today without proof). It is red when agents are paused or something is late and amber when you are asked for something; Review opens the agents page.
Quick add
The button at the bottom opens one title field. A date phrase at the end sets the day and time: “Call the accountant fri 2pm” is “Call the accountant” on the coming Friday at 14:00. Without a phrase, the task is for today. A grey line under the field says what will happen; Keep in title keeps the words as text. More options adds a day, a time and a note.
The phrases are English in every language of the app, the same as dayhand add --due: today,
tomorrow 9am, fri, next mon, in 3 days, 23 oct, 2026-10-23, 2pm. The full list:
dates.
Calendar
The bar at the bottom switches between Today, the calendar and the board.
- Week shows Monday to Sunday on an hour grid, Day one day. Swipe or use the arrows to turn.
- Tasks with a time are blocks at their hour; tasks without a time sit in a band above the hours. On a phone held upright the week shows them as bars without titles; tap a day for its titles, or long-press a day for a list with Move on each task.
- Long-press a task and drag it to another day and time. It snaps to a quarter of an hour; drop it on the day headers or the band to remove its time. Undo in the message puts it back.
- Overdue tasks are marked !, later dates of a repeating task ↻ and done tasks ✓. Later dates of a series and done tasks do not move.
Board
Three columns: To do, In progress (with the now task first) and Done (the 50 most recently done). On a phone one column shows at a time under tabs; from 600 dp wide they sit side by side. Long-press a card and drag it to another column or tab, or use the card’s menu. The bin icon opens the trash.
Task details
Tap a task to open it. You can change its title, status, the now flag and its note, the day with an optional time, the repeat, reminders, a checklist, labels and links (http and https only).
- Repeat: every N days, weeks (on chosen weekdays), months or years; a monthly task on a day of the month, the last day, or an nth weekday (“the 2nd Tuesday”, “the last Friday”); counted from the due date or from the day you complete it; ending never, on a day or after a number of times. A day the month lacks (the 31st in April) falls on its last day.
- Checklist: items in order; ticking them does not complete the task, and the next occurrence of a repeating task starts with every item unticked.
- Reminders: the defaults from Settings, none, or the task’s own: minutes before the due time, or a time on the due day or days before (at most five).
- Labels and projects: see backend project support and client availability.
- Move to trash keeps the task for 30 days. A task in the trash is read only until you restore it.
- Change history lists who changed what, newest first: you in the app, you with
dayhand, or an agent by name.
When an agent works on a task, the details show it: “agent: name works until time” while its claim lasts, the acceptance criteria with the met ones ticked, and the proof the task was completed with (agent work). Your own changes always go through, claim or not.
Trash
Tasks you or an agent deleted, newest first, with the day each one goes for good. Restore brings one back; it works offline too.
Reminders and the morning summary
Reminders are worked out on the phone from its copy of the plan, so they ring without a network and without a server.
- A task rings when it has a day and is not done or archived: for each of its own reminders, or the default ones from Settings when it has none. Minutes before the due time need a time; a time of day (“18:00 the day before”) also works for tasks without one.
- Overdue tasks never ring; they wait at the top of Today. A reminder that would come more than 15 minutes late (phone off, battery saving) is dropped.
- The morning summary comes every day at the summary time (05:00 unless you change it): how many tasks today, how many overdue and where to start. It is quiet, so it waits on the lock screen.
- Times are read in the time zone that decides “today”: the phone’s own on this phone only, the server’s when connected, so the phone and your agents agree.
- A reminder’s Done button completes the task, offline too.
Android 13 and newer ask for permission to show notifications when the first task with a time is added, or from Settings. For reminders on the minute, also allow exact alarms (off by default from Android 14); Settings → Notifications says which is missing and has a button for each. After a force stop, Android drops the alarms until you open Dayhand again.
Connect to your server
Settings → Server → Connect to my server (also on the first start, and from a dayhand://pair link):
- Server address: your server’s address, such as
https://<deployment>.convex.site. A link or QR code fills it in. A.convex.cloudaddress is turned into its.convex.siteone. - Pairing code from
dayhand pairon a computer signed in to that server. Case and dashes do not matter, andOis read as0,IandLas1. - Connect. Errors are said in words: a wrong, used or expired code, too many wrong codes (with the wait), no network, a server that cannot be reached or is not a Dayhand server.
Scanning the QR code that dayhand pair prints opens the form filled in. After connecting, every
change made on the phone is sent in order, the tasks made before included (sample tasks stay behind),
and the server’s plan comes down.
- Release builds of the app connect over HTTPS only. A server on your computer needs
tailscale servein front of it (Phone and computer). - A code for another server than the one whose plan is on the phone first asks Replace the plan on this phone?, with how many tasks and waiting changes would go. Cancel keeps everything.
- Disconnect (Settings → Server) forgets the sign-in on the phone and keeps the plan. The phone
cannot sign itself out on the server; the dialog names
dayhand revoke <deviceId>for that. - When the server revokes the phone, Today and Settings say so, and Connect asks for a new code. Tasks and waiting changes stay on the phone.
How the app signs in and stays signed in: Phone pairing.
Settings
- Appearance: theme (system, light or dark), a colour palette for each of dark and light, the font, and the language (the phone’s, or one of the eight). Changes apply at once.
- Notifications: whether notifications and exact alarms are allowed, the morning summary time and the default reminders (at the due time, 5, 10, 15 or 30 minutes, 1 or 2 hours or a day before, any number of them).
- Data: the backup file, removing sample tasks and, with a server, Export (the whole plan as Markdown or JSON with its history) and Calendar, the read-only address for Google or Apple Calendar (calendar feed): turn it on, copy it, add it to a calendar app, Create a new address or Turn off. The address is a secret; anyone who has it can read your dated tasks. Export .ics shares a one-time calendar file.
- Connection: Server (status, waiting changes, the server’s time zone with Use this phone’s time zone when they differ, Disconnect), Agent connections and Agents (below).
- About: the licences and the version.
The summary time and default reminders are server settings once connected, so your agents see them too.
Agents and connections
With a server, two pages under Settings → Connection keep you in charge of your agents:
- Agent connections lists the agents connected with OAuth, such as the Claude app, with where they come from, whether they may change tasks and when they were last used. Tap one to disconnect it. Approve a connection takes the code that an agent’s sign-in page shows, then shows who asks, where the answer goes and how long ago it asked, with a switch per permission. Approve only a sign-in page you opened yourself. The steps for the Claude app: Claude apps.
- Agents has Pause agents, one switch that refuses every change from every agent while they can still read; the approval requests waiting for you, each with what the agent wants to do and the options it offers; the proposals agents and integrations made, to accept, merge into a task or reject; and the tool policies of your agent keys (phone controls).
While the app is closed, the phone looks for new approval requests every 15 minutes and shows a notification for each. There is no push service in between, so a request can wait up to about 15 minutes, longer in battery saving, before the phone shows it. What these controls do and what they cannot do: Agents and you.
Backups
Android’s Auto Backup is off for Dayhand: the plan, the settings and the sign-in go neither to Google Drive nor to a new phone. On this phone only, a backup file is the only copy outside the phone.
Settings → Data → Backup saves the plan as a file in Dayhand’s JSON export format (Save a backup
file or Share a backup) and restores one (Restore from a file). The same file can be imported
into a server with dayhand import. Restoring adds the tasks from the file that the phone does not
have yet, so the same file restores once.
Privacy
The app asks for the network (to reach your server), notifications, exact alarms and starting after a reboot (to arm reminders again). It has no analytics, no crash reporting and no other outside services: the only address it talks to is your server. The sign-in to the server is encrypted with a key in the Android Keystore. More: Security and privacy.
This page is docs/android.md in the repository, where
you can suggest a change.