microsoft/SkillOptPublic

SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.

AI summary: A framework to treat agent skill documents as trainable parameters, optimizing them through rigorous validation without touching model weights.

Stars
18K
+87 today
Forks
1.7K
Watchers
68
Open issues
27
Open PRs
30
Contributors
~64
Commits
531
Branches
13

PythonMITCreated May 8, 2026Last push 3d agoLatest release v0.2.0+543 stars this week+1.3K this month

Quick answers

What is SkillOpt?
A framework to treat agent skill documents as trainable parameters, optimizing them through rigorous validation without touching model weights.
What does SkillOpt do?
SkillOpt applies deep learning optimization disciplines—like epochs, batch sizes, and validation gates—directly to the textual skill documents used by frozen LLM agents. Instead of relying on manual prompting or loose self-reflection, it uses a separate optimizer model to generate bounded edits (add/delete/replace) to a skill document based on scored rollouts. An edit is only accepted if it strictly improves performance on a held-out validation set. The final output is a highly optimized, compact markdown file (300–2,000 tokens) that can be plugged into existing agent runtimes like Claude Code, Codex, or Copilot to massively boost performance at zero additional inference cost.
Who is SkillOpt for?
AI engineers and prompt engineers building production-grade autonomous agents who need systematic, metric-driven ways to improve agent reliability.
How do I get started with SkillOpt?
pip install skillopt
How popular is SkillOpt on GitHub?
microsoft/SkillOpt has 17,957 stars and 1,690 forks on GitHub, and gained 543 stars in the last 7 days.
What license does SkillOpt use?
microsoft/SkillOpt is released under the MIT license.

Star history

since Jul 29, 2026
05K10K15KJul 2026Aug 2026Sep 2026Oct 2026
18K stars as of Oct 2, 2026. Measured daily since Jul 29, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

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

Signals and awards

derived from tracked data
  • Widely adopted

    17,957 stars

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

  • Repeat trending

    6 trending appearances

What SkillOpt does

SkillOpt applies deep learning optimization disciplines—like epochs, batch sizes, and validation gates—directly to the textual skill documents used by frozen LLM agents. Instead of relying on manual prompting or loose self-reflection, it uses a separate optimizer model to generate bounded edits (add/delete/replace) to a skill document based on scored rollouts. An edit is only accepted if it strictly improves performance on a held-out validation set. The final output is a highly optimized, compact markdown file (300–2,000 tokens) that can be plugged into existing agent runtimes like Claude Code, Codex, or Copilot to massively boost performance at zero additional inference cost.

AI engineers and prompt engineers building production-grade autonomous agents who need systematic, metric-driven ways to improve agent reliability.

  • Textual Optimizer Loop: Translates execution feedback into bounded add/delete/replace edits on a markdown skill document.
  • Validation-Gated Updates: Only accepts skill modifications that demonstrably improve scores on a held-out evaluation set.
  • SkillOpt-Sleep: A nightly offline engine that reviews past sessions, replays tasks, and consolidates new skills automatically.
  • Multi-Harness Support: Provides integration shells for major agent runtimes including Claude Code, Codex, Copilot, and Devin.
  • Zero Inference Cost: Produces a static `best_skill.md` file that enhances the baseline model without requiring runtime optimization calls.

Where teams use it

Automated Prompt Engineering

Systematically improving the instructions for a coding agent to handle complex, domain-specific programming tasks.

Nightly Agent Evolution

Running the SkillOpt-Sleep CLI overnight to harvest insights from daily developer sessions and refine the agent's core skills.

Cross-Model Skill Transfer

Training a highly optimized skill document on a smaller, faster model and deploying it to boost a larger frontier model.

Agentic Benchmark Optimization

Using textual learning rate budgets and rejected-edit buffers to maximize agent scores on standardized coding benchmarks.

Getting started: pip install skillopt

README

main branch

SkillOpt: Executive Strategy for Self-Evolving Agent Skills

