Repository navigation
Releases
v0.2.1
Fixed
- todowrite now registers as a native model tool via
codemode: false. Previously it was silently routed into V2's CodeMode catalog (behind the meta-execute indirection) and never appeared in any agent's tool list. - Pinned
@opencode-ai/pluginto0.0.0-beta-18155(was the movingbetadist-tag).
Install (corrected)
opencode only loads plugins referenced in the plural plugins key of a config file. Point it at the TypeScript entrypoint (no build step needed):
{
"plugins": ["/absolute/path/to/opencode2-todo-tool/opencode2-todo/src/index.ts"]
}Run bun install inside opencode2-todo/ first so the plugin dependency resolves. Once this package is published to npm, { "plugins": ["opencode2-todo"] } also works.
Health check
opencode2 api get /api/pluginLook for "id": "opencode2.todo" with "status": "active". Load failures are non-fatal and logged to ~/.local/share/opencode/log/opencode.log.
Verification
- 27 unit tests pass, typecheck clean
- Proven live end-to-end: tool appears in the model's native list, executes successfully, and fresh per-round todo injection is recitable without any tool call
v0.2.0
opencode2-todo v0.2.0
Restores the todowrite tool for OpenCode V2 and keeps the model's view of the todo list current every round.
Highlights
- Fresh per-round todo injection — a
session.contexthook re-reads the per-session todo store at prompt assembly and injects the current list as a system-context part. The model therefore re-reads the todos each round, including writes made between rounds without a newtodowritecall. - Compaction-proof for the model — even if compaction drops old
todowritetool results from the model's view, the injected snapshot still shows the current todos. (The TUI sidebar still reads the transcript and can go empty after compaction.) injectEveryRoundflag (defaulttrue) — keep thetodowritetool but skip per-round injection by setting it tofalse.- Tests — 27 tests passing across 2 files;
bun typecheckclean.
Install
npm install opencode2-todo (or reference the repo path for local dev), then add "opencode2-todo" to your plugins array.
v0.1.0
opencode2-todo v0.1.0
OpenCode V2 plugin that restores the todowrite tool and shows a live todo list in the session sidebar. V2 only — requires opencode2 (the V2 runtime) and is not compatible with opencode v1. It uses only the V2 @opencode-ai/plugin Promise and TUI APIs (Plugin.define, ctx.tool.transform, context.ui.slot).
Install
From npm (package published to opencode2-todo):
npm install opencode2-todoThen add it to the plugins array in your opencode config (opencode.json or .opencode/opencode.json):
{ "plugins": ["opencode2-todo"] }Local development (clone the repo, reference by absolute path; opencode2 loads src/index.ts directly, no build step):
{ "plugins": ["/absolute/path/to/opencode2-todo-tool/opencode2-todo"] }Enable / disable
The plugin is enabled by default. Three sanctioned ways to change that:
-
Options flag — disable the whole plugin:
{ "plugins": [{ "package": "opencode2-todo", "options": { "enabled": false } }] } -
Disable directive — disable by plugin id
opencode2.todo:{ "plugins": ["-opencode2.todo"] } -
Permissions deny — keep the tool registered but block the model from running it:
{ "permissions": [{ "action": "todowrite", "resource": "*", "effect": "deny" }] }
The first two remove the tool entirely; the third leaves it visible but denied.
TUI visibility (partial — honesty note)
The sidebar list shows todos for the active session, derived from the session transcript's todowrite tool metadata. It is not a persistent always-visible dock: it depends on the session being active and its messages being synced into the TUI.
This is an honest limitation of the V2 plugin surface. Plugins cannot re-create the native desktop dock, the todo.updated projection, or the /api/todo endpoint that V1 shipped. A future todoread or public API could surface the server-persisted per-session list directly; today the sidebar reads the same data back through the transcript.
No todoread
This plugin provides only todowrite. There is intentionally no todoread tool — read-back is via the sidebar or the session transcript.
Known limitations
- TUI is partial — the sidebar reads todos from the transcript, not from the per-session store directly.
- Requires opencode2 with TypeScript plugin loading (no pre-compiled bundle is shipped).
- Store not yet consumed directly — the server writes a full per-session
todos/<sessionID>store, but the current sidebar does not consume it directly yet; it sees the same data via the transcript.
License
MIT