v0.29.0#

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

Contributors#

Thanks to everyone who contributed to this release:

@erikbjare, @TimeToBuildBob

Changelog#

Changes since v0.28.3:

📦 gptme#

✨ Features (39)#

  • feat: improve token awareness to show warnings at meaningful thresholds (fce2382a)

  • feat: make hook parameters consistent across all hook types (2e71dcc9)

  • feat: expose MCP tool commands as slash commands (#760) (2a89022f)

  • feat(mcp): add MCP discovery and dynamic loading support (#685) (e8af7604)

  • feat: add token & time awareness tools/hooks (#665) (c0391ddd)

  • feat: show conversation ID in goodbye message (ad5bc4d0)

  • feat: add gptme-util prompts expand command (fb543142)

  • feat: add –profile flag for performance profiling (9ce6e3e8)

  • feat(shell): add configurable shellcheck exclude codes (#747) (46a54148)

  • feat(shell): add simple shellcheck validation (#740) (20f28f6b)

  • feat(lessons): add message pattern-based mode detection for Phase 3 (#722) (fc131775)

  • feat: switch CI from claude-3-5-haiku to claude-haiku-4-5 (#712) (64e04708)

  • feat(llm): add support for Claude Haiku 4.5 (#705) (e48fcd2f)

  • feat(lessons): implement status filtering for lesson lifecycle management (#702) (be25b397)

  • feat: support @log workspace magic value in API (#695) (9fc71ad1)

  • feat: save removed tool outputs during auto-compacting (186ac031)

  • feat(gh): add optional commit_sha parameter to check specific commits (3df3c44f)

  • feat(lessons): add configurable lesson directories via gptme.toml (0a05ec61)

  • feat(gh): add quick status check command (76c67881)

  • feat(gh): show run IDs for failed checks and add –log-failed example (c3f131c3)

  • feat: enhance lesson matching with tools and history-based deduplication (5aefbe37)

  • feat(llm): add configurable API timeout for OpenAI-compatible providers (#681) (6a2d532f)

  • feat: enhance GitHub PR reading with code context and suggestions (#689) (4c1cef43)

  • feat: implement basic lesson system with metadata and auto-inclusion (#687) (3e81a0d2)

  • feat: add tool_format to telemetry and remove redundant log (d59332ab)

  • feat(browser): add Accept header to prefer markdown/plaintext over HTML (#680) (f92ab671)

  • feat: improve conversation history context (#679) (35c303d3)

  • feat(shell): add 20-minute default timeout to prevent stuck commands (#678) (526da1cb)

  • feat(telemetry): add hostname to resource attributes (#676) (0d77253f)

  • feat(telemetry): add agent name and interactive mode metadata (#675) (206ff1fb)

  • feat: reintroduce OpenAI and Anthropic telemetry instrumentation (d4b031f0)

  • feat: add GENERATION_PRE hook trigger before LLM generation (f69c3d37)

  • feat: add concise repr to Log class (b9485b98)

  • feat: implement auto-reply mechanism as LOOP_CONTINUE hook (de79d5ba)

  • feat: implement /compact and auto-compacting (#645) (61392fc0)

  • feat: implement comprehensive hook system and command registration (#156) (#660) (32d39817)

  • feat: auto-restore todo state when resuming conversations (#659) (debcb096)

  • feat: implement complete tool and auto-reply mechanism for autonomous operation (14952de1)

  • feat: emit hint when save tool barely changes file (1601f5e8)

🐛 Fixes (77)#

Click to expand

  • fix: fix issue with hook args (4fa95612)

  • fix: correct complete_hook signature to match GENERATION_PRE calling convention (90a12f9c)

  • fix: handle pipe operators inside quoted strings in shell commands (#764) (5f80b533)

  • fix: skip generating initial messages when resuming conversations (#763) (2898e79d)

  • fix: add special haiku-adapted to_xml (for testing) (cc868960)

  • fix(tools): add support for Haiku 4.5 XML format (#752) (96f87e43)

  • fix: run auto-naming in background thread to avoid blocking CLI (1d17674f)

  • fix: fix anthropic non-streaming requests being denied during auto renames (#759) (397634ab)

  • fix: disable time and token awareness hooks by default (until issues are fixed) (6b6ad577)

  • fix: skip tests when missing extras (#754) (d4095036)

  • fix(mcp): add resilience with auto-restart and retry on connection failures (#719) (d30fd6ca)

  • fix: improve tool instructions, add pyyaml dependency (#755) (696f1430)

  • fix: lower ding log message level from info to debug (41d604d9)

  • fix(shell): fix pipe handling and add telemetry error filter (#750) (3bb57151)

  • fix: improve handling of keyboard interrupts in precommit and autocommit hooks and commands (8ea8db89)

  • fix: include tool-registered commands in autocomplete (25c9772a)

  • fix: fixed log formatting of included lessons (a95ac3f7)

  • fix(llm): extend Anthropic retry logic to handle all transient 5xx errors (#746) (418b4669)

  • fix(llm): use client defaults for timeout instead of explicit value (#735) (0e3dcbcc)

  • fix(llm): update deepseek models context window to 128k (#742) (dca014fe)

  • fix: some telemetry fixes (#737) (8b10eef6)

  • fix(shell): handle file descriptor redirects and complex tool syntax (#736) (5207e421)

  • fix: include duration in tool call telemetry (d7dfb9c9)

  • fix: ensure MCP tools reload with updated config (#731) (a46e6799)

  • fix(shell): handle compound commands (for/while/if loops) correctly (#725) (64f7d7c4)

  • fix(shell): handle compound operators and preserve tilde expansion (#730) (1213b372)

  • fix: extend context script timeout to 60s, log warning if it takes >10s (a5274983)

  • fix: log message when lessons included (45ef8d95)

  • fix(eval): set tool_format before LogManager.load() (#726) (f9403a1f)

  • fix(tests): skip test_subagent for claude-haiku-4-5 due to timeout (#728) (6165feb3)

  • fix(shell): redirect stdin in pipelines to prevent deadlock (#715) (350d87d1)

  • fix(codeblock): improve nested block detection to fix XFAIL tests (#711) (d3de4165)

  • fix(auto-naming): strip think tags from LLM responses (#716) (ec6224b7)

  • fix(shell): include heredoc content when splitting compound commands (#714) (d6b256b6)

  • fix(openai): preserve tool results in gpt-5 models (#713) (a9616f78)

  • fix: set disallowed_special=[] for encode in len_tokens (e6629375)

  • fix: correct haiku pricing (8e986ea6)

  • fix: fix metadata for haiku (9513741b)

  • fix(anthropic): add timeout configuration to prevent indefinite hangs (#701) (23fa89f3)

  • fix(anthropic): handle status 529 overload errors (#697) (5f851d10)

  • fix(complete): allow up to 2 auto-replies before exiting autonomous mode (#696) (fd94f689)

  • fix(autocompact): prevent backup filename growth with repeated compactions (#693) (ad7e1574)

  • fix(tests): update remaining lesson tests to mock _get_lesson_index (#694) (b1d3d775)

  • fix(autocompact): reduce limits to avoid Anthropic token approximation errors (a382baaa)

  • fix(tests): replace tmp_path with tempfile to avoid pytest-retry KeyError (2825a9a5)

  • fix(tests): update tests for lesson system changes (78743917)

  • fix(gh): poll original commit checks even if PR head updates (09f1622f)

  • fix(tests): update exception test to mock cached index getter (36b5b6a1)

  • fix(gh): add logging for check polling (c8494836)

  • fix: extract tool name correctly from codeblock lang (fc874f30)

  • fix: cache lesson index per-thread to reduce log noise (bc3364c3)

  • fix: prevent duplicate tool loading warnings in evals (#690) (fa4e40a0)

  • fix: show full path in patch tool output (dc1c8458)

  • fix(anthropic): set temperature/top_p only for models not supporting reasoning, even if thinking disabled (as if due to –tool-format tool) (9eb0c704)

  • fix: remove emoji from OTLP log message (dc0ae258)

  • fix: remove redundant log message (cc2262ee)

  • fix: shortened telemetry startup log (4467046d)

  • fix(ci): pin openai version in pre-commit mypy config (#682) (565a3a3f)

  • fix(telemetry): Strip http:// prefix from OTLP endpoint for gRPC (87985904)

  • fix(telemetry): switch to using OTLP for both metrics and traces (#668) (0bf1839b)

  • fix: improved prompting for complete tool (#674) (5bfb8440)

  • fix: fixes complete, autocommit, and pre-commit hooks (#672) (ba81cb24)

  • fix: fixes to CLI params with Click 8.3 (#670) (718d5545)

  • fix(config): always apply CLI defaults for stream and interactive (c1571069)

  • fix: pass workspace and manager args to GENERATION_PRE hooks (f2818334)

  • fix: use trigger_hook function to properly trigger hooks (5d84602d)

  • fix(complete): handle Log objects in complete_hook (1e4ff12f)

  • fix(autocompact): handle Log objects in hook (bc64b55d)

  • fix(complete): stop session immediately after complete tool (be0282b8)

  • fix: prevent infinite loop when hooks fail (06081068)

  • fix: reduce verbosity in hook error logging (67aa156b)

  • fix(shell): prevent editors from breaking terminal state (8f5b436b)

  • fix: prevent cache_control on empty text blocks in Anthropic API (#653) (e19f4fd8)

  • fix: improved complete tool detection in chat loop (2645dab6)

  • fix: increase number of past conversation summaries in system prompt to 5 (d151017f)

  • fix: handle nested code blocks in patch blocks correctly (42cff496)

  • fix: add version header and correct heading levels in release notes (51c4066b)

🔨 Misc (42)#

Click to expand

  • chore: bump version to 0.29.0 (556b0621)

  • test: added xfail tests for patch with relaxed matching for whitespace-only lines (7f813225)

  • refactor: enable ruff import sorting and sort all imports (3dbd45bd)

  • test: fix token_awareness tests to handle threshold-based warnings (8d5a40c3)

  • chore: add worktree/ to gitignore (899d94dd)

  • refactor: simplify and improve typing of hook signatures (#765) (e003b285)

  • test: mark flaky test with xfail (a52a846b)

  • docs: add nitpick ignore for failing targets (819ad518)

  • refactor: use manager.workspace instead of threading workspace parameter (c90f55d4)

  • test: added xfail shell test (3d4da112)

  • test: fixed missing parameter in test (38b0bc8e)

  • refactor(cli): move auto-naming from logmanager to chat.py (#757) (bf2fae75)

  • tests: remove flaky/slow/stalling test (5dd354d7)

  • docs: fixed docstring formatting (9dc9cdf2)

  • docs: complete /edit command demo documentation (#734) (d66e76e7)

  • test(codeblock): add streaming mode variants for header+backticks tests (#721) (8bc29a4b)

  • tests: adjust allowed prompt sizes with buffer in non-CI environments (b2ccf215)

  • tests: fix tests to check for response type (48a3eaae)

  • test(codeblock): remove xfail markers from passing header tests (#718) (320cc4b8)

  • tests: comment out bad assert (4777e9d5)

  • docs(alternatives): add Hosting and Funding columns to comparison table (#698) (f22195f5)

  • test(codeblock): add edge case tests for nested markdown blocks (#704) (36646f93)

  • docs: suggest uv tool install as pipx alternative (23f9b2c5)

  • revert: restore tmp_path in setup_conversation fixture (2e5fdd35)

  • docs: simplified python lesson (b16580bd)

  • docs(lessons): add uv shebang for directly executable scripts (5aa47af6)

  • docs(lessons): rewrite Python lesson with practical gptme-specific guidance (af96ecc8)

  • refactor(gh): extract common check fetching logic and address review comments (e7d9acc7)

  • docs: exclude lessons from Sphinx build (7119fb4c)

  • docs: add example lessons for testing lesson system (fc54397d)

  • docs: improve server docs, mention gptme.ai (1850de88)

  • docs: comprehensive streaming bug investigation report (2ad5d258)

  • Revert “fix(config): always apply CLI defaults for stream and interactive” (001afd13)

  • debug: add logging to complete_hook for diagnosis (e7b2e40e)

  • refactor: consolidate auto-compact/precommit functionality into tools (#666) (8c12b806)

  • docs(shell): move timeout config from agent instructions to module docstring (#662) (fabdf981)

  • test: document actual behavior of ambiguous bare backticks (3e7841bc)

  • test: add comprehensive nested codeblock tests (42df7d90)

  • chore: remove build_changelog.py, now available upstream (22a316dd)

  • refactor: simplify version header logic in build_changelog.py (4e24c182)

  • docs: fixed changelog index (e7b276b0)

  • chore: improve changelog version detection and update contributors (6e200052)

Full Changelog: https://github.com/gptme/gptme/compare/v0.28.3…v0.29.0