Show HN: Worklog, structured memory for Agent in one SQLite table Worklog (wl) is a new open-source CLI tool that stores structured work logs, tasks, and daily plans in a single SQLite table, designed to serve as persistent memory for AI agents. The tool outputs plain text or JSON and includes a bundled skill for Claude Code, enabling AI assistants to read and write work records directly. Worklog requires Python 3.9+ and is installable via pipx or uv. 🌐 English · 中文 /xyb/worklog/blob/main/README.zh.md A local CLI worklog and task tracker backed by SQLite. Add tasks, log what you did, plan your day — all from the terminal, all in one file. Why wl: Everything in one place. Time year → month → week → day and projects area → task share the same tree and the same id space. No switching between apps. A daily rhythm that sticks. Set a goal in the morning, log as you go, recap at night. wl day replays the whole day with stats. Structured and queryable. Every item carries status, priority, tags, props, and relations. Filter with wl ls , track dependencies/splits with wl relation block / split / related , search by meaning with wl query . AI-ready out of the box. Every command outputs plain text or -o json . There's a bundled Claude Code skill /xyb/worklog/blob/main/skills/worklog-cli/SKILL.md so an AI assistant can drive it directly. Local and transparent. One SQLite file, no daemon, no account. You own the data. pipx install pyworklog or: uv tool install pyworklog wl init Requires Python ≥ 3.9. Shell completion: wl print-completion fish | source fish — add to config.fish eval "$ wl print-completion bash " bash — add to .bashrc eval "$ wl print-completion zsh " zsh — add to .zshrc wl add "write the report" -p A add a task, priority A wl log 1 "drafted the intro" log progress → status auto-flips to DOING wl done 1 mark done wl day replay today: plan + logs + stats Start the day with a goal, log as you work, close with a recap. wl day shows the full picture. wl goal "ship the landing page today" morning intent bare = read back wl log 42 "finished the hero section" progress note mid-day wl recap "shipped it, copy still TBD" evening summary bare = read back wl day the whole day: plan, logs, what changed Real output from wl demo the tasks carry -t work / -t personal — that tag is what sorts them into the day's buckets : 9 2026-07-16 Thu · workday 🎯 Send out the monthly report 1/1 ✅ 1. x 3 Write the report summary 📝 Recap: Focus nailed - report's out, and I didn't chase the new idea. Weak spot: only scratched the AI tutorial. written at 07-16 12:20 work ▸ planned x 3 Write the report summary · Draft written, sent to the team personal ▸ planned 4 Do the AI-agents tutorial ── 2026-07-16: 1/1 tasks with progress · DONE 1 · planned·not-done 1 wl tree --by project groups the same data by project instead of by time: ▸ 1 A Ship the monthly report 1 x 3 Write the report summary ▸ 2 A Learn how AI agents work 2 4 Do the AI-agents tutorial 10 Build a tiny agent myself Assign tasks to dates and move them through a status machine. wl add "review PR" --parent 7 add under a project wl sched 42 tomorrow plan for tomorrow; also: next-week, +3w wl start 42 clock in wl stop 42 clock out — elapsed recorded wl defer 42 next-month push to backlog; also: someday wl done 42 close Statuses: TODO → DOING → DONE · also LATER backlog · WAIT blocked · CANCELED wl find "deploy" full-text, hits highlighted wl query "follow up with the client" finds related even if exact words differ wl query uses any OpenAI-compatible embedding server. For best results LanceDB + CJK segmentation : pip install 'pyworklog semantic ' . Every command accepts -o json — place it before or after the verb. wl -o json ls --para project array of open projects wl show 42 -o json | jq '.logs' node detail, pipe to jq wl -o json active currently running tasks capture wl add "task" -p A -t work new task, priority, tags wl log 42 "what I did" log progress wl done 42 close; also: defer / cancel / wait plan & review wl goal "deliver X by EOD" today's goal bare = read wl recap "shipped, one blocker left" end-of-day summary bare = read wl day today: plan + logs + stats wl sched 42 2026-07-01 schedule; also: tomorrow / +3w / someday navigate wl show 42 full detail + timeline wl ls --para project -t work list open work projects wl tree whole structure, top-down wl summary --week 2026-W25 weekly aggregate by project search wl find "keyword" full-text search wl query "follow up with the client" semantic + keyword hybrid Every command has wl