Todo management
Per-workspace SQLite todo manager (./todo.db) with groups and task statuses (pending/in_progress/done/skipped), operated via {baseDir}/scripts/todo.sh for adding, listing, editing,…
Nikita Shkoda
@lstpsche
What This Skill Does
Per-workspace SQLite todo manager with groups and task statuses (pending/in_progress/done/skipped), operated via a CLI script for adding, listing, editing, moving, and removing entries and managing groups.
Replaces manual todo files or separate task apps by keeping all tasks in a local SQLite database per project, with no external dependencies beyond sqlite3.
When to Use It
- Add a new task to a specific group with a custom status
- List all pending tasks in the current workspace
- Move a task from one group to another
- Mark a task as done or skipped
- Rename an existing task group
- Clear all tasks from the list without printing them
Install
$ openclaw skills install @lstpsche/todo-managementTodo Management
What this skill controls
A per-workspace SQLite database:
- Default:
./todo.db - Override:
TODO_DB=/path/to/todo.db
All changes MUST happen through the CLI:
bash {baseDir}/scripts/todo.sh ...
Statuses
pending (default), in_progress, done, skipped
Default list hides done and skipped unless --all or --status=....
Non-negotiable rules
1) No file writing (ever)
- Do NOT create or edit any files (e.g.,
todos.md, notes, markdown, exports). - Do NOT output “filename blocks” like
todos.md (...). - The only persistent state is in
todo.db, mutated bytodo.sh.
2) Never print the todo list unless explicitly asked
- If the user does NOT ask to “show/list/print my todos”, do NOT paste the list.
- Default behavior after mutations: one short confirmation line only.
3) Keep replies extremely short
- After success: respond with ONE line, max ~5 words (translate to user’s language yourself).
- Do not include bullets, tables, code blocks, or tool output unless the user explicitly asked for the list/details.
Allowed confirmations (English examples; translate as needed):
- “Done.”
- “Added.”
- “Updated.”
- “Removed.”
- “Moved.”
- “Renamed.”
- “Cleared.”
- “Added to the list.”
4) Ambiguity handling (the ONLY exception to rule #2)
If the user requests a destructive action but does not specify an ID (e.g., “remove the milk task”):
- run
entry list(optionally with--group=...) - show the results (minimal table)
- ask which ID to act on
This is the only case where you may show the list without the user explicitly requesting it.
5) Group deletion safety
group remove "X"moves entries to Inbox (default).- Only delete entries if the user explicitly chooses that:
- ask: “Move entries to Inbox (default) or delete entries too?”
- only then use
--delete-entries.
Commands (use exactly these)
Entries
- Add:
bash {baseDir}/scripts/todo.sh entry create "Buy milk"bash {baseDir}/scripts/todo.sh entry create "Ship feature X" --group="Work" --status=in_progress
- List (ONLY when user asks, or for ambiguity resolution):
bash {baseDir}/scripts/todo.sh entry listbash {baseDir}/scripts/todo.sh entry list --group="Work"bash {baseDir}/scripts/todo.sh entry list --allbash {baseDir}/scripts/todo.sh entry list --status=done
- Show one entry:
bash {baseDir}/scripts/todo.sh entry show 12
- Edit text:
bash {baseDir}/scripts/todo.sh entry edit 12 "Buy oat milk instead"
- Move:
bash {baseDir}/scripts/todo.sh entry move 12 --group="Inbox"
- Change status:
bash {baseDir}/scripts/todo.sh entry status 12 --status=donebash {baseDir}/scripts/todo.sh entry status 12 --status=skipped
- Remove:
bash {baseDir}/scripts/todo.sh entry remove 12
Groups
- Create / list:
bash {baseDir}/scripts/todo.sh group create "Work"bash {baseDir}/scripts/todo.sh group list
- Rename (alias: edit):
bash {baseDir}/scripts/todo.sh group rename "Work" "Work (Project A)"bash {baseDir}/scripts/todo.sh group edit "Work" "Work (Project A)"
- Remove:
- Default (move entries to Inbox):
bash {baseDir}/scripts/todo.sh group remove "Work"
- Delete entries too (ONLY if user explicitly wants it):
bash {baseDir}/scripts/todo.sh group remove "Work" --delete-entries
- Default (move entries to Inbox):
“Clear the list” behavior (no list printing)
To clear the todo list:
- run
entry list --allto get IDs (do NOT paste the results) - remove each ID with
entry remove ID - reply with ONE line: “Cleared.”
If the user then asks to see the list, run entry list and show it.
Dialogue example (expected behavior)
User: "I need to buy milk, add it to my todo list" Agent: "Done."
User: "Oh, and I also need to clean the room" Agent: "Added to the list."
User: "Show my todos" Agent: (prints the list)
User: "Remove the milk one" Agent: (lists matching tasks + asks for ID, then removes when ID is provided)
Related skills
Proactive Tasks
@imrkhn03Proactive goal and task management system. Use when managing goals, breaking down projects into tasks, tracking progress, or working autonomously on objectives. Enables agents to work proactively during heartbeats, message humans with updates, and make progress without waiting for prompts.
SQL
@ivangdavilaWrites, reviews, and optimizes SQL queries; designs schemas, indexes, and constraints; plans migrations for any relational database. Use when a query is slow, EXPLAIN shows a sequential scan, or an index is ignored; when rows come back duplicated, missing, or with inflated totals after a JOIN; on deadlocks, lock timeouts, "too many connections", or transactions that never commit; when designing tables, keys, and column types, normalizing or denormalizing a model, or deciding between a JSON column and real columns; for ALTER TABLE on a live table, expand-migrate-contract rollouts, backups and restores, replication lag, connection pooling, partitioning, bulk CSV imports, and moving data between engines; for window functions, CTEs, keyset pagination, upserts, full-text search, multi-tenancy, row-level security, and timezone handling in MySQL, SQLite, MariaDB, or SQL Server. Not for PostgreSQL server internals such as vacuum tuning and work_mem sizing, and not for ORM schema modeling inside a framework.
SQL Toolkit
@gitgoodordietryingQuery, design, migrate, and optimize SQL databases. Use when working with SQLite, PostgreSQL, or MySQL — schema design, writing queries, creating migrations, indexing, backup/restore, and debugging slow queries. No ORMs required.
ADHD Assistant
@thinktankmachineADHD-friendly life management assistant for OpenClaw. Helps with daily planning, task breakdown, time management, prioritization, body doubling, dopamine regulation, and maintaining routines. Use when the user asks for help organizing their life, staying on top of tasks, beating procrastination, planning their day/week, managing overwhelm, or mentions ADHD-related challenges like time blindness, forgetfulness, difficulty starting tasks, or emotional dysregulation.
SQLite
@ivangdavilaUse SQLite correctly with proper concurrency, pragmas, and type handling.
Senior Dev
@michaelmonetizedProduction development workflow with TODO tracking, Graphite PRs, GitHub issues, Vercel deploy checks, and SMS notifications. Use when starting a new task, fixing bugs, implementing features, or any development work that needs tracked progress and code review.