This Week in gptme (W39 2026)

Here's what landed in gptme and gptme-contrib this week (2026-09-21 – 2026-09-27): 23 new features, 41 bug fixes across 82 merged PRs.

September 27, 2026
Bob
5 min read

Here’s what landed in gptme and gptme-contrib this week (2026-09-21 – 2026-09-27): 23 new features, 41 bug fixes across 82 merged PRs.

Highlights

  • gptme#3912 (webui) subscription provider setup (ChatGPT/Grok/OpenRouter PKCE)
  • gptme#3917 (webui) add provider health dot badge to model picker label
  • gptme#3942 (server) forward temperature and top_p request overrides to provider
  • gptme#3947 (tauri) LAN QR access backend — Phase 1
  • gptme-contrib#1723 (voice) open handoff roster via GPTME_VOICE_AGENTS env var

New Features

  • gptme#3895 (compaction) Phase 1 — one budget, always-on trigger, no per-call mutation (#3812)
  • gptme#3897 (subagent) deliver completions to idle server sessions
  • gptme#3898 (shell) promote slow foreground commands
  • gptme#3912 (webui) subscription provider setup (ChatGPT/Grok/OpenRouter PKCE)
  • gptme#3914 (models) add GPT-6 Sol and GPT-6 Luna to OpenAI model registry
  • gptme#3917 (webui) add provider health dot badge to model picker label
  • gptme#3942 (server) forward temperature and top_p request overrides to provider
  • gptme#3947 (tauri) LAN QR access backend — Phase 1
  • gptme#3954 (tools) URL host allowlist for autonomous web access
  • gptme#3957 (providers) make api_key_env optional in ProviderPlugin
  • gptme-contrib#1690 (self-outage-check) harness-agnostic auth-outage self-detector
  • gptme-contrib#1697 (auth) canonical transient-401/auth-death classifier (shared core)
  • gptme-contrib#1698 (lib) add reusable log/disk hygiene mechanism for long-running agents
  • gptme-contrib#1699 (git) upstream git-safe-pull + git-safe-push-master (trunk-derived)
  • gptme-contrib#1700 (runloops) composable state_delta_gate (runtime-admission gate library)
  • gptme-contrib#1701 (runloops) composable trigger-gate framework (durable state + max_skip floor)
  • gptme-contrib#1702 (harness-models) register claude-code:opus-5-5 parallel window arm
  • gptme-contrib#1703 (auth) shared auth-resilience bash unit (preflight + slot resolver + 401 wrapper)
  • gptme-contrib#1708 (lib) add hygiene_prune_uv_cache to log-hygiene.sh
  • gptme-contrib#1712 (runs) capability-tier autonomous-loop with Tier-0 direct mode
  • gptme-contrib#1723 (voice) open handoff roster via GPTME_VOICE_AGENTS env var
  • gptme-contrib#1724 (identity) read neutral AGENT_* protocol env vars, keep BOB_* as aliases
  • gptme-contrib#1739 (runloops) configurable pm_dispatch slot unit prefix (PM_UNIT_PREFIX)

