木簡mokkan.dev

mokkan

A reminder list that follows you between agent sessions. Push a note in Claude Code; it surfaces in the next session you open, in Codex, in a pane docked beside the transcript, on any machine, and stays there until you say you’ve seen it.

  1. claude plugin marketplace add vicmpen/mokkan
  2. claude plugin install mokkan@mokkan
  3. npx @vicmpen/mokkan-cli register you@example.com

Needs Node 20.3 or later. Source on GitHub · Full setup, npm and Codex

[7c2e19a4] rotate the staging db password

due · pushed from Codex on the desktop · waiting for you

A sample reminder. Acknowledge it and watch it go.

One push. Every session.

The server keeps the only copy of your list. Each session asks it what’s due, rather than the model remembering to check, so a note pushed on your laptop shows up on your desktop within seconds. Nothing is injected into the conversation.

Type a reminder and push it. The three views below pick it up the way the real ones do.

  1. Claude Code · laptopwhenever you run /mokkan list
    $ /mokkan list
  2. Codex · desktopthe mokkan skill, at the start of the next task
    $ mokkan pending
  3. mokkan pane · desktopthe mod, on its next refresh (every 15 seconds)
    TODOs 0 │ Reminders 0 │ Archived 0
    No todos. t adds one.

Simulated in your browser. Nothing is sent to api.mokkan.dev.

Nothing closes until you say so.

Showing a reminder doesn’t mean you saw it. mokkan keeps it lit until you acknowledge it, and a scheduled reminder that nobody acknowledges, or that comes due while no pane is open, is emailed to you. Todos, which have no due time, are never emailed. If it has to choose, it would rather tell you twice than not at all.

  1. scheduled

    mokkan in 1h30m … waits on the server, off the list, until its time comes.

  2. due

    On the list and unseen. An open pane shows it as a toast within 15 seconds. With no pane open, it goes out by email.

  3. delivered

    Shown as a toast in the pane. If no ack comes, the email goes out anyway.

  4. acknowledged

    You’ve seen it. It stays on the stack until you pop, dequeue or finish it.

Only a reminder with a due time is emailed, and at most once. With a pane open, it’s emailed if you haven’t acknowledged the toast within 3 minutes. With no pane open in the last 5 minutes, the server waits 5 minutes after the due time, and a pane that opens in that window shows it first. Acknowledge it first, from the pane, mokkan ack or Codex, and there’s no email and the credit held for it comes back.

push <text>
Add to the top of the list.
pop
Take from the top: last in, first out.
dequeue
Take from the bottom: first in, first out.
in <duration> <text>
Schedule one: 30s, 10m, 2h, 1d, 1h30m.
edit <n|id> [--in 2h] <text>
Change a reminder’s text or due time in place.
ack <id> | all
Mark reminders as seen, everywhere at once.
done <id> · undone <id>
Finish one from anywhere on the list, or put a finished one back where it was.
list · pending · done · status
The whole list, what’s waiting, what you’ve finished, who you’re logged in as.
ui
The whole stack full-screen in any terminal, one key per action.

Each verb works as /mokkan … inside Claude Code, printed straight away, and as mokkan … in any shell. To have Claude run it for you, ask in words: the plugin’s /mokkan:mokkan skill does it. A pop is a single atomic step on the server, so two sessions can never take the same item, and a popped item moves to done instead of disappearing.

Your stack, docked beside the conversation.

The plugin ships a Claude Code mod: a small module that runs inside your session, sees its events as they happen, and draws a pane of its own. /mokkan on its own opens it, and closes it again. In the fullscreen layout it docks beside the transcript and opens by itself when a session starts. On the main-screen layout it sits above the prompt.

Mods ship inside plugins, so there’s nothing extra to install.

The pane at its 44 columns. One tab each for todos, reminders and the archive. ▎ open (cyan a todo, magenta a reminder), · acknowledged, ✓ archived; a reminder’s time sits on the right.
↑ ↓ or 1–9
Point at a row. Press it again to archive it, or to reopen it on the Archived tab.
t / r
Push a note, or schedule one: 2h call the bank.
e / w
Edit the text, or the due time.
d / a
Archive, or acknowledge.
v / s
Switch between TODOs, Reminders and Archived; sync. It opens on Reminders while one is due.
l / r
Log in or register right in the pane. The password is masked.

It refreshes every 15 seconds and after every action, and a reminder that comes due while it’s open arrives as a toast. Each refresh tells the server a session is active. Esc hands the keyboard back to the prompt; ctrl+x tab takes it again, and /mokkan closes the pane.

Why “mokkan”

Mokkan (木簡) are the thin wooden slips that clerks in 7th- and 8th-century Japan used for notes, labels and records. When a slip had done its job, they shaved the surface clean and wrote the next note on the same wood.

The terminal has kept that habit for fifty years: small plain-text tools that do one job and stay out of the way. mokkan is a slip for the age of agents. One line of text, an id in square brackets, and gone when you’re done with it.

Install

One CLI with no runtime dependencies, in three wrappers: a Claude Code plugin, an npm package for any terminal, and a Codex skill. They all share one account and one login. You need Node 20.3 or later.

  1. Add the plugin to Claude Code

    It brings its own copy of the CLI, the pane, /mokkan (alone it toggles the pane; with a verb it runs it), and a skill Claude uses when you ask in words (the menu lists /mokkan as /mokkan:mokkan). Inside Claude Code the same two steps are /plugin marketplace add vicmpen/mokkan and /plugin install mokkan@mokkan.

    1. claude plugin marketplace add vicmpen/mokkan
    2. claude plugin install mokkan@mokkan
  2. Create your account

    Run it in a terminal: it emails you a one-time code, then asks for a password with hidden input. You can also press r in the pane. Every other machine logs in to the same list with mokkan login.

    1. npx @vicmpen/mokkan-cli register you@example.com
  3. Optional: mokkan in any terminal

    Puts mokkan on your PATH for scripts, mokkan ui, and the commands that need a terminal (register, login, buy).

    1. npm install -g @vicmpen/mokkan-cli
  4. Optional: the Codex skill

    Codex has no hooks, so the skill tells it to check for due reminders at the start and end of every task. It needs the npm package from the step above.

    1. git clone https://github.com/vicmpen/mokkan
    2. mkdir -p ~/.codex/skills && cp -r mokkan/codex ~/.codex/skills/mokkan

Credits

Prepaid, no subscription. A new account starts with 50 free credits, and they never expire. When you need more, mokkan buy opens Stripe Checkout: €5 buys 500.

push
1 credit
edit
1 credit for every third edit
in <duration> <text>
1 credit, plus 1 for its email, charged only if the email is actually sent
pop · dequeue · done · ack · list
Free, always: reading and finishing never cost anything.

What’s in the repositories

  • mokkan/Everything that runs on your machine. MIT licensed.
  • src/The mokkan CLI. TypeScript, no runtime dependencies.
  • claude-plugin/The plugin: the pane, /mokkan, and the skill Claude uses when you ask in words.
  • claude-plugin/hooks/pane.tsxThe mod itself, one module. Read it before you trust it, as with any mod.
  • codex/SKILL.mdThe Codex skill: heartbeat and pending at the start and end of every task.
  • claude-command/mokkan-cli.md/mokkan-cli, for sessions without the plugin: copy it to ~/.claude/commands/.
  • mokkan-server/The API behind api.mokkan.dev: Fastify and Postgres with row-level security. Run your own and point MOKKAN_SERVER_URL at it.

Write it down. Get back to work.

  1. claude plugin marketplace add vicmpen/mokkan
  2. claude plugin install mokkan@mokkan