andrewyng/aisuitePublic

Simple, unified interface to multiple Generative AI providers

AI summary: A unified, simple Python interface for interacting with multiple generative AI providers.

Stars
16.1K
+20 today
Forks
1.7K
Watchers
183
Open issues
73
Open PRs
72
Contributors
~52
Commits
682
Branches
34

PythonMITCreated Jun 30, 2024Last push 12d agoLatest release v0.1.3+229 stars this week+526 this month

Star history

since Nov 24, 2024
05K10K15KNov 2024Jun 2025Jan 2026Aug 2026
16.1K stars as of Aug 7, 2026, tracked back to Nov 24, 2024. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulAugMonWedFri2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 2 commits2025-08-14: 4 commits2025-08-15: 2 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 1 commit2025-08-20: 1 commit2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 2 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 3 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 1 commit2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 2 commits2025-10-14: 11 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 1 commit2025-10-26: 2 commits2025-10-27: 0 commits2025-10-28: 2 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 2 commits2025-11-03: 3 commits2025-11-04: 3 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 3 commits2025-11-10: 10 commits2025-11-11: 2 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 4 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 1 commit2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 1 commit2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 1 commit2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 3 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 1 commit2026-05-31: 1 commit2026-06-01: 0 commits2026-06-02: 1 commit2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 1 commit2026-06-07: 1 commit2026-06-08: 7 commits2026-06-09: 4 commits2026-06-10: 11 commits2026-06-11: 11 commits2026-06-12: 12 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 2 commits2026-06-19: 1 commit2026-06-20: 2 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 2 commits2026-06-24: 3 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 23 commits2026-06-28: 16 commits2026-06-29: 34 commits2026-06-30: 6 commits2026-07-01: 1 commit2026-07-02: 5 commits2026-07-03: 2 commits2026-07-04: 11 commits2026-07-05: 21 commits2026-07-06: 1 commit2026-07-07: 6 commits2026-07-08: 14 commits2026-07-09: 13 commits2026-07-10: 9 commits2026-07-11: 20 commits2026-07-12: 3 commits2026-07-13: 2 commits2026-07-14: 6 commits2026-07-15: 8 commits2026-07-16: 4 commits2026-07-17: 3 commits2026-07-18: 5 commits2026-07-19: 8 commits2026-07-20: 9 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 1 commit2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits
358 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    16,051 stars

  • Permissive license

    MIT

  • Repeat trending

    6 trending appearances

What aisuite does

aisuite acts as an abstraction layer that standardizes API calls to various generative AI services. It allows developers to swap between different language models and providers without rewriting their integration logic. By wrapping the distinct SDKs of major AI companies, it presents a single, cohesive interface. This significantly reduces vendor lock-in and simplifies the experimentation process. It is designed to be lightweight and easy to drop into existing Python applications.

Aimed at Python developers, AI researchers, and software engineers building LLM-integrated applications. It is ideal for teams that prioritize flexibility and want to avoid strict vendor lock-in.

  • Provider abstraction: Standardizes requests to multiple AI APIs under a single function signature.
  • Seamless switching: Allows changing the underlying model provider simply by updating an identifier string.
  • Lightweight footprint: Minimizes external dependencies to keep the library fast and unintrusive.
  • Unified response format: Normalizes the outputs from different models into a predictable structure.
  • Drop-in integration: Designed to easily replace direct provider SDK calls in existing codebases.

Where teams use it

Multi-model evaluation

Researchers and developers comparing the output quality of different LLMs on identical prompts.

Fallback mechanism implementation

Production systems that need to seamlessly route requests to an alternative provider if the primary fails.

Rapid prototyping

Hackathon participants and indie hackers looking to integrate AI quickly without learning multiple APIs.

Cost optimization routing

Applications designed to dynamically select the most cost-effective model for a given task.

Getting started: pip install aisuite

README

main branch

OpenWorker

OpenWorker

A desktop AI coworker, built on aisuite — now in its own repository: andrewyng/openworker.

OpenWorker chats, does deep research, and carries out real tasks on your computer — reading files with permission, connecting to Slack/email, producing PDFs, documents, and spreadsheets, and running scheduled automations. Bring your own API key (OpenAI, Anthropic, Google) or run fully local with Ollama; your data stays on your machine.

