Captain Memo

Ideas for later

Park the idea. Keep the heading.

A thought for later turns up mid-task. Type it with idea: or todo: in front and it is parked on this machine's homework list: by the prompt hook where one is wired, by the model's own todo_add everywhere else. The session says “noted” and the work in hand carries on. Later, any connected assistant can list it, mark it taken and close it with a note.

idea: parked, not workedopen → claimed → doneone list per machinedone kept a week

You type

An aside, mid-task, with one of six prefixes in front of it.

idea:todo:later:

The prompt hook

Files the rest of the prompt as homework #N and skips recall for it. The model reads one line: not for now.

#N filedrecall skipped“noted”

One list on this machine

Every connected assistant reads it over MCP, and each item moves one way only.

openclaimeddone
Where a CLI has no prompt hook, the model files the item itself with todo_add. Homework is not a memory and not a work claim: it is something to do, later.

Three moves

File. Claim. Close.

One short lifecycle: open, then claimed, then done. There is no edit and no delete; an item you no longer want is closed with a note saying why.

01

File

Start a prompt with idea:, todo:, homework:, later:, идея: or за после:. A colon, a hyphen or an em dash all work as the separator, and case does not matter. A session can also file one itself with todo_add(text, topics, project).

02

Claim

todo_claim(id) marks an item taken. It stays on the open list, shown as “claimed by” that session's id, so the others can see someone has it.

03

Close

todo_done(id, note) closes it with a note of what was done, or why it was dropped. Done items stay listable for 7 days, then fall away.

Who files it

One list, wired per assistant.

Every assistant wired to Captain Memo's MCP server gets the same four tools: todo_add, todo_list, todo_claim and todo_done. What differs is who files the aside: a prompt hook where the CLI has one, the model everywhere else.

Claude Code
prompt hook

The hook files it before the model acts on it. The session banner shows the open count and up to three items, each cut to 70 characters.

Codex · Gemini CLI · Kimi
prompt hook

Filed by the same hook where connect installed the native hooks. There is no session banner here; the model sees the list only when it calls todo_list(). If no filed line appears, the skill tells the model to file it with todo_add.

Cursor · opencode · Vibe · Agy · VS Code · JetBrains
model files it

No prompt hook. The captain-memo skill that connect places tells the model to file the aside with todo_add and say so. Since v0.44.4 a new Claude Code session refreshes that copy after an update; without Claude Code, run captain-memo connect again.

goose · Claude Desktop
tools only

No hook and no skill copy. The todo_add tool description itself says when to use it.

Three kinds of note

Known, now, later.

Captain Memo keeps three different things for your sessions, and homework is only one of them.

A memory is known

remember saves a fact worth recalling. Recall brings it back when a prompt needs it.

A work claim is now

work_set says what a session is doing right now, on a lease that expires by itself. The work board warns when two sessions overlap.

Homework is later

Something to do that waits for a session, with its own lifecycle: open, then claimed, then done.

Topics work the same way

todo_add takes up to five topics, normalised like work_set topics: lowercase, with anything outside a–z and 0–9 turned into a hyphen, so tags in other scripts are dropped. Items the prompt hook files carry none.

What the session sees

One line in front of the model.

The prompt still reaches the model, so it can answer; recall is skipped for it, because an aside is not a question about the code. The item texts and session ids below are illustrative; the lines around them are the ones Captain Memo prints.

the prompt hook
# you type, mid-task
idea: cache the embedder warm-up across restarts

# the hook files it; the model reads one line
📝 Filed as homework #12 on this captain (not for now): cache the embedder warm-up across restarts — todo_list() shows the list; the user may just want a short "noted". (3 open)
Claude Code session banner
  …
  Homework   3 open — todo_list() for all, todo_claim(id) before starting one
             #10 Note the PowerShell 5.1 quoting trap in the installer docs
             #11 Split the recall audit log by project (claimed by 9b2e41c7-3d5a-4f60-8e1b-2c7d9a0f4e13)
             #12 cache the embedder warm-up across restarts
from a terminal, default port (output trimmed)
$ curl -s 'http://127.0.0.1:39888/homework/list?status=open'
{"items":[{"id":"10","text":"Note the PowerShell 5.1 quoting trap in the installer docs","topics":["installer-windows"],"project":"captain-memo","by":"5f0c2a9e-81d4-4b7a-a3e6-0d9c47b1f218","created_at":1790241120000}, …],"open":3}

Honest limits

What homework does not do.

Small by design. These are the edges worth knowing before you rely on it.

One list per machine

Every session on this machine shares it. Another machine keeps its own list and its own numbers, and a number is never reused.

A claim is a marker, not a lock

It never expires. A second claim replaces the first, and closing an item does not check who claimed it.

The prefix is literal

Where a prompt hook is wired, any prompt that opens with one of the six prefixes and a separator is parked and gets no recall, even “later - can you check X”. Start the sentence another way when you mean now.

No edit, no delete

Close an item with a note instead. Item text is capped at 2,000 characters and the note at 500.


Before you sail

Questions about homework.

Does filing cost a turn?

The prompt still reaches the model, which answers, usually with a short “noted”. What is skipped is recall: no memory is searched for an aside. The hook waits up to 6 seconds for the worker to confirm; if it does not, the model is told the item may still have landed, to check todo_list(), and to file it with todo_add only if it is missing.

Can Codex pick up what Claude filed?

Yes. There is one list per machine, and every connected assistant reads it with todo_list() and marks an item taken with todo_claim(id).

What if two sessions claim the same item?

The last claim wins. A claim records who has the item now; it does not stop anyone. Check the list before starting, and the marker does its job.

Where do finished items go?

todo_list with status done shows them for 7 days. After that they are deleted the next time the list is read.

Can I see the list from a terminal?

There is no captain-memo command for it. The worker answers on 127.0.0.1: curl -s 'http://127.0.0.1:39888/homework/list?status=all' on the default port, which CAPTAIN_MEMO_WORKER_PORT changes.

Is it backed up?

Yes. Homework lives in the local meta.sqlite3, which captain-memo backup create snapshots with the rest of the corpus.