This Week in gptme (W24 2026)
Here's what landed in gptme and gptme-contrib this week (2026-06-08 – 2026-06-14): 76 new features, 43 bug fixes across 145 merged PRs.
Here’s what landed in gptme and gptme-contrib this week (2026-06-08 – 2026-06-14): 76 new features, 43 bug fixes across 145 merged PRs.
Highlights
- gptme#2885 (commands)
/snapshot— agents can now checkpoint their conversation tree and resume from any past state - gptme#2882 (tools)
view_anchoredandpatch_anchored— edit files without line-number drift - gptme#2878 (commands)
/backtrack— in-session conversation recovery; roll back to any prior checkpoint - gptme#2880 (tools)
ToolFunctionabstraction — structured callable metadata for tools, enabling richer composition - gptme#2778 (webui) browser TTS for assistant messages via Web Speech API
New Features
- gptme#2778 (webui) add browser TTS for assistant messages (Slice 1 — Web Speech API)
- gptme#2779 (webui) add Alt+N global shortcut for new conversation
- gptme#2781 (plugins) discover src-layout plugins, layer user [plugins], lenient +tool
- gptme#2791 (server) add
detailquery param to conversation list endpoint - gptme#2792 (webui) auto-poll provider health every 60s; add degraded badge on settings icon
- gptme#2794 (webui) add OpenRouter STT fallback for unsupported browsers
- gptme#2795 (webui) add server-side TTS endpoint via OpenRouter
- gptme#2797 (cli) add –format table option to gptme-util status
- gptme#2801 (webui) model favorites, set-as-default, and picker scroll fix
- gptme#2803 (webui) toggle/stop TTS playback from the message button
- gptme#2806 (webui) add /settings route with full-page settings view
- gptme#2812 (webui) show active model in conversation header
- gptme#2813 (ci) self-heal Phase 2 — auto-open draft fix PR on structured gate pass
- gptme#2814 (artifacts) include workspace files created/modified by the conversation
- gptme#2815 (webui) add TTS engine selector (browser / gptme-server / gptme-tts)
- gptme#2816 (webui) add keyboard shortcut (Ctrl+Shift+) to toggle split view
- gptme#2817 (webui) add per-pane conversation selector in split view (Slice 2)
- gptme#2818 (artifacts) format-independent file-write parsing + diffs
- gptme#2823 (webui) show message count as badge on conversation title line
- gptme#2824 (webui) add URL subroutes for settings category deep-linking
- gptme#2825 (webui) add persistent no-confirm (YOLO) mode setting
- gptme#2827 (webui) add conversation list search/filter
- gptme#2828 (webui) show relative timestamps on messages with auto-refresh
- gptme#2831 (config) add context_exclude glob patterns to [prompt] in gptme.toml
- gptme#2832 (webui) highlight matched search terms in conversation list titles
- gptme#2833 (server) expose message_count and last_updated in conversation list
- gptme#2834 (webui) persist conversation search query in URL ?search= param
- gptme#2837 (eval) add narrow swebench install extra
- gptme#2838 (webui) add / keyboard shortcut to focus conversation search
- gptme#2840 (webui) add settings-level STT provider choice (browser vs server)
- gptme#2841 (webui) show conversation stats in list using list-response data
- gptme#2843 (cli) add startup prompt stats report
- gptme#2844 (eval) surface per-task tool-call count (tool-efficiency metric)
- gptme#2848 (webui) server-backed star/unstar for conversations via metadata sidecar
- gptme#2853 (cli) add –no-workspace flag to skip all workspace context
- gptme#2860 (server) cursor-based pagination for conversations list
- gptme#2861 (server) add limit/before message pagination to conversation GET
- gptme#2864 (server) add ?q= filter param to conversations API with server-side webui search
- gptme#2865 (webui) add sort control to conversation list (Recent/Longest/A-Z)
- gptme#2869 (openai) enable Responses API by default for gpt-5/o-series models
- gptme#2870 (server) add /api/v0/metrics Prometheus endpoint
- gptme#2872 (webui) thread log_offset through conversation state for windowed pagination (Slice 1)
- gptme#2878 (commands) add /backtrack for in-session conversation recovery
- gptme#2880 (tools) introduce ToolFunction abstraction for structured callable metadata
- gptme#2881 (subagent) forward subprocess/isolated defaults from planner subtask roles
- gptme#2882 (tools) add view_anchored and patch_anchored tools (Gate G2)
- gptme#2884 (computer) add scroll action for mouse wheel support
- gptme#2885 (commands) add /snapshot command for agent tree search (#495)
- gptme#2886 (snapshot) embed conversation message count for diff summary
- gptme-contrib#1061 (gptme-codegraph) add local-first semantic search (Phase 1)
- gptme-contrib#1063 (gptme-coordination) add generic inter-agent coordination package
- gptme-contrib#1065 (gptme-tts) actionable available_hint when TTS is unavailable
- gptme-contrib#1069 (trimmer) add tool-output summarization pass (priority 199)
- gptme-contrib#1070 (protocols) add GPTME_HEARTBEAT spec, schema, and validator
- gptme-contrib#1074 (imagen) register image_gen as a gptme.plugins entry point
- gptme-contrib#1075 (pm-dispatch) per-lane model routing (fast lane → cheaper model)
- gptme-contrib#1077 (pm-dispatch) Thompson-sampling bandit for per-lane model routing
- gptme-contrib#1078 (fleet-vitals) shared emit helper for the fleet-vitals contract
- gptme-contrib#1079 (imagen) add execute function for image_gen blocks with inline webui preview
- gptme-contrib#1080 (self-merge) Greptile score floor — upstream greptile-merge-signal + wire into gate
- gptme-contrib#1081 (pm) surface own-PR Greptile review via notification-blind detector
- gptme-contrib#1082 (github) add resolve-greptile-threads.py (resolveReviewThread primitive)
- gptme-contrib#1083 (gptodo) add ‘status –json’ for machine-readable output
- gptme-contrib#1085 (agent-msg) add reply command and needs-reply tracking
- gptme-contrib#1086 (scripts) upstream codex + openrouter usage scrapers
- gptme-contrib#1088 (subscription) upstream config-driven check-quota.py + shared harness_models
- gptme-contrib#1089 (gptmail) add channel field to MessageInfo tracker
- gptme-contrib#1090 (gptmail) add Transport Protocol + EmailTransport adapter (fold step 1)
- gptme-contrib#1092 (self-merge) capture headRefOid in CheckResult for pre-merge re-check
- gptme-contrib#1094 (gptmail) add AgentTransport (fold step 2)
- gptme-contrib#1097 (gptmail) add
gptmail agentCLI subgroup (fold step 3) - gptme-contrib#1098 (subscription) add HarnessQuotaConfig + load_quota_config() for agent-generic quota
- gptme-contrib#1101 (usage) new gptme-usage package — move harness_models + config-leak fixes
- gptme-contrib#1102 (usage) config-driven quota — ship generic, data via per-agent harness-quota.toml
- gptme-contrib#1103 (gptmail) unread-default + read markers for
gptmail agent list - gptme-contrib#1108 (gptme-usage) add merge_with_module_defaults helper
Bug Fixes
- gptme#2777 (ci) pin self-heal logs to triggering attempt
- gptme#2793 (plugins) recurse nested src-layout tool packages
- gptme#2796 (webui) request fast conversation list detail
- gptme#2798 (cli) reject malformed model paths
- gptme#2800 conversation load crash chain (server symlink 500 + webui dataless crash + error surfacing)
- gptme#2802 (webui) UI polish (input radius, code blocks, avatar, health badge)
- gptme#2804 (webui) sync model selector when switching conversations
- gptme#2807 (hooks) hide injected agent-instructions from conversation view
- gptme#2808 (webui) don’t flush queued messages during tool confirmation
- gptme#2809 (tools) report unavailable tools accurately instead of ‘invalid choice’
- gptme#2820 (cloud) route LLM API calls to Supabase edge functions, not fleet.gptme.ai
- gptme#2821 (server) graceful shutdown on SIGTERM
- gptme#2822 (webui) make Escape key and interrupt logs consistent with isBusy
- gptme#2826 (cloud) parse max_completion_tokens for gptme provider models
- gptme#2829 (webui) make clickable selection rows keyboard-accessible
- gptme#2835 (webui) update ConversationList test to handle highlighted search terms
- gptme#2845 (webui) add Escape-to-navigate-back for full-page settings view
- gptme#2846 (complete) auto-reply kill-switch now detects incomplete-todos variant
- gptme#2849 (webui) add semantic landmarks, aria-current, and aria-selected for keyboard navigation
- gptme#2856 (server) scope conversations cache to active logs dir
- gptme#2857 (webui) reduce redundant conversations API calls on page load
- gptme#2859 (server) preserve messages field on cached conversation list responses
- gptme#2867 two startup hangs — skip OpenRouter fetch for bare model names, non-blocking piped stdin
- gptme#2868 (server) validate model type in config PATCH to prevent 500
- gptme#2871 (models) validate provider default model entries + update groq default
- gptme#2873 (server) improve model validation error messages with examples
- gptme#2874 (server) tolerate pre-existing workspace symlink in ChatConfig.from_logdir
- gptme#2877 (server) return 400 for non-positive limit in conversations API
- gptme#2879 (webui) collapse single hook system messages in chat view
- gptme-contrib#1062 (gptme-tts) make plugin discoverable and fix stale hook names
- gptme-contrib#1064 (subscription) export pacing snapshot helpers
- gptme-contrib#1066 (self-merge-check) accept ‘owner/repo
' two-positional form - gptme-contrib#1071 (pr-queue-health) treat SKIPPED/NEUTRAL checks as passing
- gptme-contrib#1072 (gptodo) allow editing tracking_issue and upstream_coordination_id via –set
- gptme-contrib#1084 (scripts) reconcile check-claude-usage.sh with main-repo fixes
- gptme-contrib#1093 (lessons) remove dead keywords from project-monitoring-session-patterns
- gptme-contrib#1095 (scripts) treat partial-null limit_remaining as available in check-openrouter-usage
- gptme-contrib#1096 (monitoring) emit own-PR Greptile review for BLOCKED PRs
- gptme-contrib#1104 (self-merge) gate eligibility on actual merge permission
- gptme-contrib#1106 (runloops) lazy pm_dispatch re-export to silence runpy RuntimeWarning
- gptme-contrib#1107 (self-merge) scope spec-like-doc gate to repo root only
- gptme-contrib#1109 (gptmail agent) report delivery failures + guard self-send
- gptme-contrib#1110 (gptmail agent) exclude peer replies to my messages from pending
Performance
- gptme#2852 (server) enable gzip compression on API responses
- gptme#2854 (server) skip branch glob on fast scan, dedupe stat, drop debug log
- gptme#2862 (tools) lazy-load mcp.types and bashlex to reduce startup time
- gptme#2863 (server) add ETag conditional request support for conversations endpoints
- gptme#2866 (tools) lazy-load MCPClient and MCPRegistry to reduce startup time
Refactors
- gptme#2805 (webui) group Settings → Servers into collapsible sections
- gptme#2875 (llm) extract shared Responses API event loop into openai_responses.py
- gptme-contrib#1105 (agent-msg) convert to thin shim over gptmail agent CLI
Documentation
- gptme#2782 (howto) add how-to guide section with 5 task-oriented recipes
- gptme#2810 add model-routing guide — pick your model per task
- gptme#2811 (config) document [models] section — default and favorites keys
- gptme#2858 (howto) remove inaccurate –no-workspace equivalence claim
Tests
- gptme#2780 (tauri) add E2E chat interaction flow tests (Slice 2)
- gptme#2830 (server) add PATCH edit-message and DELETE message edge-case tests
- gptme#2839 (webui) add Playwright e2e keyboard navigation tests
- gptme#2847 (complete) cover cross-variant auto-reply exit counting
- gptme-contrib#1068 (coordination) add tests for db module
- gptme-contrib#1073 (gptme-runloops) add tests for utils/prompt utilities
CI & Infrastructure
- gptme#2784 (deps) bump actions/cache from 4 to 5
- gptme#2785 (deps) bump codecov/codecov-action from 6 to 7
- gptme#2786 (deps-dev) bump pre-commit from 4.0.1 to 4.6.0
- gptme#2787 (deps-dev) bump mypy from 1.13.0 to 2.1.0
- gptme#2788 (deps) bump datasets from 4.6.0 to 5.0.0
- gptme#2789 (deps-dev) bump sphinx-book-theme from 1.1.3 to 1.1.4
- gptme#2790 (deps-dev) bump myst-parser from 4.0.0 to 4.0.1
Chore
- gptme-contrib#1067 ignore Python build/ and dist/ artifacts (git + jscpd)
| *145 PRs merged across 2 repos. See the full changelogs: gptme | gptme-contrib* |