Train agent skills like you train neural networks — with epochs, (mini-)batchsize, learning rates, and validation gates — but without touching model weights.

Project Page Paper Project Video PyPI Python 3.10+ License: MIT

microsoft%2FSkillOpt | Trendshift microsoft%2FSkillOpt | Trendshift

📖 For installation, data preparation, training/eval commands, configuration, and framework internals, start with the versioned SkillOpt documentation. A concise rendered overview is available in the Documentation & Reproduction Guide, and longer-form engineering analysis appears on the Technical Blog. We also maintain a Changelog for released and unreleased changes.


News 🔥🔥🔥

  • [2026-07-24] 📰 SkillOpt in the news. Read the official Microsoft Research feature, along with recent coverage from VentureBeat, Synced (机器之心), Flowtivity, and The Decoder.
  • [2026-07-02] 🚀 SkillOpt v0.2.0 is out on PyPI! Headline feature: SkillOpt-Sleep, a nightly offline self-evolution engine (harvest → mine → replay → consolidate behind a held-out validation gate), now shipped as the skillopt-sleep CLI. It also includes experimental multi-objective, replay, and dream-rollout controls; the main CLI keeps conservative defaults and does not expose every experiment-harness control as a flag. The release source adds integration shells for Claude Code, Codex, Copilot, and Devin, plus an OpenClaw reference adaptation; these plugin/MCP files live in the repository rather than the PyPI wheel. It also adds SearchQA split materialization, Windows robustness, and hardened JSON parsing. See the release notes for full release details and contributor acknowledgements.
  • [2026-06-15] 😴 SkillOpt-Sleep (preview) — a nightly offline self-evolution companion for local coding agents (Claude Code / Codex / Copilot): review past sessions, replay recurring tasks, and consolidate validated skills behind a held-out gate. See docs/sleep/README.md for what it is, how to use it, and results.
  • [2026-06-03] 🎉 gbrain, gbrain-evals, and darwin-skill have all integrated SkillOpt.
  • [2026-06-02] 🎉 SkillOpt v0.1.0 is now available on PyPI! Install with pip install skillopt. This initial release includes the full training loop (rollout → reflect → aggregate → select → update → evaluate), multi-backend support (OpenAI / Azure / Claude / Qwen / MiniMax), six built-in benchmarks, and WebUI dashboard.

Overview

Modern agent skills are usually hand-crafted, generated one-shot by a strong LLM, or evolved through loosely controlled self-revision — none of which behaves like a deep-learning optimizer for the skill itself, and none of which reliably improves over its starting point under feedback.

SkillOpt treats the skill document as the trainable state of a frozen agent, and trains it with the discipline that makes weight-space optimization reproducible. A separate optimizer model turns scored rollouts into bounded add / delete / replace edits on a single skill document; in the default paper-style path, a candidate edit is accepted only when it strictly improves a held-out validation score. A textual learning-rate budget, a rejected-edit buffer, and an epoch-wise slow / meta update make skill training stable while adding zero inference-time model calls at deployment.

The deployed artifact is a compact best_skill.md (typically 300–2,000 tokens) that runs against the unchanged target model. Across six benchmarks, seven target models, and three execution harnesses (direct chat, Codex CLI, Claude Code CLI), SkillOpt is best or tied-best on all 52 evaluated (model, benchmark, harness) cells and on GPT-5.5 lifts the average no-skill accuracy by +23.5 points in direct chat, +24.8 inside the Codex agentic loop, and +19.1 inside Claude Code. Optimized skill artifacts transfer across model scales, between Codex and Claude Code harnesses, and to nearby benchmarks without further optimization.

For the full method, ablations, and per-cell results see the paper; for a visual walkthrough of the loop see the project page; for deeper API / backend / benchmark docs see docs/.

🎬 Demo Video

64c8f76086bed7bd7a5ce664a7a14f40_raw.mp4

▶ Watch the full demo on YouTube


Extensibility & WebUI

