Open source

Patches I sent upstream.

Most of what I use daily is open-source, so when something breaks I fix it upstream rather than fork-and-forget. These are the contributions that landed — a mix of one-line embarrassments and multi-file rewritings.

7merged upstream
4projects
2023first contribution
2open proposals

Where it started / 01

The first patch that landed in someone else's repository.

Merged upstream / 02

Bug fixes and features accepted into projects I use daily — agent runtimes, research tooling, GUI automation.

OPENCLAW · GATEWAYMERGED
Per-model cooldown scope, stepped backoff, and a real rate-limit message
On a shared auth profile, one model hitting a rate limit took every other model down with it. Scoped cooldowns per-model, replaced the 1m→1h exponential escalation with a capped 30s→5m ladder, added an actual error message.
openclaw/openclaw#49834+647 / −34 · 14 files
View the pull request
OPENCLAW · SESSIONSMERGED
Distinguish user model switches from system fallbacks
LiveSessionModelSwitchError couldn't tell apart a user typing /model, an automatic 429 fallback, and a heartbeat override. All three looked identical, so legitimate fallbacks got misclassified. Added the disambiguation.
openclaw/openclaw#60266+423 / −19 · 13 files
View the pull request
OPENCLAW · SESSIONSMERGED
Write the transcript header when a reset lands on an empty window
A session row can exist before its transcript has events. A reset at that moment claims sequence zero, no header ever gets written, and the next turn dies with a cryptic migration error. Fix: write the header first.
openclaw/openclaw#125336+574 / −63 · 17 files
View the pull request
OPENCLAW · AGENTSMERGED
Recover the catalog worker after a generation mismatch
A transient catalog fingerprint mismatch permanently wedged a worker — it cached one preparation promise for its entire lifetime, so once that promise rejected, every subsequent request replayed the same cached failure.
openclaw/openclaw#127712+296 / −33 · 3 files
View the pull request
GPT-RESEARCHER · STREAMINGMERGED
Skip empty LLM streaming chunks and flush stdout
Reasoning models emit hundreds of empty streaming chunks before real content. The null check passed for empty strings, nothing accumulated, and users watched two minutes of silence. Eight lines changed.
assafelovic/gpt-researcher#1737+8 / −7 · 1 file
View the pull request
AUTOMATE · GUI AGENTSMERGED
Cloud vision — screen parsing and action reasoning without a local GPU
Five MCP tools for GUI automation with zero local GPU — screen parsing and action reasoning run entirely on HuggingFace Inference Endpoints. Configurable via env vars for any OmniParser-compatible parser and OpenAI-compatible vision model. Addressed several open feature requests.
yuruotong1/autoMate#151+1,015 · 4 files
View the pull request

Open proposals / 03

Sent, not yet merged. Linked so you can read the discussion as it happens.

Profiles / 04

Two accounts: upstream contributions and teaching repositories.