Skip to content

v0.3.1 — OpenCode joins as a full harness

Latest

Choose a tag to compare

@marekpal97 marekpal97 released this 12 Oct 22:54
· 77 commits to main since this release

[0.3.1] — 2026-10-12

OpenCode joins Claude Code, Codex and Pi as a fully supported harness:
passive capture, /wrap, transcript import and task binding, all
observed live on OpenCode 1.19.0. The same testing found capture gaps
that affected every harness: chained and quiet commits, gh pr calls,
and retrievals through Claude Code's plugin route.

Upgrade notes

  • OpenCode users: run weave install --harness opencode, then
    weave hooks install --harness opencode --scope user. Dispatch
    opencode run with stdin from /dev/null, or it hangs.
  • Claude Code and Codex users on the settings-file hook route: rerun
    weave hooks install to pick up the new PostToolUse matcher. The old
    entry is rewritten in place. The plugin route needs nothing.

Added

  • OpenCode at Pi parity (E3) (#195): shims/opencode/ maps
    OpenCode's plugin hooks onto the canonical events. It synthesises
    SessionStart, injects context through the system-prompt transform, and
    maps chat.message, tool.execute.after and session.idle. Its
    shell.env hook exports OPENCODE_SESSION_ID and THINKWEAVE_HARNESS,
    so weave session-id and /wrap resolve the live session. Worker-free
    commands link into ~/.config/opencode/commands/ (/wrap, /brief, …).
    Every mapped event was observed firing on OpenCode 1.19.0. Install with
    weave install --harness opencode and
    weave hooks install --harness opencode --scope user.
  • weave import opencode reads OpenCode's SQLite store (read-only),
    and opencode_digest reads a bound worker session for task closes.
  • weave install --harness opencode hides the Codex thinkweave-*
    skill projections through permission.skill in opencode.json.
    OpenCode scans ~/.claude/skills recursively, so a weave dev-link
    checkout exposed them beside /wrap. A rule you set yourself is kept.

Fixed

  • weave_create accepts concepts / proposed_concepts as top-level
    arguments. They were dropped silently before. The reply now reports the
    concepts that landed, warns when a note has none, and names ignored
    arguments.
  • MCP dispatch decodes JSON-encoded strings where a tool's schema wants
    an array or object. Some models send concepts="[\"a\"]".
  • The PostToolUse hook dropped every chained commit
    (git add … && git commit …) on every harness: the significance gate
    read only the first segment.
  • A commit made with git commit -q or -F - lost its hash, because
    the parser reads the [branch hash] line those flags suppress. The
    parser also recorded git push's [new branch] line as the commit
    message. The hook now falls back to HEAD when HEAD is under two minutes
    old.
  • Mutating gh pr calls (create, merge, close, …) are captured. The
    session note gains pull_requests with the action, number and URL.
  • Retrieval logging missed every call through Claude Code's plugin route
    (mcp__plugin_thinkweave_thinkweave__…). The PostToolUse matcher
    covers both names, and a reinstall rewrites the old matcher in place.