# horae
**Repository Path**: zhao-hang1205/hora
## Basic Information
- **Project Name**: horae
- **Description**: 个人任务管理软件,世界上最好的个人任务管理软件,最快写入!
- **Primary Language**: Rust
- **License**: GPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-28
- **Last Updated**: 2026-10-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# horae — GTD 终端任务管理器
---
## 目录
- [1. 核心设计哲学与心智模型](#1-核心设计哲学与心智模型)
- [2. 产品核心特性矩阵](#2-产品核心特性矩阵)
- [3. 安装与环境准备](#3-安装与环境准备)
- [4. 快速上手](#4-快速上手)
- [5. 一句话语法与时间引擎规范](#5-一句话语法与时间引擎规范)
- [6. CLI 命令行参考手册](#6-cli-命令行参考手册)
- [7. TUI 交互指南与快捷键参考](#7-tui-交互指南与快捷键参考)
- [8. 深度功能指南](#8-深度功能指南)
- [8.1 智能专注推荐算法 (`horae do`)](#81-智能专注推荐算法-horae-do)
- [8.2 专注番茄钟与状态栏集成](#82-专注番茄钟与状态栏集成)
- [8.3 金句与知识灵感库 (Quotes)](#83-金句与知识灵感库-quotes)
- [8.4 农历、节气与节假日预警 (`horae calendar`)](#84-农历节气与节假日预警-horae-calendar)
- [8.5 数据备份与灾难恢复](#85-数据备份与灾难恢复)
- [9. 移动端生态与外部协同](#9-移动端生态与外部协同)
- [9.1 方案一:Syncthing 零服务器文件桥接](#91-方案一syncthing-零服务器文件桥接)
- [9.2 方案二:ntfy 极轻量原生手机通知推送](#92-方案二ntfy-极轻量原生手机通知推送)
- [9.3 方案三:飞书 / Lark 企业级深度协同](#93-方案三飞书--lark-企业级深度协同)
- [10. 开发与参与贡献](#10-开发与参与贡献)
- [11. 作者与开源协议](#11-作者与开源协议)
---
## 1. 核心设计哲学与心智模型
`horae` 是一款纯 Rust 打造的现代化 GTD (Getting Things Done) 终端生产力工具,融合了 **SQLite 数据层 + CLI 命令行 + Ratatui 全屏 TUI** 三合一形态。
### 核心基石:时间数据化 (Time-Datafication)
传统的待办清单工具大多是将任务当作易失的、用完即勾销的便签。而在 `horae` 中,每一次任务状态变更、排期调整、打卡完成都会打上精准的 **UTC 毫秒时间戳**,并以只增方式追加到 `task_events` 事件流水表中:
* **数据不说谎**:通过 `horae show ` 可完整复盘该任务从「捕获入收件箱」→「澄清转下一步」→「多次延期排程」→「最终完成」的完整生命周期轨迹;
* **原子事务与审计缝**:所有变更均经由底层 `repo::mutate` 事务闭包,确保变更状态与审计流水共用唯一的 `now` 时间戳;
* **完全私有与数据自主权**:数据全部保存于本地单一 SQLite 文件(`~/.config/horae/horae.db`),零云端依赖、零第三方账号、零数据遥测。
### 状态机生命周期与删除模型
```text
┌───────────┐
│ Inbox │ (初始收集,未澄清)
└─────┬─────┘
│ 澄清 (Clarify)
┌────────────┼────────────┬─────────────┐
▼ ▼ ▼ ▼
┌────────┐ ┌───────────┐ ┌─────────┐ ┌─────────────┐
│ Next │ │ Scheduled │ │ Waiting │ │ Someday / │
│ (行动) │ │ (排程) │ │ (等待) │ │ Reference │
└───┬────┘ └─────┬─────┘ └────┬────┘ └──────┬──────┘
│ │ │ │
└────────────┴─────┬──────┴─────────────┘
▼
┌───────────┐
│ Done │ (完成 / 循环任务自动重排)
└───────────┘
│
┌─────────┴─────────┐
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Archive │ │ Purge │
│ (软删可恢复) │ │ (硬删不可逆) │
└─────────────┘ └─────────────┘
```
* **双层删除设计**:
* **归档 (Archive / 软删除)**:保留任务及其全部时间线履历,标记 `archived_at` 与归档原因。可通过 `restore` 随时无损恢复;
* **粉碎 (Purge / 硬删除)**:仅允许对已归档任务操作,物理执行 `DELETE` 彻底清除级联数据与历史,用于彻底脱敏。
---
## 2. 产品核心特性矩阵
| 核心特性 | 架构实现与技术细节 | 实际用户价值 |
| :--- | :--- | :--- |
| **全生命周期 GTD 方法论** | 严格实现 GTD 五步法闭环;内置分步周回顾向导 (`horae review`);独立严格的今日 / 明日视图与检查单子任务树 | 告别混乱松散的 Todo 堆积,建立科学高效的个人效能闭环体系 |
| **一句话极速捕获** | Quick-add 语法解析器:单行一并录入 `@情境`、`~排程时间`、`*循环规则`、`!优先级`;支持双模式(语法指南参考卡片 vs 极速盲打)即时补全 | 终端输入只需 2 秒,丝滑录入不打断编码与心流状态 |
| **自研原生 RRULE 循环** | 零外部依赖解析并展开 `DAILY/WEEKLY/MONTHLY/YEARLY` 全频率,支持 `*2w[1,3]`(隔周一三)、`*m[1,-1]`(月初月末)、`*y[jan,jul]` 等高级语义简写;完成自动重排推进锚点 | 周期习惯与重复工作永不失效,列表排序看下一次发生点,不产生冗余垃圾任务 |
| **双形态交互设计** | **CLI 脚本化命令**(支持管道与 JSON 结构化输出)+ **闪念录入模式**(`horae -f` 录入即关)+ **Ratatui 全屏三栏 TUI**(导航/列表/详情) | 满足不同场景:日常极速记录用 CLI/闪念,深度计划与每周复盘用 TUI |
| **动态专注决策算法** | `horae do`(`horae focus`):基于优先级(!high 赋 10000 绝对统治力)、逾期梯度惩罚、到期临近度与行动状态进行多维动态打分,决胜回退 FIFO | 终结选择困难症,在任务堆积如山时直接告知“当下唯一应该做的事” |
| **深度集成番茄钟** | 原生内建 Pomodoro 计时引擎;全屏倒计时环、每日连击打卡统计、自定义周期配方(`工作;短休;长休[;长休周期]`,如 `25;5;15;4`);与 Waybar 状态栏深度联动 | 任务管理与深度工作时间分块融为一体,无需在多个计时器软件间反复横跳 |
| **零服务器手机生态** | **Syncthing 文件夹桥接**(手机笔记 App 写 `capture.txt`,电脑常驻回写 `today.md` 与到期提醒)+ **ntfy 原生轻量推送** + **飞书企业应用**(免公网 IP WebSocket 随手记与 Tasks v2 同步) | 零云端中继成本、零第三方 App 绑定,手机与桌面端实现纯本地数据闭环 |
| **天文历法与美学** | 纯内置 1900-2100 农历引擎与二十四节气天体历表(`horae calendar`),重大传统节假日提前 3 天与 1 天智能预警;Catppuccin 双色主题;Nerd Font 矢量图标与 ASCII 优雅降级 | 工具兼具极客生产力美学与中国传统节气文化关怀 |
---
## 3. 安装与环境准备
### 方式一:npm 安装(推荐,无需 Rust 工具链)
适合任意安装了 Node.js 的开发环境,自动下载分发适用于当前 OS/架构的预编译二进制:
```sh
# 免安装瞬时体验
npx horae-cli
# 全局安装(安装后直接使用 horae 命令)
npm install -g horae-cli
```
### 方式二:Cargo 安装(Rust 官方渠道)
系统需具备 Rust 1.89+ 环境,SQLite 已内嵌捆绑,无额外 C 依赖:
```sh
# 从 crates.io 安装最新稳定版
cargo install horae
# 从 GitHub main 分支安装最新开发版
cargo install --git https://github.com/zhaohang1205/horae
# 中国大陆用户可通过 Gitee 镜像加速安装:
cargo install --git https://gitee.com/zhao-hang1205/hora.git
```
### 方式三:从源码本地构建
```sh
git clone https://github.com/zhaohang1205/horae.git
cd horae
cargo build --release
# 生成的可执行文件位于 target/release/horae
```
### 环境与平台适配建议
* **终端字体 (Nerd Font)**:TUI 图标默认采用 Nerd Font 符号字形。若终端未安装对应字体,启动时会自动探测(`fc-list`)并**优雅回退为纯 ASCII 单字符**,绝不会出现界面“豆腐块”乱码。推荐使用 [Nerd Fonts](https://www.nerdfonts.com/)(如 JetBrainsMono Nerd Font)。可通过环境变量 `HORAE_ICONS=nerd|ascii` 强制指定。
* **Windows 用户说明**:
* 数据默认存储于 `%APPDATA%\horae\`;可用 `HORAE_CONFIG_DIR` 环境变量自定义;
* Linux 桌面通知依赖 `notify-send`,Windows 上系统级横幅弹窗不触发,但番茄钟计时、TUI 内部提醒及 ntfy 手机推送均正常工作。
* **数据目录**:默认存放于 `~/.config/horae/`(包含 `horae.db` 数据库、`config.json` 配置与 `pomo.json` 番茄钟运行时)。
---
## 4. 快速上手
```sh
# 1. 快速录入任务(quick-add 语法)
horae capture "买牛奶 @home ~今天 18:00 !medium"
# 2. 列出下一步行动
horae list --status next
# 3. 推荐当前最该做的一件事并启动番茄钟
horae do --start
# 4. 完成任务(支持完整 ID、唯一 ID 前缀、或精确标题)
horae done "买牛奶"
# 5. 查看任务生命周期完整时间线
horae show
# 6. 启动全屏交互式 TUI
horae
```
> **任务引用机制**:命令参数接受**完整 ID**、**唯一 ID 前缀**(类似 Git commit hash 体验)或**唯一精确标题**。标题存在歧义时系统会明确报错以防误操作。
---
## 5. 一句话语法与时间引擎规范
`horae` 内置强大的单行 quick-add 语法解析器,在命令行 `capture`、修改 `modify`、TUI 快速录入 (`a` / `Enter`)、手机同步文件以及飞书随手记中均统一生效。
```text
买牛奶 @home ~今天 18:00 *2w[1,3] !high
──┬── ──┬── ─────┬───── ───┬──── ──┬──
│ │ │ │ └─ 优先级 (!high / !medium / !low)
│ │ │ └───────── 循环规则 (*d, *w, *2w[1,3], *m[1,-1] 等)
│ │ └─────────────────── 排程开始时间 (~today, ~+2h, ~2026-07-24 等)
│ └──────────────────────────── 情境标签 (@home, @work, @calls 等)
└────────────────────────────────── 任务标题
```
### 1. 时间表达式规范 (`~time` 或 `--due`)
* **排程起点 (`~time`)**:设置任务计划开始执行的时间 (`scheduled_start_at`),任务自动归入 `Scheduled` (已排程) 状态;
* **截止时间 (`--due`)**:设置任务的软性到期死线 (`due_at`)。
| 语法类型 | 示例 | 解析语义 |
| :--- | :--- | :--- |
| **相对偏移** | `now`, `+15m`, `+30m`, `+1h`, `+2h`, `+4h`, `+1d`, `+3d`, `+1w` | 从当前时刻向后偏移指定分/时/天/周 |
| **相对天数 + 指定时刻** | `+3d 15:30`, `+1w 09:00` | 偏移天数并定位到当日指定时刻 |
| **天词短语** | `today`, `tomorrow`, `今天`, `明天`, `后天 [HH:MM]` | 定位至指定日期(支持拼音缩写 `~td` / `~tm` 快速补全) |
| **星期词短语** | `周一`~`周日`, `下周五`, `mon`~`sun`, `next fri [HH:MM]` | 定位到最近或下周的对应星期几 |
| **当日时刻顺延** | `09:00`, `18:00`, `HH:MM` | 当日时刻;若当前已过该时刻,则智能顺延至明日 |
| **日期时间组合** | `8/20 15:30`, `2026.8.20`, `2026-07-24 14:30` | 绝对公历日期与时刻 |
### 2. 循环规则 (RRULE) 与快捷简写 (`*rrule`)
`horae` 拥有自主研发的原生 RRULE 引擎(零外部库依赖),完全支持 RFC 5545 核心频率 `DAILY`, `WEEKLY`, `MONTHLY`, `YEARLY`,并提供极简输入简写:
| 简写语法 | 对应 RRULE 表达式 | 语义说明 |
| :--- | :--- | :--- |
| `*d` / `*w` / `*m` / `*y` | `FREQ=DAILY`, `WEEKLY`, `MONTHLY`, `YEARLY` | 每天 / 每周 / 每月 / 每年 |
| `*weekday` / `*weekend` | `FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR` / `SA,SU` | 仅工作日 / 仅周末 |
| `*2w[1,3]` | `FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE` | 每两周的周一和周三(1-7 代表周一至周日) |
| `*m[1,-1]` | `FREQ=MONTHLY;BYMONTHDAY=1,-1` | 每月 1 号和最后一天(负数代表月末倒数) |
| `*m[1,15]` | `FREQ=MONTHLY;BYMONTHDAY=1,15` | 每月 1 号和 15 号 |
| `*y[jan,jul]` | `FREQ=YEARLY;BYMONTH=1,7` | 每年 1 月和 7 月(支持英文简写或数字) |
| `*2y[6]` | `FREQ=YEARLY;INTERVAL=2;BYMONTH=6` | 每两年的 6 月 |
> **循环重排机制**:循环任务在打勾完成 (`done`) 时**绝不会消失**,而是推进锚点,自动计算并重排至下一次有效发生点;列表排序与到期计算均看**下一次有效发生时间**。
### 3. 优先级标记 (`!priority`)
* 支持简写:`!high` / `!h` / `!1` / `!高`(设置高优先级);
* 支持中等:`!medium` / `!m` / `!2` / `!中`;
* 支持低优:`!low` / `!l` / `!3` / `!低`。
---
## 6. CLI 命令行参考手册
`horae` 命令行工具设计精简而强大,提供高频单字母别名,并支持 `--json` 输出以便脚本集成。
### 常用命令总览
| 命令 / Command | 别名 | 功能说明 | 关键选项与示例 |
| :--- | :---: | :--- | :--- |
| `horae` / `horae --normal` | `-n` | 启动 TUI 正常主视图模式 | `horae -n` |
| `horae flash` / `horae -f` | `f` | **闪念输入模式**:秒开即录,回车确认即退出 | `horae -f` / `horae flash` |
| `horae capture [text]` | `c` | 捕获新任务入收件箱(支持 quick-add) | `--clip`(剪贴板录入), `--high`, `--due