v0.34.0#
These are the release notes for gptme version v0.34.0.
Contributors#
Thanks to everyone who contributed to this release:
@AmaLS367, @aniruddhaadak80, @erikbjare, @simpleqt, @TimeToBuildBob
Changelog#
Changes since v0.33.0:
📦 gptme#
✨ Features (61)#
feat(webui): add gptme-host:seed-prompt to pre-fill chat input from host (#3870) (
437eca576)feat(memory): add search and export commands to complete #3734 CLI table (#3869) (
a0418fe30)feat(memory): migrate-knowledge-jsonl command + deprecate knowledge CLI (#3863) (
19f3ece8b)feat(cloud): default service URL → auth.gptme.ai custom domain (#3866) (
d78c71188)feat(knowledge): wire search to gptme-rag semantic ranking (#3865) (
73074e58d)feat(knowledge): generalize schema with entry_type (problem_resolution, decision, fact, how_to, note) (#3864) (
b42d24b85)feat(config): expose preview guidance through runtime prompt fragments (#3821) (
c74602087)feat(site): deploy design-v3 landing page to gptme.org (#3849) (
170f28bb4)feat(site): prototype of new gptme.org site (design v3) (#3839) (
0881c1d98)feat(memory): trigger keyworded entries through the lesson matcher (#3817) (
1ced9ccca)feat(subagent): persist registry metadata and rehydrate after restart (#3834) (
085bd7bec)feat(skills): persist CostTracker ownership across TUI/server workers (#3833) (
3c4326778)feat(subagent): continue completed child conversations (#3820) (
e4e0f6980)feat(skills): export lifecycle metrics and measured cost windows (#3793) (
6f9a5bdfc)feat(tools): conditional tool docs + companion tools (requires_tools) (#3801) (
925eab097)feat(memory): use layered MemoryStore in workspace prompt (#3789) (
31a385390)feat(memory): preserve writer provenance through CLI metadata (#3792) (
1ecb322fc)feat(memory): persist always-on selection and byte budget (#3791) (
587048f44)feat(models): add deepseek/deepseek-v4.1-flash (#3799) (
0241c2592)feat(skills): record server and TUI invocation outcomes (#3787) (
0e7033754)feat(memory): Codex/AGENTS.md integration for cross-harness memory (#3764) (
b5374121c)feat(models): generate recommended-model docs from code; add DeepSeek V4 Flash 0731, GLM 5.3 Flash, GPT-6 Astra, Grok 4.6; OpenRouter provider allowlists (#3786) (
a35b7fdf5)feat(cli): add –track-tokens flag to print running token count per LLM call (#3646) (
235a3fb90)feat(skills): persist explicit invocation lifecycle evidence (#3750) (
fc8024909)feat(llm): make reasoning effort controllable and observable for OpenAI-compatible providers (#3781) (
75c65631c)feat(config): trust-on-first-use gate for project-level shell execution (#3782) (
dbd5f6173)feat(hooks): add guardrail TOOL_CONFIRM hook for headless safety (#3598) (#3765) (
c176aa62d)feat(server): add /preview/{port}/ proxy for cloud port exposure (gptme-cloud#910) (#3767) (
5e6083c91)feat(memory): add cross-harness lexical recall (#3740) (
d4bcf8658)feat(tools): add ToolSpec.read_only flag; auto-approve in cli_confirm_hook (#3733) (
9573ef16e)feat(memory): gptme.memory package + gptme-util memory CLI (layered roots, CC-compatible) (#3735) (
21334d854)feat(shell): stream one-shot command output while it runs (#3579) (
e3d15c571)feat(memory): add memory write tool for cross-runtime memory sharing (#3638) (
39810873a)feat(dataset): trajectory-to-env pipeline for fine-tuning dataset construction (#3719) (
86fc95533)feat(cli): add gptme capabilities export (#3705) (
6b7d53d1a)feat(harness): actuate request_tool_change — enable/disable tools mid-session (Phase 2) (#3656) (
d3b39582d)feat(lessons): class-aware dropout for validated_core (Phase 1) (#3700) (
fb8a511b5)feat(context): add context-scout pre-pass (cheap model identifies relevant files) (#3692) (
b5ecb8ff8)feat(knowledge): inject matching KB entries at session start (#3678) (
a89ef54b9)feat(providers): complete context compression plugin interface - Phase 2 (#3613) (
67de83b77)feat(shell): improve background job control (#3673) (
01b6ad50a)feat(tools): expose convert as auto-discovered structured tool (#3659) (
03529e2fa)feat(knowledge): cross-session KB save/retrieve as gptme-util CLI (#3622) (
b5152917d)feat(service-init): add optional local health probe (#3665) (
2ccf2ff02)feat(browser): skip html→markdown when server returns text/markdown (#3647) (
0565d1548)feat(doctor): add proxy URL format check (LLM_PROXY_URL) (#3645) (
c9193879b)feat(eval): route fable-5 and haiku-4.5 to tool format by default (#3655) (
1b23b5fb0)feat(tools): add offline file format conversion tool (#3595) (
b04893049)feat(ci): use config-driven root structure validator (#3654) (
0599fd6da)feat(memory): load Claude Code memory in gptme workspace context (#3626) (
f345aaeaf)feat(models): parallel-tool flags from provider docs; eval-format verdict (#3628) (
b6a797dc0)feat(media): add 32x32-optimized gptme icon (colour + monochrome) (#3583) (
3ddaacaab)feat(cli): auto-discover local Ollama and LM Studio providers (#3593) (
30e4b7f94)feat(skills): invoke skills as slash commands (/skill:
<name>) (#3587) (d22602fb9)feat(service-init): add launchd support for macOS agents (#3586) (
7c52dc6f9)feat(harness): audit assistant harness update requests (#3529) (
79750b000)feat(cli): add gptme service init scaffold for headless agents (#3574) (
d27f98d3a)feat(precommit): add check-root-structure hook from gptme-contrib (#3580) (
77010664a)feat(server): BYOK key validation — warn not block when provider unreachable (#3569) (
0fc8208e9)feat(shell): opt-in per-shell memory ceiling via GPTME_SHELL_MEMORY_LIMIT (#3565) (
7092325b2)feat(computer): allow out-of-tree transports via register_transport() (#3577) (
ddb9dea0f)
🐛 Fixes (123)#
Click to expand
fix(logmanager): acknowledge completion after transcript barriers (#3826) (
f95c7ed13)fix(knowledge): fall back to keyword search when RAG returns no live entries (#3867) (
e8f0e9989)fix(webui): resolve server-relative panel srcs against the instance API origin (#3861) (
97fdc483b)fix(cli): validate non-empty query in context retrieve/search-conversations; catch RuntimeError (#3852) (
90d251ce0)fix(eval): correct main’s docstring parameter name and semantics (#3858) (
69d02e4ef)fix(shell): restore cwd/env after a shell death and tell the model (#3844) (
c09a0b3e9)fix(tests): reset leaked shell workspace cwd state between tests (#3854) (
55be1b2aa)fix(webui): log readable auth-code exchange failure cause (#3853) (
9d576ba93)fix(cli): emit clean error on attest sign –out write failure (#3850) (
f32f045c3)fix(llm): _merge_consecutive must not merge parallel tool results with different call_ids (#3847) (
8dc34d3ff)fix(eval): keep token counts on timeout instead of zeroing them (#3845) (
53fd88323)fix(shell): wake idle sessions on background completion (#3843) (
5fa6b67ef)fix(webui): guard console-proxy injection against cross-origin iframes (#3840) (
424bd1df7)fix(cli): emit clean error on dataset export -o write failure (#3842) (
76113984e)fix(webui): guard undefined values before toLowerCase calls (#3841) (
1541e48c6)fix(tools): raise ValueError with tool name when init() returns None (#3835) (
7775e3f8b)fix(init): don’t warn when the optional model registry is absent (#3829) (
7c8570587)fix(shell): strip shell operators from tokens before sensitive-path check (#3806) (#3807) (
93c337cb5)fix(llm): use instructions_format[“tool”] verbatim for tool-schema descriptions (#3823) (
db484f284)fix(config): order model layers by specificity, unify resolution (#3825) (
d819a9196)fix(cli): emit clean error on status -o write failure, auto-mkdir parent (#3824) (
7c713aee4)fix(subagent): deliver subprocess control and capture stderr (#3819) (
99eadc0a2)fix(shell): scope set -e per block to prevent persistent errexit deaths (#3810) (
50d776486)fix(gh): dispatch structured ‘command’ kwarg calls (#3809) (
a17e63542)fix(shell): bound captured subprocess output bytes (GPTME_SHELL_MAX_OUTPUT_BYTES) (#3804) (
a5d356fa2)fix(llm): keep tool_call pairing for unavailable tools; dedupe auto-naming threads (#3800) (
a43d56930)fix(shell): parse
timescripts, stop false syntax errors, unwrap transparent wrappers (#3803) (517771546)fix(webui): persist demo conversations to sessionStorage to survive reload (#3796) (
328c62894)fix(llm): honor Retry-After during transient retries (#3797) (
9ccf7d0dd)fix(openrouter): always send data_collection=deny for reasoning models (#3788) (
83ea90c65)fix(memory): read index entries under the root lock (#3790) (
d07a89ab1)fix(benchmark): raise cold startup threshold 6.0 → 8.0s for CI noise margin (#3777) (
c9f1180aa)fix(server): do not execute caller-supplied agent fork commands (#3783) (
12a8be9ed)fix(shell): bound denylist matches to argument tokens (#3761) (
65d888f34)fix(server): detect “No provider configured” as config error in server fallback (#3784) (
9e46dee08)fix(docs/cli): mention subscription auth in no-provider error paths (#3775) (
8f8384965)fix(llm): fold non-leading system messages for models that reject them (fixes #3779) (#3780) (
f3f1fce54)fix(mcp): run TOOL_CONFIRM guardrails on MCP tool.execute() (#3776) (
34f1178e5)fix(shell): use poll() in _run_with_tty reader (#3715) (#3769) (
b5aec1818)fix(memory): reject reserved index names (#3772) (
88494416b)fix(shell): use poll() in background job reader (#3715) (#3770) (
aafe081a6)fix(codeblock): track triple-quote state in ipython blocks (#3704) (#3773) (
e6d488231)fix(acp): attach host-supplied MCP servers to sessions (#3771) (
c10397da4)fix(webui): use Bookmark icon for set-default (not Star — fixes confusion with favorites) (#3768) (
e905cf701)fix(webui): only show demo content in explicit demo mode, not on connect (#3754) (
8232933cc)fix(webui): drop auth-code bootstrap gate before the connection probe (#3751) (
4379da00b)fix(cli): render native tool calls as highlighted source (#3752) (
bd8e68526)fix(webui): stop event-stream banner from flashing on conversation open (#3753) (
9f54511ce)fix(cli): skip root scans and keep path inclusion interruptible (#3762) (
797f322b9)fix(cli): reject ambiguous positional resume IDs (#3763) (
ddbd6b42e)fix(webui): clear stop flag before edit/rerun/regenerate (#3744) (
21125a614)fix(codeblock): carry quote state across lines; close exec-lang blocks in streaming (#3730) (
af60f3292)fix(onboard): detect OAuth subscription providers (#3720) (
62f5e4fa1)fix(cli): show ‘gptme
<cmd>’ instead of ‘gptme-util<cmd>’ in error messages (#3749) (cd5e489ba)fix(review): explain repository-relative reads in isolated sessions (#3731) (
ea22cddc1)fix(review-pr): name the offending stdout line when JSONL parsing fails (#3747) (
337e0d2f4)fix(telemetry): keep startup diagnostics out of JSON stdout (#3732) (
7cb63efb7)fix(webui): pre-set generating state on new-chat placeholder to collapse microsteps (#3743) (
a53524527)fix(webui): repair dead conversations-list invalidation after create/delete/import (#3742) (
110a4eecd)fix(webui): suppress ‘Cannot reach’ banner while auto-connecting (#3739) (
b3b4501d4)fix(security): strip repo-local execution sinks from git inspection commands (#3727) (
b65f699d5)fix(tools): suppress duplicate terminal output for shell/IPython tools (#3708) (
8a176e21d)fix: reduce lesson/hidden-message log spam in TUI (#3738) (
83325b32f)fix(webui): navigate before server response in new-chat flow (#3729) (
a87301426)fix(cli): clean error on malformed
capabilities --from-jsonsnapshots (#3726) (e8f7ae2f5)fix(reduce): cache proactive_summarize_log result by middle-message content hash (#3620) (
133a4b567)fix(codeblock): skip depth-1 look-ahead for execution langs (shell, ipython) (#3703) (
1e7e5547c)fix(logmanager): bound trajectory write amplification (#3714) (
d7496cb5c)fix(security): upgrade cryptography 46.0.5→50.0.1 and h2 4.3.0→4.4.1 (#3723) (
b62ae3a1a)fix(cli,tests): unbreak
models list --jsonunder warning providers; scope the gh sleep patch (#3717) (002605256)fix(shell): use poll() instead of select() to survive fds above FD_SETSIZE (#3716) (
ebeb21f57)fix(cli): handle capabilities output write errors (#3724) (
2789cef63)fix(cli): suppress ANSI in redirected tools list (#3712) (
a3902b8a0)fix(server/tasks): reject invalid task IDs at API routes with 400 (#3711) (
582ce5b58)fix(browser): gate PDF fetches with the shared URL helper (#3685) (
d6f9a4724)fix(dirs): treat empty/whitespace env vars as unset; guard profile_name (#3660) (
f22745729)fix(cli): reject negative context tree depth (#3713) (
46e6dff06)fix(telemetry): suppress repeated export errors after first occurrence (#3707) (
b1e9f037d)fix(server): make /api/v2/server/health unauthenticated for monitoring integrations (#3702) (
c5aee1038)fix(models): stamp default_tool_format on dynamic listing constructors; serialize in model_to_dict (#3681) (
8a44e8a03)fix(shell): require confirmation for git-credentials and gptme config.toml reads (#3686) (
3a929b4d0)fix(knowledge): don’t block on gptme-rag index after save/delete (#3691) (
63cb9f24d)fix(llm): stop double-retrying and survive 429s in interactive mode (#3669) (
7294393dc)fix(util): handle embedded nulls in batch prompts (#3682) (
f8354a042)fix(webui): gate task creation in demo mode (#3684) (
b84ee8a3a)fix(llm): pin Codex session_id to conversation instead of uuid4 per turn (#3679) (
9f607ea2d)fix(server): return 400, not 500, for non-dict JSON bodies on tools QUERY and steer (#3676) (
77661b958)fix(convert): handle non-UTF-8 converter stderr without crashing (#3677) (
f5ae30fcf)fix(prompts): move profile system prompts before cache boundary (Phases 2+3) (#3616) (
b8501f86c)fix(models): per-model parallel-tool opt-out via PARALLEL_TOOL_CALL_EXCEPTIONS (#3633) (
1a1a3f8cf)fix(cli): suppress all shortcut dispatch after double dash (#3670) (
59ca891e7)fix: match Claude Code’s cwd→project-dir encoding (CC memory + agent hook) (#3672) (
dc593da2c)fix(cli): reject unknown bare –model names before get_prompt() (#3640) (
f4d71ca6a)fix(security): route git subprocesses through GIT_CMD in review-pr and 3-way merge (#3674) (
00fe1fef5)fix(tests): join subagent threads before teardown in TestParentContextForwarding (#3675) (
8213fe835)fix(config): workspace fallback must not use process cwd (P1 follow-up from #3639) (#3657) (
9db4f880b)fix(cli): forward nested help to utility shortcuts (#3630) (
e8028b797)fix(browser): harden lynx URL validation (#3663) (
78ff262b9)fix(shell): route all commands through TOOL_CONFIRM hook chain (closes #3598) (#3636) (
d4a6b8f65)fix(convert): register gptme-convert console script and fix error message (#3658) (
1ad650ae3)fix(tests): give subagent thread-join guard a real liveness budget (#3662) (
c574b83d3)fix(tests): stop pytest-retry x tmp_path teardown KeyError failing green runs (#3661) (
c922c9b38)fix(compat): improve Windows and cross-platform compatibility in tools and tests (#3639) (
7e7430428)fix(status): serialize list/dict provider values as JSON in table format (#3651) (
9b1d7fb06)fix(cli): support stdin dash in slop check (#3650) (
958ca6b47)fix(tests): assert webui html hint by content, not by index (#3635) (
3a2af3318)fix(tests): scope pytest timeouts to the function so retries can’t INTERNALERROR the run (#3634) (
f636b9f70)fix(server): preserve webui html hint on config patch (#3521) (
91caf5fd6)fix(prompts): keep volatile context after cache boundary (#3615) (
476e8f7a4)fix(models): propagation gap + default_tool_format for OpenAI-compat providers (#3566) (
6a20ca2ed)fix(webui): recover local-server bearer handshake after #3430 (#3606) (
717df0715)fix(webui): stabilize multi-server query results (#3602) (
ea78d4658)fix(server): use os.write() and re-entrance guard in SIGTERM handlers (#3623) (
13284c336)fix(server): guard startup SIGTERM handler against overriding custom handlers (#3597) (
69ad48725)fix(server): treat missing X display as screenshot-unavailable (#3612) (
2e571b362)fix(server): don’t let step() finally clear a continuation reservation (#3592) (
a46d9ea20)fix(service-init): make the scaffolded agent actually run gptme (#3609) (
7641c015f)fix(server): install SIGTERM handler before slow init to prevent silent failure (#3591) (
3cd609a9f)fix(precommit): update gptme-contrib rev to post-#1479 merge (#3584) (
904de13a1)fix(tauri): include pyproject.toml and lock file in sidecar freshness check (#3573) (
fe99c6635)fix(android): open cloud sign-in in the system browser, not the app WebView (#3578) (
f206f94a5)
🔨 Misc (42)#
Click to expand
chore: bump version to 0.34.0 (
5a8912b64)docs: position cross-harness memory in README and site (closes #3734 item 8) (#3871) (
3fb432ce7)docs: point the hooks comment at the subagent package (#3859) (
4fb6a6c86)refactor(webui): extract presentational PromptTextarea shell from ChatInput (#3872) (
d78b94314)chore: move root-structure allowlist under .github and drop gptme-extension tombstone (#3868) (
47cdf776c)test(shell): pin no-retry invariant by watching stdin writes after EPIPE (#3860) (
08ce4995b)test(webui): cap jest maxWorkers at 4 to prevent container thrash (#3862) (
b827a9db4)docs: fix a TOC anchor and the moved-extension link (#3857) (
d33d60647)test(llm): strip ANSI codes before asserting IPython source in terminal output (#3856) (
e81224353)docs: add CITATION.cff and a Citation section to README (#3855) (
dff9d0e33)test(lessons): stop seeding the global RNG in dropout tests (#3851) (
e60462be2)refactor(shell): background whole tool calls and fix exit stalls (#3802) (
3411afec5)docs(readme): refresh demos with current screenshots and better asciinema thumbnails (#3837) (
deb26dc71)docs: update timeline and README news through September 2026 (#3836) (
be6e3b256)docs(readme): replace broken starchart.cc chart with gptme/stats (#3838) (
d8f5720d9)docs(contributing): note toolchain drift between venv, lockfile and hooks (#3830) (
f3b9c64bc)docs: restructure navigation and page structure (#3813) (
d4c57d992)test(memory): assert legacy reads stay bounded (#3815) (
13be6aabf)refactor(shell): parse Bash with tree-sitter and retain legacy fallback (#3808) (
4a7aff453)docs: rewrite finetuning page as a working, measured recipe (#3778) (
7bcd9ae61)ux: hint how to enable disabled-by-default tool in error message (#3748) (
9a0c2408a)test(webui): exercise live auto-connect banner transition (#3741) (
f184a1532)docs(readme): tag gptme.ai acquisition link (#3725) (
43786e7da)docs: separate agent runtimes from providers (#3694) (
076e433cc)test(codeblock): load fixture files with pathlib so tests pass on Windows (#3637) (
5d40b35dc)docs: point the free on-ramp at live OpenRouter models (#3671) (
d94dbe1bd)docs(mcp): surface bidirectional server support in README (#3664) (
5039ad147)docs(providers): link template and add integration FAQ (#3649) (
5a972d4f9)refactor(autocompact): rename /compact modes to ‘trim’ and ‘summarize’ (#3621) (
6c0a3f57d)docs(getting-started): add free cloud providers section (OpenRouter, Gemini, Groq) (#3631) (
fc98c881a)refactor(agent-cmd): clarify scan scope and add create cross-references (#3619) (
19e03514f)test(webui): add opt-in vision_assert helper for generation E2E (#3607) (
dba4af2c3)docs: add curated skills gallery page to gptme.org (#3605) (
170d87681)refactor(service-init): consolidate and document gptme-agent-template reference (#3614) (
e7107777e)docs(hooks): document TOOL_CONFIRM deny semantics and return contract (#3611) (
0e3fb1aa7)test(subagent): de-flake test_subagent_wait_polls_cache_after_join_timeout (#3610) (
fccc316f4)docs(plugins): fix hook type names and add TOOL_CONFIRM guardrail example (#3608) (
0b1897cf1)docs: add headless agents section with gptme service init example (#3588) (
a4d403a91)test(server): add subprocess integration test for server startup (#3589) (#3590) (
6e4e0015b)test(webui): add regression test for BYOK 422 invalid-key rejection (#3545) (#3581) (
b36c05f41)docs: document subscription auth (ChatGPT Plus/Pro, SuperGrok) in README and providers docs (#3582) (
433f47f28)
(excluded 7 less relevant commits)
Full Changelog: https://github.com/gptme/gptme/compare/v0.33.0…v0.34.0