This Week in gptme (W42 2026)
Here's what landed in gptme and gptme-contrib this week (2026-10-12 – 2026-10-18): 42 new features, 73 bug fixes across 144 merged PRs.
Here’s what landed in gptme and gptme-contrib this week (2026-10-12 – 2026-10-18): 42 new features, 73 bug fixes across 144 merged PRs.
Highlights
- gptme#4380 (webui) indent tool results under their step in expanded turn groups
- gptme#4386 (webui) add group-turns toggle and fix tool-result indent edge cases (#4376)
- gptme-contrib#1916 (sessions) add ATIF v1.7 export adapter for cross-harness trajectories
- gptme-contrib#1926 (sessions) parse gptme tool calls in _normalize_gptme for ATIF export
- gptme#4283 (lessons) add opt-in shared selector command adapter
From the Blog
- The AI Reviewer Caught My Own Mistake
- Property-Based Testing File Recovery Code
- Gemini’s Second Tool Call Needed the Thought Signature Back
- gptme 0.35.1: IPython in Its Own Kernel
- The Tailwind Upgrade That Wasn’t a Redesign
- A Review Gate That Failed Open
- A Valid Trajectory Can Still Lose the Work
- The Lane a Timer Already Owns
New Features
- gptme#4283 (lessons) add opt-in shared selector command adapter
- gptme#4294 (lessons) add optional GPTME_LESSONS_MAX_PER_TURN limit
- gptme#4309 (compaction) summarize overflowed history in fresh-context chunks
- gptme#4318 (compaction) record ‘chunked’ and ‘native’ methods in compaction.jsonl
- gptme#4328 (lessons) record final native context emissions
- gptme#4336 (context) add max_tokens to ContextSelectorConfig; use it in LLMSelector
- gptme#4339 (tui) command-driven status line ([tui] statusline)
- gptme#4340 (lessons) capture private final-item evidence for precision readouts
- gptme#4344 (tui) show the running tool call, its elapsed time and timeout
- gptme#4346 (tui) queued prompts steer the running turn at its next step
- gptme#4348 (shell) memory guard kills the agent’s largest command when system memory runs low
- gptme#4354 (tui,ipython) Ctrl+C stops a running tool in the TUI; ipython cells time out
- gptme#4359 (python) run IPython in a separate Jupyter kernel process
- gptme#4375 (tui) show an agent turn as one block, tool results under their step
- gptme#4379 (python) use ‘uv run –with ipykernel’ when project env lacks ipykernel
- gptme#4380 (webui) indent tool results under their step in expanded turn groups
- gptme#4386 (webui) add group-turns toggle and fix tool-result indent edge cases (#4376)
- gptme#4388 (review) ingest ai-review-local artifacts + extend finding schema
- gptme#4390 (review) extend ReviewArtifact with union schema fields (slice 2a)
- gptme#4393 (python) auto-activate kernel backend when a project environment is detected
- gptme#4404 (review) add JSON Schema + validator for ReviewArtifact v2 (slice 2d)
- gptme#4405 (review) extend ReviewArtifact with production evidence fields
- gptme#4406 (review) retain full rejected_findings objects in ReviewArtifact
- gptme-contrib#1875 (judge) allow deployment-specific default model override
- gptme-contrib#1876 (usage) bump CC haiku alias pin to Haiku 5.5
- gptme-contrib#1884 (runloops) relay contributor CI failures
- gptme-contrib#1891 (lessons) add bounded shared advisory selector service
- gptme-contrib#1892 (bobutils) add split_frontmatter() — line-based frontmatter splitter
- gptme-contrib#1896 (lessons) add max_output_tokens cap to shared advisory selector protocol
- gptme-contrib#1900 (skills) add YAML frontmatter to financial-advisor skill
- gptme-contrib#1901 (skills) add reproducible hold-to-talk voice demo
- gptme-contrib#1902 (gptme-review) lift AI reviewer engine from bob brain into contrib package
- gptme-contrib#1904 (gptme-review) add ReviewResult dataclass (slice 1.1 of thin-callsites)
- gptme-contrib#1905 (gptme-review) define resolved ReviewTarget input contract
- gptme-contrib#1910 (pr-review) add core_compat — lossless forge-neutral → core conversion (slice 2b)
- gptme-contrib#1914 (pr-review) emit canonical v2 artifacts from public outputs
- gptme-contrib#1916 (sessions) add ATIF v1.7 export adapter for cross-harness trajectories
- gptme-contrib#1917 (review) add deepseek-v4.1-flash-1017 PROVIDER_POLICY entry
- gptme-contrib#1918 (gptme-review) add shared review(target, config) entry-point with fixture parity tests
- gptme-contrib#1926 (sessions) parse gptme tool calls in _normalize_gptme for ATIF export
- gptme-contrib#1927 (sessions) add Letta trajectory-v1 export adapter and research note
- gptme-contrib#1930 (gptme-sessions) add normalize_letta() ingest for Letta trajectory-v1
Bug Fixes
- gptme#4282 (context) fall back when selector replies are malformed
- gptme#4288 (tauri) use platform-correct URL in IPC test helper for tauri 2.12
- gptme#4291 (context) fall back to rule-based pre-filter when LLM refinement reply is malformed
- gptme#4292 (mcp) drop the closed client from the registry before reconnecting in _restart_mcp_client
- gptme#4295 (deps) switch Dependabot pip → uv ecosystem for root Python deps
- gptme#4305 (release) only count push-triggered checks in release preflight
- gptme#4308 (tauri) bump rustls to 0.23.45 and serde_with to 3.21.0 in Cargo.lock
- gptme#4310 (release) fail closed on partial API errors in default shell
- gptme#4312 (docs) fix garbled provider integration table and lint grid table alignment
- gptme#4320 (tui) don’t crash when a prompt contains a URL
- gptme#4323 (tui) don’t crash on a click that hits a just-removed widget
- gptme#4326 (context) don’t crash on ‘~word’ prose; include_paths never crashes a prompt
- gptme#4329 (context) stop attaching bare words that match cwd entries; add TUI path completion
- gptme#4330 (tui) run slash-commands in a worker so slow ones don’t freeze the UI
- gptme#4333 (webui) patch 7 transitive dependabot alerts in package-lock.json
- gptme#4334 (tui) render assistant message in place, no preview→final swap
- gptme#4337 (config) accept CSS color names like ‘pink’ for [agent]/[user] color
- gptme#4341 (llm) bound selector input and actual provider requests
- gptme#4342 (tui) stream tool-call blocks as collapsed stubs to prevent layout jumps
- gptme#4343 (webui) move embedded keyboard shortcuts into account menu
- gptme#4345 (tui) handle
tags from Anthropic extended thinking - gptme#4347 (tui) show message and tool indicator before tool execution begins
- gptme#4349 (webui) don’t show model selector skeleton pill on home page
- gptme#4350 (shell) only block pipes that feed an interpreter its program
- gptme#4352 (tui) statusline payload says ‘
' instead of None - gptme#4356 (tui) body mode in _update_hidden_segments when show_thinking=True
- gptme#4357 (tui) ignore a statusline result that arrives after the screen is gone
- gptme#4358 (tui) compact, readable markdown headers in messages
- gptme#4361 (tui) drop duplicate _generation_thread declaration
- gptme#4362 (e2e) fix flaky sidebar tests broken by virtualization scroll-to-bottom
- gptme#4364 (tui) use Markdown widget for prose segments to stop layout jump at finalize
- gptme#4365 (llm) avoid rebuilding grok client per-request; reuse HTTP session in openai-subscription
- gptme#4366 (tools) declare undeclared kwargs params; add conformance test
- gptme#4370 (release) pin concrete Python version for uv build in publish job
- gptme#4371 (compact) keep the last message, default to summarize, no-op trim says so
- gptme#4372 (tui) no blinks or jumps while a turn runs; frame-level regression tests
- gptme#4374 (shell) shellcheck blocks error-severity findings, hides style advice
- gptme#4377 (webui) preserve streamed reply rows and test turn frame stability
- gptme#4381 (python) guard the kernel’s memory and report a dead kernel promptly
- gptme#4382 (cli) honor –max-chars in resume prompt and drop empty section headers
- gptme#4383 (cli) reject non-positive –days in ‘context journal’
- gptme#4384 (rag) pass gptme-rag’s real search flags for top_k and return_full
- gptme#4385 (review) ingest gptme-contrib’s forge-neutral review artifact
- gptme#4387 (webui) resume Cloud setup after auth callback reload
- gptme#4392 (webui) move Sonner toasts to top-right to avoid covering Stop button (#4112)
- gptme#4394 (tui) agent text stands out; tool lines muted; /display grouping
- gptme#4395 (tools) save/patch report paths with ~; prompt says ~ is fine in paths
- gptme#4396 (tui) show each tool result under the call it came from
- gptme#4397 (webui) render consecutive user messages as one message
- gptme#4398 (webui) guard null tooluse.args to prevent crash on argument-free tool calls
- gptme#4399 (test) reset _kernel_mode_frozen in backend selection test
- gptme#4401 (edit) honor arguments and quoting in EDITOR
- gptme#4403 (convert) pass ImageMagick output without option separator
- gptme-contrib#1878 (deps) refresh install-size lock and Anthropic judge compatibility
- gptme-contrib#1881 (install-size) un-pin direct deps of dropped git sources
- gptme-contrib#1885 (pm) preserve notification watermarks across parent cycles
- gptme-contrib#1888 (coordination) age boost must overtake a fresh top-priority event within ~6h
- gptme-contrib#1889 (dotfiles) pre-push master block no longer advertises –no-verify
- gptme-contrib#1890 (sessions) match a rate-limit phrase, not scattered ‘rate’/’limit’ substrings
- gptme-contrib#1893 (twitter) skip unmentioned timeline tweets before drafting (Basic-tier reply 403)
- gptme-contrib#1894 (gptodo) clear the waiting blocker when a task is released manually
- gptme-contrib#1895 (deps) bump werkzeug to 3.1.9 and multidict to 6.9.1 in uv.lock
- gptme-contrib#1897 (lessons) require enforced selector request bounds
- gptme-contrib#1899 (dotfiles) set push.default=simple to prevent silent upstream-tracking pushes
- gptme-contrib#1907 (activity-gate) do not treat clean AI-review passes as actionable updates
- gptme-contrib#1908 (voice) kill whole subagent tree on cancel and keep evidence of cancelled lookups
- gptme-contrib#1909 (voice) handle OSError race in _pid_alive on Python 3.12
- gptme-contrib#1911 (voice) catch ProcessLookupError race in _pid_alive test helper
- gptme-contrib#1912 (lessons-validator) skip proposed/, .candidate/, archived/, templates/ by default
- gptme-contrib#1913 (sessions) attribute gptme and Codex PR creation deliverables
- gptme-contrib#1921 (sessions) emit ATIF v1.7 schema-valid metrics and agent fields
- gptme-contrib#1923 (lessons) preserve complete PR feedback and check replies
- gptme-contrib#1931 (sessions) derive Letta timestamp bounds from parsed instants
Performance
- gptme#4332 (tui) batch stream renders, anchor the chat scroll, keep one tool status line
Refactors
- gptme#4286 (webui) drop unused calendar wrapper + react-day-picker, bump date-fns to 4
- gptme-contrib#1879 (vent) remove deprecated –type flag
Documentation
- gptme#4316 (building) install with uv instead of Poetry
- gptme#4327 (voice) install with uv instead of Poetry
Tests
- gptme#4285 (webui) make location mocks jsdom-26-safe and move to jest 30
- gptme#4338 (tui) cover mid-stream thinking toggles and delayed finalization flush
- gptme#4353 (tui) fix thinking-toggle stream test broken on master since #4342
- gptme#4378 (perf) add performance benchmarks for core and TUI latency
- gptme#4389 (doctor) isolate –json test from ambient stdout logging
- gptme-contrib#1898 (gptodo) isolate test_excludes_own_agent_claims from CASCADE_COORDINATION_AGENT
- gptme-contrib#1903 (lessons) isolate partial config from installed core fields
- gptme-contrib#1928 (sessions) preserve gptme markdown codeblocks in ATIF export
CI & Infrastructure
- gptme#4284 (deps) group peer-coupled react and jest majors in dependabot
- gptme#4287 (site) migrate site/next to Tailwind 4 and React 19
- gptme#4289 (site) fail the site/next build on unresolved same-origin asset references
- gptme#4293 (deps) bump the cargo-minor-patch group across 1 directory with 8 updates
- gptme#4301 (deps) bump the webui-minor-patch group across 1 directory with 6 updates
- gptme#4302 (deps-dev) bump @types/chrome from 0.3.4 to 0.3.5 in /webui/extension in the webui-extension-minor-patch group across 1 directory
- gptme#4306 (deps-dev) bump @tauri-apps/cli from 2.12.1 to 2.12.2 in /tauri in the tauri-minor-patch group across 1 directory
- gptme#4313 (deps) group Dependabot majors per directory, cut cadence and CI on E2E-only bumps
- gptme#4314 (deps) auto-merge Dependabot minor/patch PRs once checks pass
- gptme#4315 (deps) declare dependencies in PEP 621 tables so Dependabot uv can update them
- gptme#4317 (deps-dev) bump @types/node from 22.20.2 to 22.20.5 in /site/next in the site-next-minor-patch group
- gptme#4319 (deps) bump the webui-minor-patch group in /webui with 2 updates
- gptme#4322 (deps) hold auto-merge unless Greptile scores the bump 5/5
- gptme#4325 (deps) fall back to Bob’s review when Greptile doesn’t review a Dependabot PR
- gptme-contrib#1883 weekly lock-refresh workflow for the git-pinned gptme
Chore
- gptme#4290 (webui) delete unused components and deps, gate with knip
| *144 PRs merged across 2 repos. See the full changelogs: gptme | gptme-contrib* |