Skip to content

OptChat v0.5.0

Choose a tag to compare

@ericjuta ericjuta released this 11 Oct 16:31
· 23 commits to main since this release
v0.5.0
bc633ac

Tracks Wayfinder map #9. Signed tag v0.5.0 (commit bc633ac). CI is green on the pinned (18.9.1) and latest SDK cohorts, the installed plugin matches the tag, and the installed-artifact smoke passes against OMP 18.9.1.

Changes

  • Per-worktree memory (behavior change). Inside a git repo, each worktree gets its own store under ~/.omp/agent/optchat-worktrees/<name>-<hash>. Outside git, the global store is still used. --optchat-dir ~/.omp/agent/optchat restores the old single memory. If another session holds the store, OptChat is inactive for that session instead of refusing every prompt.
  • Compressor refusal fallback. A provider refusal is retried once on the main model, with a 30 s bound. If that also fails, OptChat stores a labeled [unsummarized: compressor refused] excerpt so memory keeps settling.
  • Crash durability (#11). A real-process kill matrix covers 27 write stages: no acknowledged record was lost. HTML export is now atomic.
  • Orphan GC (#12). Unreferenced image blobs and abandoned staging files are reclaimed at open.
  • Benchmark (#10, #13). Paired on/off arms, compressor comparison, adversarial and long corpora, a subagent-memory experiment, and a hard dollar cap.
  • Upstream (#14). Host API proposals posted, including can1357/oh-my-pi#15365.

Measured (Sonnet 5.5 main, Haiku 5.5 compressor; samples, not savings claims)

Setting OptChat Plain OMP
History fits context (n=3) 24/24 correct; $0.45–0.52 per run 24/24 correct; $0.32 per run
History past a 200k window (n=3) 24/24 correct and quoted; $1.10–1.18 per run 16/24 correct values, 10/24 quoted; $0.05–0.56 per run
Subagent tasks (n=4 each) 4/4 with child view 0/4 blind

Haiku 4.5 as compressor needed 3× the calls (230 shortening retries) at 22× the cost of Haiku 5.5, and did not settle within the run window. Claude 5.x sometimes refuses benign summarization with Refusal (bio); the fallback covers it.

See README "0.5.0 measurements" and CHANGELOG for details.