v0.32.0#

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

Contributors#

Thanks to everyone who contributed to this release:

@0xbrayo, @dvirarad, @erikbjare, @Fsmount, @meichuanyi, @Miyou, @patriklaurell, @sebastiondev, @the-eater, @Thibaultjaigu, @TimeToBuildBob

Changelog#

Changes since v0.31.0:

📦 gptme#

✨ Features (695)#

  • feat(eval): add SWE-bench two-stage file retrieval (#3179) (593bdb760)

  • feat(cli): add opt-in tool-output pruning (#3181) (ffee326cc)

  • feat(tts): better error guidance and docs when OPENROUTER_API_KEY is absent (#3175) (3d8505cdd)

  • feat(mcp): add ‘gptme-util mcp serve’ subcommand and docs (#3170) (80b8a76e5)

  • feat(eval): wire tokens_per_task through SWE-bench and model summary (#3176) (1b71d9cd0)

  • feat(models): add GPT-5.6 Luna/Terra/Sol to OpenAI model registry (#3166) (8221940df)

  • feat(subagent): accept plain dict as output_schema, generate proper JSON Schema hints (#554) (#3174) (3b9fb6c6c)

  • feat(eval): add tokens_consumed_per_task metric to eval harness output (#3165) (e867f7ac2)

  • feat(mcp): expose gptme tools as MCP server (gptme-mcp-server) (#3157) (4de53ec1b)

  • feat(acp): add gptme-acp shim package for ACP agent registry (#3160) (10adb1181)

  • feat(cli): add GPTME_EXIT_STATS for machine-readable session cost summary (#3159) (2c62b349f)

  • feat(computer): add –milestone and –all flags to demo command (#216) (#3152) (99621c13a)

  • feat(subagent): subprocess-mode progress notifications via file channel (#3153) (3703b2813)

  • feat(util/replay): compound query from last N user turns for better context recovery (#3148) (3eed3fe21)

  • feat(rag): add project-scoped indexes (#3150) (08dbb2ea7)

  • feat(subagent): add context_window to subagent_batch, subagent_parallel, subagent_pipeline (#554) (#3147) (3014f7b0b)

  • feat(computer): add ComputerPreview panel using screenshot polling API (#216) (#3143) (ef5fe719a)

  • feat(util): BM25 evidence replay for long-session context recovery (#3146) (0fa14d354)

  • feat(server): add /api/v2/computer/screenshot polling API (#216) (#3140) (201fcab38)

  • feat(llm): enable strict tool schema for openai and azure providers (#3136) (375008e97)

  • feat(computer): add gptme-util computer demo command (#216) (#3137) (b4472da86)

  • feat(subagent): add subagent_wait_any() for race/hedging patterns (7f160ba08)

  • feat(computer): surface terminal startup delay fix in doctor (#216) (#3134) (31bd7b7f8)

  • feat(computer): add terminal startup latency diagnostic (#216) (#3130) (338170adc)

  • feat(eval): add ‘Can it play Factorio?’ local milestone validation (#216) (#3127) (2ea863160)

  • feat(computer): add gptme-util computer doctor health-check command (#216) (#3120) (b63c9b904)

  • feat(eval): add ‘Can it play Doom?’ local milestone validation (#216) (#3115) (006c3ef4f)

  • feat(eval): add ‘Can it Tweet?’ local milestone validation (#216) (#3112) (e2f9f87bd)

  • feat(subagent): add subagent_pipeline() for staged fan-out with no barrier (#554) (#3110) (41bb73e21)

  • feat(browser): add load_browser_state() for in-session auth state restoration (#3108) (d673fb256)

  • feat(browser): add hover_element(), snapshot_page(), get_current_url() (#216) (#3104) (9efc6b080)

  • feat(eval): add eval tests for press_key/select_option/wait_for_element (#216) (#3097) (5f2398c9e)

  • feat(subagent): token budget tracking — input/output tokens in ReturnType and BatchJob (#554) (#3099) (9de8a92cf)

  • feat(subagent): add output_schema, workdir, context_turns to subagent_parallel() and batch (#554) (#3096) (08692fa3c)

  • feat(subagent): suppress thread-mode subagent terminal output (closes #554) (#3094) (b03935ed5)

  • feat(browser): add press_key, select_option, wait_for_element for computer-use (#216) (#3095) (09d5c5e35)

  • feat(computer): add latency diagnostic command for diagnosing delays (#216) (#3093) (007fe94b2)

  • feat(subagent): enforce output_schema at the complete-block layer (#3090) (7e81ba052)

  • feat(doctor): add ffmpeg check for screen recording (#216) (#3089) (03bb8ac4d)

  • feat(computer): add screen recording — start_recording / record_screen / gptme-util computer record (#216) (#3088) (5771653e8)

  • feat(subagent): add subagent_parallel() fan-out + fix BatchJob.wait_all() sequential wait bug (#3085) (7ca25ee31)

  • feat(computer): add run-task CLI + fix include_paths directory test (#216) (#3086) (6816c0408)

  • feat(computer): expose audit trail in computer_task() result + –agent-id CLI option (#216) (#3084) (d76c3531a)

  • feat(computer): add –jsonl output format to audit-log (#3083) (6f6a2b150)

  • feat(computer): add real-time risk-label streaming to parent agent (#216) (#3082) (3cd6ebff3)

  • feat(computer): add pre-action confirmation gate for sensitive actions (#216) (#3081) (5dde6e21d)

  • feat(computer): add risk-level classification to audit-log (#216) (#3071) (826494cc3)

  • feat(chats): add –all-agents flag to search Cursor and Codex sessions (#3068) (94c303989)

  • feat(browser): add session persistence via GPTME_BROWSER_STORAGE_STATE (#216) (#3069) (819f1b778)

  • feat(server): add –default-profile option for specialized deployments (#3063) (a935a2471)

  • feat(computer): add gptme-util computer video-frames CLI command (#3062) (112060a75)

  • feat(computer): add computer-use service to docker-compose.yml (#216) (#3061) (ff3d32542)

  • feat(computer): add gptme-util computer screenshot CLI command (#216) (#3060) (0ab94ca91)

  • feat(cli): show discovered gptme-* plugins in gptme --help (Part 3 of #3051) (#3057) (b43b2081a)

  • feat(setup): add custom OpenAI-compatible provider to interactive setup (#3056) (6e86ec9ac)

  • feat(cli): gptme-util subcommand mirroring (gptme chats → gptme-util chats) (#3052) (a2b6e0fea)

  • feat(computer): add computer_task() for context-efficient subagent delegation (#216) (b894c41a4)

  • feat(cli): add gptme search alias for gptme-util chats search (#3050) (65610d791)

  • feat(computer): track act_and_observe() calls in audit-log (#216) (#3043) (efc5c9d25)

  • feat(config): allow setting system prompt type in gptme.toml via [prompt] system (#3044) (9d0ab3a27)

  • feat(computer): add act_and_observe() for the ‘act then look’ loop (#216) (#3042) (346600202)

  • feat(computer): extend audit-log to track browser interactions (#216) (#3041) (b95e29af4)

  • feat(reduce): emit visible feedback when log is truncated (#3038) (658a3a404)

  • feat(computer): add macOS accessibility tree + click via osascript (#216) (#3040) (d12f3fb26)

  • feat(computer): add audit-log CLI + interactive web action evals (#216) (#3030) (6b5a5183d)

  • feat(webui): windowed open (limit=50) + ‘Load older’ button (#3034) (8d15d61af)

  • feat(server): add ?status= filter to GET /api/v2/tasks list endpoint (#3033) (ae46a7bdf)

  • feat(safety): add local heuristic safety check to chats export (#3023) (d675df2a5)

  • feat(webui): render normalized transcript messages in session replay detail (#3028) (b10cde34f)

  • feat(subagent): add context_turns parameter for parent conversation forwarding (#3008) (b673ad792)

  • feat(commands): add /rag slash command for mid-session RAG queries (#3022) (260d7a466)

  • feat(eval): add computer-use eval suite + observe_web/observe_desktop in profile (#216) (#3020) (0245a3b89)

  • feat(subagent): add max_time parameter for auto-cancel watchdog (#3019) (3d220cc73)

  • feat(computer): add AT-SPI2 accessibility tree actions for Linux native apps (#3018) (4d1bd24ee)

  • feat(computer): add observe_web/observe_desktop helpers + unit tests for window_focus and wait_for_change (#216) (#3011) (86a14c6d6)

  • feat(server): add HTTP QUERY method to /api/v2/tools for filtered introspection (#3010) (259eedbe3)

  • feat(tools): annotate core built-in tools with hints metadata (#3009) (4912d2281)

  • feat(subagent): compact result summary in subagent_wait (#554) (#3007) (8d974ca1f)

  • feat(subagent): add workdir parameter for explicit workspace control (#2989) (5d7dacdbb)

  • feat(cli): add gptme attest sign and verify commands (#2978) (be689fa04)

  • feat(browser): make Playwright engine configurable via GPTME_BROWSER_ENGINE (#2996) (0dd93066f)

  • feat: add Requesty as an OpenAI-compatible provider (#2993) (cf91ac1e4)

  • feat(lessons): randomized lesson-dropout injection for causal LOO (#2988) (7dbb0f36a)

  • feat(subagent): expose context_window in tool instructions; validate negative values (#2976) (0192f2328)

  • feat(subagent): context_window parameter for workspace context isolation (#2975) (31acfcba6)

  • 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)

  • feat(chats): add per-conversation session stats (#2774) (68459b62d)

  • feat(webui): add staging deploy trigger (#2771) (7b9ea0cab)

  • feat(webui): add conversation system prompt override (#2672) (17b91546a)

  • feat(util): add batch mode command (#2759) (5dd3ea6e4)

  • feat(util): add gptme-util status subcommand for operator handoff (#2752) (7355b1820)

  • feat(complete): stuck/loop detection hook for repeating tool calls (#2743) (7e2f394c0)

  • feat(webui): add live_app panel kind distinct from iframe panels (#2754) (2c19195f6)

  • feat(patch): add _anchored core module — hash-anchored line editing (#2733) (be43ca2e0)

  • feat(webui): add open conversation directory action (#2673) (6a29d3f93)

  • feat(cost_tracker): add extras dict and record_extra() to SessionCosts (#2735) (641dbdeba)

  • feat(webui): suppress live fetches in demo mode (#2721) (8f15739c6)

  • feat(self-heal): add structured autofix gate (#2697) (b3c609a45)

  • feat(webui): replay demo tool-call flow (e95a2aa48)

  • feat(ci): self-heal workflow — analyze test failures and propose fixes (Phase 1) (919836d17)

  • feat(webui): add config file editor (#2677) (5cca4905b)

  • feat(webui): demo mode slice 2 — fixture-backed read paths (#2687) (9ffb02611)

  • feat(webui): offline demo ApiClient seam (IApiClient + createDemoApiClient) (#2664) (58c46e795)

  • feat(webui): import exported conversation JSON (#2671) (fbbaac911)

  • feat(webui): add Ctrl+F message search with match navigation (#2668) (d598b5e7f)

  • feat(server): add docker-compose self-host setup (#2681) (7a8bf8cd6)

  • feat(webui): speech-to-text dictation button (#2666) (bac384dde)

  • feat(webui): add compact user avatar treatment (#2678) (6995242c3)

  • feat(tools/python): emit artifact descriptors for plot files (#830 Phase 2) (#2680) (d92f6fe25)

  • feat(webui): recover dropped event streams (7886a9d8f)

  • feat(webui): structured tool call visualization with RichToolCall component (#2676) (029b93efb)

  • feat(webui): server connection health panel with /api/v2/server/health endpoint (#2675) (aadc57ce8)

  • feat(webui): stream tool outputs live via SSE tool_output events (#2674) (c0d622402)

  • feat(webui): per-tool call latency badges with live elapsed timer (#2655) (6d0347e46)

  • feat(webui): temperature and top_p controls in ChatOptionsPanel (aebc9c57c)

  • feat(webui): add FunctionBrowser panel with /api/v2/tools endpoint (#2663) (9643f8f08)

  • feat(webui): persist temperature/top_p/max_tokens in ConversationSettings sidebar (#2662) (887e9b0c7)

  • feat(webui): add ErrorBoundary to catch render crashes and chunk-load failures (#2661) (16d290d09)

  • feat(webui): add temperature and top_p controls to ChatOptionsPanel (#2660) (417a4205a)

  • feat(llm): make temperature and top_p request-driven via ChatConfig (#2659) (9f164493c)

  • feat(resilience): add CircuitBreaker for flaky MCP/tool calls (#2658) (4be41e539)

  • feat(webui): add /admin session management panel (#2657) (6715363a9)

  • feat(webui): add max_tokens input with full operation coverage (#2652) (2aa807e5d)

  • feat(webui): responsive nav sidebar with icon-only collapse and label expand (#2653) (4a0990a6b)

  • feat(hooks): add injection_screening hook to flag untrusted tool output (#2650) (b7b3e7a03)

  • feat(webui): add keyboard shortcuts reference dialog (ca42d7ff6)

  • feat(server): plumb max_tokens from chat config through generation (#2649) (82b64f3a2)

  • feat(webui): add per-conversation cost badge to ConversationList (d8cefc4ba)

  • feat(llm): add Anthropic fast-mode (speed=fast) support (#2647) (08e154032)

  • feat(webui): conversation-level session cost summary (1f15de92f)

  • feat(webui): wire panel_hints into sidebar as iframe panels (#830 Phase 3b) (22164215c)

  • feat(webui): sandboxed iframe panel primitive (#830 Phase 3) (#2640) (9671295e4)

  • feat(tools/computer): emit artifact descriptors on screenshot (#830 Phase 2 producers) (#2639) (9ff16c4c6)

  • feat(server): consume tool-declared artifact descriptors from message metadata (#830 Phase 2) (969e9accf)

  • feat(webui): add artifacts sidebar panel and registry (#2637) (f46eb9ac7)

  • feat(server): add conversation artifact registry API (#830 Phase 1) (#2636) (f9e242748)

  • feat(tools): add atomic patch_many tool (#2634) (1a7a6591e)

  • feat(server): bundle modern webui into package (gptme#2612 Part 2) (#2633) (05b7916fc)

  • feat: add gptme init command for project scaffolding (#2632) (d9c6e1082)

  • feat(models): add DeepSeek V4 Pro/Flash/Flash:free via OpenRouter (#2629) (9cbe3f236)

  • feat(hooks): emit aw-watcher tool activity heartbeats (#2622) (a82cd5436)

  • feat(llm): add Claude Opus 4.8 model support (a85cc233a)

  • feat(server): add –webui-dir flag to serve a custom web UI build (#2614) (62db7c762)

  • feat(lessons): load manifest-backed skills lazily from index.json (#2604) (3dc0f94b4)

  • feat(llm): add gptme.ai as provider alias for gptme (#2603) (152149edd)

  • feat(cli): list dynamic models for gptme provider (408df0b90)

  • feat(cli): prompt inline gptme auth on first use (#2599) (c72b7362a)

  • feat(util): added gptme-util prompts workspace/git/journal helper commands (#271) (3138251b5)

  • feat(eval-ci): expand quality gate from 3 to 5 tests (#2598) (4b5aa3ed2)

  • feat(eval): check subagent waited for completion before stating result (#2593) (60908932b)

  • feat(install): add gptme.ai/install.sh one-liner installer (#2592) (c78976f00)

  • feat(eval): add subagent trajectory checks (8b0e098aa)

  • feat(browser): support connecting over CDP (#2570) (fa922d8a0)

  • feat(hooks): add turn.pre and aw watcher consumer (#2572) (930e2d063)

  • feat(auth): retarget device flow from fleet-operator to Supabase edge fn (349972006)

  • feat(webui): launch SetupWizard from disconnected banner on first visit (#2494) (511bdbd3e)

  • feat(webui): surface gptme.ai as cloud alternative in disconnected banner (#2490) (5b4f29696)

  • feat(webui): opt into Chrome LNA for local-server fetches (targetAddressSpace) (#2488) (55b9cacc1)

  • feat(webui): add install step + setup-guide link to disconnected banner (#2481) (0f18cf1af)

  • feat(llm): surface diagnostic for generic out-of-credits 402 errors (#2467) (a085d2b18)

  • feat(bot): add /gptme-resolve comment macro trigger to resolve workflow (#2453) (ed054e4a8)

  • feat(tools): add vent tool for real-time friction signals (#2452) (32bf967a3)

  • feat(bot): add label-triggered issue resolver mode (#2445) (930acf352)

  • feat(tools): add when-to-use trigger language for choice, complete, and restart (#2442) (94f2feced)

  • feat(tools): add when-to-use trigger language for mcp and lessons (#2440) (fe6d73250)

  • feat(tools): add when-to-use trigger language for gh (992489cc2)

  • feat(tools): add when-to-use trigger language for screenshot, rag, vision, and todo (6861f00a9)

  • feat(eval): add minimal-feature-preserve-default-with-decoys scenario (0d935883f)

  • feat(tools): add when-to-use trigger language for elicit and form (#2437) (8a7cc6c44)

  • feat(tools): add when-to-use trigger language for vision and screenshot (#2435) (842efa85b)

  • feat(tools): add when-to-use trigger language for computer and morph (#2434) (1301dfa15)

  • feat(eval): add root-cause-pipeline-debug behavioral scenario (ef2cac82d)

  • feat(eval): add bounded-bugfix-with-decoys behavioral scenario (#2429) (299b9af02)

  • feat(hooks): trace sync hook execution spans (#2421) (efb96866e)

  • feat(hooks): add Windows agent scanning (6d12c6529)

  • feat(tools): add when-to-use trigger language for tmux and browser (b8c8e26b5)

  • feat(tools): add when-to-use trigger language for python, save, patch tools (#2412) (1b31bd8a5)

  • feat(setup): add confirmation prompt for fish completions (#2410) (b5ceb04ba)

  • feat(tools): add trigger language for shell, read, and gh (#2406) (7e1bb2ce7)

  • feat(openai): add feature-gated Responses API chat path (#2397) (076599ac4)

  • feat(cli): add –output-format json for headless gptme runs (#2392) (50422d121)

  • feat(eval): add partial-credit ‘Score’ column to eval_results.csv (#2389) (8d05e0a4b)

  • feat(llm): surface actionable diagnostic for OpenRouter 402 insufficient-credits errors (#2388) (bee2165b2)

  • feat(hooks): refactor and extend tool_target_instructions (Phase 1+) (#2386) (ebc3a8802)

  • feat(hooks): tool-target agent-instruction loading (Phase 1) (#2385) (acb5e3f3d)

  • feat(subagent): add role= parameter for typed work posture (#2382) (78603c5a4)

  • feat(profiles): add built-in verifier profile for subagent review/validation (84d3a1aa9)

  • feat(cli): queue prompts for running chats (988f087bd)

  • feat(hooks): add TTL-based cache coldness heuristic to cache_awareness (#2378) (e896ed4ff)

  • feat: opt-in auto-snapshots for workspace rollback (Phase 2a) (#2377) (a5fbc0421)

  • feat(computer): add pluggable transport abstraction layer (#2368) (2e625199e)

  • feat(commands): add checkpoint slash command (1a9969e31)

  • feat(models): add preferred_edit_format to OpenRouter models (c92fdb1a8)

  • feat(serve): inject webui HTML rendering hint into system prompt (cf85d7d8b)

  • feat(eval): natural pass-rate gate for lesson injection (Phase 3, idea #228) (#2365) (cdf4be27e)

  • feat: architect/editor coder split — plan with strong model, execute with cheap model (#2364) (eafdb5aef)

  • feat(models): add preferred_edit_format field to model registry (#2363) (2d46a8f54)

  • feat(hooks): add mcp_namespace_hint hook for @server_name references (#2358) (2eca386d8)

  • feat(commands): add /account provider onboarding with OAuth (#2356) (727aa6030)

  • feat(oauth): add OpenRouter PKCE OAuth flow (#2355) (c55a0fd2c)

  • feat(eval): add task_type to EvalSpec and conditional lesson gating (#2352) (243d5f9ad)

  • feat(tokens): add per-step token breakdown to /tokens command (#2350) (9d96649e6)

  • feat(eval): add –no-lessons flag for no-context baseline runs (34890e849)

  • feat(tokens): surface biggest-turn input in /tokens output (#2348) (72501779a)

  • feat(lessons): cap lesson injection at 50K tokens to prevent sys_prompt bloat (#2346) (b5fc04cd6)

  • feat(tools): add gh issue/pr list preview to shell output (#2341) (eb7b11e96)

  • feat(tools): add shell_compact git log preview (#2337) (528a3f8d7)

  • feat: add GPTME_DISABLE_PATH_INCLUDE env var to skip path expansion (#2336) (fb4f6a7e1)

  • feat(messages): ephemeral_ttl — context-aware pruning with cache boundary optimization (#2330) (56080e094)

  • feat(tauri): add Android project files and CI build (closes #2328) (#2329) (973e48a61)

  • feat(webui): add embedded MenuBar context slot (#2319) (582746247)

  • feat(cost-awareness): warn on cold Anthropic prompt cache (#2322) (4c674a7a9)

  • feat(server): voice Phase 3 — transcript to conversation history (#2315) (96067fa2f)

  • feat(server): expose session last_error in conversation GET response (#2305) (a88401a90)

  • feat(settings): add Re-run Setup button to re-open setup wizard (#2303) (2bd1f2464)

  • feat(models): add gpt-5.5 to openai-subscription provider models (#2299) (8fdc1df16)

  • feat(eval): add –adversarial flag for behavioral eval prompt injection (#190) (#2291) (ebfaf5733)

  • feat(shell): make output truncation thresholds configurable via env vars (5f843641d)

  • feat(tauri): sync version to 0.31.0 and show server version in About panel (6fce363c3)

  • feat(webui): add real-time voice session support (#2265) (d13f97758)

  • feat(webui): add _headers for CF Pages cache policies (#2282) (5e5a6967b)

  • feat(tools/read): support batch reads via newline-separated paths (b799b3933)

  • feat(site): add downloads page at gptme.org/downloads/ (#2243) (45e904ac1)

  • feat(webui): submit SetupWizard inputs on Enter key (#2230) (c14bd0c8c)

  • feat(cli): add gptme-checkpoint for Git-backed workspace recovery (#2224) (15d3c2256)

  • feat(openai): support OPENAI_VERBOSITY env var for GPT-5+ models (#2223) (a12a9c065)

  • feat(openai): add gpt-5.5 and gpt-5.5-pro models (#2220) (5f546f377)

  • feat(context): show truncation savings in /context (#2213) (2df6ce3d5)

  • feat(webui): expose provider API key settings (5fcd34dcd)

  • feat(agent): add live agent scan alias (#2205) (18be555cd)

  • feat(webui): wire ServerDefaultModelSettings to GET /api/v2/user/settings (#2204) (9cb296e19)

  • feat(server): add GET /api/v2/user/settings for provider+model introspection (#2203) (7633bc1d8)

  • feat(onboarding): add shared default-model selection flow (#2201) (91a580f05)

  • feat(tauri): in-app API key entry (save_api_key + wizard UI) (#2195) (02fb26b23)

  • feat(hooks): track memory_mb for detected agents in workspace_agents (#2200) (b0b8fd097)

  • feat(cli): add gptme-util agents scan command (#2198) (19422518c)

  • feat(tauri): desktop/mobile split — gate sidecar behind cfg(desktop) (#2191) (64a84c77e)

  • feat(tauri): surface provider_configured in /api/v2 + SetupWizard onboarding step (#2194) (0ace79689)

  • feat(anthropic): wire output_config.effort for true xhigh/max thinking semantics (#2186) (a9f224631)

  • feat(prompts): add cache boundary marker and stable file order (#2185) (e33fec132)

  • feat(anthropic): add GPTME_THINKING_EFFORT env var with named levels (#2184) (6f7e30846)

  • feat(prompts): propagate model to prompt_short for tool-use enforcement (#2181) (ff626be51)

  • feat(prompts): inject tool-use enforcement for GPT/Gemini/Grok families (#2180) (2cd8ee8b5)

  • feat(util): add models test command for verifying model connectivity (#2159) (bf64c6799)

  • feat(chats): expose context/matches options in search and read commands (#2155) (53a00009d)

  • feat(models): add claude-opus-4-7 and anthropic/claude-opus-4.7 (OpenRouter) (#2153) (bc4f2aa86)

  • feat(server): add include_archived parameter to list_tasks API (#2127) (182724167)

  • feat(eval): add implement-memoization behavioral scenario (31st) (#2114) (e23bd9687)

  • feat(eval): add implement-priority-queue behavioral scenario (33rd) (#2113) (5fedad714)

  • feat(eval): add implement-event-emitter behavioral scenario (30th) (#2105) (48a437229)

  • feat(eval): add implement-lru-cache behavioral scenario (29th) (#2103) (b504ddbc3)

  • feat(eval): add circuit-breaker behavioral scenario (28th) (#2100) (5806f3458)

  • feat(eval): add circuit-breaker behavioral scenario (26th) (#2099) (8bb769ea2)

  • feat(eval): add rate-limiting behavioral scenario (28th) (6fa5d440f)

  • feat(eval): add add-docstrings behavioral scenario (24th scenario) (#2093) (833a00c32)

  • feat(eval): add validate-user-input behavioral scenario (27th scenario) (#2096) (dc5cea427)

  • feat(eval): add retry-with-backoff behavioral scenario (26th scenario) (#2095) (fe0bcd6ea)

  • feat(eval): add add-deprecation-warning behavioral scenario (25th scenario) (#2094) (b521a3db4)

  • feat(eval): add fix-mutable-default behavioral scenario (22nd scenario) (#2091) (1da36d5c2)

  • feat(eval): add remove-dead-code behavioral scenario (21st scenario) (#2090) (df563ea44)

  • feat(eval): add optimize-n-squared behavioral scenario (20th scenario) (#2088) (83b2f542f)

  • feat(eval): add fix-data-mutation behavioral scenario (19th scenario) (#2083) (f4288d80c)

  • feat(eval): add noisy-worktree-fix behavioral scenario (18th scenario) (#2080) (f51c7a9cd)

  • feat(eval): add add-type-hints behavioral scenario (17th scenario) (#2079) (404511815)

  • feat(eval): add refactor-for-testability behavioral scenario (16th scenario) (#2078) (3db6116c2)

  • feat(eval): add fix-security-path-traversal behavioral scenario (15th scenario) (#2077) (82e1d2fe5)

  • feat(eval): add handle-specific-exception behavioral scenario (14th scenario) (#2076) (2c4bc5a22)

  • feat(eval): add add-feature-preserve-default behavioral scenario (13th scenario) (#2074) (5ad697291)

  • feat(eval): add use-existing-helper behavioral scenario (12th scenario) (#2073) (049cd9c0e)

  • feat(eval): add add-logging behavioral scenario (11th scenario) (#2072) (e389c0ce5)

  • feat(webui): polish message styling and fix avatar chaining (#1996) (bab294021)

  • feat(eval): add scope-discipline-bugfix behavioral scenario (10th scenario) (#2069) (24272facd)

  • feat(server): add CLI-based fallback for external session provider (#2067) (89db2d056)

  • feat(lessons): add GPTME_LESSONS_EXTRA_DIRS env var (#2066) (587acf934)

  • feat(eval): add debug-data-pipeline behavioral scenario (9th scenario) (#2064) (60828f867)

  • feat(webui): add external sessions catalog view (#2062) (29c517293)

  • feat(server): add read-only external session catalog (#2059) (dbf83cd65)

  • feat(cli): prototype live terminal status line (#2058) (8f12aa2ca)

  • feat(eval): add write-test-suite and test-driven-error-handling behavioral scenarios (#2053) (19f0f01ed)

  • feat(eval): add merge-conflict and extract-function behavioral scenarios (#2052) (1a9607621)

  • feat(eval): add stage-new-files behavioral scenario (#2049) (a4904c6b8)

  • feat(eval): add behavioral eval suite — 3 multi-step workflow scenarios (#2046) (3552864cb)

  • feat(eval): add –resume and incremental writing to SWE-bench eval (d3f76a95c)

  • feat(eval): add –info flag to gptme-eval-swebench for dataset inspection (#2043) (23ed17f66)

  • feat(eval): add practical31-33 suites — 9 new algorithm tests (#2036) (c13443317)

  • feat(eval): add pass-rate trend analysis with sparklines (#2035) (8d5ce76ab)

  • feat(eval): add practical30 suite — decode string, top-k frequent, partition equal subset (1647a19c0)

  • feat(eval): add practical29 suite — word break II, unique paths, rotate array (#2031) (aa0268904)

  • feat(eval): add practical28 suite — minimum path sum, gas station, next permutation (#2028) (7b7f658cc)

  • feat(eval): add practical27 suite — house robber, max product subarray, find all anagrams (#2024) (69ddd5dee)

  • feat(eval): add practical26 suite — longest palindromic substring, jump game, task scheduler (#2023) (700463af9)

  • feat(eval): add practical25 suite — sliding window max, decode ways, meeting rooms (#2022) (1d607a83d)

  • feat(eval): add practical24 suite — N-Queens, LIS, cycle detection (#2021) (c65e256fc)

  • feat(eval): add interactive sorting and filtering to HTML leaderboard (#2018) (4a60955c4)

  • feat(eval): add practical23 suite — LCS, stock cooldown, rotate image (#2015) (eb7f836d6)

  • feat(eval): add practical22 suite — trapping rain water, word break, permutations (#2003) (75d788618)

  • feat(lessons): support holdout exclusions in auto-include hook (#1997) (bd73c6211)

  • feat(util): add gptme-util hooks for Claude Code lesson injection (#1995) (9129169cb)

  • feat(eval/swebench): generate predictions JSONL and add official harness integration (f18715fe4)

  • feat(eval): add practical21 suite — Kadane, 0/1 knapsack, flood fill (#1993) (5dfaee0e1)

  • feat(eval): add practical20 suite — Dijkstra, spiral matrix, num islands (#1988) (73075c0bf)

  • feat(eval): add practical19 suite — edit distance, BST, coin change (#1987) (d6453b629)

  • feat(eval): add practical18 suite — min-stack, knight-moves, histogram-area (#1986) (0177f79ab)

  • feat(eval): add practical17 suite — LRU cache, interval merge, base converter (#1982) (485f08552)

  • feat(webui): custom welcome background with frosted glass effect (9d787f357)

  • feat(webui): render short code blocks inline instead of collapsible (#1977) (f7d436d61)

  • feat(eval): add per-test breakdown and fix OpenRouter model names (#1961) (6362ac6cf)

  • feat(eval): add practical16 suite — harder tasks (queue workers, JSON schema, Trie) (#1960) (81a505e7d)

  • feat(webui): add Attachments tab and ‘open in workspace’ to workspace explorer (#1930) (2639f8342)

  • feat(eval): add practical15 suite — async, SQL analytics, SQL injection (#1931) (f5b89e336)

  • feat(webui): collapse intermediate tool steps into expandable summaries (#1929) (077cb24cd)

  • feat(webui): cleaner assistant surface — borderless, page-native messages (d02dc8127)

  • feat(webui): refresh new chat view (#1925) (ae4df94eb)

  • feat(webui): reuse ChatInput for message editing with attachment support (#1919) (c7fa714b1)

  • feat(webui): improve file attachment UX with tooltips and lightbox (#1917) (c8054e786)

  • feat(webui): add search to navigation and improve search scope (#1915) (e9ba091b2)

  • feat(webui): delete individual messages from conversation (#1910) (8eb231f07)

  • feat(webui): add dedicated history page with activity calendar (#1903) (66f90c0f5)

  • feat(webui): message editing, branch navigation, and tool state restoration (#1900) (d90b7e727)

  • feat(webui): fix chat UX, add routes, file attachments, and search (#1894) (a9729d562)

  • feat(webui): group conversations by date in sidebar (#1893) (1381dc90d)

  • feat(webui): add right-click context menu for conversations (#1891) (e393c6b51)

  • feat(webui): show last message preview in conversation list (#1890) (b4ae4c496)

  • feat(webui): show message timestamps on hover (#1886) (884de90d6)

  • feat(webui): add scroll-to-bottom floating button in conversations (#1884) (863da6d0b)

  • feat(webui): add copy-to-clipboard button on chat messages (#1883) (9b4191068)

  • feat(webui): add conversation export as Markdown and JSON (#1882) (12a3cc497)

  • feat(webui): add conversation search to command palette (#1877) (f2be6b4c8)

  • feat(webui): add file download button to workspace file preview (#1876) (59c077a99)

  • feat(webui): add file upload support with drag-and-drop (#1873) (744cc1cf0)

  • feat(server): add workspace file download endpoint (#1875) (6f753de89)

  • feat(webui): add autocomplete for slash commands and file paths (#1872) (e218432a6)

  • feat(gh): add native issue view handler with linked PRs (0a53c166d)

  • feat(openrouter): add quantization routing preference (#1864) (f0eddbedc)

  • feat(openrouter): add user override for data_collection preference (#1861) (50d322370)

  • feat(openrouter): add provider routing preferences (require_parameters, data_collection) (#1859) (8596b2f24)

  • feat(gh): add native issue create and comment commands (#1852) (6b8f475a8)

  • feat(plugins): unified plugin registration via entry points (#1851) (461040759)

  • feat(llm): add plugin-based provider support via entry points (#1846) (152710ec2)

  • feat(gh): add native gh pr merge command (#1844) (0837d40fb)

  • feat(gh): add gh search issues and gh search prs commands (#1841) (1db97464d)

  • feat(gh): add native gh issue list and gh pr list commands (#1839) (61147b976)

  • feat(gh): add gh run view for structured CI failure log extraction (#1837) (7d01905e8)

  • feat(gh): add gh pr diff command for viewing PR code changes (#1836) (77ea7212f)

  • feat(gh): support short GitHub references (owner/repo#N, #N, bare N) (#1835) (8b11d7735)

  • feat(browser): smarter GitHub URL routing + HTML content extraction (#1825) (bbf952b4a)

  • feat(llm): add max_tokens parameter to reply() and chat() (#1828) (d57fd0ca4)

  • feat(gh): add gh issue view command for structured issue reading (#1827) (704165542)

  • feat(docs): wire eval leaderboard into docs build (#1814) (d3be51138)

  • feat(context): support @-prefix for file/directory references (#1813) (628453d12)

  • feat(eval): add HTML output format for leaderboard (#1812) (c0b6139f8)

  • feat(eval): add trend tracking for regression/improvement detection (#1807) (4e9a71cc5)

  • feat(eval): add –json flag for machine-readable eval output (#1787) (2cad452af)

  • feat(cli): add –json flag to tools list and tools info commands (#1800) (64ce57a4d)

  • feat(cli): add –json flag to models list and models info (#1799) (06e39131e)

  • feat(cli): add providers test command for connectivity validation (#1798) (40712a4b0)

  • feat(cli): add –json flag to chats list and chats search commands (#1797) (9e252e829)

  • feat(eval): add practical14 suite — matrix transpose, IPv4 classification, bracket balance (#1793) (497c8a769)

  • feat(eval): add practical13 suite — summary stats, Pascal’s triangle, Caesar cipher (#1788) (317a154ac)

  • feat(eval): add practical10 suite — semver sorting, date histogram, TSV-to-CSV (#1784) (8f8eaf6e9)

  • feat(eval): add practical12 suite — word frequency, Collatz sequences, log-level stats (dd1613e95)

  • feat(eval): add practical11 suite — Roman numerals, run-length encoding, anagram groups (#1785) (b568f4b1d)

  • feat(eval): add practical9 suite — env parsing, YAML merge, git log stats (#1782) (c0f6b1f20)

  • feat(prompts): auto-load cross-tool AI instruction files (#1780) (4e719752e)

  • feat(browser): add read_page_text() for interactive page content (#1772) (ddd327389)

  • feat(browser): add page metadata to ARIA snapshot output (#1771) (efff411c0)

  • feat(browser): add interactive browsing — click, fill, scroll (#1764) (4f21623d7)

  • feat(context): add directory support to include_paths (#1767) (83e3ebf30)

  • feat(prompts): include git status in workspace prompt (#1766) (57132d49c)

  • feat(browser): add ARIA accessibility snapshot via snapshot_url() (#1762) (17c2c12c5)

  • feat(eval): add –list flag to show available suites and tests (#1761) (7d34bd689)

  • feat(evals): add model comparison leaderboard (#1758) (e4a5d4833)

  • feat(chat): add GPTME_MAX_STEPS and GPTME_CONTEXT_LENGTH env vars (#1683) (02cc7c16a)

  • feat(eval): add –eval-module flag for loading external eval specs (#1727) (da477f9a3)

  • feat(skills): add dependency declarations to SKILL.md frontmatter (#1722) (d8f3bbb2c)

  • feat(llm): model-dependent break_on_tooluse default (#1724) (955002b39)

  • feat(eval): add Claude Code agent for cross-harness evaluation (#1713) (a819c6a70)

  • feat(eval): add practical8 suite — url-stats, markdown-toc, json-flatten (#1708) (ce5ea8866)

  • feat(eval): add practical7 suite — ini-to-json, json-diff, changelog-gen (#1706) (85db2dc17)

  • feat(prompts): XML-sectioned system prompt when tool_format=xml (6939aeba7)

  • feat(eval): add practical7 suite — ini-to-json, json-diff, changelog-gen (#1679) (31d07dd42)

  • feat(models): use closest-match heuristic for unknown model metadata (#1682) (35e4aa9de)

  • feat(eval): add practical6 suite — csv-analysis, word-frequency, merge-configs (#1676) (c1bb0252a)

  • feat(eval): add practical5 suite — rename-function, data-pipeline, regex-scrub (#1662) (76ad24d7e)

  • feat(eval): add implement-class and optimize-performance eval tests (#1644) (bad1be942)

  • feat(eval): add practical4 suite — group-by, schedule-overlaps, topo-sort (#1654) (0ac1a46df)

  • feat(eval): add practical3 suite — write-tests and sqlite-store tasks (#1653) (80cbf8cff)

  • feat(eval): add practical2 suite — sort-and-filter, template-fill, validate-csv (#1652) (47d83e95b)

  • feat(eval): add practical eval suite with 3 real-world tests (#1647) (120edd060)

  • feat(eval): add count-words and json-filter tests to basic suite (#1661) (76277badc)

  • feat(util): add context deduplication helper for plugins (#1656) (bfcb30739)

  • feat(acp): stream tokens from ACP subprocess to server SSE (#1586) (822879134)

  • feat(server): add /api/config endpoint exposing agent URLs from gptme.toml (#1657) (86510ccec)

  • feat(prompts): distinguish agent instruction files from context files (#1556) (6f44f7742)

  • feat(release): centralize release pipeline in release.yml (#1640) (0b35e0c1e)

  • feat(lessons): support LLM-judge effectiveness state (#1636) (6f544dfd0)

  • feat(cli): add gptme-util chats rename command (#1622) (2d77ef1ae)

  • feat(skills): skill marketplace — install, uninstall, validate, init, publish (#1566) (fa6680ee2)

  • feat(eval): add debug-type-error and find-and-fix eval tests (#1614) (4347c53ae)

  • feat(doctor): add MCP server health checks (#1617) (8ba02b92e)

  • feat(eval): add generate-cli and extract-function eval tests (#1615) (a21287b06)

  • feat(cli): add gptme-util chats stats command (#1618) (53c415e9a)

  • feat(cli): add tool exclusion with ‘-’ prefix syntax (#1616) (b1907cac0)

  • feat(cli): add gptme-util chats clean command (#1620) (84145d061)

  • feat(cli): add gptme-util chats export command (#1619) (3abc90f08)

  • feat(config): add [agent.urls] to AgentConfig for named agent links (#1621) (524208ff5)

  • feat(doctor): add lesson health checks to agent doctor (#1613) (c9a691681)

  • feat(server): add ACP subprocess health monitoring and orphan cleanup (#1583) (6b423fd0f)

  • feat(lessons): canonicalize TS lesson lookup keys (#1610) (6f73516ba)

  • feat(doctor): add version check and Playwright browser check (#1612) (b5310b091)

  • feat(context): show context window utilization in /context command (#1611) (b817e8101)

  • feat(lessons): Thompson sampling effectiveness scoring for hybrid matcher (#1573) (0ee822c76)

  • feat(models): add GPT-5.4 subscription models (#1604) (aac5582a7)

  • feat(models): add –available flag and provider status markers to models list (#1606) (b181b450d)

  • feat(subagent): add ACP execution mode for multi-harness subagents (#1563) (809ff65a0)

  • feat(context): show metadata for binary files instead of silently ignoring (#1601) (6ebae8dbb)

  • feat(read): list directory contents instead of erroring (#1602) (0d789bf6a)

  • feat(setup): add bash and zsh shell completions (#1603) (b51575517)

  • feat(tauri): first-run setup wizard for new users (#1596) (afa31888d)

  • feat(server): add GPTME_USE_ACP_DEFAULT config for server-side ACP opt-in (#1580) (6752790f4)

  • feat(tauri): add Windows build support (#1597) (799d97770)

  • feat(tauri): add monorepo integration — CI, Makefile, and path fixes (33cb1c58b)

  • feat(eval): add Terminal-Bench (tbench) evaluation module (#1582) (10bcbf6f1)

  • feat(server): add ACP session runtime wrapper for per-session subprocesses (#1546) (7abe6078d)

  • feat: automated demo capture pipeline (asciinema + screenshots + recordings) (#1558) (0862961cd)

  • feat(eval): new test cases and robustness fixes (#1559) (2016223e0)

  • feat(release): generate structured changelogs for all release types (#1550) (50539e79b)

  • feat(hooks): add CWD_CHANGED hook type for directory change events (#1539) (16e5cd818)

  • feat(acp): add GptmeAcpClient — gptme as ACP client (#1536) (c1a083281)

  • feat(agent): add gptme-agent doctor command for workspace health checks (#1545) (11295882a)

  • feat(tools): support loading custom tools from .py files via –tools (#1540) (d66a011e5)

  • feat(llm): add gptme provider for managed service (#1529) (f6abb75dd)

  • feat(hooks): add goose, opencode, amp agent runtime detection (#1530) (5e5f0df10)

  • feat(tools): add /tools load command to enable tools mid-conversation (#1518) (02d38a7bd)

  • feat(hooks): inject AGENTS.md on working directory change (#1519) (233346545)

  • feat(hooks): parallel agent awareness via process scanning (#1505) (#1509) (1b7f817ba)

  • feat: enhance –version with extras, providers, health summary (#1503) (67eafafc4)

  • feat: always load AGENTS.md files (layered: user + project) (#1511) (26da34a77)

  • feat: improve gptme-util discoverability and tool formatting (#1506) (05b07cef4)

  • feat: cleaner KeyboardInterrupt handling and CI startup benchmarks (#1502) (80c185d46)

  • feat(prompts): skip tool examples for reasoning models (#1500) (50ca19755)

  • feat(eval): add SWE-bench evaluation modules (recovered from #142 and #424) (#1489) (7b29e8db0)

  • feat: add deep-link OAuth flow for gptme.ai pairing (#12) (4e2aadaf3)

  • feat(profiles): add computer-use profile and document –tools +computer (#1492) (60ed23f87)

  • feat: add Ctrl+V image paste support (#1379) (5de35ffe5)

  • feat: add server lifecycle IPC commands (#11) (aa38b5e20)

  • feat(subagent): add persistent memory per agent profile (#1466) (2fb82ac6f)

  • feat(subagent): add worktree isolation for filesystem-safe subagents (#1465) (15b837654)

  • feat(profiles): support markdown files with YAML frontmatter (#1464) (3184df121)

  • feat(profiles): add tool name validation (#1463) (210db47db)

  • feat(cli): add agent profiles for pre-configured system prompts + tool access (#1455) (64b2015db)

  • feat(acp): consolidate ACP improvements (88fd565f2)

  • feat(acp): enrich listSessions with title, timestamps, cwd filtering (#1430) (4faa85a26)

  • feat(models): add per-model default tool_format to ModelMeta (#1417) (aa61e3517)

  • feat(acp): return modes and models in NewSessionResponse (#1425) (eaba19834)

  • feat(cli): add auto_envvar_prefix for GPTME_* env vars (#1418) (d43caf018)

  • feat(acp): persistent sessions with load/list from disk (#1424) (52b855c73)

  • feat(acp): add JSON-RPC protocol logging for debugging (#1423) (e1ac729f0)

  • feat: add Windows compatibility (#528) (7603eb49e)

  • feat(acp): send AvailableCommandsUpdate on session start (#1396) (636b9b085)

  • feat(acp): send model and workspace info on session open (#1392) (82b9873f6)

  • feat(llm): add deprecated field to model metadata (#1316) (1481d059c)

  • feat(llm): add missing OpenAI model metadata (GPT-4.1, o3, o4-mini) (#1311) (dcbbc0a81)

  • feat(reduce): truncate long <details> blocks in messages (#1304) (8ff9d9bc0)

  • feat(server): support slash commands in V2 API (#1282) (60881e487)

  • feat(webui): display image attachments and file links in built-in UI (#1289) (5d86aa7d2)

  • feat(server): add server-side elicitation hook for WebUI (#1295) (879a3ad63)

  • feat(mcp): add elicitation support for user input requests (#1227) (ebf4acbeb)

  • feat(cli): add skills subcommands to gptme-util (#1287) (08c9f0661)

  • feat(hooks): generalize elicitation with hook-based system (#1283) (b95078dfd)

  • feat(tools): make read tool useful standalone, disable by default (#1266) (1c05d1f7c)

  • feat(llm): add OpenAI subscription provider support (#1225) (02396e775)

  • feat: auto-trigger LLM resume when rule-based compaction stalls (#1262) (3bd7d4ec3)

  • feat(dirs): add get_workspace() for agent workspace detection (#1265) (a81083c05)

  • feat(cli): add –context flag, –tools validation, and CLI help cleanup (#1258) (b74076d4a)

  • feat(webui): complete avatar support — cache fix, tooltips, user avatars (#1252) (5ca031a7d)

  • feat(webui): display agent avatar in chat messages (#1215) (842c6972f)

  • feat(webui): add show hidden messages setting, move initial system to settings (#1248) (9c68f2567)

  • feat(webui): multi-backend support with unified view (#1241) (df8df2766)

  • feat(patch): improve multi-hunk support and error messages (#1245) (f110a53eb)

  • feat(commands): separate /model and /models commands (#1243) (db9f6c572)

  • feat(config): support config.local.toml for user config (#1239) (edf7aabc9)

  • feat(config): add [user] section to user config (#1238) (60b36436f)

  • feat(context): add URL confirmation and content size safeguards (#1211) (717bb20d5)

  • feat(vision): add PIL.Image support to view_image function (#1232) (328eda834)

  • feat(lessons): add default lookup directories for skills (#1217) (f76a80bdd)

  • feat(anthropic): enable thinking mode with native tool calling (#1193) (503077803)

  • feat(telemetry): add GPTME_RUN_TYPE env var support (#1200) (fb3810f6a)

  • feat(config): add avatar field to AgentConfig (#1198) (69e6e24ae)

  • feat(config): add [plugin.*] namespace for plugin-specific configuration (#1197) (6b5c248e8)

  • feat: switch to hook-based tool confirmations (#1105) (a23d89333)

  • feat(agent): detect existing agent workspaces and enhance status command (#1183) (e3bdd2476)

  • feat(prompts): add safeguard truncation for context_cmd output (#1178) (ba7cd8776)

  • feat: hide messages with hide=true (e.g., auto-included lessons) (#118) (6c0df0cad)

  • feat(cli): add gptme-onboard wizard for first-run setup (#1167) (d1f45db94)

  • feat(cli): add gptme-doctor command for system diagnostics (#1166) (5140d8699)

  • feat(cli): add gptme-agent command for unified agent management (#1159) (104f05d78)

  • feat(hooks): add async_mode support for non-blocking hook execution (#1154) (a2b4b70eb)

  • feat(compact): add context file extraction for /compact resume (#1151) (5b7b55993)

  • feat(browser): improve PDF reading with page limits and vision hints (#1126) (d18b9aa76)

  • feat(lessons): session-wide limit and end-of-session statistics (#1146) (4ac795519)

  • feat(mcp): add roots support for defining operational boundaries (#1144) (dd3108cba)

  • feat(mcp): add MCP prompts support (#1141) (1e585bbf8)

  • feat(input): add message queueing support (#115) (6f4f3fa68)

  • feat(ui): add auto-accept all option using existing onAuto mechanism (#103) (c9b789e95)

  • feat(auth): derive exchange URL from configuration (Option B) (#111) (42d7b3db7)

  • feat(mcp): add MCP resources support (#1109) (6d3bd2be5)

  • feat: add URI support in Message.files for URLs and MCP resources (#1118) (34c6afef7)

  • feat: add file autocomplete for @ mentions (#110) (8465902d8)

  • feat: enable auto-reconnect for web environments (#109) (1fa2ca113)

  • feat(auth): implement auth code exchange flow (#108) (8caf1d3ec)

  • feat(browser): add PDF support using pypdf (#1120) (2c5086dcf)

  • feat(anthropic): add web search block handling (#1122) (8c403ab32)

  • feat(anthropic): add native web search support (#723) (dda13a54d)

  • feat(prompts): add skills summary to system prompt (#1107) (f65b0b5ba)

  • feat(gh): truncate verbose comment bodies to reduce token usage (#1103) (fcfe48aad)

  • feat(gh): include comment IDs in PR review output (#1101) (5a1850b3d)

  • feat(lessons): add wildcard and regex pattern support for keyword matching (#1093) (12dae0b8d)

  • feat(server): add GPTME_DEBUG_ERRORS for verbose error messages in dev mode (#1096) (e9bba532f)

  • feat(hooks): add cache_awareness hook for centralized cache state tracking (#1074) (88c38de31)

  • feat(llm): add retry logic for OpenAI API transient errors (#1067) (91811070f)

  • feat(hooks): add CACHE_INVALIDATED hook type for cache-aware plugins (#1070) (04b9f6940)

  • feat(autocompact): add semantic patterns for value-aware retention (#1061) (34369e203)

  • feat: add session cost summary on exit (#1037) (856617adc)

  • feat(lessons): deduplicate lessons by resolved path to handle symlinks (#1026) (1a5701125)

  • feat(autocompact): add Master Context Architecture for byte-range recovery (#1020) (c82701c77)

  • feat(commands): add /skills command for browsing skills and lessons (#1014) (ddec87163)

  • feat(codeblock): support quad+ backticks for nested markdown (Issue #1005) (#1009) (fe24f45cb)

  • feat: add extensible command argument completion system (#1010) (ce912dae1)

  • feat(subagent): add structured delegation template for clear task handoff (#997) (aea670e9b)

  • feat(skills): add codebase classification skill (56a9d442e)

  • feat(lessons): support Anthropic SKILL.md format matching (#1001) (e63c98068)

  • feat(complete): add todo-based continuation enforcer (#996) (739691bf8)

  • feat: improve cost awareness UX and add prompt caching for OpenRouter (#990) (1ff94d260)

  • feat(eval): implement DockerGPTMeEnv for Docker-isolated gptme execution (#988) (1c61f0ed4)

  • feat(context): implement AdaptiveCompressor for Phase 3.1 Week 3-4 (#937) (d8bc11979)

  • feat(cli): add context-mode, context-include, output-schema flags for subprocess mode (#987) (1aac45965)

  • feat: add shared executor module for ACP/server code reuse (#984) (6a4756a29)

  • feat: add parallel tool execution support (#985) (7d61dc9db)

  • feat(acp): add Phase 2 tool call reporting and permissions (#979) (8f5cc107c)

  • feat(subagent): add Phase 1 async enhancements (subprocess mode, hook notifications, batch) (#962) (431c7c171)

  • feat(acp): add Agent Client Protocol support (Phase 1) (#978) (75d94dd34)

  • feat(cli): add /clear command to clear terminal screen (#968) (e0168dbfe)

  • feat(models): add ollama/local model discovery to /model command (#960) (4512d3237)

  • feat(cli): add /delete command to remove conversations (Issue #956) (#959) (0563366bd)

  • feat(tasks): add target type filters to task list (#101) (066769c34)

  • feat(ui): improve error handling for conversation creation (#95) (cc3f9c89d)

  • feat(ui): add CommandPalette component with comprehensive tests (#98) (48ca8b2f2)

  • feat: add markdown preview to file explorer with accessibility improvements (#94) (e47a7e152)

  • feat: redesign navigation with unified collapsible sidebar (#89) (b7e267897)

  • feat: add ExamplesSection component with more examples modal (3717e2e4b)

  • feat: redesign settings modal (a82549a55)

  • feat: add setting to configure default code block open state (ca90c78de)

  • feat: implement auto-naming for conversations (#84) (00aa50695)

  • feat: enhance right sidebar UX with auto-collapse and click-to-close (e3b08cd89)

  • feat: implement collapsible right sidebar with icons-only mode (2b49a313b)

  • feat: add agent/workspace badges and improve sidebar UX (67c5a376d)

  • feat: add tool execution status indicator (246485d12)

  • feat: list models available from gptme-server API (#82) (e29514976)

  • feat: add agent creation form and agent list (9f3f9eaa9)

  • feat: ability to add new workspace (6d6b63321)

  • feat: added system notifications on completed response, added modal for ui settings like chime and theme (#79) (4a94295b4)

  • feat: switch to next-themes ThemeProvider for theme detection and settings (233ed4251)

  • feat: implement infinite loading for conversations list (#78) (2ed57032c)

  • feat: started working on task view for parallel workflows (#77) (00289595f)

  • feat: send SIGTERM to gptme-server on app exit (440bed12a)

  • feat: add chime sound notifications for assistant completion and tool confirmations (#72) (fcad63560)

  • feat: implement inline tool confirmation to replace modal dialog (#71) (57f4637ad)

  • feat: add port conflict detection and error dialogs (e5f86d3dd)

  • feat: add auto-connect with retry logic and Tauri integration (#70) (e417f265b)

  • feat: add comprehensive logging for browser and gptme-server output (20c7eb3e2)

  • feat(wip): add agents and workspace list UI components (8855bf068)

  • feat: added support for conversation display names (separate id and name) (#68) (ca4a097fa)

  • feat: added WelcomeView for cleaner conversation starts (#56) (b60b00daf)

  • feat: bundle gptme-server as a sidecar (7f3722234)

  • feat: add gptme submodule (f0d010204)

  • feat: run npm ion first run (a2e9e2fbf)

  • feat:add gptme logo (136e4b008)

  • feat: replace default frontend with gptme-webui (72ac75abe)

  • feat:initial commit (f21cef66a)

  • feat: added resizable sidebars, file type icons, menubar improvements (#62) (45c50c1fa)

  • feat: added workspace file browser (#59) (18ce81192)

  • feat: add button to delete conversations (#55) (24751b07a)

  • feat: added browser to sidebar (#54) (702311613)

  • feat: chat config panel, incl tools & MCP support (#53) (fdfef2b58)

  • feat: add keyboard shortcuts and floating input styling (08d0ed177)

  • feat: add back ‘Thinking…’ indicator until first token (#52) (d849e6a9f)

  • feat: add back hasSession$ (#47) (b555cfec9)

  • feat: support multiple loaded/active conversations (#42) (243d0781d)

  • feat: retry getting session id if not received (#43) (5d60cd9a9)

  • feat: add button to view rendered markdown blocks (#40) (0be2013f5)

  • feat: disable auto scrolling on scroll up (#35) (976a1bdbb)

  • feat: streaming markdown parsing (38f8606b1)

  • feat: improve API connection handling and security (#34) (63a54b6e6)

  • feat: persist baseUrl and userToken in localstorage to enable refresh without having to re-click link (4fe43bfc0)

  • feat: enter to confirm tooluse (e3cdfaeb0)

  • feat: a bunch of smaller enhancements (#30) (8e6a31352)

  • feat: rewrite chat rendering with LegendState (#26) (b62861666)

  • feat: wip rewrite for server api v2, including tool confirmations (f2b95173f)

  • feat: added a message options dropdown for model and streaming selection (#22) (d43201bc1)

  • feat: support baseUrl and userToken via URL fragments (#20) (0ee5984ca)

  • feat: added option to add header Authorization to the connect modal (#17) (b80d6d1ee)

  • feat: added support for attached images (#14) (2e9a31664)

  • feat: add dynamic page titles based on selected conversation (a57be6e68)

  • feat: improve web UI instructions and code highlighting (e1b0b9193)

  • feat: automatically continue generating after tool use, as in cli (ebf2a4a8c)

  • feat: added support for computer use, improved styling, fixed bugs (74dd8f9ac)

  • feat: get streaming working (#2) (dfe655709)

🐛 Fixes (962)#

Click to expand

  • fix(mcp): keep tool stdout off stdio transport (#3182) (fd29d2390)

  • fix(test): skip real model loading in semantic unit tests (#3177) (6338a8f29)

  • fix(release): use OIDC Trusted Publisher for gptme-acp PyPI publish (#3173) (21ba5b4d0)

  • fix(test): add @pytest.mark.no_retry to test_multi_tool_per_message (#3171) (4167a4fc6)

  • fix(subagent): preserve workdir in subagent_reply() re-spawn (#554) (#3161) (4a6f59dc1)

  • fix(openrouter): update stale default models (llama-3.1 series deprecated) (#3163) (76c253354)

  • fix(acp): add gptme_acp stub package so hatchling can build the shim wheel (#3167) (cdd71aa41)

  • fix(mypy): add warn_unused_ignores and remove 53 stale type: ignore comments (#3154) (0198f0590)

  • fix: reorder star button and message count indicator in ConversationItem to remove dead space (star button only visible on hover) (7d331b795)

  • fix(webui): stabilize WelcomeView autoFocus$ to prevent focus-steal on re-render (#3155) (4fd36a8ab)

  • fix(config): cast providers to AoT to fix tomlkit type errors (#3151) (9b793120d)

  • fix(webui): show –cors-origin command in setup wizard for web users (#3149) (d9c3e148a)

  • fix(ci): harden docs deploy and PyInstaller apt setup (#3144) (8d7164b0d)

  • fix(computer): apply terminal startup delay fix to Docker container (#216) (#3133) (2893cdf48)

  • fix(computer): treat missing Playwright chromium binary as warning, not error (#216) (#3131) (f0ed8713b)

  • fix(computer): treat playwright missing as warning, not hard failure (#216) (#3129) (44da5d6cd)

  • fix(info): fall back to pyproject.toml when editable install omits Provides-Extra (#216) (#3128) (27b954094)

  • fix(computer): classify new browser functions in risk/audit system (#216) (#3123) (7aa01574c)

  • fix(computer): auto-detect native transport in latency diagnostic (#216) (#3117) (e876924ab)

  • fix(subagent): add +complete to subprocess mode tool list (#3116) (945af647d)

  • fix(subagent): apply output_schema parsing in subagent_wait() (#554) (#3114) (68a9af0b2)

  • fix(webui): wait for artifact preview in tests (#3113) (dec292ceb)

  • fix(webui): connect server after auth-code exchange + lazy cloud env vars (#3111) (258e69277)

  • fix(computer): lower screen-change threshold 1% → 0.2% and fix xvfb teardown (#216) (#3109) (c2440ccdd)

  • fix(subagent): delete worktree branch on cleanup (#554) (#3106) (527b19be2)

  • fix(browser): drop unreachable label= fallback in select_option (#3103) (28a5139b8)

  • fix(subagent): isolate thread tool list via clear_tools() at entry (#554) (#3102) (94aae12a5)

  • fix(subagent): report unfinished thread agents as “timeout” in wait_all() (4f89a57da)

  • fix(computer): microsecond screenshot timestamps + robust test timing (#3092) (30400bd0e)

  • fix(subagent): fix eval checks and subagent_wait_basic test (#554) (#3087) (9a328b67f)

  • fix(util): add missing f-prefix in epoch_to_age incl_date branch (#3080) (b601eaa87)

  • fix(chats): discover cursor-chat-history.json even when conversations/ dir absent (#3077) (437c3cfb2)

  • fix(subagent): close watchdog wait race (#3074) (e40bcefdc)

  • fix(tools): always pair structured tool_use with a tool_result (#554) (33d25418b)

  • fix(computer): add settle_time to _poll_for_change to handle multi-phase UI transitions (#216) (#3065) (345f70c11)

  • fix(ci): harden Build workflow against broken Ubuntu apt sources (#3066) (2bb45ad99)

  • fix(computer): capture pre-action baseline in act_and_observe to detect immediate changes (#216) (#3064) (5761a5d34)

  • fix(computer): derive VNC hostname from page origin in computer.html (#216) (#3054) (013a7588a)

  • fix(computer): detect macOS display scale via AppKit/system_profiler (#216) (#3047) (994a362ad)

  • fix(computer): doctor checks for WM + pyatspi; profile guidance for window_focus delay (#216) (#3046) (a42b5d38f)

  • fix(computer): surface observe_web failures as actionable error messages (#216) (#3039) (a9d0b47c0)

  • fix(computer): add browser tool to Docker server for structured-first web interaction (921040881)

  • fix(server): reject unknown fields in PUT /api/v2/tasks/{id} to prevent silent no-ops (#3032) (631d910fa)

  • fix(computer): restore Docker build with lockfile-backed install (#216) (#3029) (b58ec3766)

  • fix(eval): make subagent eval expect/check_log checks picklable (#3025) (54e038f84)

  • fix(eval): harden computer-use eval suite flagged at Greptile 3/5 on #3020 (#3026) (4272c0d1e)

  • fix(cli): re-raise ClickException before catch-all so UsageError exits 2 (#3016) (818ae0b59)

  • fix(webui): guard provider-health and user-settings hooks on isConnected (ad823b6c9)

  • fix(computer): register observe_web/observe_desktop as ToolFunctions + handle list[Message] in ipython (#3014) (00c52fc7f)

  • fix(test): use infinite iterator for monotonic mock to avoid StopIteration (#3013) (eae44dc72)

  • fix(computer): adaptive wait_for_change polling + EWMH WM readiness check (#3005) (85285e801)

  • fix(computer): add shell+vision to Docker server, Xvfb liveness check in doctor (#3004) (f07b8cf6b)

  • fix(server): only reject message-delete that creates a NEW role adjacency (#2997) (36c5237ff)

  • fix(webui): avatar alignment + standard-markdown previews (closes #2998) (#2999) (4436f54fc)

  • fix(util): tokens count rejects valid provider-prefixed models (#2992) (f3bdf806f)

  • fix(lessons): always log dropout record when epsilon>0, even if no lessons withheld (#2990) (7061f0bbc)

  • fix(webui): fix fork_command placeholder in Create Agent dialog (#2991) (c8d8715ac)

  • fix(openai): embed reasoning content in non-streaming response instead of dropping it (#2985) (66b48256b)

  • fix: demote reasoning content logging from INFO to DEBUG (#2981) (63c659234)

  • fix(rag): register tools-list context hook with dot notation (#2980) (44f842640)

  • fix(subagent): correct context_window=N truncation (off-by-one in n_base) (#2977) (b7254c271)

  • fix(config): strip unknown top-level keys from config file on load (#2974) (0da7af251)

  • 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)

  • fix(server): reject whitespace elicitation ids (0736a78f0)

  • fix(shell): preserve indentation on first line of command output (#2767) (666285e32)

  • fix(webui): trigger placeholder chat initial step (#2768) (273034842)

  • fix(webui): improve chat composer mobile ergonomics (#2764) (d57fabc0b)

  • fix(util): reject empty batch model override (a9d287188)

  • fix(webui): Jest ESM import crash from ansi-regex v6 (#2761) (15bd38319)

  • fix: model-aware temperature and top_p for gpt-5 and moonshot (f0564fd4a)

  • fix(complete): nudge interactive+no_confirm (-y) mode on think-only responses (d9c4157ec)

  • fix(webui): keep demo mode out of setup probes (#2746) (a6527cadb)

  • fix(reduce): drop orphaned tool results in limit_log when tool-use is dropped (4bea903d6)

  • fix(eval): normalize model key in pass-rate gate to handle router prefixes (13b4f1060)

  • fix(tests): add assertions to three no-op test functions in server bad-input suite (#2738) (9f7c2a185)

  • fix(server): return JSON instead of HTML for HTTP errors (404, 405, etc.) (#2740) (50fb21abc)

  • fix(webui): restore direct-link fallbacks for admin and health (#2742) (dce35372e)

  • fix(webui): add baseline security headers to Cloudflare Pages _headers (#2744) (2840c9fde)

  • fix(server): batch SSE generation_progress events and fire generation_complete early (#2730) (5be5f1fc1)

  • fix(tests): update bad-input test expectations for correct error codes (#2729) (385ad0611)

  • fix(webui): polyfill structuredClone in jest.setup for jsdom (#2690) (23a658e36)

  • fix(config): validate temperature/top_p/max_tokens types in ChatConfig.from_dict (#2737) (b5da92408)

  • fix(cli): bare model name without provider gives misleading error (#2734) (340efcf66)

  • fix(cli): guard against empty –name value bypassing ParamType validation (#2732) (f21f3c73b)

  • fix(cli): promote no-tool auto-reply logging from info to warning level (#2736) (3c7038529)

  • fix(logmanager): stop auto-pruning thinking blocks (#2727) (5106fa6de)

  • fix: suppress RequestsDependencyWarning globally (#2728) (35613fcc5)

  • fix(webui): preserve demo query across chat navigation (#2722) (48fae73a7)

  • fix(cli): use interactive flag instead of raw isatty() for stderr routing (#2719) (14625ae02)

  • fix(cost): drain stream after tool break to capture message_delta usage (#2720) (69a373377)

  • fix(logs): demote reasoning_budget and auto-naming retry logs to debug (#2715) (03f405a6a)

  • fix(llm): buffer thinking-block display to prevent think-sig terminal wrapping (#2704) (54b77b123)

  • fix(logs): suppress multiline think-sig; capture usage when stream broken early (#2703) (c95e73cb4)

  • fix(cost): fix request_count inflation and redundant total display (#2702) (58eff1f3e)

  • fix(server): load conversations from validated logdir (#2696) (760c74291)

  • fix(logs): suppress think-sig in streaming; restore CLI workspace default (ee17a7dca)

  • fix(webui): encode chat route conversation ids (#2699) (0753abe19)

  • fix(logs): quiet normal runtime noise (25a2f1fc5)

  • fix(server): reject path traversal in file attachments via API (4d487bba3)

  • fix(cli): catch empty –model at parse time instead of blocking startup (#2692) (f93cccf26)

  • fix(self-heal): handle invalid ANTHROPIC_API_KEY gracefully (#2693) (42cdec9ed)

  • fix(webui): replace structuredClone with JSON.parse/stringify for jsdom compat (#2691) (6340324ed)

  • fix(webui): add missing getServerHealth to demo ApiClient (4b8abfdb7)

  • fix(webui): add missing getServerHealth to demoApiClient (#2685) (c5078b037)

  • fix(webui): improve history accessibility (#2670) (a374f26ae)

  • fix(release): verify artifact build workflows actually started (#2648) (a23951230)

  • fix(release): vendor build_changelog.py, add dry-run PyPI publish validation (#2644) (c77843321)

  • fix(cli): clearer error when calling execute-only tools via ‘tools call’ (#2642) (5ec49f43e)

  • fix(server): emit Access-Control-Allow-Private-Network on CORS preflight (#2635) (5031b54e3)

  • fix(server): strip whitespace from session_id before emptiness check (de2447956)

  • fix(webui): handle cloud auth postMessage handoff from popup (#2624) (2746a6978)

  • fix(util-cli): reject empty –model in llm generate (#2628) (785d76aba)

  • fix(test): use CliRunner instead of subprocess in TestModelsInfo to prevent CI timeouts (fbfb2c235)

  • fix(computer): handle missing/timed-out ImageMagick convert in screenshot resize (#2625) (111e178b0)

  • fix(webui): tag loopback requests correctly (#2623) (4dc83cb28)

  • fix(server): avoid full JSONL scan in agents listing endpoint (#2619) (3b11cd751)

  • fix(webui): hint when hosted chat hits loopback without CORS (#2615) (89eb8e903)

  • fix(webui): refresh stale fallback model to claude-sonnet-4-6 (#2610) (dd67a2a93)

  • fix(webui): cross-tab sync for server registry after cloud sign-in (6c58d6bc9)

  • fix(server): validate stream and tool-confirm action inputs (#2608) (322c893d8)

  • fix(cli): suppress resume hint after fatal exit (#2607) (4a0c25287)

  • fix(autocompact): preserve tool-call messages (#2606) (df7533d7f)

  • fix(llm): stop tool-format streams without newline (#2605) (0c1f47359)

  • fix(install): error on missing TTY instead of silently assuming yes (#2600) (22c26d473)

  • fix(server): validate config patch tool allowlist (#2597) (e385e622b)

  • fix(cli): reject shell-hostile conversation names (#2596) (386cb3bac)

  • fix(server): validate tools field type before calling init_tools (#2595) (3d6b4ee95)

  • fix(cli): expand tilde in –workspace paths (ef9297a28)

  • fix(hooks): never crash gptme-util hooks run on malformed CC event JSON (#2591) (c2913a033)

  • fix(server): block /edit command in server mode (#2590) (a55f46010)

  • fix(cli): reject whitespace-only conversation names (fb904f796)

  • fix(server): return ‘Branch not found’ when POST targets a non-existent branch (#2587) (9ccc02c64)

  • fix(cli): strip whitespace from prompts before empty check (#2584) (c61294aed)

  • fix(server): reject non-string transcript call_sid (#2583) (ab112b6f4)

  • fix(server): propagate ContextVars into background threads (#2582) (347ad1695)

  • fix: improvements to gptme-util chats read/search (#437) (d5b19ba50)

  • fix(server): reject whitespace-only upload filenames; return 404 for nonexistent workspace subpaths (#2581) (85a430b0c)

  • fix(util-cli): prepend system message in llm generate (#2578) (e31dddfa1)

  • fix(server): reject invalid message tool allowlists (#2579) (bcf4b28ad)

  • fix(util-cli): keep tools info JSON machine-readable (c6178c96e)

  • fix(cli): raise UsageError for empty –model string (#2577) (6362147c9)

  • fix(server): correct upload path field description and add upload tests (#2576) (b87d153ab)

  • fix(cli): raise UsageError for unknown model in llm generate (#2575) (998fb759b)

  • fix(server): reject non-string conversation prompt (#2574) (c5c0c8598)

  • fix(hooks): tolerate session-end trigger kwargs (#2573) (ec9b5104b)

  • fix(cli): keep unknown profile errors off stdout (#2567) (db71a4e7f)

  • fix(cli): reject malformed –output-schema with a usage error (#2571) (ea860e41d)

  • fix(cli): reject missing path args before prompt merge (#2569) (8d3b3ff3a)

  • fix(cli): validate custom tool paths before startup (#2566) (64e09e384)

  • fix(webui): skip hosted loopback auto-connect (#2568) (4597b63c7)

  • fix(server): reject malformed project_config sections (4ca1d829b)

  • fix(cli): validate architect/editor model names with clean usage error (5c2d0f05f)

  • fix(cli): scope implicit resume to cwd workspace (72300a945)

  • fix(cli): reject missing explicit path prompts early (1183cfd62)

  • fix(server): reject malformed JSON before field validation (#2562) (f133dda7f)

  • fix(cli): scope unnamed resume to workspace (#2561) (66e4249c0)

  • fix(json): keep runtime stdout pure in JSON mode (#2559) (ed66a68c1)

  • fix(webui): retire dead cloud preset URL (#2560) (c45feb926)

  • fix(models): dedup ‘Unknown model’ warning via log_warn_once (#2558) (10a313143)

  • fix(test): adjust short prompt lower bound from 500 to 400 after null-byte guard reduced prompt size (85b00010c)

  • fix(cli): preserve custom tool file allowlists (#2554) (2573e54ae)

  • fix(logmanager): clamp over-large conversation limit to avoid islice crash (#2552) (6b6e7e46e)

  • fix(telemetry): honor OTEL_EXPORTER_OTLP_TIMEOUT for export and flush (#2550) (f38ffaf7f)

  • fix(webui): render a NotFound page for unmatched client-side routes (#2551) (2201a78d3)

  • fix(cli): remove dead logdirs on startup validation (#2540) (683a1b501)

  • fix(cli): allow json after headless auto-switch (#2548) (3a8c1ed7b)

  • fix(cli): reject unsafe /fork conversation ids (#2536) (575e9a3c2)

  • fix(cli): reject unsafe /fork names (#2539) (f97df5856)

  • fix(cli): avoid full conversation scans on resume (#2544) (b23cdb47c)

  • fix(server): reject non-string session ids (#2545) (d6057b931)

  • fix(cli): keep slash commands on json rail (#2543) (c61d145e0)

  • fix(cli): accept -t=value tool syntax (#2542) (8bfebb811)

  • fix(webui): restore hosted deep links on Pages (#2534) (34bc0a01e)

  • fix(server): reject non-string elicit ids (#2541) (3491af279)

  • fix(cli): keep json-mode logs off stdout (#2537) (184ccc7ef)

  • fix(server): reject invalid chat config path types (#2538) (5ddadc2e3)

  • fix(server): reject non-string step models (#2535) (64f74e318)

  • fix(cli): validate custom tool paths before init (#2533) (212139f93)

  • fix(server): validate agent creation field types (#2531) (ec61e388e)

  • fix(webui): keep api misses out of SPA fallback (#2532) (10ee75d53)

  • fix(telemetry): suppress OTLP timeout tracebacks (#2528) (2d64b73ec)

  • fix(server): return 409 for upload name exhaustion (#2529) (ef29f0682)

  • fix(cli): avoid blocking on idle stdin pipes (#2525) (9390f0ef7)

  • fix(cli): ignore disable env in prompts expand (bcfbd00bc)

  • fix(server): reject non-object conversation config (4f68269eb)

  • fix(server): use get_json(silent=True) in tasks endpoints (#2524) (84d5c5857)

  • fix(server): reject non-object v2 JSON bodies (e5c09e826)

  • fix(server): use get_json(silent=True) in tasks and agents endpoints (#2523) (03fca16a6)

  • fix(cli): honor –name when resuming conversations (#2522) (417a4f82a)

  • fix(mcp): deduplicate search_all results across registries (#2520) (ecfea2bae)

  • fix(webui): route auth code exchange through fleet (#2519) (d50617c57)

  • fix(server): validate PUT conversation body and messages types (#2517) (4c7fa7916)

  • fix(cli): reject unsafe conversation names (#2518) (fa6c9d80c)

  • fix(chats): add logger warning for skipped non-string content and narrower type hint (5f1fee889)

  • fix(webui): reset isLoading to false when disconnected in useModels (#2514) (568585c70)

  • fix(webui): gate useModels on connection state (#2513) (3282b11db)

  • fix(server): validate transcript turn text type to prevent 500 on non-string input (01729f32c)

  • fix(server): validate message content type in PUT conversation (#2511) (2bd3b3ca8)

  • fix(cli): reject directory passed to ‘tokens count –file’ (#2510) (7e1cdf1c6)

  • fix(server): validate session belongs to conversation across all sessions endpoints (#2508) (d5f44c478)

  • fix(cli): prevent gptme-util tokens count from hanging on no-input non-TTY (#2509) (5f527a0f6)

  • fix(server): return 404 from events endpoint when conversation does not exist (cca616bd9)

  • fix: prevent hang on empty query in chats search (#2505) (b68a38f75)

  • fix(webui): gate useTasksQuery on connection state (24d42078b)

  • fix(webui): suppress duplicate PNA hint in install block (9379aa6db)

  • fix(cli): reject overlong conversation IDs before filesystem access (#2502) (6bdf18dc3)

  • fix(server): return 400 for conversation_id/branch names exceeding NAME_MAX (#2498) (4d3f06f97)

  • fix(cli): remove browser backend noise from utility output (#2500) (a5b383286)

  • fix(chats): read finds any conversation by id and exits non-zero when missing (#2497) (7a39bba7f)

  • fix(cli): reject negative chats –limit instead of crashing islice() (#2496) (dad0fe359)

  • fix(cli): warn when ‘models info’ falls back for an unrecognized provider (#2495) (8bcc96e8b)

  • fix(cli): make non-default tools callable via gptme-util tools call (#2493) (b4664e9ad)

  • fix(chats): avoid scanning test logs for user stats (#2491) (b3b3e01b7)

  • fix(cli): tokens count treats ‘-’ as stdin (Unix convention) (#2489) (3e137c218)

  • fix(cli): mcp commands exit nonzero on failure (#2487) (925eaae6a)

  • fix(cli): tokens count exits nonzero when no input is provided (#2484) (1ceb07ab1)

  • fix(cli): resolve bare provider-less model names instead of crashing (3072e1a4f)

  • fix(logmanager): tolerate unknown message fields when reading logs (#2482) (f1719b89a)

  • fix(tools): split comma-separated choice options (cf1c91a28)

  • fix(vent): tolerate trailing punctuation in resolution-owner tag (#2474) (9bd65be9b)

  • fix(bot): verify sha256 of downloaded github_bot.py (0973bbf44)

  • fix(lessons): use description field for semantic matching in hybrid_matcher (#2469) (35e426d19)

  • fix(bot): update model default, fix checkout version, tighten permissions (#2468) (aa7675878)

  • fix(vent): teach resolution-owner taxonomy, capture owner tag (#2463) (09bcf44ef)

  • fix(webui): surface payment-required chat errors (#2462) (a3302479a)

  • fix(hooks): replace invalid noqa directives in auto_snapshots (#2461) (e4e078fb0)

  • fix(tests): bump short prompt token limit to 4200 (#2460) (aad46a340)

  • fix(site): strip broken README TOC from homepage (#2459) (daea4ee98)

  • fix(tauri): verify server is usable before reusing port 5700 (#2458) (1bf0beb3c)

  • fix(webui): include status code and server error in models fetch failure (#2457) (137a55d53)

  • fix(android): disable broken mobile cloud setup path (#2454) (30bc3384e)

  • fix(tests): skip test_search_perplexity on Perplexity/OpenRouter quota exhaustion (#2450) (d30562d6d)

  • fix(benchmark): raise cold threshold to 10s and increase runs to 10 (#2449) (fdbcf5a92)

  • fix(bot): avoid duplicate resolve failure comments (#2447) (248aac98c)

  • fix(tauri): commit app icons and remove icons/* from gitignore (#2446) (abe287c84)

  • fix(tests): skip requires_api tests on invalid API key (AuthenticationError) (#2444) (b4b6ea58a)

  • fix(tools): keep tool descriptions within OpenAI limit (#2441) (89a5dccac)

  • fix(github): rewire stale PR view helper (#2432) (1071fac9a)

  • fix(subagent): harden thread-mode wait path (#2425) (5e026c961)

  • fix(tests): adapt server tests to isolated workspaces (#2428) (76b121112)

  • fix(config): give server sessions an isolated workspace directory (#2427) (4e4ae6bc5)

  • fix(tools): warn when plain allowlists drop MCP tools (aadcdd257)

  • fix(server): correct conversation sort direction (cc0554d26)

  • fix(tools): support glob tool allowlists (#2423) (10e8caee5)

  • fix(hooks): harden Windows process handles (#2422) (98c9f3f5e)

  • fix(eval): lazy-load disabled swebench helpers (b8a47cce4)

  • fix(eval): address staged swebench review notes (3b9eead84)

  • fix(eval): fail fast on disabled staged swebench runner (cc39e45fc)

  • fix(webui): preserve structured API errors (d255073b8)

  • fix(llm): apply default max_tokens (16k) for OpenRouter models (#2402) (ed1d6ef26)

  • fix(ci): move workflow inputs from inline run: interpolation to env: (closes #2398) (#2399) (dc070862b)

  • fix(tools): restore CUA transport compatibility (#2393) (afada2488)

  • fix(eval): attach fixture files to local eval prompts (#2390) (157f7c98d)

  • fix(tests): clear GPTME_DISABLE_PATH_INCLUDE in test_image_auto_attach_end_to_end (#2379) (184daf803)

  • fix(webui): surface auto-step startup failures (#2375) (5d5bba3ec)

  • fix(tests): isolate include_paths tests from GPTME_DISABLE_PATH_INCLUDE env var (#2359) (7ad8c7d93)

  • fix(tools): simplify derive_type TODO with get_type_hints fallback (#2351) (7df272dcc)

  • fix(server): move :key from Vue template to child elements (#2345) (6f065264a)

  • fix(tools): fall back to current LogManager when shell logdir is None (#2344) (b84ef032f)

  • fix(autocompact): record context-savings ledger when tool outputs are summarized (#2342) (941bb9b25)

  • fix(tools): fold git log preview into shell (#2340) (786d1a00c)

  • fix(webui): responsive settings modal — horizontal tabs on mobile, sidebar on desktop (#2335) (2333ae49d)

  • fix(messages): merge turns after ephemeral pruning (#2331) (05dc3feab)

  • fix(webui): delete stale api.gptme.ai Cloud preset on migration (#2327) (af8d3edec)

  • fix(webui): show HTTP status in auth code exchange error instead of ‘Unknown error’ (#2326) (5cd88032b)

  • fix(webui): support same-window postMessage in EmbeddedContextProvider (#2325) (41da3560a)

  • fix(server): validate per-turn dict type in POST /transcript (c15350ab0)

  • fix(webui): update auth base URL from fleet.gptme.ai to gptme.ai (#2312) (3c0fb79f0)

  • fix(llm): strip redundant openrouter/ prefix from proxy model IDs (#2311) (9453b85a3)

  • fix(context): add per-message size budget to include_paths (#2308) (2f7981c76)

  • fix(context): deduplicate paths in _find_potential_paths to prevent repeated file embeddings (#2307) (c48735622)

  • fix(tests): add _restore_logged_warnings fixture and fix caplog context in TestLogWarnOnce (#2301) (b94ae2ba2)

  • fix(ci): route Anthropic tests through OpenRouter to use per-key spend limits (#2297) (771528ed8)

  • fix(webui): make SetupWizard X close button visible and persist hasCompletedSetup (#2295) (b0200264b)

  • fix(webui): add Skip button to SetupWizard welcome step (#2294) (e1583222a)

  • fix(webui): mount SettingsModal in mobile layout so Server settings works on Android (#2293) (f8d336238)

  • fix(webui): stop auto-connect retries on CORS/PNA failures (#2290) (faa0333e9)

  • fix(webui): move Sheet safe-area from SheetHeader margin to SheetContent padding (#2289) (bd954bbc8)

  • fix(webui): apply safe-area insets to Sheet primitive (app-wide) (#2287) (60e826e8a)

  • fix(webui): replace removed SiOpenai with local SVG icon (#2283) (58ded337b)

  • fix(webui): add safe-area insets for Android/iOS notch support (#2284) (deb4a008d)

  • fix(webui): remove dead Lovable bootstrap script (#2281) (6482aee7e)

  • fix(webui): remove unsupported [build] key from wrangler.toml (#2279) (f14d1df4e)

  • fix(webui): gitignore bun.lockb to prevent silent CF Pages breakage (#2278) (adf43a21a)

  • fix(webui): remove bun.lockb and fix McpConfiguration type errors (#2270) (74d15ee5a)

  • fix(tauri,server): self-terminate gptme-server when Tauri parent dies (#2267) (6684e7032)

  • fix(tauri): handle RunEvent::Exit for macOS Cmd+Q sidecar cleanup (#2260) (#2266) (fa8616615)

  • fix(tauri): prevent_exit in ExitRequested to guarantee server cleanup on macOS (#2264) (32b13c1dc)

  • fix(tauri): catch PyInstaller orphan on app exit (62155215e)

  • fix(tauri): kill gptme-server subprocesses and orphans on exit (#2261) (fe05ed5c3)

  • fix(agents_md_inject): skip re-injection when content already loaded from different path (#2256) (b69b5bf91)

  • fix(tauri): reuse existing gptme-server on startup instead of blocking error dialog (#2258) (ee6bb708a)

  • fix(cli): skip context_cmd when opening any existing conversation, not just –resume (#2257) (5b607e1ea)

  • fix(prompts): include version string in custom agent system prompt (#2251) (ff23215b9)

  • fix(llm): read OpenRouter cache write tokens (#2250) (09a4f7164)

  • fix(tauri): set display name to ‘gptme’ in Dock/Finder on macOS (#2248) (42fcc357a)

  • fix(settings): show effective config sources and restore scroll (#2247) (7cd59addd)

  • fix(tauri): restore execute permission on sidecar after artifact download (#2246) (4d0f9d663)

  • fix(tauri): fix notarization, app name, and icon (#2244) (8f78b5a3d)

  • fix(tauri): codesign sidecar binary on macOS (#2242) (3571ed770)

  • fix(webui): surface missing provider setup on welcome view (#2241) (92646ade7)

  • fix(tauri): trigger macOS local-network permission at app startup (#2240) (7e099f847)

  • fix(webui): include port in derived server name to prevent name collisions (#2239) (4b0440ddc)

  • fix(tauri): clean up gptme-server on app exit, not just window close (#2238) (620edf49b)

  • fix(webui): use configured Pages project and refresh Bun lock (#2233) (07027a663)

  • fix(tauri): expose TAURI global so webui detects desktop env (#2229) (ee6693584)

  • fix(webui): show actionable connection error details (#2228) (cf87099be)

  • fix(tauri): allow multi-origin CORS so AppImage local setup works (#2227) (646590516)

  • fix(webui): surface disconnected first-run actions (#2219) (45820f031)

  • fix(server): apply provider API key to os.environ immediately (no restart needed) (#2214) (2930da50e)

  • fix(reduce): skip unfindable codeblocks instead of asserting (#2212) (74f701ec6)

  • fix(release): use creatordate sorting for previous tag detection (#2211) (285c45f76)

  • fix(cli): reduce agents scan latency (#2206) (c7f6833a7)

  • fix(hooks): match Claude sessions by start time (#2202) (b155f7913)

  • fix(hooks): detect codex session mode in workspace_agents (#2196) (4136b5857)

  • fix(anthropic): use adaptive thinking on Opus 4.7 (legacy returns 400) (#2190) (3933b9e95)

  • fix(openai): extract cache_creation_input_tokens from OpenRouter/Anthropic responses (#2189) (ace5b7cdf)

  • fix(anthropic): fold static bootstrap into system prompt (#2188) (fe9c84c34)

  • fix(doctor): check for pandoc, pdftoppm, convert, and shellcheck (#2182) (fb44ae9e7)

  • fix(config): drop unknown project-config keys instead of crashing (#2179) (59c780852)

  • fix(server): start without a default model when no API keys configured (#2178) (76719bf4d)

  • fix(server): pick fallback model based on available provider keys (#2177) (8304021d7)

  • fix(config): ignore unknown keys in [prompt] and [user] instead of crashing (#2176) (504aec64d)

  • fix(doctor): show fix hints for SKIPPED checks in verbose mode (#2172) (398adb1a7)

  • fix(doctor): add node, npx, and docker to optional tool checks (#2171) (54cb8e21a)

  • fix(eval): clean up auto-created host_dir in DockerExecutionEnv (#2170) (f3bc96e2e)

  • fix(eval): isolate user context from benchmark runs (#2168) (6537b57bc)

  • fix(server): serial multi-tool execution and call_id propagation (#2166) (622c92f35)

  • fix(doctor): suppress requests version-compatibility warning (#2164) (a3aa732b8)

  • fix(server): use int type for –port, add GPTME_SERVER_HOST/PORT env vars (#2163) (10dcd2922)

  • fix(doctor): add Python version check (require 3.10+) (#2161) (97f2608e3)

  • fix(cli): suppress requests version-compatibility warning in gptme-util (#2160) (2cd90fd6b)

  • fix(server): include exception detail in agent init error response (#2158) (cc3b2f1b2)

  • fix(server): include exception detail in tasks API error responses (#2157) (096b4f572)

  • fix(chats): use 1-indexed labels in read to match –start parameter (#2156) (0f4b24995)

  • fix(doctor): show warning when Anthropic API key quota is exhausted (#2154) (1eb85f995)

  • fix(dx): improve error messages with actionable context (#2151) (e39e37c5b)

  • fix(dx): improve first-run experience with better errors and config detection (#2150) (e273ae15f)

  • fix(models): update OpenRouter Anthropic model IDs to dot notation (#2149) (d66ac4ba7)

  • fix(agent): use function timeout for fork command instead of hardcoded 120s (#2148) (f6e4eacce)

  • fix(server): reject non-object JSON in session endpoints (#2144) (e70c73d9e)

  • fix(server): reject non-object JSON in task PATCH endpoint (#2142) (e01a50be5)

  • fix(server): reject non-object JSON in agent creation (#2143) (53ff31a4e)

  • fix(server): 404 orphaned conversation avatar requests (#2141) (182df9a0c)

  • fix(util): lazy-import scipy in _sound_sounddevice to avoid 1.4s startup penalty (#2140) (5676664d2)

  • fix(server): reject non-object JSON in config patch (#2139) (fabfa88ba)

  • fix(server): add missing validation in POST message and config PATCH endpoints (#2138) (65c60f362)

  • fix(server): return 404 for missing conversation avatar and config (#2137) (69503e907)

  • fix(server): return 404 when patching missing conversation config (#2136) (3d0995d65)

  • fix(server): return 404 for missing conversations (#2135) (4d689db77)

  • fix(server): handle file deletion races and bound attachment name allocation (#2134) (fdcac364e)

  • fix(webui): avoid setup wizard completion loop (#2133) (387a27ceb)

  • fix(server): validate message content and timestamp in conversation creation (#2132) (b6256b03d)

  • fix(server): add thread-safety lock to SessionManager (#2131) (4f2eee4f3)

  • fix(tools): report error on invalid read line numbers and fix tool name in server error log (#2130) (da409c30c)

  • fix(server): validate task_id to prevent path traversal in tasks API (#2128) (be1bee349)

  • fix(server): add random suffix to task IDs to prevent collisions (#2126) (8bdbca06e)

  • fix(ci): fall back to unsigned tauri release when apple secrets missing (#2121) (6872f804b)

  • fix(server): cap text file preview at 10MB to prevent OOM (#2124) (748f177d0)

  • fix(server): restrict agent creation path to server working directory (#2123) (899c5b053)

  • fix(tests): fix server_confirm race condition and mark slow CLI tests (#2122) (80f35ccf6)

  • fix(server): validate user avatar serves only image files (#2119) (9ae2f22ff)

  • fix(lessons): validate tools field in frontmatter like keywords/patterns (#2120) (13ca5cba6)

  • fix(webui): use dynamic month name in ConversationList date group test (#2117) (aa6e86186)

  • fix(server+eval): event trimming for memory leak + eval timeout bug (#2108) (62ec454f9)

  • fix(server): detect and clean up stuck generating sessions (#2107) (33f17bd1d)

  • fix(lessons): guard against zero-norm embeddings and clean up dead code (#2102) (16ef840bc)

  • fix(lessons): make tool matching case-insensitive (#2092) (890ffc840)

  • fix(lessons): fix hybrid matcher crash, improve context extraction and path parsing (#2087) (cd762a1ff)

  • fix: three reliability/UX bugs (assert, API validation, stdout) (#2086) (3d6a19504)

  • fix(server): fix SSE event delivery race causing test flakiness (#2081) (825514b0e)

  • fix(server): resolve gptme session dirs in external sessions API (#2071) (012241e31)

  • fix(mcp): don’t set thread-global event loop in MCPClient (#2070) (d7abbc8a3)

  • fix(server): improve external session provider detection for uv tool installs (#2065) (463747f20)

  • fix(eval): clarify behavioral eval prompts to improve baseline score (#2063) (51c32cf47)

  • fix(tools): add explicit UTF-8 encoding to all file read/write operations (#2051) (d0b41b0ae)

  • fix(server): fix model name in rerun endpoint and event flag race condition (#2050) (3b271f7c3)

  • fix(eval): fix behavioral eval suite — 4 cascading bugs (#2047) (922603a69)

  • fix(tools): add text=True to lynx subprocess and error handling to PDF download (#2044) (928f18dd1)

  • fix(server): close TOCTOU race in /step endpoint for concurrent requests (#2042) (e3c20a98f)

  • fix(llm): add safety guard against silent None return in retry decorators (#2041) (b87923bd6)

  • fix(eval): handle TimeoutExpired from docker stop during timeout cleanup (#2040) (8d7a4c4b6)

  • fix(tools): add missing capture_output/text to subprocess calls (#2038) (68d47b425)

  • fix(server): return LLM errors in step HTTP response (#2037) (0ddec3da6)

  • fix(tools): add error handling for subprocess calls in screenshot and PDF tools (#2030) (7fecc87a8)

  • fix(server): harden session management and input validation (#2029) (9eee5d2c3)

  • fix(tools): replace deprecated getchildren() with direct iteration (#2020) (5489d2dbe)

  • fix(subagent): add timeout to subprocess monitor to prevent indefinite blocking (#2019) (6a1c07837)

  • fix(tests): set asyncio_default_fixture_loop_scope to suppress deprecation warning (#2016) (dee34bc29)

  • fix(server): validate input types on tasks API and POST message endpoints (#2014) (cc7804bb2)

  • fix(eval): add subprocess timeouts to eval module (#2012) (8ac9f4b52)

  • fix: add subprocess timeouts to remaining misc modules (#2013) (3d84cbe10)

  • fix(agent): add subprocess timeouts to service and workspace modules (#2010) (1b175afb5)

  • fix(util): add subprocess timeouts to all gh CLI calls (#2009) (53ea31565)

  • fix(tools): add subprocess timeouts to computer tool (#2007) (447bb9a4d)

  • fix(util): add subprocess timeouts to clipboard operations (#2008) (9e4a1f5ad)

  • fix(server): wrap tasks list response to match TaskListResponse schema (#2006) (524e7640a)

  • fix(server): validate branch parameter to prevent path traversal (CWE-22) (#2005) (39f118bdc)

  • fix: harden XML parsing — prevent KeyError and negative positions (#2004) (b55f79d83)

  • fix(server): add path traversal validation to session and workspace endpoints (#2000) (fbe35eb55)

  • fix(server): hide reasoning blocks from visible output (#1999) (ba2567323)

  • fix(tests): remove unused pytest-asyncio config options (#1998) (960884dc7)

  • fix(webui): resolve eslint react-hooks/exhaustive-deps warning (#1991) (23a55aafc)

  • fix(webui): fix pre-commit hooks to only run on webui file changes (#1990) (5a9e5a5eb)

  • fix(tools): add missing subprocess timeouts to prevent indefinite hangs (#1985) (7177168cd)

  • fix(eval): replace readline() loops with communicate() to prevent pipe deadlocks (#1984) (3d5beeec8)

  • fix: harden subagent thread safety and server input validation (52db57eba)

  • fix(eval): use Wilson score consistently in per-test breakdown (#1981) (f71571cab)

  • fix(eval): add missing subprocess timeouts to Docker operations (#1980) (b385decaf)

  • fix(eval): rank leaderboard by Wilson score to account for test coverage (#1978) (f52f2c826)

  • fix(webui): sidebar icon reorder, workspace filtering, remove redundant sections (#1976) (348f09e6d)

  • fix(webui): handle nested code blocks in markdown rendering (f595ef842)

  • fix(webui): add node types for test environment (#1973) (95cd37bf3)

  • fix(webui,server): step collapse bugs, message styling, metadata, model persistence, scroll (#1957) (a9105d50e)

  • fix(test): join subagent threads before mock assertions (#1968) (5115fbdf7)

  • fix(ci): install ffmpeg conditionally for demo capture recording (9367530dc)

  • fix(eval): close remaining practical16 review gaps (#1967) (f48de363a)

  • fix(server): validate auto_confirm type in PUT conversation endpoint (CWE-20) (#1966) (d69781211)

  • fix(ci): install ffmpeg in capture-webui job for recording support (#1964) (730bccc07)

  • fix(webui): add DOMPurify sanitization and remove debug logs (#1963) (d8fbb6dc9)

  • fix(eval): fix practical16 check false positives flagged by Greptile (#1962) (fa6febd9a)

  • fix(hooks): prevent AGENTS.md re-injection on CWD change in server mode (#1959) (c613c7593)

  • fix: add ValueError guards for env var int() parsing in anthropic and computer tools (#1956) (a129ec7cb)

  • fix(test): check Anthropic quota by API key presence, not MODEL env var (#1955) (daf02c9b6)

  • fix(logmanager): call write() after undo() to persist changes (#1954) (e59ed83e7)

  • fix(message): preserve quiet flag in Message.concat() (#1953) (949316ab7)

  • fix(subagent): use DEVNULL instead of PIPE to prevent deadlock (#1952) (c6885c494)

  • fix: config write loss, env prefix mismatch, chats lock, gh poll timeout (#1951) (b971b9b7a)

  • fix(logmanager): use is_absolute() instead of resolve() for logdir check (#1950) (d9dc0e8a2)

  • fix(computer): use API dimensions directly for screenshot resize (#1949) (96d4df926)

  • fix: pdf temp directory leak, tmux wait crash, include_paths crash guard (#1948) (19d7356f9)

  • fix(codeblock): preserve fence length to prevent truncation assertion failure (#1947) (b51845ebb)

  • fix(logmanager): use Path.relative_to() instead of string containment for logdir check (#1946) (cc4bb1b86)

  • fix: tty file handle leak, vision temp file cleanup, and server TOCTOU race (#1945) (ba464915a)

  • fix(eval): remove phantom CSV columns and add Docker upload path traversal guard (#1944) (8469985ce)

  • fix(server): persist tool output to disk after execution (#1943) (ca3539be1)

  • fix: register planner subagent before thread start and remove dead proxy_url branch (#1942) (d7e33c0f0)

  • fix: fix Log.repr bracket, command arg parsing, and read end_line check (#1941) (c555deb03)

  • fix: replace deprecated tempfile.mktemp() and fix patch size warning condition (#1940) (744166718)

  • fix(eval): add p.wait() after p.kill() to prevent zombie processes (#1938) (dfb7ffdf3)

  • fix(server): use .get() to prevent KeyError on concurrent pending_tools access (#1937) (0443906f5)

  • fix(server): snapshot session dict before iterating in cleanup (#1935) (7a323d888)

  • fix(server): send text chunks not individual characters in ACP SSE streaming (#1934) (8721842ba)

  • fix(openrouter): don’t set require_parameters when reasoning is enabled (#1933) (6760b4cec)

  • fix(webui): remove broken generic Cloud preset from multi-server registry (#1926) (1c9a0b79e)

  • fix(server): persist visible generation errors (#1920) (86480967d)

  • fix(webui): highlight Chat tab when on root path ‘/’ (#1914) (c5a4b7b33)

  • fix(webui): add mobile bottom navigation and fix desktop logo shift (#1913) (b1954b3c9)

  • fix(webui): use dynamic aria-label for mobile nav toggle (#1911) (9ab5d20d7)

  • fix(webui): fix mobile navigation — add hamburger menu, prevent sidebar auto-open (#1909) (25b6346bf)

  • fix(webui): fetch recommended models from API instead of hardcoding (#1901) (e1b6659c5)

  • fix(webui): serve attached files via correct API endpoint (#1906) (2abccb4dc)

  • fix(webui): preserve cross-server conversations with same id (#1904) (7d1605a01)

  • fix(webui): fix duplicate message and step race in pendingFiles flow (#1902) (0618790fa)

  • fix(webui): remove asChild from ContextMenuTrigger wrapping Computed (#1892) (59db8b873)

  • fix(webui): add aria-label attributes to icon-only buttons (#1889) (90202f246)

  • fix(webui): prevent scroll-to-bottom button flicker during smooth scroll (#1888) (164a7fee6)

  • fix(webui): make scroll-to-bottom button reactive with use$() (#1887) (ad15a4104)

  • fix(save): handle binary/non-UTF-8 files gracefully (#1879) (21d182e1d)

  • fix: ensure python command is available in eval on macOS (#1853) (ecc02a63a)

  • fix(webui): asset detection breaks on query strings, causing HTML to be served as JS/CSS (#1848) (c53a9eca3)

  • fix: use –env-file for docker secrets instead of CLI args (CWE-214) (#1832) (67c55bbbb)

  • fix(gh): show leading omitted lines in run log extraction (#1838) (97c1befe2)

  • fix(tests): keep FakePage reference for evaluate_calls assertions to satisfy mypy (#1834) (8340ca7c0)

  • fix(browser): preserve repo metadata on README parse errors (d050766ec)

  • fix(tests): prevent TemporaryDirectory resource leak in test_cli (#1833) (6971ac5ad)

  • fix(llm): forward max_tokens to openai-subscription provider (#1830) (883ecb8e4)

  • fix(eval): add 21 missing practical tests to leaderboard categorization (#1822) (6b83adcb4)

  • fix(eval): increase default timeout from 60s to 300s (#1820) (f81e15ebb)

  • fix(eval): increase default timeout from 30s to 60s (#1819) (c41a0b660)

  • fix(eval): instruct agents to use relative paths in isolated workspace (#1818) (56ac4d187)

  • fix(eval): restore fixture files before running eval checks (#1815) (9b2b0261d)

  • fix: use –env-file for docker secrets instead of CLI args (CWE-214) (#1789) (e6c3a9766)

  • fix(ci): replace bash 4+ lowercase syntax with POSIX-compatible tr (#1806) (c4114cfd3)

  • fix: improve error handling in SSE parsing, CLI args, and URL parsing (#1804) (1e6fbfe6e)

  • fix(shell): fix -executable false positive in is_allowlisted flag detection (#1792) (843898997)

  • fix: remove 6 type: ignore comments — batch 5 (#1783) (b851e3cb9)

  • fix(tests): gracefully skip tests when API quota exhausted mid-run (#1778) (c7cf7fcac)

  • fix: remove 11 type: ignore comments — batch 4 (#1777) (43b7af0e8)

  • fix: remove 18 type: ignore comments — batch 3 (#1775) (6ee5aefd6)

  • fix: remove 19 type: ignore comments with proper type fixes (#1774) (b31827057)

  • fix(context): include dotfiles in rglob fallback listing (#1770) (59161e813)

  • fix: improve type safety — remove 4 type: ignore comments (#1769) (38ff334af)

  • fix(config): preserve TOML formatting and comments on chat config save (#1765) (cd671c5bd)

  • fix(tests): use fully-qualified model names to prevent test pollution (#1763) (acfd5258b)

  • fix(server): add cookie-based auth for SSE connections (#1760) (447447b3f)

  • fix(tests): properly isolate server v2 test from user config (#1757) (bc432757c)

  • fix(acp,llm): fail-closed permission checks + surface token refresh errors (#1750) (94cb4c08d)

  • fix(server): make shell cwd thread-safe for concurrent sessions (#1749) (f09d95552)

  • fix(tests): eliminate 250+ ‘init() called twice’ warning spam (#1748) (bf6f30858)

  • fix(subagent): import Status type, remove dead threads list (#1746) (7c34383bf)

  • fix(eval): make topo-sort checks dynamic — read graph from deps.json (#1728) (165b66cb7)

  • fix(tests): fix flaky test_api_conversation_generate mock setup (#1739) (4fc9b174e)

  • fix(skills): address remaining quality issues in dependency declarations (#1730) (f0b32d668)

  • fix(shell): decode bytes in final read of background job output (#1726) (01fc09859)

  • fix(models): add supports_parallel_tool_calls to openrouter/anthropic/claude-sonnet-4-6 (#1725) (050700af5)

  • fix(browser): auto-select search backends with fallback (#1721) (ded1394e9)

  • fix: stats timestamp fallback + add model/token/cost breakdown (#1718) (b660a7f0e)

  • fix(vision): add webp to allowed image file extensions (#1717) (7450a6adc)

  • fix(tests): use subprocess isolation for flaky ACP stdout test (#1715) (fa3032502)

  • fix(eval): improve error robustness in eval runner (#1714) (5c39e64f2)

  • fix(eval-ci): detect fast-fail pattern as API quota exhaustion (#1711) (84c6f709f)

  • fix(ci): version release artifacts (#1710) (387be21e2)

  • fix(chat): don’t exit on complete when chained prompts remain (#1707) (bd1b07579)

  • fix: keep tool descriptions within OpenAI’s 1024-char limit (c2280ba8c)

  • fix(shell): use findall+last for return code parsing (Greptile follow-up from #1672) (#1701) (8dc0d6715)

  • fix(shell): preserve output when last line lacks trailing newline (#1672) (84dcbba2c)

  • fix(tokens): graceful fallback when tiktoken unavailable or offline (#1675) (d1cb27654)

  • fix(tools): use itertext() in _iter_from_xml to prevent content truncation (#1694) (b7f8d1a7c)

  • fix: assorted bug fixes — wrong tool name, missing timeout, dead code, race guard (#1677) (5cd1332d7)

  • fix(eval): prevent user workspace config from contaminating eval agent prompts (#1693) (9954695d8)

  • fix(precommit): run checks on modified files only in TURN_POST hook (#1667) (0870f4bb9)

  • fix(tests): replace pytest-mock mocker fixture with unittest.mock (#1673) (b1e09f0ea)

  • fix(codeblock): handle </thinking> end tag (gemini uses it instead of </think>) (#1691) (9ee3c6829)

  • fix(prompts): pass workspace to prompt_systeminfo for correct Working Directory (73c3d28b7)

  • fix(llm): prevent double-wrapped <think> tags when both reasoning mechanisms fire (#1689) (04f1a6f34)

  • fix(llm): handle reasoning content in openai-subscription stream (556bde01d)

  • fix(models): update Claude 4.6 context window to 1M (GA) (#1674) (2bfece86d)

  • fix: replace bare except clauses and unclosed file handle (#1670) (9400dff9f)

  • fix(types): resolve mypy errors in chats tool and gh tests (#1669) (e17eb06dc)

  • fix(tests): mark test_python and test_python_error as slow (#1671) (9b1d7a3fc)

  • fix(server): replace assertions with explicit error checks in production code (#1681) (e752f2aef)

  • fix(tools): graceful degradation for unavailable tools in server context (#1680) (d4da97051)

  • fix(eval): close file handle in SWEBenchInfo.save_to_log_dir (#1668) (7cad79dff)

  • fix(server): close TOCTOU race on acp_runtime in step request handler (#1666) (73f84f263)

  • fix(server): guard acp_runtime None in _acp_step finally block (#1664) (953ef0055)

  • fix(eval): rename duplicate write-tests to avoid name collision (#1663) (cce683d25)

  • fix(tools): pass tool_format to all .to_output() calls in examples (#1650) (fafbb36b4)

  • fix(tools): prevent content from leaking into unrelated ToolUse parameters (#1646) (94ce6e032)

  • fix(eval/dspy): handle empty messages gracefully in tool_usage_metric (#1642) (3cf20a913)

  • fix(release): poetry via pipx, upload retry, Docker tag policy (#1641) (4a8c0b350)

  • fix(release): don’t block dev releases on flaky API test failures (#1639) (9626e8be5)

  • fix(models): proper metadata for openai-subscription models (#1637) (9bdcac233)

  • fix(eval/dspy): handle API quota exhaustion gracefully in optimize workflow (#1628) (910503855)

  • fix(docs): extend RST title underlines for wide emoji characters (#1631) (2ea96458f)

  • fix(shell): do not process backslash escapes inside single quotes (#1624) (7004680f6)

  • fix(util): fix parameter shadowing and add empty-list guards (#1605) (c3c8cdaaf)

  • fix(lessons): deduplicate same-named lessons across directories (#1594) (aff8fd515)

  • fix(tauri): add webui npm install to tauri-dev target (297a7af41)

  • fix(tauri): use real PyInstaller sidecar in release CI instead of placeholder (99ae4dde3)

  • fix(tauri): pre-commit paths relative to tauri/, gptme.toml no agent, tauri-dev sidecar placeholder (69a6d116f)

  • fix(tauri): ensure venv exists before uv pip install, add deb to Linux CI build (27d9ab449)

  • fix(test): increase timeout for test_create_template_mode_e2e to 120s (092b8c3ef)

  • fix(tauri): platform-specific CORS, capability path, pre-commit config, gptme.toml (4f5ed21ad)

  • fix(tauri): install pyinstaller before running it in build-sidecar.sh (cbc3ef124)

  • fix(tauri): address remaining Greptile review feedback (3370adbab)

  • fix(ci): use platform-specific bundle args for build job (e7c285956)

  • fix(tauri-ci): skip DMG bundling in build job to fix macOS CI (5b2492934)

  • fix(tauri): address Greptile review feedback (2f247a906)

  • fix(ci): add placeholder icons to build/release jobs before icon generation (95f78632e)

  • fix(tauri): correct frontendDist path for monorepo layout (0695c4398)

  • fix: use diff syntax highlighting for save/append previews (#1585) (92584a49e)

  • fix: perplexity search now reads keys from config.local.toml (#1584) (0f5bef4ea)

  • fix(lessons): inject keyword count instead of text to prevent self-referential corpus matches (#1581) (97a90309d)

  • fix(gh): add multi-line comment guidance to prevent literal \n in posts (#1572) (0fe7e7fdb)

  • fix(server): validate auto_confirm type in v2 step request (#1571) (6b1faf80c)

  • fix(server): validate use_acp as boolean in v2 step request (#1569) (13f0e4369)

  • fix(release): fix oversized changelog from unreachable dev tags, add truncation guard (#1567) (7b84f7431)

  • fix: improve error handling and resource cleanup across tools (#1565) (6a5ae8813)

  • fix(codeblock): prevent premature block extraction in streaming mode (#1564) (136bc14d3)

  • fix(tools): pass instructions to ToolSpec in vision and subagent tools (#1562) (951015418)

  • fix(context): use plain git status instead of -vv (#1561) (b8cadbf4d)

  • fix(chats): escape regex in search highlight and fix repr’d output (#1557) (0b4c9a188)

  • fix(release): skip branch push for pre-releases to avoid branch protection (#1548) (3fe1da788)

  • fix(deps): bump pypdf minimum to >=6.7.3 for security fixes (9dca32aa3)

  • fix(test): configure pytest-asyncio and add as explicit dependency (#1538) (3652f064c)

  • fix(docker): optimize image size and add CI size tracking (#1524) (c54fd7f7e)

  • fix(hooks): resolve prompt file paths relative to agent’s CWD (#1531) (018406eb7)

  • fix(tests): make test_shell_file resilient to output ordering (#1522) (bfa8f4ea2)

  • fix(webui): resolve high-severity npm vulnerabilities (#1526) (59090b10f)

  • fix: write RESUME.md to logdir instead of workspace (#1514) (58b9b2017)

  • fix: use quad backticks for tool output codeblocks (#1507) (4e90fe895)

  • fix(hooks): filter lockfiles and add token budget to active context (#1499) (bf9472161)

  • fix: remove stale xfail, register xdist_group marker, close socket in tts (#1497) (9f39db7f3)

  • fix: cleanup test assertions, typo, and memory-efficient msg counting (#1496) (f8ef5b7e2)

  • fix(subagent): subprocess mode fixes for profiles (#1495) (ce5a7da23)

  • fix(prompt): strip System outputs from tool examples to prevent hallucination (#1490) (e2c9705ce)

  • fix(screenshot): add availability check for screenshot tools (#1488) (76daa97de)

  • fix(server): always chdir to workspace at step start (#1400) (d2cef9427)

  • fix(util): correct pytest detection and codeblock XML roundtrip (#1485) (94de63494)

  • fix(server): fix unreachable model fallback and consistent msg2dict serialization (#1484) (a7143f7ac)

  • fix(context): fix missing separator and inverted error handling in path parsing (#1474) (17449863e)

  • fix(logmanager): use .exists() for conversation.jsonl path check (#1478) (f3ff8e938)

  • fix(browser): add missing return path in read_url (#1482) (02abaa7e9)

  • fix(computer): implement proper macOS left_click_drag using cliclick dd/du (#1479) (a7cbe5960)

  • fix(tools): add path resolution and traversal protection to append and morph (#1475) (86e931bf9)

  • fix(reduce): handle all-pinned messages in reduce_log (#1480) (a4cc63ea0)

  • fix(cli): improve error messages and log levels for better UX (#1476) (7fd5e075e)

  • fix(subagent): use correct Status type in notify_completion and reap killed processes (#1477) (a74e55f8d)

  • fix(models): add recommended defaults for deepseek, groq, openai-subscription (#1473) (4c40e1e1a)

  • fix(profiles): correct tools=[] display and broaden type validation (#1483) (2fdb1ea44)

  • fix(tmux): remove check=True to let error messages display in kill_session (#1481) (41f182a26)

  • fix(tools): skip tool call parsing inside markdown codeblocks (#1472) (e53ea3d01)

  • fix(browser): fix Google search consent banner bypass in lynx (#1380) (0ef877010)

  • fix(profiles): reject string tools field with clear error (#1471) (d46255ff7)

  • fix(agent): set default git identity for workspace creation (#1470) (2713d6b01)

  • fix(test): set git identity in agent create E2E test for CI (0fb6494f7)

  • fix: server cleanup bug, modernize CI, update deps (#10) (3b7393442)

  • fix(python): don’t set NO_COLOR globally, it breaks Rich colors (53fdded53)

  • fix(subagent): hard-enforce profile tool restrictions at execution level (#1460) (ded8a8136)

  • fix: use specific exception handlers and lazy logging (#1459) (70aedae4e)

  • fix(context): exclude paths inside XML tags from context extraction (#1445) (a72599034)

  • fix(acp): prevent GC of fire-and-forget asyncio tasks + sort all (#1456) (0d60b1266)

  • fix(llm): prevent empty text content that breaks Z.AI/GLM via OpenRouter (#1444) (aec3372e8)

  • fix(codeblock): fix streaming parser nesting for bare backticks (#1429) (621303cb8)

  • fix(acp): remove slash prefix from advertised command names (#1438) (c9d923818)

  • fix: add timezone awareness to all datetime calls (#1433) (051ed1df6)

  • fix: remove unused dep, fix RAG post-process bug, clean type ignores (#1428) (157c5117b)

  • fix(acp): defer session-open notifications to after NewSessionResponse (#1420) (459bd0107)

  • fix(acp): return None from load_session instead of raising NotImplementedError (#1419) (d77df7720)

  • fix(acp): resend AvailableCommandsUpdate on first prompt() to fix Zed race condition (#1412) (df3021089)

  • fix(auth): don’t truncate OAuth URL in fallback message (#1414) (4ed5152ce)

  • fix(agent): replace template strings in gptme-agent create (#1413) (cf592b0ff)

  • fix(logmanager,tmux): prevent crashes on undo overflow and send-keys missing args (#1390) (3795f5483)

  • fix(acp): include gptme version in ACP agent startup log (#1410) (65f4a8511)

  • fix(acp): replace assert guards with explicit runtime checks (#1399) (031cade81)

  • fix(todo): allow setting paused state on todo items (#1405) (9138a12d1)

  • fix(models): update Anthropic model metadata per official docs (#1409) (1cebda747)

  • fix: duplicate name entry, explicit encoding, simplified exception (#1401) (564c6edd3)

  • fix(acp): guard session_update calls against null connection in prompt() (#1406) (fac950499)

  • fix(context): use proper type annotations in config dataclasses (#1402) (8d1079499)

  • fix(acp): handle slash commands with actual execution (closes #1393) (#1394) (5ab0b4ff3)

  • fix(server): prevent IndexError on bare slash command and use immutable Log API (#1388) (5afb19b0b)

  • fix(logmanager): prevent data loss when writing on compacted view branch (#1389) (251ef49dd)

  • fix: remove debug print statements from util and anthropic modules (#1386) (77988a8c7)

  • fix: resolve morph duplication, off-by-one count, and dead code (#1384) (7c7e379e8)

  • fix(browser): implement lynx cookie support, fix model metadata (#1377) (dc196c0a0)

  • fix: add requires-python to project metadata (#1376) (8a7929973)

  • fix: code quality follow-ups (lambda assignments, assert validation) (#1371) (d5de79ac4)

  • fix(webui): resolve npm security vulnerabilities (#1373) (088f269d1)

  • fix(tests): use tmp_path fixture to avoid parallel test interference (#1372) (f78133cd7)

  • fix(acp): add session cleanup to prevent unbounded memory growth (#1368) (ff2fcbdb2)

  • fix: replace assert with proper validation in server and shell (#1366) (7b9e2ae01)

  • fix(logmanager): handle malformed JSON lines gracefully in JSONL reader (#1364) (e4f3f8ce7)

  • fix(llm): strip @provider suffix in non-streaming chat path (#1363) (b98a76429)

  • fix(acp): use per-session model from project gptme.toml (#1360) (b33879b42)

  • fix: guard Unix-only imports for Windows compatibility (#1357) (e6e77849f)

  • fix(logmanager): check only last assistant message to prevent pre-commit loops (#1358) (41634ba96)

  • fix(subagent): capture workspace before spawning planner threads (#1356) (9dd547e24)

  • fix(acp): surface init error proactively in new_session via session/update (#1355) (e9ccc1061)

  • fix(shell): don’t use start_new_session in TTY path (#1352) (4771cf0a4)

  • fix(llm): add missing Claude 4.x model aliases (#1347) (2dabee163)

  • fix(llm): mark claude-3-opus-latest as deprecated (#1346) (e7b50e4f4)

  • fix: clean up type ignores and fix browser element selector (#1344) (e87201a60)

  • fix(shell): restore interactive sudo support in interactive mode (#1288) (e79ff6e9f)

  • fix(llm): correct GPT-4.1 knowledge cutoff to June 2024 (#1342) (b6dd2b486)

  • fix(chat): improve thread safety and None guard in auto-naming (#1341) (5caa7b2d6)

  • fix(acp): surface init errors as agent messages instead of killing connection (#1319) (6be28f078)

  • fix(llm): add missing -latest model aliases for Anthropic (#1337) (d225c5987)

  • fix(llm): add GPT-5.3-Codex and Codex-Spark to subscription models (#1336) (c0303c070)

  • fix(llm): add missing Gemini model entries (3-pro-preview, 2.0-flash) (#1334) (dc3fc5783)

  • fix(llm): fix tools API detection for custom providers (#1331) (7913cf03f)

  • fix(logmanager): check all messages for modifications, not just first 3 (#1329) (8056c261a)

  • fix(llm): update model metadata (xAI, Gemini 3, Anthropic) (#1328) (2d0f510a6)

  • fix(tests): restore xfail on test_shell_file (flaky in CI) (#1327) (ed1f89282)

  • fix(message): drop timestamp from Message equality, add consistent hash (#1326) (cca9c02df)

  • fix(tests): remove stale xfail from test_shell_file (#1325) (5bad61022)

  • fix(tests): register flaky and integration pytest markers (bf6fc46a4)

  • fix(tests): isolate server v2 test from user config (#1323) (29d012f9c)

  • fix(types): add specific error codes to all bare type: ignore comments (#1320) (734a5ca4b)

  • fix(types): add mypy overrides for optional deps (dspy, playwright) (#1322) (d97cb22d7)

  • fix(llm): correct gemini-2.5-pro max_output from 8192 to 65536 (#1321) (9813091a6)

  • fix(acp): resolve model from config instead of hardcoding Anthropic default (#1317) (e9cd4842f)

  • fix(tmux): handle list-sessions failure gracefully instead of asserting (#1318) (0cfb732f0)

  • fix(tools): add specific error codes to bare type-ignore and noqa comments (#1312) (9a101ba8c)

  • fix(dirs): move readline history from config dir to data dir (#1310) (22d3f65e4)

  • fix(agent): create clean git history for new workspaces (#1308) (edfe4b494)

  • fix(python): disable colors at source instead of only stripping ANSI (#1309) (779b0ad9e)

  • fix(acp): re-set default model for cross-task ContextVar isolation (#1300) (06aac4df9)

  • fix(hooks): remove unnecessary type: ignore and fix cast import style (#1302) (f034baddb)

  • fix(webui): rename env vars to use VITE_GPTME_ prefix (#1307) (1bf38e4bb)

  • fix(shell): use current model for tokenizer in output truncation (#1305) (9d0074475)

  • fix(logmanager): persist main branch when writing from non-main branch (#1299) (6262316b6)

  • fix(doctor): handle OAuth-based providers in diagnostics (#1297) (2c7e32593)

  • fix(tests): skip tests when optional deps/API keys unavailable (#1298) (1a2bfb127)

  • fix(tree): remove tree command dependency, fall back to git ls-files (#1284) (d6670dcf8)

  • fix(tests): use correct field name option_id in ACP test helper (#1296) (1db5095da)

  • fix(acp): propagate ContextVars to executor thread in prompt handler (#1293) (e7c242518)

  • fix(acp): handle Pydantic TextContentBlock in content conversion (#1291) (c30f86e4c)

  • fix(doctor): add missing provider docs for gemini, azure (#1286) (ef6e8306b)

  • fix(acp): use proper write pipe protocol to prevent _drain_helper AttributeError (#1276) (2f390bdc5)

  • fix(config): use logger instead of console for config messages (#1281) (aa681fb3c)

  • fix(tests): skip server API tests when flask is not installed (#1274) (629e25918)

  • fix(python): detect and use user’s venv for IPython tool (#1279) (9bcc85338)

  • fix(types): resolve mypy errors in OpenAI and ACP modules (#1277) (477530825)

  • fix(acp): remove eager cli.main import from gptme/init.py to prevent stdout pollution (#1273) (3108adfb2)

  • fix(eval): handle @ in OpenRouter model names when parsing tool format (#1271) (6046b5380)

  • fix(acp): redirect Rich console to stderr to prevent JSON-RPC pollution (#1269) (e000defbb)

  • fix(shell): close leaked pipes via SESSION_END hook (#1257) (d1e77bb32)

  • fix(llm): properly round-trip tool calls in OpenAI subscription provider (412c1f4b8)

  • fix(subagent): update subprocess mode for new –context CLI flag (#1263) (c5dd33129)

  • fix(agent): fix service management and add proper tests (#1261) (911ef35fe)

  • fix(models): handle @ suffix in OpenRouter model lookup for context length (#1256) (617bb17e6)

  • fix(webui): chain consecutive user messages like assistant/system chains (#1255) (4813120c4)

  • fix(webui): fix chat settings save, sidebar icon, and model search (#1253) (5ce7850c4)

  • fix(webui): use message queue array to prevent rapid-send message loss (#1254) (3b27e7a6b)

  • fix(webui): use .get() for agent avatar observable check (#1251) (48e2523ff)

  • fix(webui): skip hidden messages in chain type calculation (#1250) (c0330febf)

  • fix(webui): restore Developer Options that were lost in #1249 (27ff31cbb)

  • fix(webui): clean up server UI — combine ConnectionButton into ServerSelector (#1249) (0b71ef7fc)

  • fix(webui): make settings reactive in Legend State For loop (2ec2e0fb4)

  • fix(tests): expect cursorrules hint at DEBUG level (#1247) (73b089053)

  • fix: use configured username instead of ‘User’ for user messages (b18ffb4dc)

  • fix(lessons): demote noisy startup messages to debug level (e9e9e00d2)

  • fix(config): condense user config log to single line (0b4856feb)

  • fix(config): deduplicate and improve user config logging (f6be0a891)

  • fix(eval): prevent recursive SIGTERM handler loop (#1240) (9c6224b0c)

  • fix(prompts): attach workspace files to Message instead of reading inline (#1231) (0707f7364)

  • fix: detect vision support from OpenRouter modality correctly (#1237) (152504f16)

  • fix: fix a as acceptable answer for auto in confirmation (#1233) (cf189c929)

  • fix(docs): add PIL.Image.Image to nitpick ignore list (9ac73a081)

  • fix(docs): use string literal for PIL.Image.Image type annotation to fix Sphinx warning (413cc7ce2)

  • fix(llm): handle httpx transport errors during streaming (#1226) (f564bb707)

  • fix(llm): handle OpenRouter ‘Overloaded’ errors for Anthropic models (#1223) (a57f5612a)

  • fix(autocompact): reduce log spam from per-message logging (#1216) (753b756fc)

  • fix(save): remove duplicate overwrite confirmation (#1204) (2c055be8a)

  • fix(lessons): exclude worktree and .git directories from indexing (#1213) (af9acc27a)

  • fix: Add tsroot to eslint config (#1214) (28401e06c)

  • fix(patch): handle RST heading underlines (===================) in content (#1203) (b201c91ce)

  • fix(eval): add thread-safe locking for environment variable mutation (#1044) (a14391479)

  • fix(llm): handle list content in OpenRouter reasoning extraction (#1188) (5a2eddbf4)

  • fix: added missing import (7582ccf9a)

  • fix(server): include hide property in SSE message_added events (#1190) (2d7a03b17)

  • fix(llm): add reasoning_content for OpenRouter reasoning models with tool_calls (#1187) (fd1db2d28)

  • fix(llm): handle OpenRouter subprovider suffix in model lookup (#1182) (5be25bc58)

  • fix: support [lessons] section in user config (#1184) (5f7b261ba)

  • fix(browser): disable broken google/duckduckgo search, default to perplexity (e66ac15f1)

  • fix(prompts): restore truncation line accidentally deleted in suggestion commit (7891580b5)

  • fix(chat): restructure type checks for mypy narrowing (#1177) (391953c99)

  • fix(chat): allow explicit model param to bypass default_model assertion (#1176) (dbb7420f7)

  • fix(tests): mark PDF tests as slow to exclude from no-API-key CI (aca29a1e3)

  • fix: added ‘auto’ to listed choices in ask_execute (8126698c1)

  • fix(shell): correct markdown heading level for Background Jobs section (#1168) (afc27403b)

  • fix(config): use TOOL_ALLOWLIST instead of TOOLS for consistency (#1165) (1abe61db9)

  • fix(tests): fix lesson tests failing due to mock config issues (#1150) (718a5cbe6)

  • fix: add proper TypeScript types and lint fixes (a9e3485e2)

  • fix: remove duplicate Goodbye message on Ctrl+D exit (#1147) (a34dbb7c9)

  • fix: fix examples for tmux tool, add tmux tool examples for working with subagents (#1145) (268f350f9)

  • fix(auth): re-check hash at mount time for SPA navigation (#113) (1e25eb42e)

  • fix(server): propagate default model to request contexts via before_request hook (#1139) (25492f6b6)

  • fix: add fallback model when no default is available (b50a2709f)

  • fix: don’t disable input while waiting for session + persist drafts (#107) (dab3dbb9b)

  • fix: move step() from createConversation to useConversation to fix streaming race (#106) (c21b7bc77)

  • fix(llm): add supports_reasoning flag to Gemini 2.x models (#1136) (a738a2e92)

  • fix(setup): recognize Gemini API keys in setup wizard (#1137) (d10e7e883)

  • fix: handle Session ID 404 errors in tool confirmation retry (#105) (53fe8a44f)

  • fix(server): make session_id optional for tool confirmation (#1133) (7f0fba2e4)

  • fix(logmanager): robust lock handling with PID check for server mode (#1130) (c5ee4137f)

  • fix(server): improve skip message to prevent LLM re-suggestion (#1132) (7e9e5538c)

  • fix(chat): return to prompt when user declines execution (#1127) (67f16e1e3)

  • fix(cli): validate non-interactive mode requires prompt (#1125) (dd0e23464)

  • fix(llm): add safe parsing for environment variables (#1029) (11aa4b7e0)

  • fix(server): add timeouts to subprocess.run calls in tasks_api (#1087) (d1ade7755)

  • fix(auto-naming): validate LLM responses to reject error-like titles (#1117) (270d6bec2)

  • fix(logging): suppress OpenTelemetry error spam on connection failures (#1113) (f111d27a1)

  • fix(models): inherit base model properties for date-suffixed variants (#1114) (b59555ab4)

  • fix(lessons): disable description-based word matching (#1106) (f9ec1a139)

  • fix(chat): add input validation and queue size limits (#1077) (214643b51)

  • fix(server): sanitize error messages returned to clients (#1090) (5c0903b4b)

  • fix(server): replace assert with proper validation checks (#1092) (bcd5f3850)

  • fix(server): validate role against allowed values (#1085) (ed03f611a)

  • fix(message): improve TOML serialization and round-trip completeness (#1083) (a8b66bf8d)

  • fix(server): remove stale init_tools FIXME comments (#1091) (c4f97dd60)

  • fix(shell): check denylist for background jobs (#1086) (dbb3b6396)

  • fix(server): add @require_auth to tasks and workspace API endpoints (#1084) (0ea93f1d3)

  • fix(anthropic): prevent empty message content error (#1081) (7d539dfbf)

  • fix(prompts): truncate context command stderr to prevent info leakage (#1079) (9827a611a)

  • fix(message): prevent call_id=None from serializing as literal ‘None’ string (#1078) (0bbc82102)

  • fix(server): replace assert with runtime check for path traversal defense (#1072) (473806dde)

  • fix(message): preserve whitespace in TOML serialization (#1064) (d78644d89)

  • fix(llm): replace assert with runtime checks for production safety (#1071) (02bfaf17a)

  • fix(prompts): add path traversal protection for glob patterns (#1065) (f5c7ff0ed)

  • fix(llm): check raw file size instead of base64 encoded size (#1066) (99d2834e3)

  • fix(llm): prevent duplicate output on generator retry (#1063) (c8d8e6b63)

  • fix(llm): log exceptions instead of silently swallowing them (#1068) (0ec410170)

  • fix(llm): prevent division by zero in token rate calculation (#1062) (6058d8c87)

  • fix(lessons): deduplicate lessons by resolved path in matcher (#1060) (faf9ea0ed)

  • fix(llm): replace bare assert with proper error for missing system message (#1058) (196e106bf)

  • fix(llm): replace bare assert with proper error for empty LLM responses (#1057) (c00acd461)

  • fix(autocompact): include exception type when resume error message is empty (#1056) (dab83d969)

  • fix(eval): prevent SIGTERM self-kill from overwriting success result (#1055) (eb4ce7a72)

  • fix(eval): add grace period before SIGKILL to prevent IPC corruption (#1042) (329997b69)

  • fix(tools): add path traversal protection to save and patch tools (#1045) (c20217098)

  • fix(message): add XML escaping to prevent injection in to_xml() (#1048) (945050fc0)

  • fix(config): use atomic write to prevent corruption in daemon thread (#1050) (8b1720ea3)

  • fix(logmanager): ensure lock is released if atexit registration fails (#1049) (80edeb6a8)

  • fix(eval): add automatic cleanup for temp directories (#1051) (3a5bf98b9)

  • fix(logmanager): store TemporaryDirectory instance to prevent resource leak (#1054) (9913c0c93)

  • fix(eval): move init_tools outside inner function to avoid repeated calls (#1053) (061935cc5)

  • fix(eval): use UUID for deterministic unique IDs (#1052) (c2ee02da0)

  • fix(eval): prevent race condition in result retrieval (#1043) (0ef426743)

  • fix(eval): add path traversal protection to FileStore.upload() (#1041) (7de80c0ec)

  • fix(eval): use explicit shell invocation instead of shell=True (#1040) (d2d28a5d4)

  • fix(util): use ContextVar for thread-safe interrupt state (#1046) (395036479)

  • fix(llm): explicitly close stream generator in finally block (#1047) (2ee2fd6e1)

  • fix(browser): close browser contexts to prevent resource leaks (#1038) (1a3c820c6)

  • fix(tools): add defensive checks for edge cases (#1027) (ae574f386)

  • fix(security): validate screenshot path stays within OUTPUT_DIR (#1023) (7576240b7)

  • fix(security): block file:// protocol in lynx browser backend (#1022) (8f24d700c)

  • fix(eval): pass API keys to Docker container (#1019) (d53293dde)

  • fix(security): prevent command injection vulnerabilities (#1018) (da7dc3c53)

  • fix(restart): filter out positional arguments (prompts) on restart (#1012) (707a23370)

  • fix: propagate metadata return value in Anthropic retry decorator (#1013) (a4a9e0f1c)

  • fix(tests): mock _create_subagent_thread to prevent API calls (a410846c1)

  • fix(llm): cut out @provider suffix spec in model send to API to fix provider spec support (b8e614d8d)

  • fix(tmux): add retry logic for session creation race conditions (fdbe38f11)

  • fix(autocompact): use compacted_log length for Phase 3 distance calculation (bd35cdad8)

  • fix(shell): prevent orphaned bg jobs and support bg on non-first line (#994) (f32186a63)

  • fix: throw lock on tmux tool new_session to prevent race (#991) (106781775)

  • fix(eval): wire DockerGPTMeEnv to agent for –docker flag (#989) (99c467650)

  • fix(shell): truncate long commands in output to reduce context waste (#983) (c4ae9e535)

  • fix: improve /tokens command to use CostTracker (#976) (4b4599588)

  • fix: fixed autonaming in some cases (like for unknown models) (75709b120)

  • fix: enable dynamic model switching via /model command (#967) (ec61727e4)

  • fix: add missing sound files to package distribution (#969) (2f36eedeb)

  • fix(setup): check for wl-copy instead of wl-clipboard command (#970) (ab0dd1e02)

  • fix(shell): ignore ProcessLookupError during close (d765f4c03)

  • fix(setup): use PROVIDERS instead of get_args(Provider) (#958) (1eb7d106b)

  • fix(models): support local providers in get_summary_model (#950) (f74743774)

  • fix(lessons): handle empty globs/triggers in Cursor rules (#952) (9e7cc4305)

  • fix: fix issues with LLM-powered compact (#951) (547016dfc)

  • fix(api): await operations in createConversationWithPlaceholder to propagate errors (#100) (e85787dd8)

  • fix: add crypto.randomUUID polyfill and SPA routing support (#97) (a594aa0f7)

  • fix: implement onConnected callback and improve message streaming (259d804f5)

  • fix: resolve session ID mismatch causing interrupt failures on initial prompts (71c554738)

  • fix: improve layout and scrolling in settings panels (54bd992ad)

  • fix: support auto-generating agent path from name (#88) (4b343c33f)

  • fix: fixed test (eff175ee7)

  • fix: use authHeader for /models requests (1e871ed5c)

  • fix: improve styling for inline tool confirmation and execution components (denser) (5ea375c05)

  • fix: embed auto-approve in button dropdown for a denser component (b4940c44b)

  • fix: use simple placeholder text instead of rotating examples (1fe9fa926)

  • fix: only show recommended models that are available (83fa597d3)

  • fix: improved model selector with recommended models, fix model search input focus, etc. (01ce9d0b9)

  • fix: ensure pending tool state is always set for tool execution (2e8aa4f2c)

  • fix: added logo to repo (e91e29d90)

  • fix: show interrupt button during tool execution (35116c0e9)

  • fix: select agents by their paths (568384bb9)

  • fix: simplify create agent dialog with better defaults (0fe8f3271)

  • fix: improved success detection for messages, refer to equivalent code in gptme cli (e121314c5)

  • fix: extend the success pattern for messages (92b7eef7b)

  • fix: fixed warning from missing forwardRef (72fa6c4c4)

  • fix: added account/dashboard link in top menu when in ‘embedded mode’ (set by vite env var), removed theme toggle quick-button (now in settings) (142017dee)

  • fix: responsive sidebar design issues on mobile and desktop (#80) (0179f94f4)

  • fix: fix respecting baseUrl in workspaceApi (ed7c061ee)

  • fix: fixes for integration with gptme-landing (ab9363024)

  • fix: fixed links and scrolling for tasks (1996d5eac)

  • fix: resolve TypeScript warnings in audio utils by properly typing webkit AudioContext (#74) (abe5b9394)

  • fix: properly manage gptme-server lifecycle and fix dev mode CORS (787104e90)

  • fix: remove logspam (0b1b02949)

  • fix: reuse ChatInput component in WelcomeView, improve styling, fix model selector when creating new conversations (#67) (acf874131)

  • fix: collapse thinking blocks by default (6cd2dff1a)

  • fix: support <think> tags in smd.js streaming output (f78fa3da4)

  • fix: minor fixes (29ef54ec9)

  • fix: moved the conversation delete button into conversation settings (#60) (39ad54ebe)

  • fix: use encodeURIComponent for path (aa9489fb8)

  • fix: demo conversations now show without API connection (#57) (5b86355f7)

  • fix: use testid instead of placeholder for e2e test element lookup (c9f52cc25)

  • fix: fix re-rendering issues, implement connection retry and connection status (#41) (0ee36b766)

  • fix: change default port to 5701, adapt to new 5700 gptme-server default (#38) (cc85450fb)

  • fix: fixes messed up rebase (2cdf6261a)

  • fix: add StreamingMessage extended Message (84393c58c)

  • fix: chatmessage styling not updating on new messages (#31) (0208d6ae8)

  • fix: don’t rerender whole ConversationContent on isLoading change (e73f54f0d)

  • fix: chatinput button not updating after generation complete (f1d3a1702)

  • fix: fix chat input being stuck in disabled (#29) (5b9845187)

  • fix: support non-streaming LLM requests (#25) (5202998a3)

  • fix: improved chat input design and UX (#24) (e20c3285f)

  • fix: fixes interruptions (#23) (17c5d2574)

  • fix: dont disable input box during generation (much easier to reply! much better UX!) (e51020edd)

  • fix: add important comment and refactor use of queryKey (e06389a17)

  • fix: implement use of generation_started/onMessageStart (7a2ccc2f4)

  • fix: less log spam, clarified function names, check for duplicates before adding (d9d35144b)

  • fix: incorrect type ToolPendingEvent (8fdb76f89)

  • fix: improved typing (d319118da)

  • fix: minor fix (11fd94201)

  • fix: more fixes (c76e9bdb3)

  • fix: more fixes (3db2a9091)

  • fix: switch default branch to master (60cff9f9d)

  • fix: make npm run format less spammy (37d1d0ef9)

  • fix: include Authorization header in all requests if user token available (2292625b3)

  • fix: fixed <think> tags support (de6e22a85)

  • fix: open external links in new tabs (0e300aef4)

  • fix: only show system message toggle when initial system messages exist (e59314e01)

  • fix: improve markdown parsing and add comprehensive tests (abc57033c)

  • fix: style saves as success (4f251bb46)

  • fix: improved styling, denser chat (2e026b09a)

  • fix: improved parsing of markdown fenced codeblocks’ langtag args (8e7359de3)

  • fix: show codeblock langtag args, improve demo conversation (1adf2dcc1)

  • fix: added special emoji for writing tools (save/append/patch) (b478e8097)

  • fix: improved demo conversation (1095bdf04)

  • fix: fixed respecting base url for navigation (a1d98eae6)

  • fix: fixed emoji for certain files (339fb574f)

  • fix: added emojis to <details> cards like 💭 thinking, 📄 documents, 🛠️ tooluse, and 📤 output (71ab9ead0)

  • fix: fix styling for links in messages (d7f216f05)

  • fix: improved styling (f16c11937)

  • fix: add spacing at end of conversation to give last message some breathing room (381459d5b)

  • fix: improved logging (87045b8fa)

  • fix: handle nested codeblocks (5384c79f7)

  • fix: style error/success system messages (9c730841f)

  • fix: improved styling and layout for chat messages (0ca11f5d3)

  • fix: fixed aspect ratio for logo (c86204dd1)

  • fix: re-added message id to fix streaming issue (7a8baedc3)

  • fix: removed unused interrupted message property (d90ebcd21)

  • fix: work on interrupting requests, fixed styling (445839b3d)

  • fix: improved styling for lists (28910f602)

  • fix: set stream: true for /generate call (af229edbe)

  • fix: cleanup and refactor (acf89b6ac)

  • fix: lots of fixes (931c12482)

🔨 Misc (514)#

Click to expand

  • chore: bump version to 0.32.0 (a084f7ce6)

  • docs(computer): add ‘Validate your setup’ section to how-to (#216) (#3172) (3684aedf3)

  • test(subagent): deterministic roundtrip tests for thread-mode completion (#554) (#3145) (f71248631)

  • docs(subagent): correct false threading-context premise behind #554 tool-isolation (#3142) (5ffac83d6)

  • eval(subagent): workdir-subprocess eval + broader wait_any cancel check (#554) (#3141) (8986e9f38)

  • docs(mcp): add Chrome DevTools MCP server example (#3138) (309a00da6)

  • test(computer): add integration tests for Doom and Factorio milestone pipelines (#216) (#3139) (932109b7e)

  • docs(subagent): document subagent_pipeline and subagent_wait_any; add wait_any eval (#554) (#3135) (581d46222)

  • test(computer): add integration tests for hover_element, snapshot_page, get_current_url, save/load_browser_state (#216) (#3132) (5f86c10a4)

  • eval(subagent): trajectory evals for output_schema and subagent_pipeline (#554) (#3124) (872acd852)

  • test(subagent): add unit tests for subagent_pipeline() staged fan-out (#554) (#3122) (2f37ef612)

  • test(subagent): add regression tests for thread-mode tool isolation (#554) (#3121) (a05f0eb5b)

  • docs(subagent): document parallel/batch/output_schema/token-budget; fix stale race note (#554) (#3107) (1a1cb9bc6)

  • test(tools): regression test for execute_msg defensive error tool_result (#554) (#3098) (2a06c8d2f)

  • docs(tools): document subagent isolation contract (#3073) (71d604621)

  • docs(howto): document observe_web/observe_desktop, AT-SPI2, and act_and_observe (#216) (#3070) (edd8d6b0b)

  • test(computer): native X11 integration tests for issue #216 (#3058) (cdd7cea81)

  • test(cli): cover external plugin dispatch (#3053) (56e4ea64a)

  • test(computer): end-to-end integration tests for the ‘Can it Tweet?’ pipeline (#216) (#3045) (97f8654bb)

  • docs(providers): add dedicated Groq section with setup and anti-pattern note (#3037) (7999b0f90)

  • docs(tools): add Browser FAQ section (#3036) (fe3899106)

  • test(server): cover audio transcription oversize guard + _guess_audio_format (#3006) (248882da9)

  • docs(howto): add computer-use guide (prerequisites, backend selection, recipes) (#2987) (5a4643e72)

  • test(subagent): regression tests for planner role→execution-mode forwarding (#2986) (2433e47d5)

  • [codex] fix webui rerun tool session id (#2948) (af40d2db1)

  • 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)

  • test(tauri): scaffold E2E smoke test with tauri-driver (Slice 1, Linux) (9a113de6a)

  • test(webui): honor Playwright port setting (a0d43d283)

  • refactor(extension): move under webui/, replace side panel with React (#2755) (20f65e999)

  • perf(llm): batch terminal output per chunk, not per char (#2753) (0a301eab6)

  • docs(automation): expand automation guide with non-interactive mode, CI/CD, and scheduling (8d0b246fa)

  • docs(commands): add missing /account, /doctor, and /checkpoint commands (#2748) (b2f1cb2af)

  • docs(webui): add comment on structuredClone polyfill limitations (#2741) (f1efd6d59)

  • docs(server): add systemd unit template for pipx self-hosters (#2688) (23083dcbf)

  • docs(server): add nginx reverse proxy guide for self-hosters (#2684) (1f31b6ab7)

  • docs(server): point self-hosters to the same-origin bundled web UI (#2683) (5cff5d7b8)

  • refactor(webui): remove dead App.css and convert remaining raw CSS to Tailwind @apply (#2669) (2cb20e406)

  • refactor(hooks): use typed HookData dataclass for tool execution hooks (c2b5859a6)

  • docs: improve examples page with subsections and advanced workflows (#2616) (e821361ab)

  • docs(skills): note Agent Skills open standard conformance (#2611) (f40857cb8)

  • chore(deps): bump actions/checkout from 4 to 6 (#2553) (f568fe921)

  • test(cli): add real resume hint coverage (#2530) (254d1edd4)

  • docs(readme): surface gptme-codegraph as a named feature (ab5ae11d8)

  • docs: surface gptme-codegraph as named ecosystem project in README (#2503) (c1861dbd7)

  • docs(webui): explain Chrome 142+ Local Network Access for hosted UI → local server (#2483) (7a01a7e0d)

  • docs(webui): document CORS origin needed for hosted UI + local server (#2478) (fea7042ce)

  • docs(readme): add multi-agent and provider support rows to comparison table (#2477) (a8ca40aae)

  • chore: ignore local test artifacts (#2476) (5e4abf48e)

  • test(server): relax tool confirmation log assertions (#2472) (82a170b09)

  • perf(lessons): cache lesson embeddings across turns in hybrid matcher (#2471) (ebd927dba)

  • perf(webui): route-based code-splitting via React.lazy (#2464) (98c6341e2)

  • test(webui): add setup wizard e2e coverage (#2456) (4880cd7cf)

  • docs(tools): add missing autocommit, precommit, and vent tool entries (#2455) (ec72c0452)

  • docs(tools): add 9 missing tools to tools.rst (#2443) (9fc3c925b)

  • test(config): document chat workspace default (ae0c4aa68)

  • docs: add FAQ section (7e88d1719)

  • test(eval): cover top-level future drain timeout fallback (#2419) (eb703c39e)

  • test(computer): add macOS mouse move, drag, and cursor position tests (e852e6a6a)

  • chore(cli): replace stale TODO with clarifying comment on deferred path expansion (#2416) (7b88ea8ef)

  • test(chat): cover deferred path expansion in chained prompts (#2414) (c7cea8db8)

  • docs(config): document default_config defaults for about, response_preference, and prompt.project (5ffde4a4c)

  • docs: make finetuning page honest about current support (#2407) (c429555fb)

  • refactor(openai): share Responses API helpers (#2405) (f26e5383c)

  • docs(providers): document OpenAI Responses API gate (a2d717554)

  • docs(cli): document JSONL automation mode (#2403) (e1f3736ce)

  • test(cli): relax queued prompt help assertions (#2401) (15c93a4ca)

  • docs(cli): surface queued follow-up prompts (#2400) (04dbb7782)

  • test(cli): add integration tests validating stdout is pure JSONL in JSON mode (#2394) (0bf47a6c5)

  • [codex] improve skills discoverability (#2387) (7865bf853)

  • test(webui): cover server settings onboarding action (#2380) (c1225fae4)

  • docs(readme): fix truncated initial-commit SHA link (#2376) (b54503f89)

  • docs: describe account provider onboarding (#2360) (eb6ebbade)

  • docs(alternatives): make CMA runtime fee gap explicit ($0.08/hr vs $0) (#2357) (e3caabd6c)

  • test(cost-awareness): add 29 tests for cache-cold warning, cost thresholds, and injection (#2324) (fe0f873d3)

  • test(webui): cover PCM voice playback + useVoiceSession state machine (dee689a49)

  • docs(readme): drop brittle undated session counts (#2300) (794505a43)

  • test(webui): use ConnectionProbeResult type in ApiContext mocks (#2292) (4c3b0f3f6)

  • perf(llm): lazy-load provider imports to speed CLI startup ~1.7s (#2235) (dba4da4bf)

  • chore: remove journal entry (066975839)

  • docs(providers): document gpt-5.5 and gpt-5.5-pro (#2222) (2ceaee271)

  • perf(telemetry): lazy-load opentelemetry imports (saves ~1.4s startup) (#2218) (24d286450)

  • refactor(webui): share provider api key metadata (4a76a42f5)

  • perf(lessons): defer sentence_transformers import (~33s CLI startup savings) (#2208) (19aad7692)

  • perf: lazy-load heavy imports to reduce CLI startup time 3.3s→1.0s (#2207) (ceddeb96f)

  • docs: update gptme-webui links to merged location (#2199) (823cf847d)

  • docs: add guardrails framing for autonomous agents (#2197) (9c0512df8)

  • docs(cli): improve models test command docstring with examples (#2162) (f77bf93f7)

  • perf: lazy-compute version string to avoid subprocess calls at import time (#2145) (41ec74653)

  • refactor(server): remove redundant re imports in tasks_api (#2129) (60bdd0cf5)

  • docs(alternatives): add Claude Managed Agents to comparison tables (#2110) (9abfa79b6)

  • Unauthenticated static file server exposed on all interfaces can leak sensitive workspace files (#1847) (00076bc9c)

  • docs: add local model quickstart and Claude Managed Agents comparison (#2106) (8a11f6ffd)

  • docs: improve alternatives page for SEO and discoverability (#2085) (da1be915b)

  • refactor(eval): split behavioral.py monolith into per-scenario package (#2082) (a0c44f3b4)

  • test(server): add unit tests for external_sessions module (#2068) (1b4ec412f)

  • Revert “feat(cli): prototype live terminal status line (#2058)” (#2061) (a6212255a)

  • docs: clarify selective subagent context components (#2034) (eac7e45be)

  • test(eval): add end-to-end solution verification for behavioral evals (#2057) (890f35ed0)

  • test(eval): add comprehensive tests for behavioral eval checkers (#2056) (5f8a177e3)

  • docs(eval): document current SWE-Bench support (#2055) (1a6510eec)

  • docs(eval): fix leaderboard CLI command examples (#2054) (313197daf)

  • refactor: remove redundant local imports already available at module scope (#2048) (a17fdcb4d)

  • refactor: narrow broad except Exception catches to specific types (#2039) (b17c92d02)

  • docs: fix contrib plugin example links (#2025) (dd8f1c3fa)

  • docs(evals): update practical suite coverage to practical29, 86 tasks (#2033) (8f66016dd)

  • docs(evals): update practical suite coverage and add suite aliases (#2026) (9ce6e11da)

  • refactor(eval): auto-derive test sets from suite registry (#2017) (4929fd13a)

  • Revert “fix(server): hide reasoning blocks from visible output (#1999)” (#2001) (1c1b2f79d)

  • docs(eval): sync suite overview to practical19 and harden autodiscovery test (#1989) (41b7f898d)

  • docs: add webui/AGENTS.md with architecture notes and gotchas (#1979) (403da33e1)

  • docs: increase commands.rst TOC depth to 3 (b2dd7c1ce)

  • test(computer): assert screenshot resize dimensions (#1969) (ee2a6ce4a)

  • refactor: avoid redundant str.split() calls in content and choice utils (#1939) (f723e7a5a)

  • test(prompt): fix FIXME — enable simple filename highlighting test (#1936) (f57ac8311)

  • test(server): add 59 tests for agents and session API endpoints (#1918) (4ca7f4c6c)

  • perf(server): speed up conversation list/search with tail-only JSONL scan (#1916) (2b5f88adb)

  • test(server): add 84 tests for api_v2_common and session_models modules (#1899) (84d6c8a61)

  • test(models): add 86 tests for model resolution and listing modules (#1898) (f05ec70fa)

  • test(context): strengthen vacuous assertions per Greptile review (#1897) (0f0ae2cfa)

  • test(context): expand test coverage for task_analyzer and adaptive_compressor (#1896) (3e6dbf0dd)

  • test(hooks): add 80 tests for cache_awareness and server_confirm modules (#1895) (c5990904e)

  • test(server): add 59 tests for tasks API module (#1881) (c9a5b02d9)

  • test(tools): add 35 tests for browser thread module (#1880) (61408d8ce)

  • test(webui): add 19 tests for workspace file components (f1a4a27de)

  • test(server): add 61 tests for workspace API endpoints (#1874) (d5b6bbba5)

  • test(tools): add 172 tests for browser and mcp tools (#1870) (160ebde1d)

  • test(tools): add 100 tests for shell_background and restart tools (#1869) (7176fd3f7)

  • test(tools): add 63 tests for complete and screenshot tools (#1868) (30b0026bf)

  • test(tools): add 61 tests for precommit tool (#1867) (46ce2fc2b)

  • test(tools): add 42 tests for lessons tool (#1866) (e84c25fec)

  • test(mcp): mock registry lookup in CLI test (#1865) (f0c7ffcd9)

  • refactor(gh): trim tool sprawl, add CLI pass-through (#1863) (dc19041af)

  • test(tools): add 49 tests for shell_background.py (#1854) (1f0ff8ba9)

  • docs(plugins): document unified plugin registration system (#1858) (6e7b7862e)

  • test(tools): add 35 tests for autocommit hook and /commit command (#1856) (26bac3ba9)

  • test(tools): add 44 tests for morph tool editing infrastructure (#1855) (07eec0669)

  • test(util): add 73 tests for install, interrupt, and terminal utilities (#1850) (9e31a1aec)

  • test(dirs): add 40 tests for directory resolution and path utilities (#1845) (26597bed5)

  • test(util): add 88 tests for keyword_matching and file_storage (#1843) (6087f97d4)

  • test(tools): add 85 tests for base.py tool infrastructure (#1842) (ad160739d)

  • refactor(gh): extract common ref-parsing and repo-resolution helpers (#1840) (d885cd141)

  • test(util): add 105 unit tests for content, tool_format, and cost utilities (#1826) (0f4362210)

  • test(lessons): add 90 unit tests for lesson system core (#1824) (ac3fa9602)

  • test(gh): add 43 unit tests for gh tool functions (#1823) (2c78f302c)

  • test(auth): add 55 unit tests for LLM auth helpers (47d78d0f2)

  • refactor(eval): move leaderboard into eval module, add –leaderboard CLI flag (#1809) (3be81fb77)

  • refactor(eval): auto-discover eval suites instead of manual registration (#1808) (2d668eb70)

  • test(prompts): add unit tests for prompt templates, context_cmd, and helpers (7117052f0)

  • test(commands): add unit tests for command registry and dispatch system (#1802) (a17f87849)

  • test(executor): add unit tests for shared execution infrastructure (#1801) (5a35c96c0)

  • test(init): add unit tests for core initialization module (#1796) (00a4cbbed)

  • test(info): add unit tests for system/environment info module (#1795) (fea4e5fda)

  • test(hooks): add unit tests for hook registry module (#1794) (0feeac38d)

  • test(vision): add unit tests for view_image function (#1790) (fc380bf1f)

  • test(shell): add unit tests for shell_validation module (#1791) (e796b3cc6)

  • test(subagent): add unit tests for refactored subagent package (#1779) (cd740d8bd)

  • docs(profiles): update browser-use profile with interactive browsing functions (#1776) (180123615)

  • refactor(subagent): split into modular package (#1773) (023e99fbb)

  • refactor(prompts): move context_cmd output after static content for better caching (#1768) (2f4829f2c)

  • refactor(models): split models.py into modular sub-files (-90%) (#1759) (d604ca94e)

  • refactor(logmanager): split logmanager.py into modular sub-files (-95%) (#1756) (4574b326e)

  • refactor(config): split config.py into modular sub-files (-93%) (#1754) (deb5072fb)

  • refactor(autocompact): split autocompact.py into modular sub-files (-96%) (656027c22)

  • refactor(prompts): split prompts.py into modular sub-files (-71%) (#1752) (bc6cdd68b)

  • refactor(hooks): split init.py into types + registry sub-modules (-79%) (#1751) (867dc1199)

  • refactor(server): split api_v2_sessions.py into modular sub-files (-64%) (#1747) (1227fe0e5)

  • refactor(subagent): extract execution backends into subagent_execution.py (#1745) (1a58369e4)

  • refactor(cli): split util.py into modular command files (-57%) (#1743) (e861bc842)

  • refactor(shell): split shell.py into modular sub-files (-34%) (#1744) (473385144)

  • refactor(util): deduplicate flush_stdin into terminal.py (#1741) (4bee516c6)

  • refactor(server): remove V1 API endpoints (-564 lines) (#1740) (6b3a86e2b)

  • refactor(server): extract shared code from V1 API module (#1738) (ea66d1529)

  • refactor: remove 9 unused scripts (-1,437 lines) (#1737) (0698f60d4)

  • refactor: move TTS tool to gptme-contrib plugin (#1735) (cd4739402)

  • refactor(lessons): remove unused EnhancedLessonMatcher dead code cluster (#1736) (5005e47b4)

  • refactor: remove 47 unused type: ignore comments (#1733) (fbc2f17cc)

  • refactor: move youtube tool to gptme-contrib plugin (#1734) (e97772965)

  • test(llm): add integration tests for model-dependent break_on_tooluse default (#1729) (a4066e8f4)

  • refactor(models): move deprecated models to separate files (#1732) (edab9f588)

  • autoresearch(gptme): improve practical5 pass rate 0.778 → 1.000 (#1723) (da798cec8)

  • refactor(eval): use specific exception types and cleaner imports (#1716) (8ef484698)

  • docs(evals): update eval docs — fix model, expand suite listing (#1712) (92504ab80)

  • autoresearch(gptme): improve practical5 pass rate 0.556 → 1.000 (#1702) (f500d590b)

  • test(eval): add runtime guard and test for duplicate test names (#1665) (44059ef1e)

  • chore: delete ellipsis.yaml (995927a0f)

  • refactor: consolidate release pipeline into single workflow (#1643) (389ff5fb1)

  • refactor(message): nest token fields under usage in MessageMetadata (#1638) (1d5d5a670)

  • docs: remove incorrect claim that Bob’s workspace is open source (4dfc40014)

  • chore: add make tiny summary + refactor gh tool complexity (#1630) (065ccd937)

  • docs: expand autonomous agents in README, remove private agent mentions (ad9439f7f)

  • docs: expand Autonomous Agents section in features.rst (08648e757)

  • docs: add features overview page (e177b4782)

  • test(tauri): add Rust unit tests for IPC commands and deep-link parsing (#1598) (bf7e1faf2)

  • test(eval): expand basic suite with 4 practical agent capability tests (#1607) (8771579eb)

  • Merge remote-tracking branch ‘origin/feat/tauri-subtree-merge’ (3f1fd34db)

  • Add ‘tauri/’ from commit ‘4e2aadaf348b6c2d917e7d4edee9d350785995f2’ (c680b290e)

  • docs: comprehensive README improvements (MCP, ACP, plugins, skills, ecosystem) (#1553) (d3f27bec9)

  • docs(custom_tool): document –tools file loading and /tools load command (#1547) (46a6de62e)

  • docs: document /tools load command and gptme managed service provider (#1544) (233c227a8)

  • refactor(auto-naming): consolidate duplicated auto-naming logic (#1542) (7f7320485)

  • test(hooks): add tests for cli_confirm and form_autodetect (c27fdbc09)

  • test(hooks): add tests for cost_awareness, token_awareness, server_confirm, server_elicit (#1535) (0e82bfb71)

  • test(hooks): add tests for markdown_validation, agents_md_inject, active_context (#1533) (863b31db6)

  • test(hooks): add tests for cwd_tracking, time_awareness, and auto_confirm (#1520) (0ca92d635)

  • test(shell): add tests for allowlist auto-confirm behavior (#1508) (a8ac588ab)

  • refactor(info): parse extras from package metadata instead of hardcoding (#1517) (94e2eb342)

  • style: use shared prompt_alert() for consistent alert styling (#1516) (32f600c88)

  • docs: add gptme acronym interpretations (#1515) (be1874651)

  • style: use shared prompt_alert() for consistent alert styling (#1510) (1e5c7ac1c)

  • docs: add AGENTS.md with agent-specific development guidelines (#1504) (917167fdf)

  • refactor(context): return mention counts from get_mentioned_files (#1501) (df05462bd)

  • test(computer): expand test coverage from 9 to 51 tests (#1498) (c6b48ffa1)

  • refactor: use Message.concat() in Anthropic provider (#1494) (c5446adce)

  • test(context): add image auto-attach pipeline tests + debug logging (#1493) (919e25807)

  • revert: undo unconditional chdir that breaks cd persistence (#1400) (#1487) (e90f9e533)

  • test(agent): add e2e coverage for gptme-agent create template path (#1468) (d98f265ac)

  • docs(skills): clarify standards-aligned scope and plugin boundary (#1467) (5a53a6ac1)

  • refactor: remove obsolete gptme-webui submodule, use gptme’s built-in webui (#9) (632362c32)

  • chore: bump ruff-pre-commit v0.6.9 → v0.15.2 (#1431) (3e8b53273)

  • Support GPTME_ prefix for environment variables (#1416) (57a351909)

  • style: rename deprecated ruff TCH rules to TC (#1426) (7dd0f699c)

  • style: enable PT011/PT022 rules, clean up unused noqa and imports (#1408) (c76997b55)

  • style: enable FLY, ISC, PLE, PERF ruff rules (#1398) (3b8fcb8c7)

  • style: enable TCH, PIE810, PT003/PT006/PT022 ruff rules (#1407) (b71909506)

  • style: remove self-assignment and add timezone to datetime.now() calls (#1404) (d3d918b43)

  • refactor(acp): remove unused adapter scaffolding (#1397) (bb0179fcb)

  • style: add explicit check param to subprocess.run() calls (PLW1510) (#1403) (658d1cce2)

  • test(autocompact): add unit tests for semantic and reference scoring functions (#1387) (131dc0966)

  • test(tools): add unit tests for choice and elicit tool parsing (#1385) (084dceb6d)

  • test(llm): add unit tests for shared LLM utility functions (#1382) (bfd1cc211)

  • test(util): add unit tests for tokens, cost_display, and export modules (#1383) (780acc00c)

  • style: enable additional ruff rules (C4, FURB, RSE, RET, RUF) (#1381) (a5fb1842d)

  • style: enable SIM103, SIM110, SIM117, SIM300, SIM910, RET505 ruff rules (#1378) (3c3dacc6a)

  • style: enable SIM118, PIE790, RET501 ruff rules (#1375) (11d59f23d)

  • test(acp): add per-session model override tests (#1370) (4aefb0c0f)

  • chore: remove dead TYPE_CHECKING blocks with empty pass bodies (#1369) (15750f6a5)

  • refactor: move inline lynx tests to proper test file (#1367) (d955fd670)

  • chore: remove commented-out dead code across 7 files (#1365) (8f374dd2b)

  • refactor: remove deprecated parallel tool execution module (#1361) (bc28ee093)

  • style: fix E402 import ordering in codeblock.py and plugins/init.py (#1353) (51e06a6b4)

  • chore(deps): bump pillow, cryptography, protobuf for security fixes (#1351) (8f65c8b68)

  • chore: update deprecated model references and remove stale noqa (#1350) (2beb00810)

  • test: remove stale xfail and fix unclosed file handles (#1349) (a08b6e4a7)

  • refactor(llm): replace duplicate model entries with MODEL_ALIASES (#1348) (44a67a8c7)

  • chore: remove 6 unused type: ignore comments (#1345) (64f8e0602)

  • docs: update stale xai model example (grok-beta → grok-4) (#1343) (3a9c5f585)

  • chore: remove redundant assert and str() calls (#1340) (1f1e9da87)

  • chore: remove dead browser tests and fix shell.py type safety (#1339) (7c75db589)

  • chore: remove stale TODO comments (#1335) (e14dee3a0)

  • docs: fix config path in custom-providers.md (gptme.toml → config.toml) (#1333) (c382491e8)

  • test(util): add comprehensive tests for tree.py workspace listing (#1303) (a96b099f6)

  • test(acp): add comprehensive unit tests for types, adapter, and agent (#1275) (4a5d2b765)

  • refactor(eval): replace model@format strings with typed ModelConfig dataclass (#1280) (744ff9ec8)

  • chore: update default model references to current versions (#1278) (84e740706)

  • docs: recommend gptme-agent CLI for creating and managing agents (#1260) (86c60356f)

  • refactor(tools): combine todoread/todowrite into single todo tool (#1242) (76732bca0)

  • refactor(commands): add auto_undo to command decorator (#1244) (a073a8b49)

  • chore(deps): bump actions/checkout from 4 to 6 (#1221) (b2e32c7bd)

  • chore(deps): bump actions/setup-node from 4 to 6 (#1220) (767ce42f7)

  • chore(deps): bump actions/setup-python from 5 to 6 (#1222) (6b85679a7)

  • chore(deps): bump actions/upload-artifact from 4 to 6 (#1219) (6ccabf95e)

  • chore: merge gptme-webui into webui/ folder (e2fa294dd)

  • chore: merge latest gptme-webui commits (8c8a9937b)

  • docs: improve system dependencies organization (1510bcdcb)

  • docs: add source installation and extras documentation (d68293cb4)

  • refactor(llm): add TypedDict for message dict typing (#1195) (89d467b98)

  • docs: improve README with minor fixes (#1191) (f8af34076)

  • test: fixed test (5d933eb62)

  • refactor(agent): rename setup command to create (#1185) (29c9a0bab)

  • docs(lessons): add worktree best practices with /tmp/ recommendation (c94594d9c)

  • refactor: move top-level files to appropriate modules (#1175) (4cae46f99)

  • test: add slow marker to test_load_context_files_truncates_long_files (d8f7805a6)

  • refactor: move CLI into gptme/cli/ module (#1173) (5e3e80ce9)

  • Add ‘webui/’ from commit ‘6c0df0cad5a6316b96b91840fb39b29c082fe8c9’ (fad8287c3)

  • docs: clarify lessons vs skills distinction (#1169) (6d5428931)

  • Replace hasattr checks with isinstance for type safety (#1161) (163678ed9)

  • docs: improve README (again) (ff2960e40)

  • docs: improve README (9fd1f47cb)

  • docs: improve README (5e3e358c9)

  • docs: fill News section and update Timeline with recent milestones (#1143) (baf1cd110)

  • docs: fill News section with major milestones and ecosystem highlights (afe29ad7e)

  • perf(ui): optimize first message latency with optimistic UI (#104) (dc53c3821)

  • refactor: use ContextVar for thread-safe shell sessions (#1089) (aa738bb09)

  • format: fixed formatting (082841ed6)

  • refactor(chat): remove vestigial _recently_interrupted variable (#1039) (56ca13b4b)

  • refactor(dspy): archive GptmeReasoningProgram, simplify GEPA (#1128) (3ade55080)

  • test(gh): update mocked tests for comment ID format (#1102) (bdbc13f03)

  • refactor(hooks): adopt OpenCode-style dot-notation naming (#1099) (f1d152743)

  • docs(security): add warning about gptme.toml trust in untrusted repos (#1082) (44d0dcacc)

  • docs: add glossary with step/turn terminology (#1076) (911bbd023)

  • refactor: split commands.py into modular commands/ package (#1073) (36cc81dff)

  • refactor(llm): remove dead code in _chat_complete control flow (#1069) (28c51d912)

  • docs(security): add security documentation and SECURITY.md (#1024) (372e654af)

  • docs: add comprehensive commands reference documentation (#1008) (4545c64d5)

  • refactor: separate multi-tool from parallel execution (#1006) (b57ed2100)

  • docs: document plugins in project config (#1007) (5ddbd06bd)

  • refactor(autocompact): truncate largest tool results first (79fd943dc)

  • docs: fixed cloc commands to have cleaner output (045fb376c)

  • chore: cleaned up old md file (e8c0e17ec)

  • docs: improved file list for cloc groups (228a2bed0)

  • chore: remove unfinished gptme-ncurses (cc7c08475)

  • refactor(session): add shared session module for ACP/server (#982) (fd0e236b6)

  • docs(acp): add Agent Client Protocol documentation (#981) (8c1cf1f98)

  • docs: improved the usage instructions, mention gptme.ai (f66a45693)

  • refactor: remove spammy per-token debug logging (9dadf72b8)

  • perf: prevent unnecessary state updates in MainLayout (367a9e5c8)

  • refactor: centralize examples system with user type support (6404776a3)

  • Model selector improvements (search, refactor, fixes), add name input in chat settings (#85) (af0f9e8e9)

  • refactor: restructure right sidebar to fix padding and layout issues (01d6fae4f)

  • chore: set NO_STRIP on linux build only (a33d4473f)

  • refactor: change agent.workspace to agent.path, use path as primary agent ID (70dfad00b)

  • chore: updated gptme.toml (8d22592b3)

  • chore: updated gptme.toml (1e4d22b18)

  • format: fixed formatting and lint (bdb44e6e0)

  • format: fixed formatting and lint (12c64155f)

  • refactor: extract SuggestedActionsPanel and SuggestedActionsTips (23b49e484)

  • Fix tool confirmation cancellation and auto-stepping chime behavior (#76) (aa275e1f4)

  • docs: add testing section to README (#75) (9d1bec28f)

  • chore:skip rebuilding gptme-server if alredy built (3b25ed48c)

  • docs: added README (7b29ec1d0)

  • format: fixed formatting (cd133266b)

  • refactor: simplify ChatInput component structure and fix button positioning (d99873249)

  • refactor: consolidate conversation types and add workspace selector to ChatInput (5839db9d4)

  • refactor: move positioning logic out of ChatInput to parent components (c7f44bb08)

  • chore: cargo fmt :( (71dbb3115)

  • chore: set up gptme submodule and update .gitignore (01bd2c4cf)

  • chore: fix broken Makefile (d8d9a855c)

  • chore: delete react folder and related files (5e174df26)

  • Initial setup of gptme-tauri project with React and TypeScript (9e657fe02)

  • refactor: refactor conversation settings component (#61) (84bc99c28)

  • chore: fixed deprecated .pre-commit-config.yml format (1b1b5c458)

  • docs: update README.md gptengineer.app -> lovable.dev (#50) (729c171b8)

  • test: added basic e2e tests (#46) (cc37ad76b)

  • refactor: refactored to allow using as submodule (#39) (59ef067a5)

  • refactor: minor fixes (f2dc9b96a)

  • refactor: wip v2 api stuff (remove v1 api support, among other things) (83aa97918)

  • chore: replace old (personal) repo-links (#16) (d4f35a301)

  • chore: removed unused file (dd2b1fb3e)

  • chore: disable prettier for md files (a68d7b796)

  • format: set up prettier and formatted project (8e45fa689)

  • Reverted to edit 8b3959ef-92d3-4cfe-a9ed-1d26d2244f9d: “feat: add dynamic page titles based on selected conversation” (9d3725158)

  • Reverted to edit 92595471-e0eb-4f82-8df6-cce9b1afc166: “Add external link icons to messages (1cacd4ad8)

  • Update bottom left icons (1a25474ce)

  • Add external link icons to messages (57f3cc2e0)

  • Reverted to edit 8b3959ef-92d3-4cfe-a9ed-1d26d2244f9d: “feat: add dynamic page titles based on selected conversation” (1e351207c)

  • Fix TypeScript errors in markdownUtils (f544d3cc9)

  • Add external link icons to messages (915481397)

  • refactor: consolidate Vite configs into single file (eee76072f)

  • chore: remove redundant jest.setup.js in favor of TypeScript version (6bfa10f64)

  • style: improve code block styling and formatting (4baa4aed3)

  • docs: update demo conversation to use correct dev server port (8080) (9468e2b07)

  • docs: update domain from gptme.gptengineer.run to chat.gptme.org (48ea02adc)

  • chore: comment out GitHub Pages base URL (2f3a95eb4)

  • refactor: improve markdown code block handling (f2626cd95)

  • Remove follow-on avatars from messages (7e943705f)

  • Improve System Message Styling (61315ec06)

  • Add background for assistant cards (d6701bb93)

  • Fix light mode design (33211e972)

  • Update message styling for system outputs (f26a7a9ef)

  • Reverted to edit dd0e8988-d18a-4a66-ae1d-cbaf262721eb: “Fix overlapping messages issue (3aca22385)

  • Update system message styling (085e3c945)

  • Fix overlapping messages issue (4c590457f)

  • Join assistant-system messages and fix styling (d67d8daae)

  • Refactor ConversationContent component (444725f67)

  • Join messages into a single card (9be7801e6)

  • Retry last action on correct branch (1faa85722)

  • Reverted to edit 815a42d6-9116-4fbf-9d95-1e113737e268: “fix: improved parsing of markdown fenced codeblocks’ langtag args” (de5b21ed4)

  • Update message handling logic (8a06922c4)

  • Reverted to edit 664da7a0-5c00-49d1-af75-0cbf4306b238: “fix: handle nested codeblocks” (3c7bb372a)

  • Adjust message spacing for continuity (f583fbc09)

  • test: setup jest for testing and added tests for handleWrappedFencedCodeBlocks and transformThinkingTags (with fixes) (e9301fcd8)

  • chore: fixed incompatible gptme.toml config (69c78edee)

  • Update conversation URL handling (c85bf3194)

  • Fix conversation navigation issue (1f6084dc5)

  • Reverted to edit 2367e0d1-5107-48f5-9222-f1f517e3b5bd: “Reduce font size across application (5c7e43abf)

  • Adjust Avatar Spacing in Messages (20dbb43ef)

  • Reduce font size across application (83ba6d2c5)

  • Reverted to edit 8cd5b1eb-0450-4f31-85d5-cde2c3980604: “Remove unused variables in ChatMessage.tsx (b8993f2fb)

  • Reverted to edit 871d40ab-c673-4dd5-aa55-a9abae1cb146: “Fix HTML entity rendering issues (d6b1bd129)

  • Fix HTML rendering issues (ec9b8235c)

  • Reverted to edit 8cd5b1eb-0450-4f31-85d5-cde2c3980604: “Remove unused variables in ChatMessage.tsx (417bcf84b)

  • Fix HTML entity rendering issues (226c94b66)

  • Remove unused variables in ChatMessage.tsx (8f2933791)

  • Adjust message layout alignment (dae7b52c7)

  • Fix message overlapping issue (3a8de85dc)

  • Hide avatars on small screens and adjust spacing (a522a1356)

  • Update user chat bubble color (31382280d)

  • Move user avatar to right side (ef1d7f599)

  • Refine paragraph formatting (8848f147d)

  • Remove excessive padding (3ca8552ae)

  • Add chat bubble for messages (f240d910d)

  • Make UI darker (80af26e67)

  • Compare UI Color Schemes (8dbbfd6ec)

  • Remove blue tint from gray (aa959e18e)

  • Update background to dark gray (51eb037e5)

  • Adjust button margin settings (16365bbce)

  • Update button sizes and menu bar (e834dec1b)

  • Reduce button size in MenuBar (bf332ed21)

  • Make menu bar thinner and update font (ae63ccdb5)

  • Update chat message styles (bc74616a5)

  • format: fixed formatting (e9649bd9f)

  • Replace favicon logo (96687c658)

  • Fix sidebar toggle button issue (91d5ac410)

  • docs(README): fix typo in example (33d7e1067)

  • refactor: renamed ConversationMessage -> Message (2b918341d)

  • refactor: major refactor with better typechecking (a6f142842)

  • Reverted to edit 68d941ae-8a5d-420e-a3be-1e6beca5417e: “Fix tooltip for server conversations (162a9a6d2)

  • Fix issue with functionality (e6e73ba00)

  • Fix chat area overflow issue (9a997a762)

  • Fix tooltip for server conversations (e6f59badc)

  • Reverted to edit f80f0015-ed10-4179-8a02-f0fb0f41a7b0: “Fix meta tags for social previews (72f15012e)

  • Fix empty tooltips in conversations (526ca37e2)

  • Fix tooltip for message counts (ae8c47ac8)

  • Fix meta tags for social previews (65b30647b)

  • Hide content in conversations footer (b792608e9)

  • Add links to GitHub repositories (291b8bd9e)

  • Add tooltip for message breakdown (c19e07236)

  • Fix CORS origin typo (bdfec6a73)

  • Remove border from New button (5de3bcc23)

  • Add checkmarks to ConversationList (2b69addbb)

  • Fix emoji display when disconnected (d1c30c250)

  • Remove features from connection dialog (92e827908)

  • Update connection instructions (9ee226f4d)

  • Add favicon from URL (21a4dd2c7)

  • docs(README): updated README (cf7209a66)

  • Toggle visibility for system messages (998bc4f85)

  • Fix hiding system messages (33d38fb6f)

  • Hide Leading System Messages by Default (19910b5c0)

  • Hide Initial System Messages (646b90dd6)

  • Refresh conversation list after creation (2f6735f7b)

  • Fix type conversion error (a0584237a)

  • Add information to connection modal (a2a84c1f0)

  • Fix TypeScript errors (964bc124d)

  • Move New Conversation Button (139c1452d)

  • docs: updated README and index.html (8e6ec4559)

  • Add padding to components (c0b205389)

  • Style details with border and padding (4d4865338)

  • Add styling for lists in messages (f087345a6)

  • Transform Thinking Tags in Messages (7588641ca)

  • Add API call to generate replies (25aba2d0c)

  • Refactor ChatMessage to Use Message (24be7340a)

  • Hide Initial System Messages (755058dbe)

  • Fix TypeScript error in ChatMessage (6c008517e)

  • Fix HTML rendering issue (db4fe1523)

  • Fix issues in existing code (e88221e8a)

  • Fix image problems (8e6338784)

  • Add example messages for conversation (fcab46c60)

  • Improve Conversation Switching Performance (36dbec34a)

  • Fix unresponsiveness on conversation click (b40e89d44)

  • Fix TypeScript error in Index.tsx (093a1e047)

  • Fix TypeScript errors in Index.tsx (0098a0b39)

  • Fix conversation switching performance (18833ef67)

  • Fix performance issue with server conversations (337f239c1)

  • Fix TypeScript errors in Index.tsx (8be776002)

  • Read and Process Conversation Log (50b6c20f4)

  • Fix TypeError for apiMessages (1e9affd14)

  • Fix conversation path usage (f961cccf7)

  • Fix conversation loading errors (2333b61f6)

  • Fix runtime errors and TypeScript issues (03c1698ce)

  • Fix TypeScript error in ApiContext (20454a3e3)

  • Fix TypeScript error in ApiContext (0b85c151b)

  • Connect to API by default (e8f977eb9)

  • Fix connection state handling (e43cee555)

  • Fix runtime errors in ApiContext (e9a6cd059)

  • Fix CORS issue (2c608d837)

  • Add verbose error logging (4c4f16d03)

  • Fix ApiContext usage error (351298356)

  • Fix type error in ApiContext (524d472f3)

  • Fix connection button and conversation loading (75c6f75f7)

  • Add new conversation button (8e788a70d)

  • Fix TypeScript errors in ApiContext (db319023b)

  • Fix TypeScript error in ApiContext (ffb7d6b30)

  • Load API Conversations and Enable Messaging (a4aac76fc)

  • Fix API errors and type assignment (c71b5c12d)

  • Add configurable connection button (714c20611)

  • Connect to Optional gptme Instance (279022afe)

  • Fix incorrect element wrapping (5eef749cd)

  • Remove Excessive Borders and Style (b01300432)

  • Remove terminal-commands langtag (d972802b3)

  • Fix display of example.py (d2b604b27)

  • Refactor markdown parsing for code blocks (5e593c6bf)

  • Fix recursive nesting in codeblock (11a377aaa)

  • Fix nested terminal command display (0851b040e)

  • Fix sidebar border extension (4ddc69d69)

  • Fix sidepanel toggle issue (bcc3e3ecd)

  • Fix sidebar button functionality (bea802078)

  • Fix undefined conversations error (3fe8bffe1)

  • Add conversation selection feature (e815d8fb6)

  • Fix TypeScript error in ChatMessage (25a58895e)

  • Fix codeblock formatting issue (97b56ddf6)

  • Add markdown highlighting and formatting (a91fca323)

  • Add markdown parsing for assistant messages (a36d92027)

  • Implement LLM Chat Interface UI (5cbe7a4d5)

  • Use tech stack vite_react_shadcn_ts [skip gpt_engineer] (010528338)

(excluded 87 less relevant commits)

Full Changelog: https://github.com/gptme/gptme/compare/v0.31.0…v0.32.0