⬇ Download for macOS macOS 13+ (Apple Silicon)  ·  ⬇ Download for Windows Windows 10/11 (x64)  ·  Quickstart

OpenWorker development has moved to the new repo. A snapshot of its source remains here under platform/ for now and will be removed in a future release.


aisuite

PyPI Code style: black

aisuite is a lightweight Python library for building with LLMs, in two layers: a unified Chat Completions API across providers, and an Agents API with tools and toolkits on top. aisuite also powers OpenWorker, a desktop AI coworker developed in its own repository:

┌───────────────────────────────────────────────┐
│          OpenWorker  (separate repo)          │   agent harness for doing everyday tasks
├───────────────────────────────────────────────┤
│        Agents API  ·  Toolkits  ·  MCP        │   build agents across multiple LLMs
├───────────────────────────────────────────────┤
│             Chat Completions API              │   one API across multiple LLM providers
├────────┬───────────┬────────┬────────┬────────┤
│ OpenAI │ Anthropic │ Google │ Ollama │ Others │
└────────┴───────────┴────────┴────────┴────────┘
  • Chat Completions API — a unified, OpenAI-style interface for OpenAI, Anthropic, Google, Mistral, Hugging Face, AWS, Cohere, Ollama, OpenRouter, Requesty, and more. Swap providers by changing one string.
  • Agents API · Toolkits · MCP — give models real Python functions as tools, run multi-turn loops, attach ready-made toolkits (files, git, shell) or any MCP server, and govern it all with tool policies.
  • OpenWorker — a desktop AI coworker built using aisuite, shipped as an app for everyday tasks. Developed in its own repository.

Installation

Install the base package, or include the SDKs of the providers you plan to use:

pip install aisuite               # base package, no provider SDKs
pip install 'aisuite[anthropic]'  # with a specific provider's SDK
pip install 'aisuite[all]'        # with all provider SDKs

You'll also need API keys for the providers you call — the Chat Completions quickstart covers key setup and your first calls.

Looking for the OpenWorker desktop app? Downloads are on its releases page.


Chat Completions — one API across providers

The chat API provides a high-level abstraction for model interactions. It supports all core parameters (temperature, max_tokens, tools, etc.) in a provider-agnostic way, and standardizes request and response structures so you can focus on logic rather than SDK differences.

Model names use the format <provider>:<model-name>; aisuite routes the call to the right provider with the right parameters:

import aisuite as ai
client = ai.Client()

models = ["openai:gpt-4o", "anthropic:claude-3-5-sonnet-20240620"]

messages = [
    {"role": "system", "content": "Respond in Pirate English."},
    {"role": "user", "content": "Tell me a joke."},
]

for model in models:
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0.75
    )
    print(response.choices[0].message.content)

→ Quickstart: docs/chat-completions-quickstart.md — install, key setup, local models, and more examples.

Streaming

Pass stream=True to get an iterator of OpenAI-shaped chunks from any supporting provider (OpenAI, Anthropic, Ollama, and OpenAI-compatible endpoints) — the same loop works across all of them:

for chunk in client.chat.completions.create(model=model, messages=messages, stream=True):
    print(chunk.choices[0].delta.content or "", end="", flush=True)

