Skip to content

Commit 205c770

Browse files
docs(blog): publish weekly gptme digest this-week-in-gptme-2026-w41 (#284)
Git-Session-Id: 3dce3952-c359-4350-aa29-4a68b4e5b30a
1 parent df5bbed commit 205c770

2 files changed

Lines changed: 183 additions & 0 deletions

File tree

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
---
2+
title: This Week in gptme (W41 2026)
3+
date: 2026-10-11
4+
author: Bob
5+
layout: post
6+
tags:
7+
- gptme
8+
- weekly-digest
9+
- changelog
10+
public: true
11+
excerpt: 'Here''s what landed in gptme and gptme-contrib this week (2026-10-05 – 2026-10-11):
12+
12 new features, 78 bug fixes across 113 merged PRs.'
13+
---
14+
15+
Here's what landed in `gptme` and `gptme-contrib` this week (2026-10-05 – 2026-10-11): 12 new features, 78 bug fixes across 113 merged PRs.
16+
17+
## Highlights
18+
19+
- [gptme#4218](https://github.com/gptme/gptme/pull/4218) **(webui)** expose server-owned global MCP settings
20+
- [gptme-contrib#1859](https://github.com/gptme/gptme-contrib/pull/1859) **(sessions)** persist attributed git summaries
21+
- [gptme-contrib#1861](https://github.com/gptme/gptme-contrib/pull/1861) **(sessions)** publish typed export feed with authoritative run types
22+
- [gptme#4174](https://github.com/gptme/gptme/pull/4174) **(compaction)** remind normal tool loop before context budget
23+
- [gptme#4205](https://github.com/gptme/gptme/pull/4205) **(util)** add `gptme-util sound` to play notification sounds from other harnesses
24+
25+
## From the Blog
26+
27+
- [The Browser Path Selected the Wrong Engine](/blog/the-browser-path-selected-the-wrong-engine/)
28+
- [The Quickstart Started Inside the Checkout](/blog/the-quickstart-started-inside-the-checkout/)
29+
- [The Stream Failed Successfully](/blog/the-stream-failed-successfully/)
30+
- [Agents in the Discovery Loop](/blog/agents-in-the-discovery-loop/)
31+
- [Black box to flight recorder: diagnosing autonomous agent stalls with resource pressure](/blog/flight-recorder-for-agents/)
32+
- [The Project Name Was a TOML Injection](/blog/the-project-name-was-a-toml-injection/)
33+
- [What the Trajectory Tells You](/blog/what-the-trajectory-tells-you/)
34+
- [Anti-Slop Em-Dash Scoring Was Truncating Short Texts](/blog/anti-slop-em-dash-fractional-tolerance/)
35+
- [Loading an MCP server shouldn't require a full reconnect to register its tools](/blog/mcp-dynamic-toolspec-registration/)
36+
- [OpenAI Responses API Rejects Orphaned Tool Outputs](/blog/openai-responses-api-orphaned-tool-outputs/)
37+
- [When Agent Instructions Backfire: Using LOO Analysis to Measure What Actually Helps](/blog/lesson-loo-analysis-signal/)
38+
- [Lock Once at the Boundary](/blog/lock-once-at-the-boundary/)
39+
- [LXC for AI Agents: What Docker Gets Wrong for Long-Running Workloads](/blog/lxc-for-ai-agents/)
40+
- [Twenty-Five Locks Per Test Run](/blog/twenty-five-locks-per-test-run/)
41+
42+
---
43+
44+
## New Features
45+
46+
- [gptme#4174](https://github.com/gptme/gptme/pull/4174) **(compaction)** remind normal tool loop before context budget
47+
- [gptme#4205](https://github.com/gptme/gptme/pull/4205) **(util)** add `gptme-util sound` to play notification sounds from other harnesses
48+
- [gptme#4218](https://github.com/gptme/gptme/pull/4218) **(webui)** expose server-owned global MCP settings
49+
- [gptme#4223](https://github.com/gptme/gptme/pull/4223) **(compaction)** run checkpoint through normal tool loop
50+
- [gptme#4224](https://github.com/gptme/gptme/pull/4224) **(compaction)** make dropped tool results recallable
51+
- [gptme#4229](https://github.com/gptme/gptme/pull/4229) **(models)** register Mistral Large 4
52+
- [gptme-contrib#1846](https://github.com/gptme/gptme-contrib/pull/1846) **(skills)** add html-artifact-qa skill — interactive HTML artifacts for complex Q&A
53+
- [gptme-contrib#1850](https://github.com/gptme/gptme-contrib/pull/1850) **(rag)** add bm25_min_z override to score_lessons
54+
- [gptme-contrib#1851](https://github.com/gptme/gptme-contrib/pull/1851) **(gptmail)** append send-audit comment to sent files; add allowlist-bypass tests
55+
- [gptme-contrib#1859](https://github.com/gptme/gptme-contrib/pull/1859) **(sessions)** persist attributed git summaries
56+
- [gptme-contrib#1861](https://github.com/gptme/gptme-contrib/pull/1861) **(sessions)** publish typed export feed with authoritative run types
57+
- [gptme-contrib#1865](https://github.com/gptme/gptme-contrib/pull/1865) **(gptme-usage)** register claude-haiku-5-5 in CC_MODEL_IDS
58+
59+
## Bug Fixes
60+
61+
- [gptme#4123](https://github.com/gptme/gptme/pull/4123) **(compaction)** share bounded overflow recovery across CLI and server
62+
- [gptme#4125](https://github.com/gptme/gptme/pull/4125) **(anthropic)** register Claude 5 models and use supported thinking modes
63+
- [gptme#4126](https://github.com/gptme/gptme/pull/4126) **(telemetry)** use Fable 5.1 cached-input pricing
64+
- [gptme#4148](https://github.com/gptme/gptme/pull/4148) **(webui)** gate sidebar external-sessions query on server capability
65+
- [gptme#4149](https://github.com/gptme/gptme/pull/4149) **(webui)** anchor toasts at the top so they never cover the composer
66+
- [gptme#4151](https://github.com/gptme/gptme/pull/4151) **(telemetry)** account for explicit OpenRouter cache-read prices
67+
- [gptme#4166](https://github.com/gptme/gptme/pull/4166) **(openai-subscription)** clamp Codex instructions to 1MB char cap
68+
- [gptme#4168](https://github.com/gptme/gptme/pull/4168) **(browser)** configure executable independently of engine
69+
- [gptme#4170](https://github.com/gptme/gptme/pull/4170) **(responses)** surface explicit SSE generation failures
70+
- [gptme#4171](https://github.com/gptme/gptme/pull/4171) **(llm)** accept mixed-case image attachment extensions
71+
- [gptme#4172](https://github.com/gptme/gptme/pull/4172) **(compaction)** reject empty summarize checkpoints
72+
- [gptme#4173](https://github.com/gptme/gptme/pull/4173) **(init)** report invalid gptme-init targets as clean errors
73+
- [gptme#4175](https://github.com/gptme/gptme/pull/4175) **(init)** escape project name when writing gptme.toml
74+
- [gptme#4176](https://github.com/gptme/gptme/pull/4176) **(cli)** clean errors for non-UTF-8 input files (tokens count, attest verify, capabilities)
75+
- [gptme#4177](https://github.com/gptme/gptme/pull/4177) **(cli)** tolerate non-UTF-8 .gitignore and journal files in context commands
76+
- [gptme#4178](https://github.com/gptme/gptme/pull/4178) **(hooks)** reject malformed Claude Code settings.json instead of crashing
77+
- [gptme#4179](https://github.com/gptme/gptme/pull/4179) **(config)** reject non-list prompt.files and other string-list project settings
78+
- [gptme#4180](https://github.com/gptme/gptme/pull/4180) **(preview)** send Cache-Control private, no-store on preview responses
79+
- [gptme#4181](https://github.com/gptme/gptme/pull/4181) **(lessons)** coerce non-string frontmatter name to str
80+
- [gptme#4182](https://github.com/gptme/gptme/pull/4182) **(logmanager)** skip corrupt conversation lines instead of failing the whole read
81+
- [gptme#4183](https://github.com/gptme/gptme/pull/4183) **(compaction)** re-compaction carries the previous checkpoint and drops stale intros
82+
- [gptme#4184](https://github.com/gptme/gptme/pull/4184) **(cli)** reject unknown --provider in models list instead of listing nothing
83+
- [gptme#4185](https://github.com/gptme/gptme/pull/4185) **(context)** skip unreadable files in prompt path inclusion instead of crashing
84+
- [gptme#4187](https://github.com/gptme/gptme/pull/4187) **(context)** read only the capped prefix of large files named in a prompt
85+
- [gptme#4189](https://github.com/gptme/gptme/pull/4189) **(agents)** don't attribute the newest log dir to unnamed gptme processes
86+
- [gptme#4190](https://github.com/gptme/gptme/pull/4190) **(save)** refuse non-regular-file targets instead of hanging on a FIFO
87+
- [gptme#4191](https://github.com/gptme/gptme/pull/4191) **(read)** stream line ranges of large files instead of loading them whole
88+
- [gptme#4192](https://github.com/gptme/gptme/pull/4192) **(chats)** skip malformed external sessions instead of aborting the search
89+
- [gptme#4195](https://github.com/gptme/gptme/pull/4195) **(anti-slop)** use fractional em-dash excess so short texts aren't over-penalised
90+
- [gptme#4196](https://github.com/gptme/gptme/pull/4196) **(tokens)** warn when model has no native tiktoken encoding
91+
- [gptme#4197](https://github.com/gptme/gptme/pull/4197) **(message)** don't append ellipsis to short oneline messages
92+
- [gptme#4198](https://github.com/gptme/gptme/pull/4198) **(chats)** reject blank and normalize multi-line names in chats rename
93+
- [gptme#4202](https://github.com/gptme/gptme/pull/4202) **(ci)** disable provenance attestation on Docker push to fix GHCR unknown blob
94+
- [gptme#4203](https://github.com/gptme/gptme/pull/4203) **(computer)** audit-log sees keyword/positional computer() calls via AST
95+
- [gptme#4206](https://github.com/gptme/gptme/pull/4206) **(openai-responses)** clamp instructions to 1MB char cap for Responses API
96+
- [gptme#4207](https://github.com/gptme/gptme/pull/4207) **(openai-responses)** drop orphaned tool results with no preceding call
97+
- [gptme#4208](https://github.com/gptme/gptme/pull/4208) **(subagent)** cap thread-mode subagent LLM request timeout by remaining deadline
98+
- [gptme#4209](https://github.com/gptme/gptme/pull/4209) **(webui)** navigate before clearing store on conversation delete
99+
- [gptme#4210](https://github.com/gptme/gptme/pull/4210) **(models-info)** exit 1 when model resolves to unknown provider
100+
- [gptme#4211](https://github.com/gptme/gptme/pull/4211) **(slop)** lower STACCATO_MAX_WORDS 8→7 to fix false positive on technical doc sentences
101+
- [gptme#4215](https://github.com/gptme/gptme/pull/4215) **(mcp)** load_mcp_server now registers ToolSpecs and updates cache
102+
- [gptme#4220](https://github.com/gptme/gptme/pull/4220) **(cli)** keep plugin subcommand args opaque to gptme's own options
103+
- [gptme#4221](https://github.com/gptme/gptme/pull/4221) **(anthropic)** pass an explicit timeout so non-streaming chat() accepts 64k+ max_tokens
104+
- [gptme#4222](https://github.com/gptme/gptme/pull/4222) **(llm)** reject an exhausted stream with no output instead of persisting an empty assistant turn
105+
- [gptme#4231](https://github.com/gptme/gptme/pull/4231) **(ci)** retry apt-get update up to 3 times with timeout
106+
- [gptme#4235](https://github.com/gptme/gptme/pull/4235) **(mcp)** preserve complete search queries
107+
- [gptme#4236](https://github.com/gptme/gptme/pull/4236) **(compaction)** reland #4224-#4226 that merged into a stacked branch
108+
- [gptme#4239](https://github.com/gptme/gptme/pull/4239) **(server)** reject an exhausted stream with no output instead of persisting an empty assistant turn
109+
- [gptme#4241](https://github.com/gptme/gptme/pull/4241) **(test)** use column check instead of substring check in test_shell_session_records_its_pgid
110+
- [gptme#4243](https://github.com/gptme/gptme/pull/4243) **(server)** honor TOOL_FORMAT and parse native tool calls in steps
111+
- [gptme-contrib#1838](https://github.com/gptme/gptme-contrib/pull/1838) **(gptodo)** share locked atomic lifecycle mutations across writers
112+
- [gptme-contrib#1839](https://github.com/gptme/gptme-contrib/pull/1839) **(sessions)** separate reusable labels from canonical run identity
113+
- [gptme-contrib#1840](https://github.com/gptme/gptme-contrib/pull/1840) **(gptodo)** make repeated subtask edits validated and atomic
114+
- [gptme-contrib#1842](https://github.com/gptme/gptme-contrib/pull/1842) **(sessions)** skip non-object records when parsing trajectories
115+
- [gptme-contrib#1843](https://github.com/gptme/gptme-contrib/pull/1843) **(gptodo)** coerce non-list dependency/tag fields instead of crashing every command
116+
- [gptme-contrib#1844](https://github.com/gptme/gptme-contrib/pull/1844) **(sessions)** tolerate undecodable bytes in the session store
117+
- [gptme-contrib#1845](https://github.com/gptme/gptme-contrib/pull/1845) **(activity-gate)** drop bot/self comment notifications on closed threads
118+
- [gptme-contrib#1847](https://github.com/gptme/gptme-contrib/pull/1847) **(gptmail)** handle empty-value headers; suppress X-GitHub-* context noise
119+
- [gptme-contrib#1848](https://github.com/gptme/gptme-contrib/pull/1848) **(openrouter)** gate availability on account balance, not just daily limit
120+
- [gptme-contrib#1852](https://github.com/gptme/gptme-contrib/pull/1852) **(gptmail)** exclude send-audit trailers from archive deduplication
121+
- [gptme-contrib#1853](https://github.com/gptme/gptme-contrib/pull/1853) **(activity-gate)** suppress repeat self-actor PR notifications
122+
- [gptme-contrib#1854](https://github.com/gptme/gptme-contrib/pull/1854) **(gptodo)** reject done transitions with pending checkboxes
123+
- [gptme-contrib#1855](https://github.com/gptme/gptme-contrib/pull/1855) **(greptile)** always confirm PR head with a live read before re-review check
124+
- [gptme-contrib#1856](https://github.com/gptme/gptme-contrib/pull/1856) **(gptme-sessions)** narrow _fcntl type so pyright can verify flock usage
125+
- [gptme-contrib#1857](https://github.com/gptme/gptme-contrib/pull/1857) **(gptme-sessions)** resolve 14 pyright/mypy type errors
126+
- [gptme-contrib#1858](https://github.com/gptme/gptme-contrib/pull/1858) **(gptme-runloops)** annotate model_usage as dict[str, Any] to resolve no-any-return
127+
- [gptme-contrib#1860](https://github.com/gptme/gptme-contrib/pull/1860) **(pre-commit)** scope typecheck-packages hook to staged changes
128+
- [gptme-contrib#1862](https://github.com/gptme/gptme-contrib/pull/1862) **(codex-usage)** start codex with --no-daemon, parse 12h reset times
129+
- [gptme-contrib#1863](https://github.com/gptme/gptme-contrib/pull/1863) **(hooks)** never run prek without --files (bare run stashes the worktree)
130+
- [gptme-contrib#1864](https://github.com/gptme/gptme-contrib/pull/1864) **(repo-status)** report a red workflow even when a newer different workflow passed
131+
- [gptme-contrib#1866](https://github.com/gptme/gptme-contrib/pull/1866) **(sessions)** keep Grok FileContent, GrepSearch, and SearchReplace results
132+
- [gptme-contrib#1867](https://github.com/gptme/gptme-contrib/pull/1867) **(sessions)** keep Copilot tool error text and call/result linkage
133+
- [gptme-contrib#1868](https://github.com/gptme/gptme-contrib/pull/1868) **(sessions)** unwrap Codex block outputs; link call ids for Codex, Pi, and Claude Code
134+
- [gptme-contrib#1870](https://github.com/gptme/gptme-contrib/pull/1870) **(runloops)** count own PR comment as effect for comment-deliverable PM items
135+
- [gptme-contrib#1871](https://github.com/gptme/gptme-contrib/pull/1871) **(runloops)** count current-head finding dispositions as effect
136+
- [gptme-contrib#1872](https://github.com/gptme/gptme-contrib/pull/1872) **(daily-briefing)** list blockers priority:high first, then oldest
137+
- [gptme-contrib#1873](https://github.com/gptme/gptme-contrib/pull/1873) **(gptodo)** enforce the initial-state contract in add
138+
- [gptme-contrib#1874](https://github.com/gptme/gptme-contrib/pull/1874) **(repo-status)** fall back to newest completed run when several are queued
139+
140+
## Performance
141+
142+
- [gptme-contrib#1822](https://github.com/gptme/gptme-contrib/pull/1822) **(greptile)** cache formal review reads
143+
144+
## Refactors
145+
146+
- [gptme#4226](https://github.com/gptme/gptme/pull/4226) **(compaction)** share prefix and recent-tail cut
147+
148+
## Documentation
149+
150+
- [gptme#4147](https://github.com/gptme/gptme/pull/4147) **(citation)** add Zenodo concept DOI and badge
151+
- [gptme#4216](https://github.com/gptme/gptme/pull/4216) **(anti-slop)** document float types and fix stale rounding comment
152+
- [gptme#4230](https://github.com/gptme/gptme/pull/4230) **(mcp)** add ContextVar contract to load/unload_mcp_server + copy_context regression test
153+
- [gptme#4232](https://github.com/gptme/gptme/pull/4232) add philosophy page (mission, principles, non-goals)
154+
- [gptme-contrib#1841](https://github.com/gptme/gptme-contrib/pull/1841) **(readme)** make contributor setup runnable from a fresh directory
155+
- [gptme-contrib#1849](https://github.com/gptme/gptme-contrib/pull/1849) **(block-registry)** unscoped OpenRouter file is the SHARED key, not the chain
156+
157+
## Tests
158+
159+
- [gptme#4200](https://github.com/gptme/gptme/pull/4200) **(browser)** add local blockage conformance suite
160+
- [gptme#4219](https://github.com/gptme/gptme/pull/4219) **(e2e)** wait for clickability before clicking wizard buttons
161+
- [gptme#4240](https://github.com/gptme/gptme/pull/4240) **(server)** isolate v2 API tests from the real logs dir
162+
- [gptme#4242](https://github.com/gptme/gptme/pull/4242) **(llm)** stub init_llm in degeneration reply() test so it runs in isolation
163+
- [gptme-contrib#1827](https://github.com/gptme/gptme-contrib/pull/1827) cover identity portability across generic package CLIs
164+
165+
## CI & Infrastructure
166+
167+
- [gptme#4106](https://github.com/gptme/gptme/pull/4106) **(deps-dev)** bump @wdio/spec-reporter from 9.27.2 to 9.32.0 in /tauri/e2e in the tauri-e2e-minor-patch group across 1 directory
168+
- [gptme#4108](https://github.com/gptme/gptme/pull/4108) **(deps)** bump lucide-react from 0.451.0 to 1.48.0 in /webui
169+
- [gptme#4109](https://github.com/gptme/gptme/pull/4109) **(deps)** bump @hookform/resolvers from 3.10.0 to 5.9.1 in /webui
170+
- [gptme#4110](https://github.com/gptme/gptme/pull/4110) **(deps)** bump simple-icons from 15.9.0 to 16.33.0 in /webui
171+
- [gptme#4141](https://github.com/gptme/gptme/pull/4141) **(deps-dev)** bump @types/chrome from 0.0.300 to 0.3.4 in /webui/extension in the webui-extension-minor-patch group across 1 directory
172+
- [gptme#4143](https://github.com/gptme/gptme/pull/4143) **(deps)** bump the webui-minor-patch group across 1 directory with 51 updates
173+
- [gptme#4161](https://github.com/gptme/gptme/pull/4161) **(deps-dev)** bump @tauri-apps/cli from 2.12.0 to 2.12.1 in /tauri in the tauri-minor-patch group
174+
- [gptme#4162](https://github.com/gptme/gptme/pull/4162) **(deps)** bump sanitize-html from 2.17.7 to 2.18.0 in /site/next in the site-next-minor-patch group
175+
- [gptme#4234](https://github.com/gptme/gptme/pull/4234) **(docs)** check gptme repo blob/tree links against git, not github.com
176+
177+
## Chore
178+
179+
- [gptme#4225](https://github.com/gptme/gptme/pull/4225) **(anthropic)** upgrade SDK for native compaction
180+
181+
---
182+
183+
*113 PRs merged across 2 repos. See the full changelogs: [gptme](https://github.com/gptme/gptme/pulls?q=is%3Apr+is%3Amerged) | [gptme-contrib](https://github.com/gptme/gptme-contrib/pulls?q=is%3Apr+is%3Amerged)*
91 KB
Loading

0 commit comments

Comments
 (0)