Projects

Things I've built, and fixes I've sent upstream.

Contribution activity

3,239 contributions in the last year

Contributions
3,239past year
Streak
26 dayscurrent
Best streak
26 dayspast year
Active days
230of 370
Peak day
Aug 23100 contributions
Public repos
80
Stars earned
2
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri4 contributions on Sep 7, 20251 contribution on Sep 8, 20252 contributions on Sep 9, 20251 contribution on Sep 10, 2025No contributions on Sep 11, 20253 contributions on Sep 12, 20251 contribution on Sep 13, 20251 contribution on Sep 14, 2025No contributions on Sep 15, 2025No contributions on Sep 16, 20251 contribution on Sep 17, 2025No contributions on Sep 18, 2025No contributions on Sep 19, 20251 contribution on Sep 20, 2025No contributions on Sep 21, 20255 contributions on Sep 22, 20251 contribution on Sep 23, 2025No contributions on Sep 24, 20251 contribution on Sep 25, 20251 contribution on Sep 26, 2025No contributions on Sep 27, 20253 contributions on Sep 28, 2025No contributions on Sep 29, 2025No contributions on Sep 30, 2025No contributions on Oct 1, 2025No contributions on Oct 2, 2025No contributions on Oct 3, 2025No contributions on Oct 4, 2025No contributions on Oct 5, 20251 contribution on Oct 6, 2025No contributions on Oct 7, 2025No contributions on Oct 8, 2025No contributions on Oct 9, 20252 contributions on Oct 10, 2025No contributions on Oct 11, 20251 contribution on Oct 12, 2025No contributions on Oct 13, 2025No contributions on Oct 14, 2025No contributions on Oct 15, 2025No contributions on Oct 16, 2025No contributions on Oct 17, 2025No contributions on Oct 18, 2025No contributions on Oct 19, 2025No contributions on Oct 20, 20251 contribution on Oct 21, 20251 contribution on Oct 22, 2025No contributions on Oct 23, 202523 contributions on Oct 24, 2025No contributions on Oct 25, 2025No contributions on Oct 26, 2025No contributions on Oct 27, 2025No contributions on Oct 28, 20251 contribution on Oct 29, 2025No contributions on Oct 30, 2025No contributions on Oct 31, 2025No contributions on Nov 1, 2025No contributions on Nov 2, 2025No contributions on Nov 3, 2025No contributions on Nov 4, 2025No contributions on Nov 5, 2025No contributions on Nov 6, 2025No contributions on Nov 7, 2025No contributions on Nov 8, 2025No contributions on Nov 9, 2025No contributions on Nov 10, 2025No contributions on Nov 11, 2025No contributions on Nov 12, 2025No contributions on Nov 13, 2025No contributions on Nov 14, 2025No contributions on Nov 15, 2025No contributions on Nov 16, 2025No contributions on Nov 17, 2025No contributions on Nov 18, 2025No contributions on Nov 19, 2025No contributions on Nov 20, 2025No contributions on Nov 21, 2025No contributions on Nov 22, 2025No contributions on Nov 23, 2025No contributions on Nov 24, 2025No contributions on Nov 25, 2025No contributions on Nov 26, 2025No contributions on Nov 27, 2025No contributions on Nov 28, 2025No contributions on Nov 29, 2025No contributions on Nov 30, 20258 contributions on Dec 1, 20256 contributions on Dec 2, 20251 contribution on Dec 3, 2025No contributions on Dec 4, 202513 contributions on Dec 5, 2025No contributions on Dec 6, 2025No contributions on Dec 7, 20252 contributions on Dec 8, 2025No contributions on Dec 9, 20251 contribution on Dec 10, 20254 contributions on Dec 11, 202518 contributions on Dec 12, 2025No contributions on Dec 13, 20251 contribution on Dec 14, 20256 contributions on Dec 15, 20252 contributions on Dec 16, 2025No contributions on Dec 17, 20257 contributions on Dec 18, 2025No contributions on Dec 19, 2025No contributions on Dec 20, 2025No contributions on Dec 21, 2025No contributions on Dec 22, 2025No contributions on Dec 23, 2025No contributions on Dec 24, 2025No contributions on Dec 25, 2025No contributions on Dec 26, 2025No contributions on Dec 27, 2025No contributions on Dec 28, 2025No contributions on Dec 29, 2025No contributions on Dec 30, 202512 contributions on Dec 31, 2025No contributions on Jan 1, 20263 contributions on Jan 2, 2026No contributions on Jan 3, 20261 contribution on Jan 4, 2026No contributions on Jan 5, 20266 contributions on Jan 6, 202611 contributions on Jan 7, 20262 contributions on Jan 8, 2026No contributions on Jan 9, 20266 contributions on Jan 10, 2026No contributions on Jan 11, 20269 contributions on Jan 12, 2026No contributions on Jan 13, 20266 contributions on Jan 14, 2026No contributions on Jan 15, 20268 contributions on Jan 16, 2026No contributions on Jan 17, 202638 contributions on Jan 18, 2026No contributions on Jan 19, 20265 contributions on Jan 20, 20265 contributions on Jan 21, 2026No contributions on Jan 22, 20263 contributions on Jan 23, 2026No contributions on Jan 24, 2026No contributions on Jan 25, 20263 contributions on Jan 26, 20262 contributions on Jan 27, 2026No contributions on Jan 28, 2026No contributions on Jan 29, 20263 contributions on Jan 30, 2026No contributions on Jan 31, 2026No contributions on Feb 1, 20268 contributions on Feb 2, 20263 contributions on Feb 3, 20267 contributions on Feb 4, 20266 contributions on Feb 5, 20263 contributions on Feb 6, 2026No contributions on Feb 7, 2026No contributions on Feb 8, 20266 contributions on Feb 9, 20266 contributions on Feb 10, 20264 contributions on Feb 11, 20261 contribution on Feb 12, 20265 contributions on Feb 13, 2026No contributions on Feb 14, 2026No contributions on Feb 15, 202615 contributions on Feb 16, 202612 contributions on Feb 17, 20265 contributions on Feb 18, 20264 contributions on Feb 19, 20263 contributions on Feb 20, 2026No contributions on Feb 21, 2026No contributions on Feb 22, 202613 contributions on Feb 23, 202629 contributions on Feb 24, 202611 contributions on Feb 25, 20265 contributions on Feb 26, 20268 contributions on Feb 27, 2026No contributions on Feb 28, 20264 contributions on Mar 1, 202617 contributions on Mar 2, 202620 contributions on Mar 3, 202613 contributions on Mar 4, 20267 contributions on Mar 5, 202612 contributions on Mar 6, 20261 contribution on Mar 7, 2026No contributions on Mar 8, 20267 contributions on Mar 9, 202613 contributions on Mar 10, 202618 contributions on Mar 11, 20266 contributions on Mar 12, 202620 contributions on Mar 13, 20261 contribution on Mar 14, 2026No contributions on Mar 15, 202616 contributions on Mar 16, 202618 contributions on Mar 17, 202613 contributions on Mar 18, 20267 contributions on Mar 19, 202613 contributions on Mar 20, 20261 contribution on Mar 21, 20263 contributions on Mar 22, 202634 contributions on Mar 23, 202621 contributions on Mar 24, 20269 contributions on Mar 25, 202615 contributions on Mar 26, 20268 contributions on Mar 27, 2026No contributions on Mar 28, 2026No contributions on Mar 29, 202623 contributions on Mar 30, 202612 contributions on Mar 31, 202655 contributions on Apr 1, 202619 contributions on Apr 2, 202633 contributions on Apr 3, 2026No contributions on Apr 4, 202628 contributions on Apr 5, 202610 contributions on Apr 6, 202620 contributions on Apr 7, 202626 contributions on Apr 8, 202628 contributions on Apr 9, 202624 contributions on Apr 10, 2026No contributions on Apr 11, 2026No contributions on Apr 12, 20263 contributions on Apr 13, 202610 contributions on Apr 14, 20264 contributions on Apr 15, 20264 contributions on Apr 16, 20268 contributions on Apr 17, 20268 contributions on Apr 18, 20268 contributions on Apr 19, 202626 contributions on Apr 20, 20264 contributions on Apr 21, 202614 contributions on Apr 22, 202620 contributions on Apr 23, 202639 contributions on Apr 24, 20268 contributions on Apr 25, 202619 contributions on Apr 26, 20264 contributions on Apr 27, 2026No contributions on Apr 28, 20262 contributions on Apr 29, 202615 contributions on Apr 30, 202613 contributions on May 1, 20263 contributions on May 2, 20266 contributions on May 3, 20263 contributions on May 4, 20267 contributions on May 5, 20265 contributions on May 6, 202611 contributions on May 7, 20268 contributions on May 8, 20261 contribution on May 9, 20261 contribution on May 10, 20264 contributions on May 11, 20262 contributions on May 12, 202611 contributions on May 13, 202618 contributions on May 14, 202613 contributions on May 15, 20265 contributions on May 16, 20269 contributions on May 17, 202623 contributions on May 18, 202612 contributions on May 19, 2026No contributions on May 20, 20261 contribution on May 21, 20262 contributions on May 22, 20261 contribution on May 23, 2026No contributions on May 24, 20264 contributions on May 25, 20261 contribution on May 26, 2026No contributions on May 27, 2026No contributions on May 28, 2026No contributions on May 29, 2026No contributions on May 30, 2026No contributions on May 31, 20261 contribution on Jun 1, 2026No contributions on Jun 2, 2026No contributions on Jun 3, 2026No contributions on Jun 4, 2026No contributions on Jun 5, 2026No contributions on Jun 6, 2026No contributions on Jun 7, 2026No contributions on Jun 8, 2026No contributions on Jun 9, 2026No contributions on Jun 10, 2026No contributions on Jun 11, 2026No contributions on Jun 12, 2026No contributions on Jun 13, 2026No contributions on Jun 14, 20261 contribution on Jun 15, 20263 contributions on Jun 16, 202616 contributions on Jun 17, 202623 contributions on Jun 18, 202618 contributions on Jun 19, 20263 contributions on Jun 20, 20261 contribution on Jun 21, 202610 contributions on Jun 22, 20261 contribution on Jun 23, 20265 contributions on Jun 24, 20265 contributions on Jun 25, 202614 contributions on Jun 26, 2026No contributions on Jun 27, 2026No contributions on Jun 28, 202644 contributions on Jun 29, 202656 contributions on Jun 30, 202611 contributions on Jul 1, 202619 contributions on Jul 2, 2026No contributions on Jul 3, 20264 contributions on Jul 4, 202661 contributions on Jul 5, 202648 contributions on Jul 6, 202623 contributions on Jul 7, 202610 contributions on Jul 8, 202630 contributions on Jul 9, 20266 contributions on Jul 10, 20262 contributions on Jul 11, 2026No contributions on Jul 12, 202615 contributions on Jul 13, 202620 contributions on Jul 14, 20266 contributions on Jul 15, 202615 contributions on Jul 16, 202624 contributions on Jul 17, 20261 contribution on Jul 18, 2026No contributions on Jul 19, 202618 contributions on Jul 20, 202684 contributions on Jul 21, 20265 contributions on Jul 22, 20263 contributions on Jul 23, 202631 contributions on Jul 24, 20265 contributions on Jul 25, 2026No contributions on Jul 26, 20267 contributions on Jul 27, 20268 contributions on Jul 28, 202613 contributions on Jul 29, 202614 contributions on Jul 30, 202622 contributions on Jul 31, 20261 contribution on Aug 1, 20263 contributions on Aug 2, 202616 contributions on Aug 3, 202627 contributions on Aug 4, 202643 contributions on Aug 5, 202633 contributions on Aug 6, 202625 contributions on Aug 7, 20265 contributions on Aug 8, 20268 contributions on Aug 9, 20269 contributions on Aug 10, 202627 contributions on Aug 11, 202619 contributions on Aug 12, 202624 contributions on Aug 13, 202612 contributions on Aug 14, 20263 contributions on Aug 15, 2026No contributions on Aug 16, 202612 contributions on Aug 17, 20268 contributions on Aug 18, 202650 contributions on Aug 19, 202671 contributions on Aug 20, 2026100 contributions on Aug 21, 202689 contributions on Aug 22, 2026100 contributions on Aug 23, 202657 contributions on Aug 24, 202618 contributions on Aug 25, 202615 contributions on Aug 26, 202633 contributions on Aug 27, 202613 contributions on Aug 28, 20261 contribution on Aug 29, 202630 contributions on Aug 30, 202660 contributions on Aug 31, 202637 contributions on Sep 1, 202656 contributions on Sep 2, 202615 contributions on Sep 3, 20262 contributions on Sep 4, 20261 contribution on Sep 5, 20266 contributions on Sep 6, 20264 contributions on Sep 7, 202611 contributions on Sep 8, 202632 contributions on Sep 9, 202611 contributions on Sep 10, 20262 contributions on Sep 11, 2026