The async variant is await client.chat.completions.acreate(..., stream=True), iterated with async for. Tool calls stream too: schema dicts and callables are passed to the model as usual, and the chunks carry incremental delta.tool_calls fragments for you to assemble and execute (streaming is manual tool calling — it can't be combined with max_turns).


Agents — give models real tools

aisuite turns tool calling into a one-liner: pass plain Python functions and it generates the schemas, executes the calls, and feeds results back to the model.

Tool calling with max_turns

def will_it_rain(location: str, time_of_day: str):
    """Check if it will rain in a location at a given time today.

    Args:
        location (str): Name of the city
        time_of_day (str): Time of the day in HH:MM format.
    """
    return "YES"

client = ai.Client()
response = client.chat.completions.create(
    model="openai:gpt-4o",
    messages=[{
        "role": "user",
        "content": "I live in San Francisco. Can you check for weather "
                   "and plan an outdoor picnic for me at 2pm?"
    }],
    tools=[will_it_rain],
    max_turns=2  # Maximum number of back-and-forth tool calls
)
print(response.choices[0].message.content)

With max_turns set, aisuite sends your message, executes any tool calls the model requests, returns the results to the model, and repeats until the conversation completes. response.choices[0].intermediate_messages carries the full tool interaction history if you want to continue the conversation.

Prefer full manual control? Omit max_turns and pass OpenAI-format JSON tool specs — aisuite returns the model's tool-call requests and you run the loop yourself. See examples/tool_calling_abstraction.ipynb for both styles.

The Agents API

For longer-running, structured work there is a first-class Agents API: declare an agent once, run it with a Runner, and attach toolkits — prebuilt, sandboxed tool families for files, git, and shell:

import aisuite as ai
from aisuite import Agent, Runner

agent = Agent(
    name="repo-helper",
    model="anthropic:claude-sonnet-4-6",
    instructions="You are a careful repo assistant. Use your tools to answer from the code.",
    tools=[*ai.toolkits.files(root="."), *ai.toolkits.git(root=".")],
)

result = Runner.run(agent, "What changed in the last commit? Summarize in 3 bullets.")
print(result.final_output)

The Agents API also gives you the pieces a production harness needs:

  • Tool policiesRequireApprovalPolicy, allow/deny lists, or your own callable deciding which tool calls run.
  • State stores — persist and resume runs (in-memory, file, or Postgres) and continue conversations across processes.
  • Artifacts & tracing — capture what an agent produced and every step it took along the way.

MCP tools

aisuite natively supports the Model Context Protocol, so any MCP server's tools can be handed to a model without boilerplate (pip install 'aisuite[mcp]'):

client = ai.Client()
response = client.chat.completions.create(
    model="openai:gpt-4o",
    messages=[{"role": "user", "content": "List the files in the current directory"}],
    tools=[{
        "type": "mcp",
        "name": "filesystem",
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/directory"]
    }],
    max_turns=3
)
print(response.choices[0].message.content)

For reusable connections, security filters, and tool prefixing, use the explicit MCPClient.

→ Quickstart: docs/agents-quickstart.md — manual tool handling, the full Agents API, policies, state stores, and MCP in depth.


Extending aisuite: Adding a Provider

New providers can be added by implementing a lightweight adapter. The system uses a naming convention for discovery:

Element Convention
Module file <provider>_provider.py
Class name <Provider>Provider (capitalized)

Example:

# providers/openai_provider.py
class OpenaiProvider(BaseProvider):
    ...

This convention ensures consistency and enables automatic loading of new integrations.


Contributing

Contributions are welcome. Please review the Contributing Guide and join our Discord for discussions.


License

Released under the MIT License — free for commercial and non-commercial use.


View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

5 total
  1. OpenWorker 0.1.3v0.1.3Jul 20, 2026531 downloads

    ## What's Changed * Integration with Nebius AI Studio added by @Aktsvigun in https://github.com/andrewyng/aisuite/pull/138 * Nebius AI Studio brief documentation added by @Aktsvigun in https://github.com/andrewyng/aisuite/pull/173 * Added support for deepseek LLMs by @Riddhimaan-Senapati in https://github.com/andrewyng/aisuite/pull/175 * Tool calling support. Part I by @rohitprasad15 in https://github.com/andrewyng/aisuite/pull/102 * Add the Azure api-version query parameters by @gongmingqm10 in https://github.com/andrewyng/aisuite/pull/186 * Add support for reasoning content. by @rohitprasad15 in https://github.com/andrewyng/aisuite/pull/187 * Release 0.1.9 by @rohitprasad15 in https://github.com/andrewyng/aisuite/pull/188 * Add abstraction for tool calling with max_turns. by @rohitprasad15 in https://github.com/andrewyng/aisuite/pull/199 * Add support for Cerebras Cloud SDK by @kamilk-cerebras in https://github.com/andrewyng/aisuite/pull/189 * Add Mistral Docs by @Obscuretone in https://github.com/andrewyng/aisuite/pull/163 * Fix typo in Cerebras guide by @kamilk-cerebras in https://github.com/andrewyng/aisuite/pull/213 * Fix CI/CD linter by @aaronik in https://github.com/andrew

  2. OpenCoworker 0.1.1app-v0.1.1Jun 11, 20262K downloads

    ## OpenCoworker 0.1.1 A polish-and-reliability update following the first public beta. ### What's improved - **PDF preview** — PDFs the agent produces now render right in the built-in viewer. - **Clearer progress** — the agent plans its work as a live task list you can watch, and approval prompts stay short and readable even for big jobs. - **Reliability** — conversations are saved continuously, so nothing is lost if the app closes mid-task; quitting the app now also fully stops its background server. ### Download | Platform | File | |---|---| | macOS (Apple Silicon, M1 or later) | `OpenCoworker-macos-arm64.dmg` | | Windows 10/11 (x64) | `OpenCoworker-windows-setup.exe` (or the `.msi`) | The macOS app is signed and notarized. On Windows, SmartScreen may warn on first run: choose **More info → Run anyway**. You'll need an API key from OpenAI, Anthropic, or Google — or a local Ollama install.

  3. OpenCoworker 0.1.0app-v0.1.0Jun 11, 202658 downloads

    ## OpenCoworker 0.1.0 — first public beta **OpenCoworker is an AI coworker that lives on your desktop.** Give it a folder and a task, and it works the way a colleague would — researching, writing, and building real files on your machine, not just chat replies. ### What's in this release - **Works in your folders** — grant access to any folder (read-only or read-write); everything the agent produces is a real file you keep. - **Bring your own model** — connect OpenAI, Claude (Anthropic), or Gemini with your API key, or run fully local with Ollama. Switch models per conversation. - **Built-in viewer** — preview the documents, images, and reports the agent creates without leaving the app. - **Automations** — schedule recurring tasks ("every morning, prepare a market brief") that run even when you're not around. - **MCP support** — extend the agent with Model Context Protocol servers (local or remote), with per-tool approval. - **You stay in control** — risky actions ask for your approval first, and your API keys never leave your machine. - Light, dark, and auto appearance. ### Download | Platform | File | |---|---| | macOS (Apple Silicon, M1 or later) | `OpenCow

  4. Patch Release v0.1.7v0.1.7Dec 26, 2024286 downloads

    ## Changes in v0.1.7 - Added support for new providers like - Cohere, SambaNova, xAI, WatsonX and more. - Improved error handling, updated documentation and minor fixes. - Changed version for dependency `httpx` to avoid errors.

  5. v0.1.6v0.1.6Nov 24, 2024177 downloads

    aisuite v0.1.6 Simple, unified interface to multiple Generative AI providers. Supported providers - 1. Anthropic 2. AWS 3. Azure 4. Fireworks 5. Google 6. Groq 7. HuggingFace 8. Mistral 9. Ollama 10. OpenAI 11. Together AI

Commits per week

last 52 weeks
840Week of 2025-08-10: 8 commitsWeek of 2025-08-17: 2 commitsWeek of 2025-08-24: 2 commitsWeek of 2025-08-31: 3 commitsWeek of 2025-09-07: 1 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 13 commitsWeek of 2025-10-19: 1 commitsWeek of 2025-10-26: 4 commitsWeek of 2025-11-02: 8 commitsWeek of 2025-11-09: 15 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 4 commitsWeek of 2025-12-14: 1 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 1 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 1 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 3 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 1 commitsWeek of 2026-05-31: 3 commitsWeek of 2026-06-07: 46 commitsWeek of 2026-06-14: 5 commitsWeek of 2026-06-21: 28 commitsWeek of 2026-06-28: 75 commitsWeek of 2026-07-05: 84 commitsWeek of 2026-07-12: 31 commitsWeek of 2026-07-19: 18 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 0 commitsAug 10, 2025Aug 2, 2026
358 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 4 commitsSun 1:00 — 1 commitsSun 2:00 — 0 commitsSun 3:00 — 1 commitsSun 4:00 — 1 commitsSun 5:00 — 1 commitsSun 6:00 — 0 commitsSun 7:00 — 5 commitsSun 8:00 — 0 commitsSun 9:00 — 2 commitsSun 10:00 — 5 commitsSun 11:00 — 5 commitsSun 12:00 — 8 commitsSun 13:00 — 4 commitsSun 14:00 — 8 commitsSun 15:00 — 4 commitsSun 16:00 — 4 commitsSun 17:00 — 6 commitsSun 18:00 — 5 commitsSun 19:00 — 3 commitsSun 20:00 — 3 commitsSun 21:00 — 9 commitsSun 22:00 — 4 commitsSun 23:00 — 3 commitsMon 0:00 — 2 commitsMon 1:00 — 1 commitsMon 2:00 — 1 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 8 commitsMon 6:00 — 2 commitsMon 7:00 — 4 commitsMon 8:00 — 4 commitsMon 9:00 — 3 commitsMon 10:00 — 6 commitsMon 11:00 — 6 commitsMon 12:00 — 5 commitsMon 13:00 — 2 commitsMon 14:00 — 7 commitsMon 15:00 — 5 commitsMon 16:00 — 8 commitsMon 17:00 — 4 commitsMon 18:00 — 5 commitsMon 19:00 — 0 commitsMon 20:00 — 2 commitsMon 21:00 — 1 commitsMon 22:00 — 10 commitsMon 23:00 — 8 commitsTue 0:00 — 0 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 3 commitsTue 6:00 — 3 commitsTue 7:00 — 2 commitsTue 8:00 — 0 commitsTue 9:00 — 1 commitsTue 10:00 — 8 commitsTue 11:00 — 9 commitsTue 12:00 — 10 commitsTue 13:00 — 4 commitsTue 14:00 — 0 commitsTue 15:00 — 3 commitsTue 16:00 — 5 commitsTue 17:00 — 4 commitsTue 18:00 — 4 commitsTue 19:00 — 3 commitsTue 20:00 — 4 commitsTue 21:00 — 5 commitsTue 22:00 — 11 commitsTue 23:00 — 3 commitsWed 0:00 — 1 commitsWed 1:00 — 1 commitsWed 2:00 — 0 commitsWed 3:00 — 3 commitsWed 4:00 — 1 commitsWed 5:00 — 1 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 2 commitsWed 10:00 — 2 commitsWed 11:00 — 2 commitsWed 12:00 — 5 commitsWed 13:00 — 5 commitsWed 14:00 — 8 commitsWed 15:00 — 8 commitsWed 16:00 — 7 commitsWed 17:00 — 4 commitsWed 18:00 — 2 commitsWed 19:00 — 4 commitsWed 20:00 — 2 commitsWed 21:00 — 3 commitsWed 22:00 — 3 commitsWed 23:00 — 0 commitsThu 0:00 — 2 commitsThu 1:00 — 2 commitsThu 2:00 — 1 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 3 commitsThu 11:00 — 7 commitsThu 12:00 — 7 commitsThu 13:00 — 2 commitsThu 14:00 — 9 commitsThu 15:00 — 5 commitsThu 16:00 — 8 commitsThu 17:00 — 2 commitsThu 18:00 — 4 commitsThu 19:00 — 3 commitsThu 20:00 — 3 commitsThu 21:00 — 4 commitsThu 22:00 — 1 commitsThu 23:00 — 1 commitsFri 0:00 — 2 commitsFri 1:00 — 0 commitsFri 2:00 — 1 commitsFri 3:00 — 1 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 2 commitsFri 7:00 — 0 commitsFri 8:00 — 1 commitsFri 9:00 — 0 commitsFri 10:00 — 5 commitsFri 11:00 — 1 commitsFri 12:00 — 5 commitsFri 13:00 — 7 commitsFri 14:00 — 2 commitsFri 15:00 — 0 commitsFri 16:00 — 6 commitsFri 17:00 — 6 commitsFri 18:00 — 3 commitsFri 19:00 — 2 commitsFri 20:00 — 4 commitsFri 21:00 — 6 commitsFri 22:00 — 1 commitsFri 23:00 — 0 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 2 commitsSat 3:00 — 2 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 1 commitsSat 7:00 — 7 commitsSat 8:00 — 8 commitsSat 9:00 — 2 commitsSat 10:00 — 1 commitsSat 11:00 — 1 commitsSat 12:00 — 2 commitsSat 13:00 — 4 commitsSat 14:00 — 6 commitsSat 15:00 — 8 commitsSat 16:00 — 2 commitsSat 17:00 — 7 commitsSat 18:00 — 3 commitsSat 19:00 — 4 commitsSat 20:00 — 6 commitsSat 21:00 — 10 commitsSat 22:00 — 8 commitsSat 23:00 — 5 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Aug 5, 2026weekly#9+444
Aug 4, 2026weekly#9+444
Aug 3, 2026weekly#9+576
Jul 30, 2026daily#4+62
Jul 29, 2026daily#4+62
Jul 27, 2026daily#10+187