Adding a new backend

A backend = a chat / exec target (e.g. openai_chat, claude_chat, qwen_chat, minimax_chat, copilot_chat, openai_compatible, codex_exec, claude_code_exec, cursor_exec, copilot_exec). If a provider implements the OpenAI Chat Completions protocol, try the built-in openai_compatible backend before adding code. See docs/guide/new-backend.md for the full contract. Chat backends add a skillopt/model/<name>_backend.py module; target-only exec backends use the shared harness in codex_harness.py. Both register through common.py, backend_config.py, and skillopt/model/__init__.py.

Adding a new benchmark

A benchmark = a skillopt/envs/<name>/ package with an adapter, a data loader, a scored rollout helper, a YAML config, and optionally an initial seed skill. See docs/guide/new-benchmark.md for the full contract; the simplest reference is skillopt/envs/searchqa/.

WebUI

Launch the monitoring dashboard (optional):

pip install -e ".[webui]"
python -m skillopt_webui.app
Flag Default Description
--port 7860 Server port
--host 0.0.0.0 Bind address
--share off Create a public Gradio share link

The default host listens on every network interface. Use --host 127.0.0.1 for local-only access.


Citation

@article{yang2026skillopt,
  title={Skillopt: Executive strategy for self-evolving agent skills},
  author={Yang, Yifan and Gong, Ziyang and Huang, Weiquan and Yang, Qihao and Zhou, Ziwei and Huang, Zisu and Li, Yan and Gao, Xuemei and Dai, Qi and Liu, Bei and others},
  journal={arXiv preprint arXiv:2605.23904},
  year={2026}
}
View on GitHub

Recent activity

commits and pull requests

Releases and announcements

2 total
  1. ## [0.2.0] — 2026-07-02 The headline of this release is **SkillOpt-Sleep**: a nightly offline self-evolution engine that harvests a coding agent's real session transcripts, mines recurring tasks, replays them offline, and consolidates short-term experience into long-term memory and skills — all behind the same held-out validation gate that keeps SkillOpt training honest. It ships as a decoupled top-level package (`skillopt_sleep/`, zero dependency on the research code) and as the new `skillopt-sleep` CLI. ### Added - **SkillOpt-Sleep engine** — nightly offline self-evolution cycle (harvest → mine → replay → consolidate) behind a validation gate, exposed as the `skillopt-sleep` console script and `python -m skillopt_sleep`. - Multi-objective reward (accuracy / tokens / latency) with user preferences. - Multi-rollout contrastive reflection under a token/time budget. - Experience replay + controllable dream rollouts (opt-in). - Slow-update long-term memory field (runs even with the gate off). - 3-way train/val/test split with `gate_mode on|off`. - Verifier-discipline validation gate, with a stress-test suite (thanks @Tanmay9223, #87). - **Cross-tool backends & pl

  2. v0.1.0v0.1.0Jun 2, 2026

    ## SkillOpt v0.1.0 — Initial PyPI Release The first public release of SkillOpt, now available on [PyPI](https://pypi.org/project/skillopt/0.1.0/). ### Install ```bash pip install skillopt ``` ### Highlights - Core training loop: rollout → reflect → aggregate → select → update → evaluate - Multi-backend support: OpenAI, Azure OpenAI, Claude, Qwen (vLLM) - Built-in benchmarks: ALFWorld, SpreadsheetBench, SearchQA, DocVQA, OfficeQA, LiveMath - Hierarchical patch merging and gradient clipping - YAML-based configuration system - Optional WebUI dashboard (`pip install skillopt[webui]`) ### Links - 📦 PyPI: https://pypi.org/project/skillopt/0.1.0/ - 📖 Docs: https://microsoft.github.io/SkillOpt

Code frequency

