Skip to content
This repository was archived by the owner on Aug 30, 2026. It is now read-only.

Releases

v0.2.1

Choose a tag to compare

@gabparrot gabparrot released this 25 Aug 21:42

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/plugin to 0.0.0-beta-18155 (was the moving beta dist-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/plugin

Look 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

Choose a tag to compare

@gabparrot gabparrot released this 25 Aug 17:15

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.context hook 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 new todowrite call.
  • Compaction-proof for the model — even if compaction drops old todowrite tool 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.)
  • injectEveryRound flag (default true) — keep the todowrite tool but skip per-round injection by setting it to false.
  • Tests — 27 tests passing across 2 files; bun typecheck clean.

Install

npm install opencode2-todo (or reference the repo path for local dev), then add "opencode2-todo" to your plugins array.

v0.1.0

Choose a tag to compare

@gabparrot gabparrot released this 25 Aug 15:51

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-todo

Then 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:

  1. Options flag — disable the whole plugin:

    { "plugins": [{ "package": "opencode2-todo", "options": { "enabled": false } }] }
  2. Disable directive — disable by plugin id opencode2.todo:

    { "plugins": ["-opencode2.todo"] }
  3. 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