Skip to content

Commit 8a2bd2d

Browse files
docs(blog): publish This Week in gptme (W22 2026)
1 parent 4cf10a7 commit 8a2bd2d

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 (W22 2026)
3+
date: 2026-05-31
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-05-25 – 2026-05-31):
12+
33 new features, 104 bug fixes across 142 merged PRs.'
13+
---
14+
15+
Here's what landed in `gptme` and `gptme-contrib` this week (2026-05-25 – 2026-05-31): 33 new features, 104 bug fixes across 142 merged PRs.
16+
17+
## Highlights
18+
19+
- [gptme#2585](https://github.com/gptme/gptme/pull/2585) **(eval)** add subagent trajectory checks
20+
- [gptme#2593](https://github.com/gptme/gptme/pull/2593) **(eval)** check subagent waited for completion before stating result
21+
- [gptme#2614](https://github.com/gptme/gptme/pull/2614) **(server)** add --webui-dir flag to serve a custom web UI build
22+
- [gptme#2633](https://github.com/gptme/gptme/pull/2633) **(server)** bundle modern webui into package (gptme#2612 Part 2)
23+
- [gptme#2637](https://github.com/gptme/gptme/pull/2637) **(webui)** add artifacts sidebar panel and registry
24+
25+
---
26+
27+
## New Features
28+
29+
- [gptme#2549](https://github.com/gptme/gptme/pull/2549) **(auth)** retarget device flow from fleet-operator to Supabase edge fn
30+
- [gptme#2570](https://github.com/gptme/gptme/pull/2570) **(browser)** support connecting over CDP
31+
- [gptme#2572](https://github.com/gptme/gptme/pull/2572) **(hooks)** add turn.pre and aw watcher consumer
32+
- [gptme#2585](https://github.com/gptme/gptme/pull/2585) **(eval)** add subagent trajectory checks
33+
- [gptme#2592](https://github.com/gptme/gptme/pull/2592) **(install)** add gptme.ai/install.sh one-liner installer
34+
- [gptme#2593](https://github.com/gptme/gptme/pull/2593) **(eval)** check subagent waited for completion before stating result
35+
- [gptme#2598](https://github.com/gptme/gptme/pull/2598) **(eval-ci)** expand quality gate from 3 to 5 tests
36+
- [gptme#2599](https://github.com/gptme/gptme/pull/2599) **(cli)** prompt inline gptme auth on first use
37+
- [gptme#2601](https://github.com/gptme/gptme/pull/2601) **(cli)** list dynamic models for gptme provider
38+
- [gptme#2603](https://github.com/gptme/gptme/pull/2603) **(llm)** add gptme.ai as provider alias for gptme
39+
- [gptme#2604](https://github.com/gptme/gptme/pull/2604) **(lessons)** load manifest-backed skills lazily from index.json
40+
- [gptme#2614](https://github.com/gptme/gptme/pull/2614) **(server)** add --webui-dir flag to serve a custom web UI build
41+
- [gptme#2617](https://github.com/gptme/gptme/pull/2617) **(llm)** add Claude Opus 4.8 model support
42+
- [gptme#2622](https://github.com/gptme/gptme/pull/2622) **(hooks)** emit aw-watcher tool activity heartbeats
43+
- [gptme#2629](https://github.com/gptme/gptme/pull/2629) **(models)** add DeepSeek V4 Pro/Flash/Flash:free via OpenRouter
44+
- [gptme#2632](https://github.com/gptme/gptme/pull/2632) add gptme init command for project scaffolding
45+
- [gptme#2633](https://github.com/gptme/gptme/pull/2633) **(server)** bundle modern webui into package (gptme#2612 Part 2)
46+
- [gptme#2634](https://github.com/gptme/gptme/pull/2634) **(tools)** add atomic patch_many tool
47+
- [gptme#2636](https://github.com/gptme/gptme/pull/2636) **(server)** add conversation artifact registry API (#830 Phase 1)
48+
- [gptme#2637](https://github.com/gptme/gptme/pull/2637) **(webui)** add artifacts sidebar panel and registry
49+
- [gptme#2638](https://github.com/gptme/gptme/pull/2638) **(server)** consume tool-declared artifact descriptors from message metadata (#830 Phase 2)
50+
- [gptme#2639](https://github.com/gptme/gptme/pull/2639) **(tools/computer)** emit artifact descriptors on screenshot (#830 Phase 2 producers)
51+
- [gptme#2640](https://github.com/gptme/gptme/pull/2640) **(webui)** sandboxed iframe panel primitive (#830 Phase 3)
52+
- [gptme#2641](https://github.com/gptme/gptme/pull/2641) **(webui)** wire panel_hints into sidebar as iframe panels (#830 Phase 3b)
53+
- [gptme#2643](https://github.com/gptme/gptme/pull/2643) **(webui)** conversation-level session cost summary
54+
- [gptme-contrib#984](https://github.com/gptme/gptme-contrib/pull/984) **(gptme-sessions)** add replay command
55+
- [gptme-contrib#996](https://github.com/gptme/gptme-contrib/pull/996) **(sessions)** extract span_aggregates for codex trajectories
56+
- [gptme-contrib#1006](https://github.com/gptme/gptme-contrib/pull/1006) **(context)** add repo-map.py — portable repo-map generation via gptme-codegraph
57+
- [gptme-contrib#1007](https://github.com/gptme/gptme-contrib/pull/1007) **(aw-watcher-agent)** Codex log-tailer for per-tool activity heartbeats
58+
- [gptme-contrib#1009](https://github.com/gptme/gptme-contrib/pull/1009) **(aw-watcher-agent)** add emit-activity command
59+
- [gptme-contrib#1012](https://github.com/gptme/gptme-contrib/pull/1012) **(codegraph)** add committed repo-map artifact CLI
60+
- [gptme-contrib#1013](https://github.com/gptme/gptme-contrib/pull/1013) **(sessions)** add regex-based LLM smell detector
61+
- [gptme-contrib#1025](https://github.com/gptme/gptme-contrib/pull/1025) **(codegraph)** extract call graph from Rust function bodies
62+
63+
## Bug Fixes
64+
65+
- [gptme#2531](https://github.com/gptme/gptme/pull/2531) **(server)** validate agent creation field types
66+
- [gptme#2532](https://github.com/gptme/gptme/pull/2532) **(webui)** keep api misses out of SPA fallback
67+
- [gptme#2533](https://github.com/gptme/gptme/pull/2533) **(cli)** validate custom tool paths before init
68+
- [gptme#2534](https://github.com/gptme/gptme/pull/2534) **(webui)** restore hosted deep links on Pages
69+
- [gptme#2535](https://github.com/gptme/gptme/pull/2535) **(server)** reject non-string step models
70+
- [gptme#2536](https://github.com/gptme/gptme/pull/2536) **(cli)** reject unsafe /fork conversation ids
71+
- [gptme#2537](https://github.com/gptme/gptme/pull/2537) **(cli)** keep json-mode logs off stdout
72+
- [gptme#2538](https://github.com/gptme/gptme/pull/2538) **(server)** reject invalid chat config path types
73+
- [gptme#2539](https://github.com/gptme/gptme/pull/2539) **(cli)** reject unsafe /fork names
74+
- [gptme#2540](https://github.com/gptme/gptme/pull/2540) **(cli)** remove dead logdirs on startup validation
75+
- [gptme#2541](https://github.com/gptme/gptme/pull/2541) **(server)** reject non-string elicit ids
76+
- [gptme#2542](https://github.com/gptme/gptme/pull/2542) **(cli)** accept -t=value tool syntax
77+
- [gptme#2543](https://github.com/gptme/gptme/pull/2543) **(cli)** keep slash commands on json rail
78+
- [gptme#2544](https://github.com/gptme/gptme/pull/2544) **(cli)** avoid full conversation scans on resume
79+
- [gptme#2545](https://github.com/gptme/gptme/pull/2545) **(server)** reject non-string session ids
80+
- [gptme#2548](https://github.com/gptme/gptme/pull/2548) **(cli)** allow --output-format json after headless auto-switch
81+
- [gptme#2550](https://github.com/gptme/gptme/pull/2550) **(telemetry)** honor OTEL_EXPORTER_OTLP_TIMEOUT for export and flush
82+
- [gptme#2551](https://github.com/gptme/gptme/pull/2551) **(webui)** render a NotFound page for unmatched client-side routes
83+
- [gptme#2552](https://github.com/gptme/gptme/pull/2552) **(logmanager)** clamp over-large conversation limit to avoid islice crash
84+
- [gptme#2554](https://github.com/gptme/gptme/pull/2554) **(cli)** preserve custom tool file allowlists
85+
- [gptme#2555](https://github.com/gptme/gptme/pull/2555) **(cli)** validate architect/editor model names with clean usage error
86+
- [gptme#2556](https://github.com/gptme/gptme/pull/2556) **(server)** reject null bytes in conversation IDs and branch names
87+
- [gptme#2558](https://github.com/gptme/gptme/pull/2558) **(models)** dedup 'Unknown model' warning via log_warn_once
88+
- [gptme#2559](https://github.com/gptme/gptme/pull/2559) **(json)** keep runtime stdout pure in JSON mode
89+
- [gptme#2560](https://github.com/gptme/gptme/pull/2560) **(webui)** retire dead cloud preset URL
90+
- [gptme#2561](https://github.com/gptme/gptme/pull/2561) **(cli)** scope unnamed resume to workspace
91+
- [gptme#2562](https://github.com/gptme/gptme/pull/2562) **(server)** reject malformed JSON before field validation
92+
- [gptme#2563](https://github.com/gptme/gptme/pull/2563) **(cli)** reject missing explicit path prompts early
93+
- [gptme#2564](https://github.com/gptme/gptme/pull/2564) **(server)** reject malformed project_config sections
94+
- [gptme#2565](https://github.com/gptme/gptme/pull/2565) **(cli)** scope implicit resume to cwd workspace
95+
- [gptme#2566](https://github.com/gptme/gptme/pull/2566) **(cli)** validate custom tool paths before startup
96+
- [gptme#2567](https://github.com/gptme/gptme/pull/2567) **(cli)** keep unknown profile errors off stdout
97+
- [gptme#2568](https://github.com/gptme/gptme/pull/2568) **(webui)** skip hosted loopback auto-connect
98+
- [gptme#2569](https://github.com/gptme/gptme/pull/2569) **(cli)** reject missing path args before prompt merge
99+
- [gptme#2571](https://github.com/gptme/gptme/pull/2571) **(cli)** reject malformed --output-schema with a usage error
100+
- [gptme#2573](https://github.com/gptme/gptme/pull/2573) **(hooks)** tolerate session-end trigger kwargs
101+
- [gptme#2574](https://github.com/gptme/gptme/pull/2574) **(server)** reject non-string conversation prompt
102+
- [gptme#2575](https://github.com/gptme/gptme/pull/2575) **(cli)** raise UsageError for unknown model in llm generate
103+
- [gptme#2576](https://github.com/gptme/gptme/pull/2576) **(server)** correct upload path field description and add upload tests
104+
- [gptme#2577](https://github.com/gptme/gptme/pull/2577) **(cli)** raise UsageError for empty --model string
105+
- [gptme#2578](https://github.com/gptme/gptme/pull/2578) **(util-cli)** prepend system message in llm generate
106+
- [gptme#2579](https://github.com/gptme/gptme/pull/2579) **(server)** reject invalid message tool allowlists
107+
- [gptme#2580](https://github.com/gptme/gptme/pull/2580) **(util-cli)** keep tools info JSON machine-readable
108+
- [gptme#2581](https://github.com/gptme/gptme/pull/2581) **(server)** reject whitespace-only upload filenames; return 404 for nonexistent workspace subpaths
109+
- [gptme#2582](https://github.com/gptme/gptme/pull/2582) **(server)** propagate ContextVars into background threads
110+
- [gptme#2583](https://github.com/gptme/gptme/pull/2583) **(server)** reject non-string transcript call_sid
111+
- [gptme#2584](https://github.com/gptme/gptme/pull/2584) **(cli)** reject whitespace-only prompts in non-interactive mode
112+
- [gptme#2587](https://github.com/gptme/gptme/pull/2587) **(server)** return 'Branch not found' when POST targets a non-existent branch
113+
- [gptme#2589](https://github.com/gptme/gptme/pull/2589) **(cli)** reject whitespace-only conversation names
114+
- [gptme#2590](https://github.com/gptme/gptme/pull/2590) **(server)** block /edit command in server mode
115+
- [gptme#2591](https://github.com/gptme/gptme/pull/2591) **(hooks)** never crash gptme-util hooks run on malformed CC event JSON
116+
- [gptme#2594](https://github.com/gptme/gptme/pull/2594) **(cli)** expand tilde in --workspace paths
117+
- [gptme#2595](https://github.com/gptme/gptme/pull/2595) **(server)** validate tools field type before calling init_tools
118+
- [gptme#2596](https://github.com/gptme/gptme/pull/2596) **(cli)** reject shell-hostile conversation names
119+
- [gptme#2597](https://github.com/gptme/gptme/pull/2597) **(server)** validate config patch tool allowlist
120+
- [gptme#2600](https://github.com/gptme/gptme/pull/2600) **(install)** error on missing TTY instead of silently assuming yes
121+
- [gptme#2605](https://github.com/gptme/gptme/pull/2605) **(llm)** stop tool-format streams without newline
122+
- [gptme#2606](https://github.com/gptme/gptme/pull/2606) **(autocompact)** preserve tool-call messages
123+
- [gptme#2607](https://github.com/gptme/gptme/pull/2607) **(cli)** suppress resume hint after fatal exit
124+
- [gptme#2608](https://github.com/gptme/gptme/pull/2608) **(server)** validate stream and tool-confirm action inputs
125+
- [gptme#2609](https://github.com/gptme/gptme/pull/2609) **(webui)** cross-tab sync for server registry after cloud sign-in
126+
- [gptme#2610](https://github.com/gptme/gptme/pull/2610) **(webui)** refresh stale fallback model to claude-sonnet-4-6
127+
- [gptme#2615](https://github.com/gptme/gptme/pull/2615) **(webui)** hint when hosted chat hits loopback without CORS
128+
- [gptme#2619](https://github.com/gptme/gptme/pull/2619) **(server)** avoid full JSONL scan in agents listing endpoint
129+
- [gptme#2623](https://github.com/gptme/gptme/pull/2623) **(webui)** tag loopback requests correctly
130+
- [gptme#2624](https://github.com/gptme/gptme/pull/2624) **(webui)** handle cloud auth postMessage handoff from popup
131+
- [gptme#2625](https://github.com/gptme/gptme/pull/2625) **(computer)** handle missing/timed-out ImageMagick convert in screenshot resize
132+
- [gptme#2627](https://github.com/gptme/gptme/pull/2627) **(test)** use CliRunner instead of subprocess in TestModelsInfo to prevent CI timeouts
133+
- [gptme#2628](https://github.com/gptme/gptme/pull/2628) **(util-cli)** reject empty --model in llm generate
134+
- [gptme#2630](https://github.com/gptme/gptme/pull/2630) **(server)** strip whitespace from session_id before emptiness check
135+
- [gptme#2635](https://github.com/gptme/gptme/pull/2635) **(server)** emit Access-Control-Allow-Private-Network on CORS preflight
136+
- [gptme#2642](https://github.com/gptme/gptme/pull/2642) **(cli)** clearer error when calling execute-only tools via 'tools call'
137+
- [gptme-contrib#981](https://github.com/gptme/gptme-contrib/pull/981) **(twitter)** block dead blog links before posting
138+
- [gptme-contrib#983](https://github.com/gptme/gptme-contrib/pull/983) **(gptmail)** support recipient aliases
139+
- [gptme-contrib#985](https://github.com/gptme/gptme-contrib/pull/985) **(subscription)** protect manual --switch with a hold
140+
- [gptme-contrib#986](https://github.com/gptme/gptme-contrib/pull/986) **(voice)** surface subagent timeouts clearly, filter SIGPIPE shell noise
141+
- [gptme-contrib#987](https://github.com/gptme/gptme-contrib/pull/987) **(gptodo)** accept date-only created field in task validation
142+
- [gptme-contrib#988](https://github.com/gptme/gptme-contrib/pull/988) **(twitter)** add placeholder guard to prevent literal placeholder text in posts
143+
- [gptme-contrib#989](https://github.com/gptme/gptme-contrib/pull/989) **(twitter)** preserve workspace persona in reply prompt
144+
- [gptme-contrib#990](https://github.com/gptme/gptme-contrib/pull/990) **(resolver)** route provider key by prefix, not hardcoded OPENAI_API_KEY
145+
- [gptme-contrib#991](https://github.com/gptme/gptme-contrib/pull/991) **(gptmail)** make completion-status CLI read from the conversation tracker
146+
- [gptme-contrib#992](https://github.com/gptme/gptme-contrib/pull/992) **(project-monitoring)** serialize should_post_comment with flock to prevent duplicate comments
147+
- [gptme-contrib#993](https://github.com/gptme/gptme-contrib/pull/993) **(resolver)** stage helper checkout inside workspace first
148+
- [gptme-contrib#994](https://github.com/gptme/gptme-contrib/pull/994) **(resolver)** harden branch safety and strip agent creds
149+
- [gptme-contrib#995](https://github.com/gptme/gptme-contrib/pull/995) **(news)** drop empty keywords in trending --filter parsing
150+
- [gptme-contrib#997](https://github.com/gptme/gptme-contrib/pull/997) **(sessions)** merge codex trajectory_ref sidecar into SessionRecord before span aggregation
151+
- [gptme-contrib#999](https://github.com/gptme/gptme-contrib/pull/999) **(resolver)** restore job.workflow_sha for cross-repo reusable workflow
152+
- [gptme-contrib#1000](https://github.com/gptme/gptme-contrib/pull/1000) **(resolver)** install gptme with --prerelease=allow to support avatar field
153+
- [gptme-contrib#1001](https://github.com/gptme/gptme-contrib/pull/1001) **(lessons)** expand avoid-deep-nesting keywords to match natural usage
154+
- [gptme-contrib#1002](https://github.com/gptme/gptme-contrib/pull/1002) **(dashboard)** show "N of TOTAL" when summaries are capped
155+
- [gptme-contrib#1003](https://github.com/gptme/gptme-contrib/pull/1003) **(twitter)** preserve content from legacy `tweet:` key drafts
156+
- [gptme-contrib#1004](https://github.com/gptme/gptme-contrib/pull/1004) **(subscription)** make usage tracking robust across credential switches
157+
- [gptme-contrib#1005](https://github.com/gptme/gptme-contrib/pull/1005) **(resolver)** lower gptme version floor to >=0.31.1.dev0
158+
- [gptme-contrib#1011](https://github.com/gptme/gptme-contrib/pull/1011) **(rss)** report network failures as fetch errors, not parse errors
159+
- [gptme-contrib#1014](https://github.com/gptme/gptme-contrib/pull/1014) **(codegraph)** pin committed repo-map directory to '.' for portability
160+
- [gptme-contrib#1015](https://github.com/gptme/gptme-contrib/pull/1015) **(lessons)** remove 4 dead keywords (zero match in full trajectory window)
161+
- [gptme-contrib#1016](https://github.com/gptme/gptme-contrib/pull/1016) **(resolver)** prompt model to validate patch success and retry on failure
162+
- [gptme-contrib#1017](https://github.com/gptme/gptme-contrib/pull/1017) **(resolver)** require reading files before patching
163+
- [gptme-contrib#1018](https://github.com/gptme/gptme-contrib/pull/1018) **(resolver)** reclassify status to error when all patch tools failed despite dirty worktree
164+
- [gptme-contrib#1019](https://github.com/gptme/gptme-contrib/pull/1019) **(resolver)** use plain push for new branches, --force-with-lease for existing
165+
- [gptme-contrib#1021](https://github.com/gptme/gptme-contrib/pull/1021) **(resolver)** don't treat every gh pr create failure as 'PR already exists'
166+
- [gptme-contrib#1022](https://github.com/gptme/gptme-contrib/pull/1022) **(validation)** detect and validate SKILL.md files instead of flagging them as broken lessons
167+
- [gptme-contrib#1023](https://github.com/gptme/gptme-contrib/pull/1023) **(resolver)** probe for existing PR explicitly instead of matching gh stderr
168+
- [gptme-contrib#1026](https://github.com/gptme/gptme-contrib/pull/1026) **(sessions)** atomic write + corrupt-tail repair for store.append()
169+
170+
## Refactors
171+
172+
- [gptme-contrib#982](https://github.com/gptme/gptme-contrib/pull/982) **(twitter)** extract URL validator to shared url_utils module
173+
174+
## Documentation
175+
176+
- [gptme#2611](https://github.com/gptme/gptme/pull/2611) **(skills)** note Agent Skills open standard conformance
177+
- [gptme#2616](https://github.com/gptme/gptme/pull/2616) improve examples page with subsections and advanced workflows
178+
- [gptme-contrib#980](https://github.com/gptme/gptme-contrib/pull/980) **(readme)** add gptme-codegraph to packages table
179+
- [gptme-contrib#1010](https://github.com/gptme/gptme-contrib/pull/1010) **(codegraph)** add 'when to use' decision rule (codegraph vs grep vs semantic)
180+
181+
---
182+
183+
*142 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)*
92.5 KB
Loading

0 commit comments

Comments
 (0)