additions and deletions
+30.3K-30.3KWeek of 2026-05-17: +30,266 linesWeek of 2026-05-17: -7 linesWeek of 2026-05-24: +23,542 linesWeek of 2026-05-24: -18,006 linesWeek of 2026-05-31: +23,416 linesWeek of 2026-05-31: -6,776 linesWeek of 2026-06-07: +14,966 linesWeek of 2026-06-07: -6,079 linesWeek of 2026-06-14: +5,321 linesWeek of 2026-06-14: -2,361 linesWeek of 2026-06-21: +2,420 linesWeek of 2026-06-21: -197 linesWeek of 2026-06-28: +320 linesWeek of 2026-06-28: -35 linesWeek of 2026-07-05: +2,116 linesWeek of 2026-07-05: -118 linesWeek of 2026-07-12: +15,519 linesWeek of 2026-07-12: -2,832 linesWeek of 2026-07-19: +6,161 linesWeek of 2026-07-19: -6,933 linesWeek of 2026-07-26: +5,401 linesWeek of 2026-07-26: -650 linesWeek of 2026-08-02: +5,721 linesWeek of 2026-08-02: -598 linesWeek of 2026-08-09: +6,093 linesWeek of 2026-08-09: -447 linesWeek of 2026-08-16: +15,315 linesWeek of 2026-08-16: -3,315 linesWeek of 2026-08-23: +4,048 linesWeek of 2026-08-23: -196 linesWeek of 2026-08-30: +599 linesWeek of 2026-08-30: -73 linesWeek of 2026-09-06: +0 linesWeek of 2026-09-06: -0 linesWeek of 2026-09-13: +0 linesWeek of 2026-09-13: -0 linesWeek of 2026-09-20: +0 linesWeek of 2026-09-20: -0 linesWeek of 2026-09-27: +0 linesWeek of 2026-09-27: -0 linesMay 17, 2026Sep 27, 2026
+161.2K lines added, -48.6K removed over the last year.

Commits per week

