github gptme/gptme v0.37.0

50 minutes ago

These are the release notes for gptme version v0.37.0.

Contributors

Thanks to everyone who contributed to this release:

@austinchennn, @ErikBjare, @lkuko, @simpleqt, @TimeToBuildBob

Changelog

Changes since 984b0d3:

πŸ“¦ gptme

✨ Features (30)

  • feat(hooks): enforce secret-path reads on the pre-execution deny seam (#4920) (43e90c914)
  • feat(hooks): let TOOL_EXECUTE_PRE deny a tool call (#4918) (15b75c4a7)
  • feat(hooks): hooks run matches keyworded memories; hooks install is the single documented path (#4911) (31202a231)
  • feat: discover local peers and wake conversations for peer messages (#4912) (5375685ed)
  • feat(subagent): report cache-aware usage breakdown on subagent results (#4903) (5e1e6378d)
  • feat(tui): show child progress and independent unread outcomes (#4893) (936c6770f)
  • feat(hooks): warn before externally enforced session deadlines (#4892) (864c03c11)
  • feat(tui): show child agents and monitors with work overview screen (#4557) (#4834) (b96423106)
  • feat(models): add Gemini 4 Hydrogen (#4881) (84c33356d)
  • feat(shell): promoted foreground jobs adopt their capture into the job spool (#4663 step 3) (#4880) (e08a56792)
  • feat(tui): auto-name conversations and show the name in statusline and terminal title (#4879) (1ad8fe94c)
  • feat(memory): let memory match trigger lessons (--lessons, --lesson-dir) (#4870) (62cce2de5)
  • feat(subagent): retained-worktree slice β€” explicit GC path for isolated agents (#4859) (8d60c0b3b)
  • feat(mcp): add SSE transport support for FastMCP SSE servers (#4864) (8c6cb65c6)
  • feat(models): refresh MiniMax Flash choices and plugin requests (#4452) (8a557055b)
  • feat(hooks): route anomaly watchdog block mode through the policy-block helper (#4828) (d6dd67eaf)
  • feat(watch,subagent): owner-scoped work snapshots and explicit watch expiry (#4835) (3d1838a90)
  • feat(subagent): cross-restart writer lease via flock on subagent-writer.lock (#4853) (66219ecfb)
  • feat(complete): emit structured session-end metadata block (#4830) (707db06da)
  • feat(mcp): show which config layer supplied a server in mcp info (#4849) (e92764fc5)
  • feat(config): add [shell] spool_quota_mb to ProjectConfig (#4857) (d91ed80b7)
  • feat(doctor): probe proxy reachability and OAuth token expiry (#4833) (007c2db1a)
  • feat(subagent): report the latest committed checkpoint on subprocess deadline expiry (#4851) (397c67740)
  • feat(subagent): add yield operation that checkpoints and ends an attempt as blocked_external (#4844) (9416527f1)
  • feat(doctor): detect and repair startup config corruption in gptme-doctor (#4813) (d75f9743b)
  • feat: report CLI and TUI agent lifecycle through OSC 7501 (#4771) (1faa02a23)
  • feat(complete): policy-block budget β€” stop nudging at N blocks, end session at 2N (#3960) (4bd871604)
  • feat(tauri): write crash-log.jsonl on unexpected sidecar exit (#4821) (0121ddf68)
  • feat(memory): opt-in per-session dedup for memory match (--dedup-session) (#4779) (0e65d18df)
  • feat(lessons): auto-include keyworded memories alongside lessons (#4780) (e426a749f)

πŸ› Fixes (84)

Click to expand

  • fix(tui): render child transcripts as literal text (#4916) (a22cbe636)
  • fix(tui): place Work indicator below the prompt input, above the statusline (#4909) (8273e2fd0)
  • fix(tui): keep status, unread and agent id visible in narrow Work overview rows (#4921) (160636c41)
  • fix(llm): mark Claude Sonnet 4.5 and retired Claude 4 models as deprecated (#4931) (d25d8fa04)
  • fix(mcp): report HTTP 401/OAuth challenge instead of transport-cancelled (#4927) (21d2fceae)
  • fix(deps): upgrade tornado to 6.6.1 for CVE-2026-126347 (#4924) (9d2bf906a)
  • fix(mcp): report TLS verification failure for self-signed HTTPS MCP servers (#4923) (d03ae2d22)
  • fix(mcp): bound oversized MCP tool results and spool the full text (#4925) (52010d300)
  • fix(subagent): honor context_window=0 in subprocess mode (#4919) (06c15047e)
  • fix(subagent): fence stale cancel op before allow_cancelled continuation (#4905) (7677d6415)
  • fix(subagent): deliver subprocess progress via file channel, not child-local queue (#4913) (39483fdc2)
  • fix(tui): move work-pane shortcut from Ctrl+W to Ctrl+T (#4908) (267830aaf)
  • fix(subagent): recover final report across harness completion nudge (#4906) (6d5039193)
  • fix(tui): render each Work overview child as one non-wrapping line (#4907) (5805d6663)
  • fix(subagent): accept every terminal status when loading a persisted outcome (#4902) (8e0f99366)
  • fix(codeblock): make from_markdown round-trip lossless (#4867) (88c25cb7c)
  • fix(mcp): close CLI probe clients on success and failure (#4887) (a8ad8c11e)
  • fix: hash copied attachment bytes before publishing snapshot (#4885) (a3fe81fb7)
  • fix(llm): keep mid-conversation system messages out of Responses instructions (#4883) (8167ffa67)
  • fix(deps): require patched Soup Sieve for selector DoS (#4888) (a4044d171)
  • fix(version): ignore enclosing repository dirt for installed packages (#4875) (62c790319)
  • fix(subagent): retained-workspace release holds the writer lease and never silently discards uncommitted work (#4872) (51b2d2f88)
  • fix(lessons): match skill names on word boundaries, not substrings (#4871) (43f77cf61)
  • fix(output): bound spool writes, quota, receipts, and byte cursors (#4856) (8ecd70df0)
  • fix(models): refresh stale OpenRouter Anthropic model IDs to Claude 5 (#4861) (9e0f15781)
  • fix(uri): recognize RFC 2397 data: URIs (#4865) (29f8a8ad5)
  • fix(subagent): superseded attempt's monitor must not cache its result for the resumed one (#4858) (3df9ed93a)
  • fix(tests): end the mock MiniMax SSE stream with a terminal finish_reason (#4860) (9b70d947b)
  • fix(agents-md): a startup-loaded agent workspace is not foreign (#4465) (f610623d8)
  • fix(shell): enforce 32 MiB per-job spool quota; reader keeps draining on quota exceeded (#4855) (36e11aa98)
  • fix(mcp): honor /mcp load config overrides for unknown servers (#4786) (66135c639)
  • fix(shell): redact exact live secret values from tool output in any shape (#4854) (4195114b7)
  • fix(shell): redact credentials printed mid-line in tool output (#4799) (7487c0b0e)
  • fix(gh): keep failed logs native and bound passthrough responses (#4827) (4c4e8184b)
  • fix(codeblock): close non-exec blocks followed only by prose or distant blocks (#4839) (4683923da)
  • fix(output): spool direct background jobs before RAM eviction (#4826) (8dfa1681b)
  • fix(subagent): refuse continuation of a cancelled attempt unless allow_cancelled=True (#4852) (01234f6fe)
  • fix(subagent): tell the parent a timed-out child can be continued (#4841) (6d50c058d)
  • fix(plugins): scan third-party entry points before importing them (#4847) (941a5ada6)
  • fix: register nvidia in PROVIDER_API_KEYS so NVIDIA_API_KEY is auto-detected (#4774) (fcaf960a8)
  • fix(ci): give the Tauri apt install a cache-aware deadline (#4850) (79b80a6b3)
  • fix(ci): check model freshness against public OpenRouter catalog (#4837) (eca020a99)
  • fix(export): encode complete chat data for HTML script context (#4832) (747c6ef4b)
  • fix(subagent): report wall-clock deadline expiry as timeout, not failure (#4836) (e0ef7b904)
  • fix(subagent): persist terminal attempt outcomes across parent restart (#4843) (4f4e3e0e6)
  • fix(subagent): preserve non-empty non-git isolation workspace (#4838) (8138f833e)
  • fix(doctor): warn when an MCP HTTP server rejects the credential (#4829) (2681583e8)
  • fix(doctor): state what the config and stdio-MCP rows actually checked (#4831) (6f6da87f8)
  • fix(tests): isolate CC fallback in memory tool tests (#4825) (a1b8a218b)
  • fix(config): inherit user mcp toggles in partial project layers (#4776) (9b06053e9)
  • fix(memory): match legacy index pointers whose titles contain links (#4781) (f9884feb1)
  • fix(chat): bounded non-interactive drain for running subagents (#4777) (f5b285ea2)
  • fix(output): harden tool-output writer (private, no-clobber, symlink-safe) (#4782) (87161aea2)
  • fix(gh): pass through to the gh CLI when a native read command has unsupported flags (#4783) (2f03c8db6)
  • fix(gh): keep the failure block when a CI log exceeds the token budget (#4788) (09885f4c0)
  • fix(convert): bound DOCX conversion by expanded body size (#4773) (7c3e1a57d)
  • fix(auth): validate malformed cached gptme.ai token instead of crashing (#4808) (1fada9ef3)
  • fix(codeblock): non-exec-lang block followed by later block now yields all blocks (#4820) (783608d5f)
  • fix(config): normalize provider arrays before appending tables (#4807) (e931a7f8b)
  • fix(mcp): redact URL credentials in conversational list/info (#4810) (d3b174a1d)
  • fix(context): skip malformed rows in the context-savings summary (#4823) (9376c8524)
  • fix(parser): reject non-ASCII digits and bound overflow in int() parse paths (#4800) (71a062c5e)
  • fix(mcp): report the real cause when an HTTP connect fails (#4805) (e14aab5b8)
  • fix(config): auto-repair providers = [...] inline-table corruption at load (#4809) (ea7f9bd98)
  • fix(memory): expose explicit layered write scopes (#4769) (24edffda8)
  • fix(complete): tell the model when a reply's fences all failed to parse (#4818) (f44fa0aef)
  • fix(read): isolate path-resolution errors so later batch paths still read (#4790) (4b232b76b)
  • fix(auth): print device-flow complete URI on first-run gptme.ai connect (#4785) (986eb987b)
  • fix(auth): publish private cloud tokens without truncating existing login (#4791) (a8419fcd9)
  • fix(reduce): fail locally when only a compaction view is a usable input (#4772) (9d9bd297e)
  • fix(mcp): preserve explicit server environment without mutating config (#4794) (c7e5c4948)
  • fix(todo): keep literal boundary quotes in add/update text (#4792) (538566174)
  • fix(commands): reject non-ASCII digit counts in /undo (#4801) (7bb097829)
  • fix(llm): close reasoning block before content/tool calls in mixed transition deltas (#4804) (96515db92)
  • fix: preserve user input after oversized tool output pruning (#4753) (7a656435f)
  • fix(commands): consume slash-only input instead of crashing on unpacking (#4743) (0b5e0a8c3)
  • fix: publish attachment snapshots after successful copies (#4661) (7d27e3b16)
  • fix(cli): wake idle parent on subagent completion (#4761) (8532295f6)
  • fix(hooks): preserve unrelated commands in mixed entries (#4767) (690cab924)
  • fix(setup): persist provider updates over local overrides (#4764) (123cb9f5a)
  • fix(shell): treat special tokens in output as plain text when truncating (#4730) (4eee00458)
  • fix: label /context retained log separately from provider input (#4759) (fba43ec70)
  • fix(anthropic): defer notices until tool results are emitted (#4765) (60bdbf665)
  • fix(release): pin CI and publication to selected source ref (#4760) (3950aebc8)

πŸ”¨ Misc (12)

Click to expand

  • chore: bump version to 0.37.0 (v0.37.0)
  • test: reset message output format around each test (#4914) (97350257d)
  • test(time-awareness): isolate tests from host session-deadline env (#4894) (49e276589)
  • perf(lessons): cut Claude Code lesson hook latency ~4x (0.52s β†’ 0.14s) (#4877) (5afa4d773)
  • test(tui): verify work inspection ownership and bounded expiry wakes (#4891) (2b21a1c2d)
  • docs(explain): list current /compact modes (summarize|trim) (#4842) (acdb964d2)
  • test: isolate GPTME_LOGS_HOME per test (stop subagent-test-* leaking into live logs dir) (#4846) (85c70ee4f)
  • perf(subagent): filter logdirs by name before stat in id lookup (#4845) (3767da026)
  • test(config): pin inline-array and empty-array provider roundtrip contract (#4812) (649ac0f5f)
  • test(config): add provider config writeβ†’load roundtrip tests (#4811) (e555ceb2c)
  • docs(memory): reconcile lessons vs keyworded memories; keyword hygiene; hook dedup caveat (#4778) (bfb95863e)
  • docs(providers): correct stale PyPI caveat in airgapped tokenizer note (#4787) (cf5a8e4fb)

(excluded 3 less relevant commits)

Full Changelog: 984b0d3...v0.37.0

Don't miss a new gptme release

NewReleases is sending notifications on new releases.