Flagship

The project I'd want to be read on.

irrevon

Apache-2.0PyPI 0.1.0 AlphaPython 3.13+

Evidence-first reconciliation for irreversible AI-agent actions.

An agent asks an API to create a payment, shipment, or booking. The destination commits, the response is lost, and no retry is safe. Irrevon persists intent before dispatch, keeps ambiguity as a first-class state, and reconciles against what the destination actually says happened.

PythonPostgreSQLRFC 8785 JCSAstro

Projects

Open source

Fixes sent upstream to projects I build on. Landed work is listed separately from work still in review, and each block is ordered by the upstream repo's star count, so the ranking is a stated rule rather than my own estimate of what matters.

2 merged1 co-authored8 in review9 repos124k combined upstream stars

Landedshipped on the project's default branch

  • openai/openai-agents-pythonFixed three concurrency and tracing faults in the agent run path28.4k2 merged · 1 co-authoredAug 2026

    OpenAI's framework for building and running multi-agent workflows.

    Every model provider now records a failed call on its own span, so a failure through Chat Completions, LiteLLM, or AnyLLM is no longer indistinguishable from a clean turn, with a shared context manager keeping the eight call sites from drifting apart. A failing branch of a concurrent fan-out now cancels and drains its siblings, so a failed turn stops leaving shell commands running and patches being written, including the sandbox env resolvers where a rejected secret lookup used to leave the others in flight.

    Pythonasyncio