last 52 weeks
660Week of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 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: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 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: 0 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: 4 commitsWeek of 2026-05-24: 59 commitsWeek of 2026-05-31: 22 commitsWeek of 2026-06-07: 50 commitsWeek of 2026-06-14: 28 commitsWeek of 2026-06-21: 20 commitsWeek of 2026-06-28: 3 commitsWeek of 2026-07-05: 13 commitsWeek of 2026-07-12: 37 commitsWeek of 2026-07-19: 29 commitsWeek of 2026-07-26: 29 commitsWeek of 2026-08-02: 66 commitsWeek of 2026-08-09: 22 commitsWeek of 2026-08-16: 14 commitsWeek of 2026-08-23: 15 commitsWeek of 2026-08-30: 3 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsWeek of 2026-09-27: 0 commitsOct 5, 2025Sep 27, 2026
414 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 1 commitsSun 2:00 — 1 commitsSun 3:00 — 1 commitsSun 4:00 — 0 commitsSun 5:00 — 4 commitsSun 6:00 — 0 commitsSun 7:00 — 2 commitsSun 8:00 — 1 commitsSun 9:00 — 3 commitsSun 10:00 — 0 commitsSun 11:00 — 2 commitsSun 12:00 — 1 commitsSun 13:00 — 0 commitsSun 14:00 — 3 commitsSun 15:00 — 8 commitsSun 16:00 — 4 commitsSun 17:00 — 14 commitsSun 18:00 — 10 commitsSun 19:00 — 16 commitsSun 20:00 — 0 commitsSun 21:00 — 6 commitsSun 22:00 — 2 commitsSun 23:00 — 1 commitsMon 0:00 — 7 commitsMon 1:00 — 2 commitsMon 2:00 — 4 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 2 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 2 commitsMon 11:00 — 1 commitsMon 12:00 — 0 commitsMon 13:00 — 3 commitsMon 14:00 — 34 commitsMon 15:00 — 5 commitsMon 16:00 — 9 commitsMon 17:00 — 3 commitsMon 18:00 — 2 commitsMon 19:00 — 0 commitsMon 20:00 — 2 commitsMon 21:00 — 5 commitsMon 22:00 — 0 commitsMon 23:00 — 4 commitsTue 0:00 — 2 commitsTue 1:00 — 2 commitsTue 2:00 — 2 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 1 commitsTue 6:00 — 1 commitsTue 7:00 — 0 commitsTue 8:00 — 4 commitsTue 9:00 — 13 commitsTue 10:00 — 1 commitsTue 11:00 — 2 commitsTue 12:00 — 1 commitsTue 13:00 — 2 commitsTue 14:00 — 1 commitsTue 15:00 — 8 commitsTue 16:00 — 9 commitsTue 17:00 — 3 commitsTue 18:00 — 10 commitsTue 19:00 — 8 commitsTue 20:00 — 2 commitsTue 21:00 — 0 commitsTue 22:00 — 6 commitsTue 23:00 — 2 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 1 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 11 commitsWed 9:00 — 6 commitsWed 10:00 — 0 commitsWed 11:00 — 3 commitsWed 12:00 — 1 commitsWed 13:00 — 7 commitsWed 14:00 — 1 commitsWed 15:00 — 1 commitsWed 16:00 — 1 commitsWed 17:00 — 2 commitsWed 18:00 — 0 commitsWed 19:00 — 0 commitsWed 20:00 — 1 commitsWed 21:00 — 0 commitsWed 22:00 — 1 commitsWed 23:00 — 4 commitsThu 0:00 — 0 commitsThu 1:00 — 6 commitsThu 2:00 — 5 commitsThu 3:00 — 5 commitsThu 4:00 — 1 commitsThu 5:00 — 1 commitsThu 6:00 — 1 commitsThu 7:00 — 1 commitsThu 8:00 — 3 commitsThu 9:00 — 2 commitsThu 10:00 — 8 commitsThu 11:00 — 2 commitsThu 12:00 — 2 commitsThu 13:00 — 1 commitsThu 14:00 — 2 commitsThu 15:00 — 2 commitsThu 16:00 — 0 commitsThu 17:00 — 3 commitsThu 18:00 — 0 commitsThu 19:00 — 2 commitsThu 20:00 — 0 commitsThu 21:00 — 2 commitsThu 22:00 — 2 commitsThu 23:00 — 5 commitsFri 0:00 — 4 commitsFri 1:00 — 1 commitsFri 2:00 — 3 commitsFri 3:00 — 1 commitsFri 4:00 — 2 commitsFri 5:00 — 3 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 4 commitsFri 9:00 — 3 commitsFri 10:00 — 1 commitsFri 11:00 — 0 commitsFri 12:00 — 0 commitsFri 13:00 — 1 commitsFri 14:00 — 1 commitsFri 15:00 — 3 commitsFri 16:00 — 3 commitsFri 17:00 — 0 commitsFri 18:00 — 1 commitsFri 19:00 — 2 commitsFri 20:00 — 0 commitsFri 21:00 — 0 commitsFri 22:00 — 1 commitsFri 23:00 — 0 commitsSat 0:00 — 0 commitsSat 1:00 — 2 commitsSat 2:00 — 0 commitsSat 3:00 — 2 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 1 commitsSat 7:00 — 1 commitsSat 8:00 — 1 commitsSat 9:00 — 1 commitsSat 10:00 — 0 commitsSat 11:00 — 3 commitsSat 12:00 — 4 commitsSat 13:00 — 2 commitsSat 14:00 — 4 commitsSat 15:00 — 4 commitsSat 16:00 — 2 commitsSat 17:00 — 2 commitsSat 18:00 — 4 commitsSat 19:00 — 0 commitsSat 20:00 — 0 commitsSat 21:00 — 3 commitsSat 22:00 — 2 commitsSat 23:00 — 1 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Jul 21, 2026daily#14+4
Jun 16, 2026daily#19+16
Jun 14, 2026daily#25+32
May 29, 2026daily#24+35
May 28, 2026daily#20+41
May 27, 2026daily#24+36