neomano-todo
An improved personal TODO system that uses SQLite as the backend (not text files).
Why SQLite:
- - Structured fields (priority/status/dates/tags)
- Fast filtering and sorting
- Durable local storage with zero external dependencies
Features
- - SQLite persistence (local file)
- Priorities 1–3
- 1 = high, 2 = medium, 3 = low
- - Tags (many-to-many)
- Dates
-
due_at (when it should be done)
-
remind_at (when to notify)
-
open,
done,
blocked,
expired,
forgotten
- - Reminder metadata for OpenClaw cron
- Store
remind_at +
cron_job_id so reminders can be created/updated/cancelled by the agent
- Detect “stale candidates” based on
last_touched_at and priority thresholds
Configuration (environment variables)
Recommended: set in ~/.openclaw/.env on the gateway machine.
Storage
- Path to the SQLite DB file.
- Default used by the helper script: INLINECODE12
Reminder delivery defaults
Used by the agent when scheduling a reminder (cron delivery).
- Example:
whatsapp,
telegram, etc.
- Example:
+593987233203 for WhatsApp.
- Example: INLINECODE19
Data model (SQLite)
The helper script auto-creates tables on first run.
Main fields stored per task:
- -
title, INLINECODE21 - INLINECODE22 (1–3)
- INLINECODE23 (
open|done|blocked|expired|forgotten) - INLINECODE25 ,
updated_at, last_touched_at, INLINECODE28 - INLINECODE29 , INLINECODE30
- INLINECODE31 (optional, set after creating a cron job)
- tags via
tags + INLINECODE33
Helper script
Use the bundled deterministic helper script:
It outputs JSON to make it easy for an agent to parse.
Commands
Add a task:
CODEBLOCK0
Get a task:
CODEBLOCK1
List tasks:
CODEBLOCK2
Complete / reopen:
CODEBLOCK3
Change status (blocked/expired/forgotten/etc):
CODEBLOCK4
Change priority:
CODEBLOCK5
Update tags:
CODEBLOCK6
Update due/reminder timestamps:
CODEBLOCK7
Store cron job id (after scheduling a reminder with OpenClaw cron):
CODEBLOCK8
Delete:
CODEBLOCK9
Reminder scheduling (OpenClaw cron)
The script stores reminder timestamps; the agent is responsible for scheduling.
Workflow:
1) If remind_at is set and status is open, create/update a cron job scheduled at remind_at.
2) After creating the cron job, store its id in the task using set-cron-job.
3) When the task becomes terminal (done, expired, forgotten), cancel the cron job (if any).
Backlog control: stale candidates
Policy:
- - P3 not touched for 30 days → review candidate
- P2 not touched for 45 days → review candidate
- P1 is never auto-forgotten
List stale candidates:
CODEBLOCK10
Response style
- - Keep replies short.
- For WhatsApp: use bullets (no tables).
- When confirming changes: include task id, title, priority, and status.
neomano-todo
一个改进的个人待办事项系统,使用 SQLite 作为后端(而非文本文件)。
为什么选择 SQLite:
- - 结构化字段(优先级/状态/日期/标签)
- 快速筛选与排序
- 零外部依赖的持久化本地存储
功能特性
- - SQLite 持久化(本地文件)
- 优先级 1–3
- 1 = 高,2 = 中,3 = 低
- due_at(截止时间)
- remind_at(提醒时间)
- open(待办)、done(已完成)、blocked(受阻)、expired(过期)、forgotten(遗忘)
- 存储 remind
at + cronjob_id,以便代理创建/更新/取消提醒
- 基于 last
touchedat 和优先级阈值检测“陈旧候选任务”
配置(环境变量)
建议:在网关机器的 ~/.openclaw/.env 中设置。
存储
- SQLite 数据库文件路径。
- 辅助脚本默认值:~/.openclaw/workspace/data/neomano-todo.sqlite3
提醒投递默认值
代理在安排提醒(cron 投递)时使用。
- - NEOMANOTODODEFAULT_CHANNEL
- 示例:whatsapp、telegram 等。
- - NEOMANOTODODEFAULT_TARGET
- 示例:WhatsApp 的 +593987233203。
- 示例:America/Guayaquil
数据模型(SQLite)
辅助脚本在首次运行时自动创建表。
每个任务存储的主要字段:
- - title(标题)、notes(备注)
- priority(优先级,1–3)
- status(状态:open|done|blocked|expired|forgotten)
- createdat(创建时间)、updatedat(更新时间)、lasttouchedat(最后操作时间)、completedat(完成时间)
- dueat(截止时间)、remindat(提醒时间)
- cronjobid(可选,创建 cron 任务后设置)
- 通过 tags + tasktags 实现标签
辅助脚本
使用配套的确定性辅助脚本:
- - skills/neomano-todo/scripts/todo.py
输出 JSON 格式,便于代理解析。
命令
添加任务:
bash
python3 skills/neomano-todo/scripts/todo.py add 安装 Starlink 天线 --priority 2 --tags starlink,truck --notes 本周末
获取任务:
bash
python3 skills/neomano-todo/scripts/todo.py get 12
列出任务:
bash
python3 skills/neomano-todo/scripts/todo.py list --status open --order priority
python3 skills/neomano-todo/scripts/todo.py list --status open --order due
python3 skills/neomano-todo/scripts/todo.py list --tag sales --order priority
完成/重新打开:
bash
python3 skills/neomano-todo/scripts/todo.py done 12
python3 skills/neomano-todo/scripts/todo.py reopen 12
更改状态(blocked/expired/forgotten 等):
bash
python3 skills/neomano-todo/scripts/todo.py set-status 12 blocked
python3 skills/neomano-todo/scripts/todo.py set-status 12 forgotten
更改优先级:
bash
python3 skills/neomano-todo/scripts/todo.py set-priority 12 1
更新标签:
bash
python3 skills/neomano-todo/scripts/todo.py set-tags 12 sales,followup
更新截止/提醒时间戳:
bash
python3 skills/neomano-todo/scripts/todo.py set-dates 12 --due-at 2026-03-29T09:00:00-05:00 --remind-at 2026-03-29T08:30:00-05:00
存储 cron 任务 ID(使用 OpenClaw cron 安排提醒后):
bash
python3 skills/neomano-todo/scripts/todo.py set-cron-job 12 jobid>
删除:
bash
python3 skills/neomano-todo/scripts/todo.py delete 12
提醒安排(OpenClaw cron)
脚本存储提醒时间戳;代理负责安排提醒。
工作流程:
1) 如果设置了 remindat 且状态为 open,则在 remindat 时间创建/更新一个 cron 任务。
2) 创建 cron 任务后,使用 set-cron-job 将其 ID 存储到任务中。
3) 当任务变为终态(done、expired、forgotten)时,取消对应的 cron 任务(如果有)。
积压控制:陈旧候选任务
策略:
- - P3 级别 30 天未操作 → 审查候选任务
- P2 级别 45 天未操作 → 审查候选任务
- P1 级别永不自动遗忘
列出陈旧候选任务:
bash
python3 skills/neomano-todo/scripts/todo.py stale-candidates
回复风格
- - 保持回复简洁。
- 对于 WhatsApp:使用项目符号(不使用表格)。
- 确认更改时:包含任务 ID、标题、优先级和状态。