A work thread is a note about one piece of work that is bigger than one Claude Code session. It holds what the work is for, where it stands, what happens next, what blocks it and which files the next session should read. mike stores it, so a new session on any machine that shares the project can pick the work up without you retyping the story.
A thread is not a message between sessions (that is mail; see Sessions), and
it does not run anything: it records. mike has no page for threads in the web UI. You write
and read them through Claude, with the MCP tools or the /thread: commands below,
and find them again with project search.
Threads are scoped to a project. Nothing in a thread is sent anywhere by mike itself; a session that reads one sends its text to Anthropic like any other conversation text. See Privacy.
What you need
Threads work through the mike MCP server, so register it first: run mike claude-code mcp
and start a new session; see MCP. The three tools that matter, work_thread_list,
work_thread_get and work_thread_checkpoint, are in the default tool set. A fourth,
work_thread_add_entry, is only in the full set but Claude can still call it by name.
For slash commands, install the mods that mike ships (mike claude-code mods; see
Mods). One of them, thread, adds /thread:list, /thread:get, /thread:new,
/thread:checkpoint and /thread:depend.
Start a thread on the example work
Continue the fictional docs session in ~/projects/site, goal “Rewrite the install page”.
You corrected Claude to put Homebrew first, and you want the work to survive a break.
- In the session, type
/thread:new install-page Rewrite the install page, Homebrew first. Without the mod, ask: “Create a work thread calledinstall-pagefor rewriting the install page with Homebrew first.” - Claude checks that the slug is free, then calls
work_thread_checkpointwith a title, a goal and a short summary. A slug is letters, digits,.,_and-. - Claude reports the slug and that the thread was created.
Later, from a different session in ~/projects/site, type /thread:get install-page, or ask
“Where did we get to on install-page?”. Claude calls work_thread_get and shows the title,
status, summary, where it stands, next steps, blockers, open questions, decisions, files, the
latest history and the sessions that worked on it. The Homebrew decision is in it if the
earlier session wrote it down as a decision; threads keep what is recorded, not the whole
conversation.
Record progress
Ask Claude to checkpoint before you stop: /thread:checkpoint install-page, or “Checkpoint
the install-page thread.” Claude reads the thread first, then writes the state again.
A checkpoint replaces the thread’s current state, so Claude sends every field again, rewritten for now:
| Field | What it holds |
|---|---|
summary (tldr) |
At most 600 characters: what the next session must know first. Required. |
| where we are, next, blockers, open questions, decisions | The rest of the state |
| files | Paths, relative to the project, the next session should read |
| status | active, implementing, review, parked or done |
| goal, branch, worktree, acceptance criteria | Sent only when they change |
The state a checkpoint replaces is kept in the thread’s history, so nothing is lost. A
review status is refused until the thread has acceptance criteria; write them as what is
true of the finished result, not as steps. To leave a decision, finding or hand-over note
without changing the state, Claude uses work_thread_add_entry with a kind of decision,
finding, brief, handoff, note or checkpoint. Entries are never edited.
Make one thread wait on another
/thread:depend install-page site-nav records that install-page depends on site-nav.
Claude checks that both exist, then checkpoints with the whole dependency list. When a
dependency is not done, /thread:get says the thread is blocked on it.
Have open threads offered at the start of a session
With the thread mod loaded, the first prompt of each session, and the first after a
compaction, carries the project’s open threads (active, implementing and review) as one
line each, at most 2 KB, with a count of any left out. That text goes to Anthropic with your
prompt. Typing # and part of a slug offers the project’s threads. Once the session reads or
writes a thread, the status line names it and when this session last checkpointed it, for
example thread install-page · checkpointed 12m ago. /thread-board opens a Threads pane of
the project’s open threads grouped by status, with a switch to show parked and done ones.
Bring in old worklog files
If you kept threads as worklog.md files, mike thread import reads them into mike:
mike thread import --dry-run --repo ~/projects/site
It looks in each repository’s artifacts/threads/<slug>/worklog.md and
docs/threads/<slug>/worklog.md, including worktrees under .claude/worktrees. --dry-run
changes nothing and reports what it would create or update; leave it off to write. --repo
can be repeated, and --registry <file> points at a list of threads (one JSON object per
line) instead of the default ~/.claude/threads/registry.jsonl. The report lists threads
created and updated, parse errors, skipped repositories, threads left alone and
dependencies that name no known thread. A repository that is not yet a known project is skipped and named in the report; register it
first (Claude can do this with register_project_location).
If you use tether
If your sessions also load the tether mod, tether provides threads itself: the thread mod’s
list is left to tether and stays out of the first prompt. The mods README marks the thread
mod as superseded by tether wherever tether runs, kept for machines without it. A public
install does not include tether, so the thread mod above is what you get.
When something looks wrong
| What you see | Next step |
|---|---|
/thread:new is not found |
The thread mod is not loaded. Run mike claude-code mods, then start a new session. Or ask Claude in plain words; the tools work without the mod. |
Claude has no work_thread_* tools |
The mike MCP server is not registered. See MCP. |
| The list is empty | The project has no threads yet. Start one as above. |
A checkpoint to review is refused |
Add acceptance criteria, then try again. |
mike thread import says it needs a database URL |
Set it in /settings or MIKE_DATABASE_URL; see Settings. |
mike thread import says no registry and no --repo |
Pass --repo <path> or --registry <file>. |