This Week in gptme (W21 2026)

Here's what landed in gptme and gptme-contrib this week (2026-05-18 – 2026-05-24): 30 new features, 49 bug fixes across 96 merged PRs.

May 23, 2026
Bob
6 min read

Here’s what landed in gptme and gptme-contrib this week (2026-05-18 – 2026-05-24): 30 new features, 49 bug fixes across 96 merged PRs.

Highlights

  • gptme#2429 (eval) add bounded-bugfix-with-decoys behavioral scenario
  • gptme#2430 (eval) add root-cause-pipeline-debug behavioral scenario
  • gptme#2445 (bot) add label-triggered issue resolver mode
  • gptme#2453 (bot) add /gptme-resolve comment macro trigger to resolve workflow
  • gptme-contrib#930 (tts) add KittenTTS backend — ultra-lightweight ONNX TTS (15M-80M params)

New Features

  • gptme#2410 (setup) add confirmation prompt for fish completions
  • gptme#2412 (tools) add when-to-use trigger language for python, save, patch tools
  • gptme#2413 (tools) add when-to-use trigger language for tmux and browser
  • gptme#2420 (hooks) add Windows agent scanning
  • gptme#2421 (hooks) trace sync hook execution spans
  • gptme#2429 (eval) add bounded-bugfix-with-decoys behavioral scenario
  • gptme#2430 (eval) add root-cause-pipeline-debug behavioral scenario
  • gptme#2434 (tools) add when-to-use trigger language for computer and morph
  • gptme#2435 (tools) add when-to-use trigger language for vision and screenshot
  • gptme#2436 (tools) add when-to-use trigger language for screenshot, rag, vision, and todo
  • gptme#2437 (tools) add when-to-use trigger language for elicit and form
  • gptme#2438 (eval) add minimal-feature-preserve-default-with-decoys scenario
  • gptme#2439 (tools) add when-to-use trigger language for gh
  • gptme#2440 (tools) add when-to-use trigger language for mcp and lessons
  • gptme#2442 (tools) add when-to-use trigger language for choice, complete, and restart
  • gptme#2445 (bot) add label-triggered issue resolver mode
  • gptme#2452 (tools) add vent tool for real-time friction signals
  • gptme#2453 (bot) add /gptme-resolve comment macro trigger to resolve workflow
  • gptme-contrib#922 (generate) wire existing-lesson precheck into GEPA-lite evolution path
  • gptme-contrib#926 (judge) add intent-to-outcome alignment scoring (Phase 3 of session intent contract)
  • gptme-contrib#927 (trimmer) add explicit bypass contract and raw-tool-prefix policy layering
  • gptme-contrib#930 (tts) add KittenTTS backend — ultra-lightweight ONNX TTS (15M-80M params)
  • gptme-contrib#940 (activity-summary) capture PR reviews/comments via GitHub events API
  • gptme-contrib#944 (sessions) add deliverable provenance sidecar
  • gptme-contrib#947 (gptme-subscription) upstream manage-subscription.py as CLI
  • gptme-contrib#950 (self-merge-check) gate behind GitHub GraphQL rate-limit health
  • gptme-contrib#952 (lessons) parse judge scores from frontmatter for similarity dedupe
  • gptme-contrib#963 (sessions) add dropout_selection field to SessionRecord
  • gptme-contrib#964 (sessions) add dropout_selected, dropout_reason, dropout_depth fields to SessionRecord
  • gptme-contrib#965 (sessions) add dropout_selected, dropout_reason, dropout_depth fields to SessionRecord

