github gptme/gptme v0.31.1.dev20260622

pre-release4 hours ago

v0.31.1.dev20260622

These are the release notes for gptme version v0.31.1.dev20260622.

Contributors

Thanks to everyone who contributed to this release:

@ErikBjare, @TimeToBuildBob

Changelog

Changes since v0.31.1.dev20260608:

📦 gptme

✨ Features (88)

  • feat(cli): add context search-conversations subcommand for RAG conversation search (#2971) (07f3c1b3f)
  • feat(subagent): add subagent_list() tool for observability (67235e921)
  • feat(subagent): add redact_secrets option for context isolation (#2950) (27e6942fe)
  • feat(logmanager): append-only event log for session durability (Phase 1) (#2956) (94f0c6e79)
  • feat(server): add /api/v2/version endpoint (Slice 2) (#2954) (b865baecb)
  • feat(server): add API version constants, contract_revision, and X-API-Version header (#2952) (9d005b0fb)
  • feat(webui): chat UI polish — role-aligned message footer + Chat-button sidebar toggle (#2947) (7b44dbee2)
  • feat(cli): add gptme-resume subcommand for lossy session rehydration (#2933) (59728c6ae)
  • feat(cli): add gptme-util snapshot list subcommand (#2932) (002c94806)
  • feat(webui): fork conversations from any message (#2923) (a36df3ef2)
  • feat(llm): add built-in offline mock provider (c92bc5a2a)
  • feat(subagent): progress tool — intermediate parent notifications during long tasks (#554) (#2921) (5de530f34)
  • feat(ci): run webui e2e tests against both stable and dev gptme (5b3f8364b)
  • feat(shell): suggest subagent when cd enters workspace with gptme.toml (#554) (#2920) (15aee6267)
  • feat(subagent): clarification mechanism — subagents can pause and ask parent for more info (#2906) (c723802e7)
  • feat(doctor): add computer use prerequisite checks + run-docker-computer target (#2908) (3763dcca7)
  • feat(webui/stt): add sttAuthToken setting for cloud-authenticated STT (#2903) (7b21c1a1b)
  • feat(profiles): add structured-first backend selection to computer-use profile (#2907) (70546a9ed)
  • feat(computer): add window_focus action for reliable new-window targeting (33d59fd4a)
  • feat(computer): add wait_for_change action for context-efficient UI loops (#2898) (28bef9c84)
  • feat(subagent): configurable max_concurrent cap with semaphore gating (#2892) (e3c553c95)
  • feat(tools): as_function_subtoolspecs() — invoke tool functions without IPython (#2899) (a02099cc9)
  • feat(snapshot): add --dry-run / -n flag to /snapshot prune (#2897) (264d7a7cf)
  • feat(scripts): add treeofthoughts.py — eval-guided tree search for agents (#495) (#2900) (d1100e782)
  • feat(webui): add 'Try the offline demo' CTA to disconnected state (#2902) (bf78ad3cf)
  • feat(webui/tts): add ttsAuthToken setting for cloud-authenticated TTS (00e6c3892)
  • feat(util): add --output-format json to gptme-util llm generate (#2896) (062ab2c89)
  • feat(tools): add root-cause classification to stuck_detect_hook (#2895) (7137fc796)
  • feat(util): add --max-tokens and --temperature to llm generate (#2894) (e3d73858d)
  • feat(tools): ToolSpec.from_function() + parameter extraction in from_callable (#2893) (9a098fbfd)
  • feat(rag): add rag_index_conversations for indexing past conversations (#2883) (882019e31)
  • feat(snapshot): add /snapshot prune subcommand (#2887) (a2b069329)
  • feat(subagent): add subagent_cancel() + tests for resolve_role_defaults (#2889) (1319c19ef)
  • feat(tools): hint-based allowlist and MCP annotation hints (#2890) (7d818cf80)
  • feat(llm): route gptme cloud models through their real backend SDK (#2876) (b61f2560c)
  • feat(tools): introduce ToolFunction abstraction for structured callable metadata (#2880) (00a45bdaa)
  • feat(snapshot): embed conversation message count for diff summary (#2886) (d0baa64a4)
  • feat(computer): add scroll action for mouse wheel support (#2884) (7e0de973a)
  • feat(subagent): forward subprocess/isolated defaults from planner subtask roles (#2881) (9eb57759f)
  • feat(commands): add /snapshot command for agent tree search (#495) (#2885) (83f78db49)
  • feat(tools): add view_anchored and patch_anchored tools (Gate G2) (#2882) (74713885e)
  • feat(commands): add /backtrack for in-session conversation recovery (#2878) (ca29f94f3)
  • feat(webui): thread log_offset through conversation state for windowed pagination (Slice 1) (#2872) (c4d7e42bf)
  • feat(openai): enable Responses API by default for gpt-5/o-series models (#2869) (9e3a72e85)
  • feat(server): add /api/v0/metrics Prometheus endpoint (#2870) (4a7e7f36e)
  • feat(server): add limit/before message pagination to conversation GET (#2861) (dd968bcdf)
  • feat(server): add ?q= filter param to conversations API with server-side webui search (#2864) (6a8eaf55c)
  • feat(webui): add sort control to conversation list (Recent/Longest/A-Z) (#2865) (50e36b977)
  • feat(server): cursor-based pagination for conversations list (#2860) (4a909d2fd)
  • feat(webui): server-backed star/unstar for conversations via metadata sidecar (#2848) (962d86065)
  • feat(cli): add --no-workspace flag to skip all workspace context (#2853) (41628ff9e)
  • feat(extension): add conversation history (#2760) (58e9f7e43)
  • feat(cli): add startup prompt stats report (#2843) (3eee34a41)
  • feat(eval): surface per-task tool-call count (tool-efficiency metric) (#2844) (0ec74c311)
  • feat(webui): show conversation stats in list using list-response data (#2841) (f328d7d10)
  • feat(webui): add settings-level STT provider choice (browser vs server) (#2840) (b8832e46b)
  • feat(eval): add narrow swebench install extra (#2837) (5bd8ccd8f)
  • feat(webui): add / keyboard shortcut to focus conversation search (#2838) (7adc7ba1c)
  • feat(webui): show relative timestamps on messages with auto-refresh (#2828) (b7f7dda26)
  • feat(config): add context_exclude glob patterns to [prompt] in gptme.toml (#2831) (6c81eae71)
  • feat(server): expose message_count and last_updated in conversation list (#2833) (0f791e8cc)
  • feat(webui): persist conversation search query in URL ?search= param (#2834) (cd0a87bd8)
  • feat(webui): highlight matched search terms in conversation list titles (#2832) (783d5bab8)
  • feat(webui): add conversation list search/filter (#2827) (9fb50d57c)
  • feat(webui): add persistent no-confirm (YOLO) mode setting (#2825) (c5cc33586)
  • feat(webui): show message count as badge on conversation title line (#2823) (116defea7)
  • feat(webui): add keyboard shortcut (Ctrl+Shift+) to toggle split view (#2816) (5560bd7b6)
  • feat(webui): add URL subroutes for settings category deep-linking (#2824) (a7a93db98)
  • feat(server): add A2A JSON-RPC MVP (#2763) (cb601a600)
  • feat(webui): add per-pane conversation selector in split view (Slice 2) (#2817) (a7c852816)
  • feat(artifacts): format-independent file-write parsing + diffs (#2818) (7d496f481)
  • feat(webui): add TTS engine selector (browser / gptme-server / gptme-tts) (#2815) (ab655640b)
  • feat(artifacts): include workspace files created/modified by the conversation (#2814) (85b8b8d2b)
  • feat(webui): show active model in conversation header (#2812) (75cbfc6b0)
  • feat(ci): self-heal Phase 2 — auto-open draft fix PR on structured gate pass (#2813) (44f9f2939)
  • feat(webui): add split-pane conversation view (Slice 1 — layout skeleton) (#2776) (5713eb7d5)
  • feat(webui): add /settings route with full-page settings view (#2806) (ba34a85f3)
  • feat(webui): model favorites, set-as-default, and picker scroll fix (#2801) (7eabaeebf)
  • feat(webui): toggle/stop TTS playback from the message button (#2803) (1595ad8e2)
  • feat(cli): add --format table option to gptme-util status (#2797) (8db1b3805)
  • feat(webui): auto-poll provider health every 60s; add degraded badge on settings icon (#2792) (c8f33ee17)
  • feat(webui): add Alt+N global shortcut for new conversation (#2779) (b7722965b)
  • feat(server): add provider health endpoint and webui panel (#2775) (ba1cf5992)
  • feat(webui): add server-side TTS endpoint via OpenRouter (#2795) (7fb8051a2)
  • feat(webui): add OpenRouter STT fallback for unsupported browsers (88b87ecfc)
  • feat(server): add detail query param to conversation list endpoint (#2791) (332fc2dfb)
  • feat(plugins): discover src-layout plugins, layer user [plugins], lenient +tool (#2781) (6b6985124)
  • feat(webui): add browser TTS for assistant messages (Slice 1 — Web Speech API) (#2778) (f7dcbb8bd)

🐛 Fixes (54)

Click to expand

  • fix(shell): only show workspace-detected hint once per workspace (#2973) (d5f0ca312)
  • fix(server): return 400 on config-file PATCH with non-table traversal (#2970) (b3be71cc9)
  • fix(subagent): make redact_secrets=True the default (secure by default) (#2963) (34177187c)
  • fix(server): return 400 not 500 for unknown chat config keys (#2962) (a3648ce82)
  • fix(config): tolerate PermissionError in ChatConfig.from_logdir workspace mkdir (#2959) (9fc58a224)
  • fix(tests): mock thread creation in test_subagent_status_returns_dict (#2957) (c4ba4bb4f)
  • fix(server): prevent external-sessions endpoint from hanging on large session catalogs (#2953) (833ad614e)
  • fix(cli): make tokens count --file - read from stdin (#2951) (7778caa3f)
  • fix(tools): normalize bare callables in ToolSpec.functions (server won't start with plugins) (#2946) (287e1cefa)
  • fix(webui): code-block rendering improvements + emoji additions + star move (#2945) (7a76048c6)
  • fix(cli): validate model provider early, before context_cmd runs (#2941) (133cfaec2)
  • fix(server): enforce workspace containment at config PUT/PATCH boundary (#2943) (b0f5f3adb)
  • fix(server): preserve 'files' field in PUT /api/v2/conversations/:id messages (#2942) (d3331d5d0)
  • fix(test): use json.dumps for valid JSON in kimi_k2 test (#2936) (83dbacff2)
  • fix(webui): extract ConversationItem to module level (#2935) (3d104c1d2)
  • fix(server): accept --tools none to disable all tools (#2931) (b7ac9649c)
  • fix(webui): avoid sidebar log scans (#2924) (e94bf2c0e)
  • fix(webui): skip hosted loopback probe for first-time users (#2922) (f1bf1d472)
  • fix(webui): tolerate legacy non-paginated conversations response (#2916) (#2917) (32694bc4b)
  • fix(server): handle OSError in workspace API endpoints (ENAMETOOLONG crash) (#2915) (4ac4eeb26)
  • fix(webui/demo): skip provider health + user settings fetches in demo mode (#2905) (419fb23d0)
  • fix(llm): invalidate gptme gateway client on reinit (#2876 follow-up) (#2888) (ab634d581)
  • fix(webui): collapse single hook system messages in chat view (#2879) (18469440c)
  • fix(server): return 400 for non-positive limit in conversations API (#2877) (78f0c0583)
  • fix(server): tolerate pre-existing workspace symlink in ChatConfig.from_logdir (#2874) (94d0c16c3)
  • fix(server): improve model validation error messages with examples (#2873) (53555a994)
  • fix(models): validate provider default model entries + update groq default (#2871) (b17c96066)
  • fix(server): validate model type in config PATCH to prevent 500 (#2868) (4398aedeb)
  • fix: two startup hangs — skip OpenRouter fetch for bare model names, non-blocking piped stdin (#2867) (8789034ef)
  • fix(server): preserve messages field on cached conversation list responses (#2859) (9e381a4bf)
  • fix(server): scope conversations cache to active logs dir (#2856) (f5102088e)
  • fix(webui): reduce redundant conversations API calls on page load (#2857) (f0bb73e62)
  • fix(webui): add semantic landmarks, aria-current, and aria-selected for keyboard navigation (#2849) (0306c23a0)
  • fix(complete): auto-reply kill-switch now detects both auto-reply variants (#2846) (4c1f19ed1)
  • fix(webui): add Escape-to-navigate-back for full-page settings view (#2845) (368ffc9d2)
  • fix(webui): update ConversationList test to handle highlighted search terms (#2835) (0e689c178)
  • fix(cloud): parse max_completion_tokens for gptme provider models (#2826) (254c7136e)
  • fix(webui): make clickable selection rows keyboard-accessible (#2829) (09c20db4b)
  • fix(cloud): route LLM API calls to Supabase edge functions, not fleet.gptme.ai (#2820) (f70206540)
  • fix(webui): make Escape key and interrupt logs consistent with isBusy (b703f8931)
  • fix(server): graceful shutdown on SIGTERM (#2821) (1d02a613c)
  • fix(tools): report unavailable tools accurately instead of 'invalid choice' (#2809) (a4b310976)
  • fix(hooks): hide injected agent-instructions from conversation view (#2807) (ec2dbdb24)
  • fix(webui): don't flush queued messages during tool confirmation (#2808) (dd8b1a124)
  • fix(webui): sync model selector when switching conversations (#2804) (9319f63d4)
  • fix(cli): reject malformed model paths (#2798) (9d4e7d70c)
  • fix(server): validate edited message file paths (#2762) (3ab1b592a)
  • fix(webui): UI polish (input radius, code blocks, avatar, health badge) (#2802) (a73e71053)
  • fix: conversation load crash chain (server symlink 500 + webui dataless crash + error surfacing) (#2800) (42dc02f8d)
  • fix(webui): request fast conversation list detail (#2796) (1be7efa74)
  • fix(plugins): recurse nested src-layout tool packages (#2793) (97a37bec2)
  • fix(ci): pin self-heal logs to triggering attempt (#2777) (675b1d71b)
  • fix(browser): use tabs instead of new windows for CDP connections (#2723) (1b0b9c5a9)
  • fix: clear normal_display_buffer on <think> tag detection to prevent double output (b1bac08e0)

🔨 Misc (23)

Click to expand

  • chore: bump version to 0.31.1.dev20260622 (ac4335dd2)
  • perf(hooks): batch process cmdline scan in workspace_agents (#2972) (6d3bd90d3)
  • docs(config): add model selection guide and provider-key reference (#2955) (fd9af1eed)
  • test(server): perf gate for GET /api/v2/conversations with 100 conversations (#2937) (7a343dcfa)
  • perf(server): partial cache update on message POST to avoid O(N) rescan (#2934) (e9b7c9e80)
  • chore(deps): group dependabot minor/patch bumps into single PRs (#2926) (d7fd59f8a)
  • docs(commands): document /snapshot and /backtrack commands (#2891) (995eb6946)
  • refactor(llm): extract shared Responses API event loop into openai_responses.py (#2875) (018329133)
  • perf(tools): lazy-load mcp.types and bashlex to reduce startup time (#2862) (949761c1e)
  • perf(server): add ETag conditional request support for conversations endpoints (#2863) (e20ef6405)
  • perf(server): skip branch glob on fast scan, dedupe stat, drop debug log (#2854) (d37c69c9d)
  • docs(howto): remove inaccurate --no-workspace equivalence claim (#2858) (1cae5798f)
  • perf(server): enable gzip compression on API responses (#2852) (2e4bd56b1)
  • test(complete): cover cross-variant auto-reply exit counting (#2847) (1aaca3bcf)
  • test(webui): add Playwright e2e keyboard navigation tests (#2839) (3f62f130c)
  • test(server): add PATCH edit-message and DELETE message edge-case tests (#2830) (683d38fac)
  • docs: add model-routing guide — pick your model per task (#2810) (7fd564faf)
  • docs(config): document [models] section — default and favorites keys (f27f8c946)
  • refactor(webui): group Settings → Servers into collapsible sections (#2805) (95e5385db)
  • test(tauri): add E2E chat interaction flow tests (Slice 2) (#2780) (b1c7bde9f)
  • docs(howto): add how-to guide section with 5 task-oriented recipes (#2782) (134b36c4f)
  • test(tauri): cover IPC server lifecycle commands (#2772) (29d5f1358)
  • chore: bump version to 0.31.1.dev20260608 (b830bf46a)

(excluded 12 less relevant commits)

Full Changelog: v0.31.1.dev20260608...v0.31.1.dev20260622

Don't miss a new gptme release

NewReleases is sending notifications on new releases.