<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  
  <title>Blog Title</title>
  <subtitle>This is a longer description about your blog.</subtitle>
  <link href="https://example.com/feed/feed.xml" rel="self" />
  <link href="https://example.com/" />
  <updated>2026-07-26T00:00:00Z</updated>
  <id>https://example.com/</id>
  <author>
    <name>Your Name</name>
  </author>
  <entry>
    <title>A todo tool where the writing is done by an AI, not me</title>
    <link href="https://example.com/blog/2026-07-26-a-todo-tool-the-ai-writes/" />
    <updated>2026-07-26T00:00:00Z</updated>
    <id>https://example.com/blog/2026-07-26-a-todo-tool-the-ai-writes/</id>
    <content type="html">&lt;p&gt;&lt;em&gt;中文版：&lt;a href=&quot;https://example.com/blog/2026-07-26-a-todo-tool-the-ai-writes-zh/&quot;&gt;知识库之外，还缺一层&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I wrote a command-line tool called &lt;a href=&quot;https://github.com/xyb/worklog&quot;&gt;worklog&lt;/a&gt; (&lt;code&gt;wl&lt;/code&gt;). These days most of my recording, planning, summarizing and reviewing happens in it.&lt;/p&gt;
&lt;p&gt;It&#39;s a little different from a normal todo tool: the one writing into it day to day isn&#39;t me, it&#39;s an AI.&lt;/p&gt;
&lt;p&gt;I do most of my work in a terminal, talking to an AI. What to do today — I have it lay the tasks out. Progress, decisions, things that come up mid-task — it jots them down as we go. When something&#39;s finished, it marks it done. In the evening I have it write up the day. When I come back to something days later, I look it up there too. The whole loop — record, plan, do, summarize, review — is the AI writing into &lt;code&gt;wl&lt;/code&gt; while it works, not me filling in a form after the fact. I usually just glance at the terminal to check it got things right.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://example.com/img/worklog-demo.gif&quot; alt=&quot;wl demo — a day in the terminal: plan, log, recap&quot; style=&quot;max-width:100%&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-its-used-a-day-recorded-by-the-ai&quot;&gt;How it&#39;s used: a day, recorded by the AI&lt;/h2&gt;
&lt;p&gt;Take today. In the morning the AI looks over my plan and pulls the tasks into the day:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# what&#39;s scheduled today, and where it stands&lt;/span&gt;
wl day
&lt;span class=&quot;token comment&quot;&gt;# schedule task 42 for today&lt;/span&gt;
wl sched &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt; today&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;While working, it records as it goes:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;wl &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;fix upload timeout&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--para&lt;/span&gt; task &lt;span class=&quot;token parameter variable&quot;&gt;--parent&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--log&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;suspect the retry logic&quot;&lt;/span&gt;
wl log &lt;span class=&quot;token number&quot;&gt;618&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;found it: hardcoded retry interval, switching to exponential backoff&quot;&lt;/span&gt;
wl &lt;span class=&quot;token function&quot;&gt;link&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;618&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[[upload-timeout-notes]]&quot;&lt;/span&gt;
wl &lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;618&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--at&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt;:30 &lt;span class=&quot;token parameter variable&quot;&gt;--log&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;deployed; timeout alerts gone&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each is a single line, composable — create a task, append progress, link the debugging notes, close it with the outcome, one thing per command.&lt;/p&gt;
&lt;p&gt;Something you&#39;ll need to do later, but not now, often comes up mid-task. Have it capture the task and schedule it for tomorrow, so it doesn&#39;t get lost:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;wl &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;add rate limiting to downloader&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--para&lt;/span&gt; task &lt;span class=&quot;token parameter variable&quot;&gt;--parent&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--sched&lt;/span&gt; tomorrow&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At the end of the day, the AI writes up a summary:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;wl recap&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When I come back to something later, or a fresh AI session takes over cold, one command pulls the whole history back:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# this task&#39;s ancestors and children&lt;/span&gt;
wl focus &lt;span class=&quot;token number&quot;&gt;618&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# keyword full-text search&lt;/span&gt;
wl &lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;timeout&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# semantic search by meaning, catches phrasings keywords miss&lt;/span&gt;
wl query &lt;span class=&quot;token string&quot;&gt;&quot;upload timeout&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Almost everything I do lives in it now — work and personal. Even worklog&#39;s own development runs on it: 100+ tasks, no GitHub Issues. In a bit over a month it&#39;s a thousand-plus nodes, all in one local SQLite file, queries in milliseconds.&lt;/p&gt;
&lt;p&gt;Tasks also link both ways with my Obsidian notes: a task holds its documents, and from a document you can find the tasks that reference it. Structured state lives in &lt;code&gt;wl&lt;/code&gt;; long-form writing stays in Obsidian; each keeps to what it&#39;s good at.&lt;/p&gt;
&lt;p&gt;That&#39;s what it is and how it&#39;s used. Here&#39;s why I built it.&lt;/p&gt;
&lt;h2 id=&quot;why-a-knowledge-base-alone-isnt-enough&quot;&gt;Why a knowledge base alone isn&#39;t enough&lt;/h2&gt;
&lt;p&gt;The &amp;quot;second brain&amp;quot; idea has been popular for a few years. I&#39;m no exception — I use Obsidian and Notion to keep the things I&#39;ve thought through and want to hold on to for a long time.&lt;/p&gt;
&lt;p&gt;What I found is that a knowledge base alone isn&#39;t enough. It&#39;s good for settled conclusions, but the things actually in motion right now — what to do today, how far a task has gotten, a decision just made, something I suddenly remember to defer — it can&#39;t hold those. I never had a good tool for that part. Before, I either made do with Markdown, or left it scattered across my head and chat logs.&lt;/p&gt;
&lt;p&gt;I&#39;d tried a few todo tools earlier, but the payoff never matched the effort. Before things get complicated enough to really need one, just feeding the tool fields every day becomes the burden.&lt;/p&gt;
&lt;p&gt;AI changed that. I no longer fill things in one by one — I let the AI drop the details of work and life into Markdown as we talk. What used to sit in my head landed in files.&lt;/p&gt;
&lt;p&gt;Here&#39;s roughly how it piled up:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Month&lt;/th&gt;
&lt;th style=&quot;text-align:right&quot;&gt;Lines&lt;/th&gt;
&lt;th style=&quot;text-align:right&quot;&gt;Size&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2025-11&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;269&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;10 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-12&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;331&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;18 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-01&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;567&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;40 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-02&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;1,027&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;89 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-03&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;2,381&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;294 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-04&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;2,487&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;409 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-05&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;1,743&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;537 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Seven months, the size grew more than fiftyfold. It worked well at first, and then the problems showed up.&lt;/p&gt;
&lt;h2 id=&quot;why-markdown-falls-short-for-tracking-process&quot;&gt;Why Markdown falls short for tracking process&lt;/h2&gt;
&lt;p&gt;Two or three months in, the problems came one after another. Using a knowledge tool (Markdown files) to manage what&#39;s in motion was a poor fit to begin with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Several AI windows write into one file at once. The copy an AI is holding goes stale fast: the change it generates against the old content often won&#39;t apply to a file another window has already edited, so it has to re-read and redo it. These collisions are frequent, and the retries waste compute and time.&lt;/li&gt;
&lt;li&gt;The file keeps growing. To change one line, the AI has to read the file in and locate that line — the read cost keeps climbing.&lt;/li&gt;
&lt;li&gt;Relations between tasks, meetings and decisions can only be &lt;code&gt;[[wikilinks]]&lt;/code&gt;. Once there are enough of them, renaming one document breaks a swath of them.&lt;/li&gt;
&lt;li&gt;Reviewing a week means having the AI read all the related files and re-derive it — slow, and easy to miss things.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of May I did the math: the time spent tending the Markdown — getting the AI to parse it, avoiding write conflicts, fixing broken links — had passed the time the AI was saving me.&lt;/p&gt;
&lt;p&gt;The reason is simple enough. A knowledge base and a record of process are two different jobs. A knowledge base wants long-form text, stable structure, long-term storage; a record of process wants frequent writes, quick lookups, and several windows writing at once without fighting. Markdown suits the first, not the second.&lt;/p&gt;
&lt;h2 id=&quot;two-layers-a-knowledge-base-and-a-structured-quick-context-beside-it&quot;&gt;Two layers: a knowledge base, and a structured quick context beside it&lt;/h2&gt;
&lt;p&gt;Once that was clear, I stopped expecting one tool to do everything and split it into two layers.&lt;/p&gt;
&lt;p&gt;One layer is the knowledge base, for the long-term things — conclusions I&#39;ve thought through, references I&#39;ve organized. Obsidian keeps doing this, and does it well.&lt;/p&gt;
&lt;p&gt;The other records what&#39;s in motion right now — today&#39;s plan, the task in hand, a passing idea. It wants frequent writes and quick lookups; the volume is small, but every read and write has to be light.&lt;/p&gt;
&lt;p&gt;Put it this way: if the knowledge base is my second brain, the other half I was missing is a structured quick context sitting next to it — small in size, quick to read and write, holding the part I need often right now. Most people already have the second-brain layer; this structured quick context layer is either empty or faked with Markdown. That&#39;s the layer I set out to fill.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://example.com/img/worklog-two-layers-en.svg&quot; alt=&quot;Two layers: a knowledge base and a process layer, linked both ways&quot; style=&quot;max-width:100%&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-user-is-an-ai-so-the-whole-design-changes&quot;&gt;The user is an AI, so the whole design changes&lt;/h2&gt;
&lt;p&gt;Once I decided to build it, I quickly saw I couldn&#39;t just take an existing todo or checklist tool, because they&#39;re all built for people.&lt;/p&gt;
&lt;p&gt;The key thing, I think, is that the premise is reversed. Existing tools are designed for humans, aimed at making it easy for a person to fill in — a nice UI, fewer clicks. My case is the other way around: the one operating this tool day to day is an AI, and I only look at the results.&lt;/p&gt;
&lt;p&gt;Change the user from a human to an AI, and the whole design has to follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Commands are short, one line each. An AI calls them in a terminal, and a command that finishes a thing in one line is the least error-prone — no interaction, no step-by-step prompts.&lt;/li&gt;
&lt;li&gt;Output is plain text, and cheap on tokens. What reads the results is an AI; it doesn&#39;t need a pretty interface, it needs compact, directly parseable text.&lt;/li&gt;
&lt;li&gt;No preset categories. Projects, tasks, habits, meetings, a stray idea — all the same kind of node, joined into a tree by &lt;code&gt;parent_id&lt;/code&gt;. The AI doesn&#39;t have to learn a project / label / priority scheme first; it just creates a node and hangs it where it belongs. This is the biggest difference from tools like Todoist and Notion.&lt;/li&gt;
&lt;li&gt;The structure has to be clear and connected — this part matters a lot. Each record can be rich on its own, but pulling up a single node costs very few tokens; when you need more, following the parent/child links makes it easy to recover the full context and see the whole picture. A local slice stays cheap to read, and the whole picture is always one expansion away. Having both at once is exactly what the structure buys you.&lt;/li&gt;
&lt;li&gt;SQLite underneath. Several AI sessions writing at once don&#39;t overwrite each other; the data is transparent, readable by people and by the AI, and both sides see the same thing.&lt;/li&gt;
&lt;li&gt;Relations live in the database, not in filenames, so renaming a title doesn&#39;t break them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, it isn&#39;t another todo tool — it&#39;s a layer of record redesigned around &amp;quot;an AI uses it.&amp;quot;&lt;/p&gt;
&lt;h2 id=&quot;the-biggest-change-context-stops-leaking&quot;&gt;The biggest change: context stops leaking&lt;/h2&gt;
&lt;p&gt;I often run several AI sessions in parallel. That&#39;s fast, but there&#39;s several times more to keep track of, and my attention keeps switching. Switching is where the details get lost: a lead I was halfway through chasing, a decision just made in passing, something I meant to defer. If it isn&#39;t written down right then, it&#39;s gone once I switch away. None of these look important, but that&#39;s often exactly where problems come from later.&lt;/p&gt;
&lt;p&gt;With this layer, those things get written down as they happen, and one command brings them back when needed. Whether I come back days later or a fresh AI session takes over, the context is still there — no rebuilding from scratch. When several windows are working together, they&#39;re looking at the same record.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://example.com/img/worklog-shared-record-en.svg&quot; alt=&quot;Several AI sessions read and write one wl store, seeing the same record&quot; style=&quot;max-width:100%&quot;&gt;&lt;/p&gt;
&lt;p&gt;How good an AI&#39;s answers are depends a lot on whether the context you give it is complete. With the context sitting somewhere reliable, this whole thing gets much smoother.&lt;/p&gt;
&lt;h2 id=&quot;getting-started&quot;&gt;Getting started&lt;/h2&gt;
&lt;p&gt;worklog is open source, the command is &lt;code&gt;wl&lt;/code&gt;, MIT.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;pip &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; pyworklog
wl init&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once it&#39;s installed, tell your AI about it in your config (Claude Code&#39;s CLAUDE.md, say, or a skill) — what &lt;code&gt;wl&lt;/code&gt; is and when to record what — and it&#39;ll keep the record for you while it works. See the &lt;a href=&quot;https://github.com/xyb/worklog&quot;&gt;README&lt;/a&gt; for how.&lt;/p&gt;
&lt;p&gt;(&lt;code&gt;worklog&lt;/code&gt; and &lt;code&gt;worklog-cli&lt;/code&gt; were both taken on PyPI, so the package is &lt;code&gt;pyworklog&lt;/code&gt;; the command is still &lt;code&gt;wl&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;This is the first post in a series. Later ones open up each piece I passed over here: what a CLI designed for AI looks like, how one table holds everything from today to a lifetime, how several AI sessions share the same context, how I use it day to day, and how it splits work with Obsidian.&lt;/p&gt;
&lt;p&gt;If you&#39;ve got a knowledge base and you&#39;re getting real work done with AI, this missing layer is worth a try.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>知识库之外，还缺一层：记录当下正在做的事</title>
    <link href="https://example.com/blog/2026-07-26-a-todo-tool-the-ai-writes-zh/" />
    <updated>2026-07-26T00:00:00Z</updated>
    <id>https://example.com/blog/2026-07-26-a-todo-tool-the-ai-writes-zh/</id>
    <content type="html">&lt;p&gt;&lt;em&gt;English version: &lt;a href=&quot;https://example.com/blog/2026-07-26-a-todo-tool-the-ai-writes/&quot;&gt;A todo tool where the writing is done by an AI, not me&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;我写了个命令行工具，叫 &lt;a href=&quot;https://github.com/xyb/worklog&quot;&gt;worklog&lt;/a&gt;，命令是 &lt;code&gt;wl&lt;/code&gt;。现在我记录、计划、总结，基本都在里面。&lt;/p&gt;
&lt;p&gt;它跟一般的 todo 工具不太一样：平时往里写东西的不是我，是 AI。&lt;/p&gt;
&lt;p&gt;我干活基本是在终端里跟 AI 对话。今天要做什么，让它先用 &lt;code&gt;wl&lt;/code&gt; 把任务排进当天；干活过程中的进展、决策、临时想到的事，让它随时记下来；一件事做完，让它立刻标记完成；晚上收尾，让它把当天总结一段；过几天回头总结，也在里面查。整个记录、计划、执行、总结的循环，都是 AI 一边干活一边用 &lt;code&gt;wl&lt;/code&gt; 记的，不是我做完事再回头填。我一般只在终端瞄一眼，看它记得对不对。&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://example.com/img/worklog-demo.gif&quot; alt=&quot;wl demo — 终端里的一天：计划、记录、日结&quot; style=&quot;max-width:100%&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ai&quot;&gt;它是怎么用的：AI 记录的一天&lt;/h2&gt;
&lt;p&gt;比如今天。早上让 AI 看一遍计划，把今天要做的任务排进当天：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 今天排了什么、干到哪了&lt;/span&gt;
wl day
&lt;span class=&quot;token comment&quot;&gt;# 把 42 号任务排进今天&lt;/span&gt;
wl sched &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt; today&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;干活的过程中，让它随时记下来：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;wl &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;修复上传超时&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--para&lt;/span&gt; task &lt;span class=&quot;token parameter variable&quot;&gt;--parent&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--log&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;初步判断是重试逻辑&quot;&lt;/span&gt;
wl log &lt;span class=&quot;token number&quot;&gt;618&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;定位到了：重试间隔写死，改成指数退避&quot;&lt;/span&gt;
wl &lt;span class=&quot;token function&quot;&gt;link&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;618&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[[上传超时排查]]&quot;&lt;/span&gt;
wl &lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;618&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--at&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt;:30 &lt;span class=&quot;token parameter variable&quot;&gt;--log&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;已上线，超时告警归零&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;每条都是一行命令，可以组合。建任务、记进展、挂上排查笔记、带结果标记完成，一行做完一件事。&lt;/p&gt;
&lt;p&gt;干活的时候常会冒出一件当下不做、以后要做的事。让它建一条、直接排到明天，免得忘：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;wl &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;给 downloader 加上限流&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--para&lt;/span&gt; task &lt;span class=&quot;token parameter variable&quot;&gt;--parent&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--sched&lt;/span&gt; tomorrow&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;晚上收尾，让 AI 把当天总结一段：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;wl recap&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;过几天我回到某件事，或者新开一个 AI 会话从头接手，一句命令就能把前因后果查回来：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 这个任务的上下游&lt;/span&gt;
wl focus &lt;span class=&quot;token number&quot;&gt;618&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 按关键词全文搜&lt;/span&gt;
wl &lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt; 超时
&lt;span class=&quot;token comment&quot;&gt;# 按意思语义检索，找关键词碰不到的说法&lt;/span&gt;
wl query &lt;span class=&quot;token string&quot;&gt;&quot;上传超时&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在我的事基本都在里面，工作、个人都有。连 worklog 自己的开发也用它管，一百多个任务，没再用 GitHub Issues。一个多月记了一千多个节点，都存在本地一个 SQLite 文件里，查询是毫秒级的。&lt;/p&gt;
&lt;p&gt;任务还能跟我的 Obsidian 笔记双向关联：任务上挂着文档，从文档也能反过来查到挂它的任务。结构化的部分放 &lt;code&gt;wl&lt;/code&gt;，成篇的文档放 Obsidian，各放各的。&lt;/p&gt;
&lt;p&gt;这就是它是什么、怎么用。下面说说我为什么要做它。&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;为什么一个知识库不够用&lt;/h2&gt;
&lt;p&gt;这几年&amp;quot;第二大脑&amp;quot;这个说法挺流行。我也一样，用 Obsidian、Notion，把想清楚了、值得长期留下来的东西存进去。&lt;/p&gt;
&lt;p&gt;用下来我的体会是，光有一个知识库不够。它适合放已经想定的结论，可当下正在进行的那些事——今天要做什么、一件事干到哪了、刚定的一个决策、突然想起来要延后处理的活——它管不了。这部分我一直没有个趁手的工具，之前要么用 Markdown 凑合，要么就散在脑子里和聊天记录里。&lt;/p&gt;
&lt;p&gt;以前也试过一些 todo 工具，但投入和回报不太成正比。事情还没复杂到非用不可，光是每天给工具填字段就先成了负担。&lt;/p&gt;
&lt;p&gt;AI 出现之后，这件事有了变化。我不用自己一条条填了，让 AI 在对话过程中把工作和生活里的事记进 Markdown。原来靠脑子记的东西，落到了文件里。&lt;/p&gt;
&lt;p&gt;攒下来的量大概是这样：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;月份&lt;/th&gt;
&lt;th style=&quot;text-align:right&quot;&gt;行数&lt;/th&gt;
&lt;th style=&quot;text-align:right&quot;&gt;大小&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2025-11&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;269&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;10 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-12&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;331&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;18 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-01&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;567&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;40 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-02&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;1,027&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;89 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-03&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;2,381&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;294 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-04&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;2,487&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;409 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-05&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;1,743&lt;/td&gt;
&lt;td style=&quot;text-align:right&quot;&gt;537 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;七个月，文件大小增长了五十多倍。一开始挺好用，后来问题就出来了。&lt;/p&gt;
&lt;h2 id=&quot;markdown&quot;&gt;拿 Markdown 记过程，为什么行不通&lt;/h2&gt;
&lt;p&gt;用了两三个月，问题一个个出来。我拿一个记知识的工具（Markdown 文件）去管当下的事，本来就不太合适：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;几个 AI 窗口同时往一个文件里写，AI 读到的那份内容很容易就过期了：它基于旧内容生成的修改，应用到已经被别的窗口改过的文件上时，经常应用失败，只能重新读一遍再改。这种冲突很频繁，一遍遍重来，白白浪费算力和时间。&lt;/li&gt;
&lt;li&gt;文件越来越大，AI 改一行，得先把文件读进来、找到那一行，读取开销一直在增加。&lt;/li&gt;
&lt;li&gt;任务、会议、决策之间的关联只能用 &lt;code&gt;[[wikilink]]&lt;/code&gt; 连。数量一多，改个文档名就断掉一片。&lt;/li&gt;
&lt;li&gt;想总结一周，得让 AI 把相关文件都读一遍再归纳，既费时间又容易遗漏。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;到五月底我算了一下，花在伺候这些 Markdown 上的时间——让 AI 读懂、避免写冲突、修断链——已经比 AI 帮我省下来的时间还多了。&lt;/p&gt;
&lt;p&gt;其实原因不复杂。知识库和记录过程是两件事。知识库要的是能写长文、结构稳定、长期放着；记录过程要的是写得频繁、查起来方便、几个窗口一起写也不会互相冲突。Markdown 适合前一件，不适合后一件。&lt;/p&gt;
&lt;h2 id=&quot;-2&quot;&gt;分成两层：知识库，和旁边的结构化快取&lt;/h2&gt;
&lt;p&gt;想清楚这点之后，我就不指望一个工具全干了，分成两层。&lt;/p&gt;
&lt;p&gt;一层是知识库，放长期留存的东西——想清楚的判断、整理好的资料。这层 Obsidian 继续做，它做得挺不错。&lt;/p&gt;
&lt;p&gt;另一层记录当下正在进行的事——今天的计划、正在做的任务、临时的想法。这层讲究写入频繁、查询方便，数据量不大，但每次读写都要轻快。&lt;/p&gt;
&lt;p&gt;打个比方，如果知识库是我的第二大脑，那我缺的另一半，就是它旁边一块结构化快取——容量小、读写迅速，放当下高频要用的那部分。大部分人第二大脑那层早有了，这块结构化快取要么空着，要么拿 Markdown 凑合。我补的就是这一层。&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://example.com/img/worklog-two-layers.svg&quot; alt=&quot;两层结构：知识库与过程层双向关联&quot; style=&quot;max-width:100%&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ai-2&quot;&gt;使用者是 AI，整套设计就得不一样&lt;/h2&gt;
&lt;p&gt;要补就自己写一个。但我很快发现，现成的 todo、checklist 都不能直接拿来用，因为它们都是给人用的。&lt;/p&gt;
&lt;p&gt;我觉得最关键的一点，是这个前提反过来了。现成工具都为人设计，目标是让人填起来省事——界面好看、少点几下。可我的情况反过来了，平时对着这个工具操作的是 AI，我只看结果。&lt;/p&gt;
&lt;p&gt;使用者从人换成 AI，整套设计就得跟着变：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命令要短，一行做完。AI 在终端里调用，一行能做完一件事的命令最不容易出错，不用交互、不用一步步问。&lt;/li&gt;
&lt;li&gt;输出是纯文本，还能省 token。读结果的是 AI，不需要好看的界面，需要的是紧凑、能直接解析的文本。&lt;/li&gt;
&lt;li&gt;不预设分类。项目、任务、习惯、会议、一个想法，都是同一种节点，靠 &lt;code&gt;parent_id&lt;/code&gt; 连成一棵树。AI 不用先学一套 project、label、priority 的分类规则，建个节点、挂到该在的位置就行。这一点跟 Todoist、Notion 这类工具区别最大。&lt;/li&gt;
&lt;li&gt;结构要清楚、连得起来——这一点其实很重要。每条记录本身可以写得很丰富，但单独取出来看一条，只占很少的 token；等需要的时候，顺着父子关系又能很容易找回完整的上下文，看清整体是什么情况。平时读一个局部，开销很小；要看全局，顺着结构随时能展开。局部和整体都要，靠的就是这套结构。&lt;/li&gt;
&lt;li&gt;底层用 SQLite。几个 AI 会话同时写不会互相覆盖；数据透明，人能读、AI 也能读，两边看到的是同一份。&lt;/li&gt;
&lt;li&gt;关联存在数据库里，不靠文件名，改个标题不会断。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一句话，它不是又一个 todo 工具，是按&amp;quot;给 AI 用&amp;quot;重新设计的一层记录。&lt;/p&gt;
&lt;h2 id=&quot;-3&quot;&gt;最大的变化：上下文不再丢失&lt;/h2&gt;
&lt;p&gt;我经常同时开好几个 AI 会话并行做事，效率高了不少，但要同时管的事也多了好几倍，注意力还得在几件事之间来回切换。切换的时候最容易丢的是细节：排查到一半的一条线索、刚随口定的一个决策、想起来要延后做的一件事。当下不记下来，切换过去就找不回了。这些事都不起眼，但后面出问题往往就在这里。&lt;/p&gt;
&lt;p&gt;有了这一层，这些东西当时就记进去了，要用的时候一句命令查回来。不管是我隔几天回来，还是新开一个 AI 会话接手，上下文都还在，不用从头重建。几个窗口一起做的时候，看到的也是同一份记录。&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://example.com/img/worklog-shared-record.svg&quot; alt=&quot;多个 AI 会话读写同一个 wl 存储，看到同一份记录&quot; style=&quot;max-width:100%&quot;&gt;&lt;/p&gt;
&lt;p&gt;AI 回答得好不好，很大程度上看你给它的上下文够不够完整。上下文有个地方稳稳放着，这件事就顺畅多了。&lt;/p&gt;
&lt;h2 id=&quot;-4&quot;&gt;怎么开始用&lt;/h2&gt;
&lt;p&gt;worklog 是开源的，命令是 &lt;code&gt;wl&lt;/code&gt;，MIT 协议。&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;pip &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; pyworklog
wl init&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;装完之后，在你的 AI 配置里（比如 Claude Code 的 CLAUDE.md，或者一个 skill）告诉它有 &lt;code&gt;wl&lt;/code&gt; 这个命令、什么时候记什么，它就会在干活的过程中替你记。具体写法看 &lt;a href=&quot;https://github.com/xyb/worklog&quot;&gt;README&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;（PyPI 上 &lt;code&gt;worklog&lt;/code&gt; 和 &lt;code&gt;worklog-cli&lt;/code&gt; 都被人占了，发布名只能叫 pyworklog，命令还是 &lt;code&gt;wl&lt;/code&gt;。）&lt;/p&gt;
&lt;p&gt;这是系列第一篇，先讲个大框架。后面会一篇篇展开：为 AI 设计的命令行具体长什么样、一张表怎么装下从今天到一生的事、几个 AI 会话怎么共享上下文、我平时一天怎么用它，还有它跟 Obsidian 怎么分工。&lt;/p&gt;
&lt;p&gt;如果你也有一个知识库、也在用 AI 干活，可以试试补上这一层。&lt;/p&gt;
</content>
  </entry>
</feed>