In review8 repos

  • openai/openai-pythonProposed preserving custom tool calls through parse and serialization31.3kOpenAug 2026

    The official OpenAI Python SDK, used across a large share of apps built on the OpenAI API.

    The chat-completions parse() helper logged a warning and then dropped every custom tool call, so a call the model made vanished from the parsed result. Appending it was only half the fix: the parsed message type narrowed tool_calls to function calls, and pydantic serializes by the declared type, so a whole-completion dump silently lost the custom payload and would not validate back.

    Pythonpydantic
  • openai/gpt-ossProposed a domain-parsing fix for scheme-less hosts in the browser tool20.3kOpenJul 2026

    OpenAI's open-weight GPT-OSS models and their reference tooling.

    The browser tool decided whether a URL already carried a scheme by searching the string, so bare hosts containing "http" (httpbin.org) resolved to an empty domain and same-site links were mislabeled as external. Asking the parser first and only prepending when the host is empty avoids guessing where the separator is.

    Python
  • livekit/agentsProposed tolerating unparseable stored tool-call arguments12.5kOpenJul 2026

    The real-time voice-agent framework behind ChatGPT voice mode.

    The Anthropic, Google, and AWS chat formatters re-parsed stored tool-call arguments on every turn, so one malformed call from an earlier turn broke the agent on its next one. The change tolerates the bad entry rather than failing the whole conversation.

    Pythonasyncio
  • simonw/datasetteProposed NOT NULL enforcement for primary keys created via the write API11.4kOpenAug 2026

    A widely-used open-source tool for exploring and publishing data.

    Text and composite primary keys created through the JSON write API were nullable, allowing rows whose keys cannot be viewed, edited, or deleted. The check also had to match primary key names case-insensitively, since SQLite resolves identifiers that way and a differently-cased key slipped past the first version.

    PythonSQLite
  • anthropics/claude-agent-sdk-pythonProposed a clearer error for list-form system prompts7.8kOpenAug 2026

    Anthropic's official Python SDK for building agents on Claude.

    The SDK accepted a list-form system_prompt and then failed with an opaque downstream error. The change raises an actionable error at the boundary instead. A second proposal, keying the reference session store structurally so components containing the path separator cannot alias a different logical session, was withdrawn in favour of an earlier PR by another contributor; the collision analysis went there instead.

    Python
  • python-attrs/attrsProposed matching attribute filters by identity rather than equality5.8kOpenJul 2026

    The Python library for writing classes without boilerplate.

    Attribute filters (include/exclude) compared Attribute instances by equality, so identically-named fields on different classes were treated as the same field when building asdict/astuple output. Matching on identity keeps them distinct.

    Python
  • anthropics/anthropic-sdk-pythonProposed two durability fixes in the Managed Agents runtime3.8kOpenJul 2026

    Anthropic's official Python SDK for the Claude API.

    The session tool runner re-executed a tool when a stream reconnect followed a failed result post, turning an at-most-once contract into at-least-once. Separately, the environments work poller can now defer its acknowledgement, so a handoff that dies before its first heartbeat stays reclaimable instead of stranded.

    Pythonasyncio
  • UKGovernmentBEIS/inspect_aiProposed recording model hidden states as JSON-serializable lists2.5kOpenAug 2026

    The UK AI Safety Institute's framework for large language model evaluations.

    Hidden states requested via -M hidden_states were dropped to None when the log was written, because tensors are not JSON-serializable. The change records them as nested lists and slices each sample out of the batched Hugging Face path so a sample carries its own activations rather than the whole batch.

    PythonPyTorch