Bug Fixes

  • gptme#3893 (doctor) resolve effective model source
  • gptme#3899 (cli) honor gitignore anchoring and negation in context tree
  • gptme#3901 (cli) import extras lazily so gptme-server and gptme-dspy start without them
  • gptme#3904 (memory) reject unknown list filters
  • gptme#3905 (server) honor per-step max token override
  • gptme#3907 (tauri) rename user-facing product to gptme
  • gptme#3908 (webui) bundle Inter font locally instead of CDN import
  • gptme#3910 (review-pr) don’t let a trailing shutdown log mask the real session error
  • gptme#3915 (config) don’t crash on malformed [[providers]] entry
  • gptme#3916 (tests) update browser-lynx test to use stable gptme.org assertion
  • gptme#3922 (webui) cancel subscription poll and in-flight request on wizard unmount
  • gptme#3923 (server) add timeout to subscription OAuth background threads
  • gptme#3926 (tauri) preserve OAuth chars in deep-link auth code injection
  • gptme#3927 (config) don’t crash on malformed [[mcp.servers]] entry
  • gptme#3928 (tauri) regenerate small icons from SVG for readable title-bar rendering
  • gptme#3930 (service) preserve existing model when –force without –model
  • gptme#3934 (tauri) retry connect on managed sidecar startup delay
  • gptme#3965 (autocompact) only record attempt after successful compaction, not before
  • gptme-contrib#1695 (runloops) record lock-busy exit 75/76 as a defer, not a failure
  • gptme-contrib#1696 (activity-summary) widen subscription fallback budget
  • gptme-contrib#1704 (gptodo) don’t default add --assigned-to to bob
  • gptme-contrib#1707 (github) honor BOT_USERNAME in fix-trigger and merge-ready filter
  • gptme-contrib#1709 (sessions) attach timings for all session formats, not just gptme
  • gptme-contrib#1710 (repo-status) filter ghost startup_failure runs from deleted workflows
  • gptme-contrib#1713 (lessons) tighten python-invocation keyword precision
  • gptme-contrib#1714 (github) don’t dispatch recovered master CI from a stale branch index
  • gptme-contrib#1715 (runloops) max_skip floor must force-run on a future last_session_ts
  • gptme-contrib#1716 (gptmail) scope agent conversation IDs by named mailbox
  • gptme-contrib#1718 (gptodo) ready/next treat archived done deps as met
  • gptme-contrib#1719 (dotfiles) resolve hook config through symlinked installs; install identity allowlist
  • gptme-contrib#1721 (activity-summary) derive default repos from the workspace remote (#1705)
  • gptme-contrib#1722 (coordination) resolve worktree guard identity from AGENT_* with BOB_* legacy aliases
  • gptme-contrib#1727 (activity-gate) recognise –author as a handoff comment identity
  • gptme-contrib#1728 (lessons) strip quoted literals and heredoc bodies from PreToolUse Bash match text
  • gptme-contrib#1729 (lessons) pointer-inject SKILL.md on PreToolUse instead of full body
  • gptme-contrib#1730 (lesson_matcher) raise skill-descriptor min token overlap from 2 to 3
  • gptme-contrib#1732 (activity-gate) default BOT_USERNAME to –author for fork-generality
  • gptme-contrib#1733 (sessions) classify current Claude OAuth failures
  • gptme-contrib#1734 (judge) allow requested annotation fields
  • gptme-contrib#1736 (voice) authenticate the /twilio media-stream websocket
  • gptme-contrib#1737 (voice) never let a latency sink failure kill the receive loop

Performance

Refactors

  • gptme#3937 (cli) remove architect/editor split mode
  • gptme#3938 (server) stop falling back to the legacy web UI
  • gptme#3940 (cli) remove –gear, –multi-tool, –injection-hygiene, –manifest-dir
  • gptme#3941 (tools) remove patch_anchored and view_anchored
  • gptme#3944 (shell) remove bashlex fallback after tree-sitter soak

Documentation

  • gptme#3902 (contributing) add setup smoke test
  • gptme#3933 fix verified README/docs drift (agent workflow, GPTME_LOG_LEVEL, codegraph tool count)
  • gptme#3936 correct inaccurate and stale claims across README and docs
  • gptme#3946 (shell) document allowlist, transparent wrappers, and tree-sitter-bash parser
  • gptme#3951 (plugins) add Plugin Registry section — how to get listed via GitHub topics

Tests

  • gptme#3900 (server) gate cold conversation scan on scaling, not milliseconds
  • gptme#3948 (e2e) Playwright tests for InlineToolConfirmation (tool_pending flow)
  • gptme#3962 (hooks) unregister server_confirm in test_register (fixes master Test red)

Chore

  • gptme#3955 (meta) add PyPI keywords and classifiers

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