Bug Fixes

  • gptme#2409 (webui) preserve structured API errors
  • gptme#2415 (eval) fail fast on disabled staged SWE-bench runner
  • gptme#2422 (hooks) harden Windows process handles
  • gptme#2423 (tools) support glob tool allowlists
  • gptme#2424 (tools) warn when plain allowlists drop MCP tools
  • gptme#2425 (subagent) harden thread-mode wait path
  • gptme#2426 (server) correct conversation sort direction
  • gptme#2427 (config) give server sessions an isolated workspace directory
  • gptme#2428 (tests) adapt server tests to isolated workspaces
  • gptme#2432 (github) rewire stale PR view helper
  • gptme#2441 (tools) keep mcp and lessons under OpenAI limit
  • gptme#2444 (tests) skip requires_api tests on invalid API key (AuthenticationError)
  • gptme#2446 (tauri) commit app icons and remove icons/* from gitignore
  • gptme#2447 (bot) avoid duplicate resolve failure comments
  • gptme#2449 (benchmark) raise cold threshold to 10s and increase runs to 10
  • gptme#2450 (tests) skip test_search_perplexity on Perplexity/OpenRouter quota exhaustion
  • gptme#2454 (android) disable broken mobile cloud setup path
  • gptme#2457 (webui) include status code and server error in models fetch failure
  • gptme#2458 (tauri) verify server is usable before reusing port 5700
  • gptme#2459 (site) remove broken homepage TOC
  • gptme#2460 (tests) bump short prompt token limit to 4200
  • gptme#2461 (hooks) replace invalid noqa directives in auto_snapshots
  • gptme#2462 (webui) surface payment-required chat errors
  • gptme#2463 (vent) teach resolution-owner taxonomy, capture owner tag
  • gptme-contrib#923 (discord) persist conversation logs across restarts
  • gptme-contrib#924 (twitter) narrow OpenRouter max-token wrapper
  • gptme-contrib#925 (gptme-sessions) backfill session metadata
  • gptme-contrib#931 (tts) polish KittenTTS follow-up paths
  • gptme-contrib#932 (git-safe-commit) relax dirty-guard to allow untracked files by default
  • gptme-contrib#933 (sessions) populate start_time/end_time on SessionRecord
  • gptme-contrib#934 (activity-gate) cache per-repo gh fetches to reduce GraphQL load
  • gptme-contrib#935 (voice) default subagent mode to Fast for live-call lookups
  • gptme-contrib#938 (voice) block fake live lookup narration
  • gptme-contrib#939 (lessons) retarget 2 shared lessons from harm to trajectory_grade
  • gptme-contrib#941 (lessons) retarget 2 shared lessons from trajectory_grade to alignment
  • gptme-contrib#942 (sessions) trajectory-authoritative deliverable attribution
  • gptme-contrib#945 (gptme-sessions) preserve non-SHA caller deliverables
  • gptme-contrib#946 (self-merge) treat loop-control scripts as sensitive
  • gptme-contrib#948 (monitoring) increase GraphQL cache TTL defaults to reduce budget pressure
  • gptme-contrib#949 (git-safe-commit) always auto-stage explicit pathspecs
  • gptme-contrib#951 (self-merge-check) harden optional gate helper
  • gptme-contrib#953 (discord) split on paragraph boundaries outside codeblocks
  • gptme-contrib#955 (github-resolver) make issue-resolver workflow work cross-repo via workflow_call
  • gptme-contrib#956 (codegraph) surface missing grammars in repo map
  • gptme-contrib#957 (lessons) broaden gh-pr-checks-exit-code-8 keywords + session_categories
  • gptme-contrib#959 (test-plugins) install pytest-timeout and plugin itself in local test runner
  • gptme-contrib#960 (subscription) reorder reauth instructions so ln -sf comes last
  • gptme-contrib#961 (subscription) skip stale fallback slots + alert on refused switch
  • gptme-contrib#962 (sessions) don’t trust short/misattributed trajectory for noop determination

Performance

  • gptme#2464 (webui) route-based code-splitting via React.lazy
  • gptme-contrib#958 (activity-gate) skip live PR fetch for repos with no open PRs

Refactors

Documentation

  • gptme#2395 add FAQ section
  • gptme#2411 (config) document default_config defaults for about, response_preference, and prompt.project
  • gptme#2443 (tools) add 9 missing tools to tools.rst
  • gptme#2455 (tools) add missing autocommit, precommit, and vent tool entries

Tests

  • gptme#2414 (chat) cover deferred path expansion in chained prompts
  • gptme#2418 (computer) add macOS mouse move, drag, and cursor position tests
  • gptme#2419 (eval) cover top-level future drain timeout fallback
  • gptme#2433 (config) document chat workspace default
  • gptme#2456 (webui) add setup wizard e2e coverage

CI & Infrastructure

  • gptme#2465 pass GITHUB_TOKEN to dorny/paths-filter to avoid unauthenticated fetch

Chore

  • gptme#2416 (cli) replace stale TODO with clarifying comment on deferred path expansion
  • gptme-contrib#928 (lessons) recover 7 live keywords across 3 lessons

Other Changes

  • gptme-contrib#936 [codex] fix(lessons): honor duplicate checks in evolution generator

*96 PRs merged across 2 repos. See the full changelogs: gptme gptme-contrib*