horae โ GTD Terminal Task Manager
๐ฌ๐ง English ย โขย ๐จ๐ณ ็ฎไฝไธญๆ ย โขย ๐ Documentation Home
Rust Single Binary ยท Embedded SQLite ยท CLI 2-Second Capture ยท Immersive Ratatui TUI ยท Zero-Cloud Privacy
Table of Contents
- 1. Core Philosophy & Mental Model
- 2. Core Architecture & Features Matrix
- 3. Installation & Prerequisites
- 4. Quick Start
- 5. Quick-Add Syntax & Recurrence Engine Specification
- 6. CLI Command Reference
- 7. TUI User Guide & Keybindings
- 8. In-Depth Features & Advanced Workflows
- 9. Mobile Ecosystem & Integrations
- 10. Development & Contributing
- 11. Author & License
1. Core Philosophy & Mental Model
horae is a modern GTD (Getting Things Done) terminal productivity tool written in pure Rust, integrating a SQLite data layer + CLI commands + Ratatui full-screen TUI into a single standalone binary.
Core Foundation: Time-Datafication
Unlike conventional to-do list managers that treat tasks as ephemeral scratch notes, horae is architected on Time-Datafication:
- Data Never Lies: Every status change, schedule modification, and habit check-in is stamped with an immutable UTC millisecond timestamp and appended to an append-only
task_eventstimeline. Runninghorae show <id>reveals the complete lifecycle trail from inbox capture to clarification, rescheduling, and eventual completion. - Atomic Mutation & Audit Seam: All mutations go through
repo::mutate, ensuring that domain updates and audit event logging strictly share a single atomic transaction and an identicalnowtimestamp. - 100% Local & Privacy-First: Data lives exclusively inside a single local SQLite database (
~/.config/horae/horae.db). Zero telemetry, zero external cloud servers, and zero account logins.
Lifecycle State Machine & Deletion Model
โโโโโโโโโโโโโ
โ Inbox โ (Raw capture, unclarified)
โโโโโโโฌโโโโโโ
โ Clarify
โโโโโโโโโโโโโโผโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โผ โผ โผ โผ
โโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ Next โ โ Scheduled โ โ Waiting โ โ Someday / โ
โ Action โ โ โ โ For โ โ Reference โ
โโโโโฌโโโโโ โโโโโโโฌโโโโโโ โโโโโโฌโโโโโ โโโโโโโโฌโโโโโโโ
โ โ โ โ
โโโโโโโโโโโโโโดโโโโโโฌโโโโโโโดโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโ
โ Done โ (Completed / Habits auto-reschedule)
โโโโโโโโโโโโโ
โ
โโโโโโโโโโโดโโโโโโโโโโ
โผ โผ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ Archive โ โ Purge โ
โ(Soft-delete)โ โ(Hard-delete)โ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
- Two-Tier Deletion Architecture:
- Archive (Soft-Delete): Keeps the task and its full historical timeline, marking
archived_atand an archive reason. Restorable at any time withhorae restore; - Purge (Hard-Delete): Operates only on archived tasks. Physically executes
DELETEwith cascading cleanup of events and checklist items. Irreversible.
- Archive (Soft-Delete): Keeps the task and its full historical timeline, marking
2. Core Architecture & Features Matrix
| Pillar | Architecture & Implementation | Real-World User Value |
|---|---|---|
| Comprehensive GTD Methodology | Faithful implementation of David Allen's GTD 5-step method; step-by-step weekly review wizard (horae review); strictly defined Today and Tomorrow perspectives; hierarchical checklist subtasks |
Eliminates unstructured list sprawl and builds an actionable, reliable productivity closure system |
| Instant Quick-Add Syntax | Single-line natural parser: captures @context, ~schedule_time, *recurrence_rrule, and !priority in one stroke; instant inline autocompletion with dual modes (Syntax Reference Card vs Speed Blind-typing) |
Captures tasks in 2 seconds without breaking programming flow or creative thought |
| Native RRULE Recurrence Engine | Zero-dependency RFC 5545 engine supporting DAILY, WEEKLY, MONTHLY, and YEARLY frequencies; supports shorthands like *2w[1,3] (bi-weekly Mon/Wed), *m[1,-1] (1st and last day of month), *y[jan,jul]; auto-advances schedule anchor upon completion |
Recurring tasks and habits never expire or vanish; sort order evaluates the next effective occurrence |
| Dual-Form Interaction Model | CLI Tooling (supports pipes and structured --json output) + Flash Capture Mode (horae -f, launches to capture and immediately exits) + Ratatui 3-Pane TUI (navigation, tasks, detail/timeline) |
Pick the right interface for the moment: instantaneous capture from CLI, immersive planning and review in TUI |
| Dynamic Focus Decision Engine | horae do (horae focus): Multi-variable mathematical scoring combining priority (!high 10,000 pts dominance), overdue penalties, deadline proximity, and status weights, with FIFO tie-breaking |
Ends decision paralysis; tells you the single most important task right now when overwhelmed |
| Integrated Pomodoro System | Built-in Pomodoro runtime; full-screen progress ring, streak tracker, customizable cycles (work;short;long[;long_interval], e.g. 25;5;15;4), desktop notifications, and Waybar status bar module |
Seamlessly bridges task organization with deep time-boxing; no external timer apps needed |
| Zero-Server Mobile Ecosystem | Syncthing Folder Bridge (phone writes capture.txt, desktop generates today.md and reminder notes) + ntfy Native Push Notifications + Feishu / Lark Integration (WebSocket captures without public IP, interactive cards, Tasks v2 sync) |
Zero server hosting fees, zero vendor lock-in; achieve true private cross-device sync |
| Cultural Calendar & Aesthetics | Pure in-tree 1900-2100 astronomical lunar calendar and 24 solar terms lookup table (horae calendar); 3-day and 1-day advance holiday warnings; Catppuccin themes; Nerd Font icons with ASCII fallback |
Crafted with geek terminal aesthetics and thoughtful astronomical holiday awareness |
3. Installation & Prerequisites
Option 1: npm (Recommended, No Rust Toolchain Required)
Ideal for any environment with Node.js installed; automatically fetches the precompiled binary for your OS and architecture:
# Try instantly without permanent installation
# Or install globally to provide the `horae` command
Option 2: Cargo (Official Rust Crates.io)
Requires Rust 1.89+; bundled SQLite requires no external C dependencies:
# Install latest release from crates.io
# Or install latest git main branch
Option 3: Build from Source
# Binary will be located at target/release/horae
Environment Recommendations
- Terminal Font (Nerd Font): UI icons default to Nerd Font glyphs. On startup,
horaeprobesfc-list. If no Nerd font is found, it gracefully falls back to pure ASCII single characters, avoiding "tofu" boxes. You can force the style viaHORAE_ICONS=nerd|asciior toggle it inside TUI (F7). - Windows Users:
- Data lives in
%APPDATA%\horae\; customizable withHORAE_CONFIG_DIR; - Linux
notify-senddesktop pop-ups are unavailable on Windows, but in-TUI alarms, pomodoro timers, and ntfy mobile notifications function normally.
- Data lives in
- Data Directory: Defaults to
~/.config/horae/(containshorae.db,config.json, andpomo.json).
4. Quick Start
# 1. Quick capture a task with natural syntax
# 2. List next actions
# 3. Focus on the top recommendation and launch a pomodoro
# 4. Mark task as done (supports full ID, unique prefix, or exact title)
# 5. Inspect the immutable audit timeline
# 6. Launch the full-screen interactive TUI
Task Reference Semantics: Subcommands accept a full ID, a unique ID prefix (Git commit hash semantics), or a unique exact title. If a title is ambiguous, the command safely returns an error.
5. Quick-Add Syntax & Recurrence Engine Specification
horae features a unified single-line quick-add parser that works identically across CLI capture, modify, TUI quick capture (a / Enter), mobile sync files, and Feishu chat messages.
buy milk @home ~today 18:00 *2w[1,3] !high
โโโโฌโโโโ โโโฌโโ โโโโโโฌโโโโโโ โโโโฌโโโโ โโโฌโโ
โ โ โ โ โโ Priority (!high / !medium / !low)
โ โ โ โโโโโโโโโโ Recurrence rule (*d, *w, *2w[1,3], *m[1,-1])
โ โ โโโโโโโโโโโโโโโโโโโโโ Scheduled start (~today, ~+2h, ~2026-07-24)
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Context tag (@home, @work, @calls)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task title
1. Time Expression Specification (~time or --due)
- Schedule Start (
~time): Sets the planned start execution time (scheduled_start_at); the task automatically transitions intoScheduledstatus; - Deadline (
--due): Sets a soft deadline target (due_at).
| Type | Examples | Resolution Semantics |
|---|---|---|
| Relative Offset | now, +15m, +30m, +1h, +2h, +4h, +1d, +3d, +1w |
Offset from current moment |
| Offset + Clock | +3d 15:30, +1w 09:00 |
Offset by days and anchor to specific clock time |
| Day Words | today, tomorrow, ไปๅคฉ, ๆๅคฉ, ๅๅคฉ [HH:MM] |
Anchor to date (supports ~td / ~tm autocomplete) |
| Weekday Words | monsun, next fri, ๅจไธๅจๆฅ |
Anchor to nearest or next week's weekday |
| Same-Day Clock Roll | 09:00, 18:00, HH:MM |
Today's clock time; if past, automatically rolls forward to tomorrow |
| Absolute Dates | 8/20 15:30, 2026.8.20, 2026-07-24 14:30 |
Absolute calendar date and time |
2. Recurrence Rules (RRULE) & Shorthands (*rrule)
The custom in-tree recurrence engine supports RFC 5545 frequencies DAILY, WEEKLY, MONTHLY, and YEARLY with expressive shorthands:
| Shorthand | Evaluated RRULE | Semantics |
|---|---|---|
*d / *w / *m / *y |
FREQ=DAILY, WEEKLY, MONTHLY, YEARLY |
Daily / Weekly / Monthly / Yearly |
*weekday / *weekend |
FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR / SA,SU |
Workdays only / Weekends only |
*2w[1,3] |
FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE |
Every 2 weeks on Monday and Wednesday (1-7 = Mon-Sun) |
*m[1,-1] |
FREQ=MONTHLY;BYMONTHDAY=1,-1 |
The 1st and last day of each month (-1 = last day) |
*m[1,15] |
FREQ=MONTHLY;BYMONTHDAY=1,15 |
The 1st and 15th of each month |
*y[jan,jul] |
FREQ=YEARLY;BYMONTH=1,7 |
Yearly in January and July |
*2y[6] |
FREQ=YEARLY;INTERVAL=2;BYMONTH=6 |
Every 2 years in June |
Reschedule Invariant: When a recurring task is completed (
done), it is never completed permanently. Instead, it records a check-in event, advances its anchor, and reschedules to the next valid occurrence slot.
3. Priority Shorthands (!priority)
- High priority:
!high/!h/!1/!้ซ; - Medium priority:
!medium/!m/!2/!ไธญ; - Low priority:
!low/!l/!3/!ไฝ.
6. CLI Command Reference
Command Matrix
| Command | Alias | Description | Key Flags & Examples |
|---|---|---|---|
horae / horae --normal |
-n |
Launch TUI in normal main view mode | horae -n |
horae flash / horae -f |
f |
Flash Capture Mode: instant launch, save on Enter, exit | horae -f / horae flash |
horae capture [text] |
c |
Capture into inbox (supports quick-add) | --clip, --high, --due <time>, --tag <t> |
horae list |
l |
Query and filter active tasks | --status next, --tag work, --date 0829, --json |
horae show <id> |
s |
View task details and full audit timeline | horae show a1b2 --json |
horae modify <id> [text] |
m/mod/edit |
Update task (quick-add syntax or flags) | --due tomorrow, --clear-due, --tag, --untag |
horae next|wait|someday|done <id> |
d=done |
Move task lifecycle status | horae d "buy milk" / horae wait <id> |
horae schedule <id> |
โ | Set schedule window and recurrence rules | --start tomorrow, --end +1d 18:00, --rrule |
horae archive <id> |
rm/delete |
Soft-delete a task (movable to Archive) | horae archive <id> |
horae restore <id> |
โ | Restore an archived task | horae restore <id> |
horae purge <id> |
โ | Permanently hard-delete an archived task | horae purge <id> |
horae focus / horae do |
do |
Recommendation engine: output top task now | --start (immediately starts pomodoro timer) |
horae log [message] |
โ | Append a pure timestamped note without task | horae log "deployed v1.0" / horae log (list 50) |
horae stats |
โ | MOTD terminal dashboard (Catppuccin Goddess of Time) | horae stats |
horae calendar [date] |
cal |
Lunar calendar, solar terms, holiday warnings | --short (one-line summary), --json |
horae pomo <action> |
p |
Pomodoro timer controller | start <id>, stop, daemon, waybar |
horae alarm <action> |
โ | Upcoming-task alarm query & status bar module | waybar [slot], next [slot] --limit 3 |
horae export |
โ | Export self-contained single backup JSON | --file ~/backup.json |
horae import <file> |
โ | Import backup (merge by default, --replace wipes) |
horae import --replace backup.json |
horae review |
โ | Interactive GTD weekly review helper | horae review |
horae tags |
โ | List all system context tags | horae tags |
horae tag / untag |
โ | Attach or detach tags | horae tag <id> work |
horae profile <action> |
โ | Multi-dataset profile manager | list, new work, rename, rm, set-default |
horae watch |
โ | Launch phone sync daemon | --dir <path>, --interval 5, --once |
horae ntfy <action> |
โ | Test and manage mobile native notifications | horae ntfy test |
horae feishu <action> |
โ | Feishu / Lark integration manager | doctor, test, due, summary, listen, sync |
horae completions <shell> |
โ | Generate shell autocompletion script | horae completions bash > ... |
Bilingual Help Support: CLI
--helpis English by default. Pass--lang zhor setHORAE_LANG=zhfor Chinese output.
7. TUI User Guide & Keybindings
Launching horae opens the full-screen Ratatui interface with a responsive 3-pane layout:
- Left Pane (Navigation): Views list, status bucket counters, context tags, and system modules;
- Center Pane (Task List): Active tasks in current view, priority indicators, deadlines, and badges;
- Right Pane (Details & Timeline): Selected task metadata, checklist tree, notes, and the immutable event stream.
Categorized Keybinding Reference
| Category | Key | Action |
|---|---|---|
| Global & Navigation | h / l |
Switch focus between sidebar navigation, task list, and details pane |
j / k or โ / โ |
Move selection up and down; g / G jump to top/bottom |
|
0 - 9 |
Switch view: 1 Inbox ยท 2 Next Action ยท 3 Scheduled ยท 4 Waiting ยท 5 Someday ยท 6 Reference ยท 7 Done ยท 8 Archive ยท 9 Tags ยท 0 Quotes |
|
โงJ / โงK |
Jump directly to Today / Tomorrow perspective views | |
/ / f |
/ triggers global text search; f opens tag filter popup |
|
q / Ctrl+c |
Quit TUI | |
| Capture & Editing | a |
Quick capture from any view (focuses input with quick-add parser) |
Enter / e |
Full edit: single line to update title, tags, schedule, and priority | |
n |
Open external editor ($EDITOR, e.g. nvim/vim/nano) for multi-line notes |
|
C |
Append a new checklist item to selected task | |
Tab |
Manage checklist items (j/k move, Space toggle, d delete, J/K reorder, e rename; Tab/Esc exit) |
|
= |
Check off the next uncompleted checklist item | |
| Lifecycle Actions | x |
Mark task as Done (recurring tasks auto-advance to next occurrence) |
w |
Move task to Waiting-for status | |
s |
Move task to Someday/Maybe status | |
" |
Toggle in/out of Quotes (action tasks auto-transition to Reference) | |
A / D |
Soft-delete to Archive (y/n confirmation) / D in Archive permanently purges |
|
u |
Restore archived task | |
| Visual Batch Mode | v |
Enter / exit Visual Multi-Select Mode |
Space |
Toggle select current row (supports discrete multi-selection) | |
Ctrl+a / Ctrl+u |
Select all / invert selection | |
T |
Bulk apply tags to all selected tasks | |
A / u |
Bulk archive or bulk restore selected tasks | |
| Focus & Review | P / S |
Start / stop Pomodoro timer on selected task |
[ |
Configure Pomodoro intervals (work;short;long[;long_interval], e.g. 25;5;15;4) |
|
r / R |
Weekly review wizard (r to start, R for next step) |
|
| Preferences & System | F5 / F6 |
Toggle Catppuccin theme (Mocha dark / Latte light) and language (EN / ZH) |
F7 |
Module visibility & features popup (11 persistent toggles) | |
M |
Settings view (manage profiles: new/rename/delete/set default) | |
F1 or ? |
Context-sensitive shortcut help popup |
Today & Tomorrow Perspective Contract
- Today Perspective (
โงJ): Strict union of tasks with scheduled start inside today's local window plus all overdue tasks. Recurring tasks without an occurrence today display their most recent missed occurrence marked overdue. - Tomorrow Perspective (
โงK): Strictly limited to tasks scheduled inside tomorrow's window. Unfinished tasks from today and older overdue tasks never carry over into tomorrow's view, preventing cognitive clutter. - Status Boundary: Both views filter strictly for
NextandScheduledstatuses. Inbox, Waiting, Someday, and Reference tasks stay in their own views.
8. In-Depth Features & Advanced Workflows
8.1 Focus Recommendation Engine (horae do)
When decision fatigue strikes, horae do (or horae focus) evaluates all active tasks against a weighted scoring algorithm:
$$\text{Total Score} = \text{Score}{\text{priority}} + \text{Score}{\text{due}} + \text{Score}_{\text{status}}$$
- 1. Filtering: Excludes
Someday,Reference,Done,@quoteitems, and non-overdueScheduledorWaitingtasks whose start time has not arrived. - 2. Priority Scoring ($\text{Score}_{\text{priority}}$):
!high: +10,000 points (absolute dominance);!medium: +5,000 points;!low: +1,000 points.
- 3. Deadline Proximity ($\text{Score}_{\text{due}}$):
- Overdue: +2,000 points base + 10 points per day overdue (capped at +500 points);
- Due Today: +1,000 points.
- 4. Status Weight ($\text{Score}_{\text{status}}$):
- In
Nextstatus: +500 points (promotes clarified actions over raw inbox items).
- In
- 5. Tie-Breaker:
- First-In, First-Out (FIFO) on
created_atensures neglected older items eventually surface.
- First-In, First-Out (FIFO) on
- Immediate Action: Run
horae do --startto output the recommendation and immediately spawn a pomodoro session.
8.2 Pomodoro Timer & Waybar Integration
horae pomo runs a lightweight daemon writing state to ~/.config/horae/pomo.json and sending desktop notifications:
# Start 25-minute focus session for a task
# Stop active session
# Emit JSON for Waybar modules
8.3 Quotes Knowledge Base (Opt-in)
Quotes is an opt-in feature (toggle via F7 in TUI). Designed for memorable quotes, inspirations, and reference fragments:
- Quotes are tasks tagged
@quotewith statusreference; - They are strictly isolated in the
[Library] 0 Quotesview and filtered out of action flows; - Capture with
@quotefrom anywhere (e.g.horae capture "Knowledge is power" --tag quote --status reference) automatically routes to Quotes.
8.4 Astronomical Lunar Calendar & Holiday Warnings (horae calendar)
Features a built-in zero-dependency 1900-2100 lunar calendar and 24 solar terms engine:
# View today's solar term, lunar date, and holiday countdown
# Single-line compact output for MOTD
# Output structured JSON
Major holidays trigger advance alerts 3 days and 1 day ahead in top banners and background desktop notifications.
8.5 Data Backup & Disaster Recovery
The backup file is a self-contained JSON file with schema versioning, capturing all tasks, task_events timelines, tags, settings, and pomodoro state:
# Export full backup
# Merge import (skips existing task IDs)
# True disaster restore (wipes database and restores exactly)
9. Mobile Ecosystem & Integrations
horae provides three flexible mobile sync solutions balancing privacy with convenience:
9.1 Solution 1: Zero-Server Syncthing Folder Bridge
Sync ~/.config/horae/sync to your phone via Syncthing and run horae watch on your computer:
Folder Protocol:
capture.txt(phone writes): One quick-add line per task; horae ingests and writes receipt;actions.txt(phone writes): State transitions likedone <id>orset <id> status next;today.md(computer generates): Snapshot of active tasks and overdue items;reminders/(computer generates): Markdown files dropped when tasks come due, triggering mobile sync notifications.
9.2 Solution 2: Lightweight Native Push Notifications via ntfy
If you only need "phone notifications when tasks come due", use the open-standard ntfy:
- Install ntfy on your phone and subscribe to a private random topic (e.g.
horae-my-random-topic); - Add the
ntfyblock to your profile in~/.config/horae/config.json:๐ Security Notice: Access tokens are read via environment variables (
token_env) and never stored on disk. - Test connectivity:
- Run
horae watch; timed tasks will automatically trigger mobile push notifications 10 minutes prior to due time.
9.3 Solution 3: Feishu / Lark Enterprise Integration
Deep bidirectional integration with Feishu (Lark):
- Capture Everywhere: Send natural quick-add lines directly to your bot in private chat;
- Interactive Cards: Bot replies with interactive cards; tap
[โ Done]or[๐ Postpone 1 Day]directly on mobile; - Native Sync: Bidirectional sync with official Feishu Tasks v2.
# Verify credentials and WebSocket gateway
# Send test notification card
# Synchronize with Feishu Tasks v2
10. Development & Contributing
# Run full unit and integration test suite
# Lint code (zero warnings policy)
# Verify formatting
Contributors must consult the authoritative guides before opening PRs:
- ๐ฌ๐ง AGENTS.md (Contributor Rules & Architecture)
- ๐จ๐ณ System Architecture Handoff (docs/architecture-handoff.md)
11. Author & License
horae is designed and maintained by an independent developer. Contributions and feedback are warmly welcomed:
- GitHub Repository: https://github.com/zhaohang1205/horae
- Gitee Mirror: https://gitee.com/zhao-hang1205/hora.git
- WeChat:
hang_ace(Name:zhaoh) - Email: 18658233987@163.com
License
Released under the GPL-3.0 License. See LICENSE for details.