iOfficeAI/OfficeCLIPublic

OfficeCLI is the first and best Office suite purpose-built for AI agents to read, edit, and automate Word, Excel, and PowerPoint files. Free, open-source, single binary, no Office installation required.

AI summary: An AI-powered command-line interface for interacting with and generating Office documents.

Stars
31.5K
+131 today
Forks
2.1K
Watchers
91
Open issues
46
Open PRs
70
Contributors
~20
Commits
6.2K
Branches
4

C#Apache-2.0Created Mar 15, 2026Last push 3d agoLatest release v1.0.152+358 stars this week+1.8K this month

Quick answers

What is OfficeCLI?
An AI-powered command-line interface for interacting with and generating Office documents.
What does OfficeCLI do?
OfficeCLI is a powerful terminal-based tool that leverages artificial intelligence to automate the creation and modification of Microsoft Office documents. It allows users to issue natural language commands or use structured inputs to generate complex presentations, format spreadsheets, and draft text documents without opening a graphical interface. By integrating LLMs with native document parsing libraries, it translates high-level intents into precise file structure changes. The tool operates completely headlessly, making it an excellent fit for automated reporting pipelines and CI/CD environments. It drastically reduces the manual overhead of repetitive document formatting.
Who is OfficeCLI for?
This tool is built for developers, data analysts, and automation specialists who frequently handle Office documents. Users should be comfortable operating in a command-line environment.
How do I get started with OfficeCLI?
pip install officecli
How popular is OfficeCLI on GitHub?
iOfficeAI/OfficeCLI has 31,493 stars and 2,147 forks on GitHub, and gained 358 stars in the last 7 days.
What license does OfficeCLI use?
iOfficeAI/OfficeCLI is released under the Apache-2.0 license.

Star history

since Jul 27, 2026
010K20K30KJul 2026Aug 2026Sep 2026Oct 2026
31.5K stars as of Oct 2, 2026. Measured daily since Jul 27, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-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: 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: 6 commits2026-03-16: 18 commits2026-03-17: 15 commits2026-03-18: 12 commits2026-03-19: 55 commits2026-03-20: 2 commits2026-03-21: 31 commits2026-03-22: 39 commits2026-03-23: 40 commits2026-03-24: 34 commits2026-03-25: 43 commits2026-03-26: 56 commits2026-03-27: 95 commits2026-03-28: 85 commits2026-03-29: 64 commits2026-03-30: 28 commits2026-03-31: 22 commits2026-04-01: 1 commit2026-04-02: 25 commits2026-04-03: 63 commits2026-04-04: 29 commits2026-04-05: 23 commits2026-04-06: 14 commits2026-04-07: 29 commits2026-04-08: 38 commits2026-04-09: 111 commits2026-04-10: 45 commits2026-04-11: 30 commits2026-04-12: 3 commits2026-04-13: 73 commits2026-04-14: 35 commits2026-04-15: 31 commits2026-04-16: 11 commits2026-04-17: 59 commits2026-04-18: 86 commits2026-04-19: 62 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 2 commits2026-04-23: 10 commits2026-04-24: 56 commits2026-04-25: 91 commits2026-04-26: 97 commits2026-04-27: 145 commits2026-04-28: 132 commits2026-04-29: 41 commits2026-04-30: 109 commits2026-05-01: 127 commits2026-05-02: 40 commits2026-05-03: 16 commits2026-05-04: 19 commits2026-05-05: 143 commits2026-05-06: 57 commits2026-05-07: 36 commits2026-05-08: 44 commits2026-05-09: 43 commits2026-05-10: 57 commits2026-05-11: 25 commits2026-05-12: 36 commits2026-05-13: 31 commits2026-05-14: 57 commits2026-05-15: 9 commits2026-05-16: 11 commits2026-05-17: 110 commits2026-05-18: 234 commits2026-05-19: 114 commits2026-05-20: 18 commits2026-05-21: 10 commits2026-05-22: 29 commits2026-05-23: 4 commits2026-05-24: 3 commits2026-05-25: 34 commits2026-05-26: 63 commits2026-05-27: 37 commits2026-05-28: 57 commits2026-05-29: 7 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 46 commits2026-06-02: 130 commits2026-06-03: 11 commits2026-06-04: 25 commits2026-06-05: 43 commits2026-06-06: 11 commits2026-06-07: 32 commits2026-06-08: 71 commits2026-06-09: 59 commits2026-06-10: 128 commits2026-06-11: 60 commits2026-06-12: 25 commits2026-06-13: 70 commits2026-06-14: 63 commits2026-06-15: 66 commits2026-06-16: 26 commits2026-06-17: 37 commits2026-06-18: 83 commits2026-06-19: 40 commits2026-06-20: 65 commits2026-06-21: 87 commits2026-06-22: 96 commits2026-06-23: 96 commits2026-06-24: 132 commits2026-06-25: 44 commits2026-06-26: 46 commits2026-06-27: 48 commits2026-06-28: 15 commits2026-06-29: 3 commits2026-06-30: 23 commits2026-07-01: 56 commits2026-07-02: 73 commits2026-07-03: 80 commits2026-07-04: 2 commits2026-07-05: 5 commits2026-07-06: 3 commits2026-07-07: 27 commits2026-07-08: 60 commits2026-07-09: 65 commits2026-07-10: 58 commits2026-07-11: 33 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 7 commits2026-07-15: 1 commit2026-07-16: 12 commits2026-07-17: 47 commits2026-07-18: 22 commits2026-07-19: 33 commits2026-07-20: 2 commits2026-07-21: 3 commits2026-07-22: 7 commits2026-07-23: 53 commits2026-07-24: 1 commit2026-07-25: 6 commits2026-07-26: 7 commits2026-07-27: 1 commit2026-07-28: 20 commits2026-07-29: 11 commits2026-07-30: 3 commits2026-07-31: 1 commit2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 1 commit2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 10 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 1 commit2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 1 commit2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 13 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 3 commits2026-08-31: 0 commits2026-09-01: 9 commits2026-09-02: 1 commit2026-09-03: 2 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 1 commit2026-09-08: 6 commits2026-09-09: 0 commits2026-09-10: 4 commits2026-09-11: 3 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 12 commits2026-09-16: 0 commits2026-09-17: 5 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 1 commit2026-09-22: 17 commits2026-09-23: 0 commits2026-09-24: 4 commits2026-09-25: 0 commits2026-09-26: 0 commits
6,041 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    31,493 stars

  • Very active

    6,041 commits in 52 weeks

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

  • Repeat trending

    28 trending appearances

What OfficeCLI does

OfficeCLI is a powerful terminal-based tool that leverages artificial intelligence to automate the creation and modification of Microsoft Office documents. It allows users to issue natural language commands or use structured inputs to generate complex presentations, format spreadsheets, and draft text documents without opening a graphical interface. By integrating LLMs with native document parsing libraries, it translates high-level intents into precise file structure changes. The tool operates completely headlessly, making it an excellent fit for automated reporting pipelines and CI/CD environments. It drastically reduces the manual overhead of repetitive document formatting.

This tool is built for developers, data analysts, and automation specialists who frequently handle Office documents. Users should be comfortable operating in a command-line environment.

  • AI Command Interpretation: Processes natural language prompts to understand and execute document modifications.
  • Headless Document Generation: Creates and formats Word, Excel, and PowerPoint files entirely through terminal commands.
  • Data-Driven Templating: Injects raw data structures (like JSON or CSV) into predefined Office templates automatically.
  • Format Conversion: Seamlessly converts between markdown notes and styled Office presentations or documents.
  • Pipeline Integration: Designed to run without graphical dependencies, allowing easy integration into automated server workflows.

Where teams use it

Automated Report Generation

Data engineers configuring a cron job to automatically format and export daily analytics into styled Excel spreadsheets.

Rapid Presentation Scaffolding

Project managers quickly generating a draft PowerPoint deck by feeding markdown meeting notes into the CLI.

Bulk Document Processing

Administrative teams automating the injection of client data into standardized Word contract templates.

Headless CI/CD Tasks

Developers automatically generating and attaching release notes as Word documents during a build pipeline.

Getting started: pip install officecli

README

main branch

OfficeCLI

OfficeCLI is the world's first and the best Office suite designed for AI agents.

Give any AI agent full control over Word, Excel, and PowerPoint — in one line of code.

Open-source. Single binary. No Office installation. No dependencies. Works everywhere.

OfficeCLI's built-in HTML rendering engine reproduces documents with high fidelity — and that's what gives AI eyes. It renders .docx / .xlsx / .pptx to HTML or PNG, closing the render → look → fix loop.

GitHub Release License

English | 中文 | 日本語 | 한국어

🌐 Website: officecli.ai  |  💬 Community: Discord

OfficeCLI creating a PowerPoint presentation on AionUi

PPT creation process using OfficeCLI on AionUi

PowerPoint Presentations

OfficeCLI design presentation (PowerPoint) OfficeCLI business presentation (PowerPoint) OfficeCLI tech presentation (PowerPoint)
OfficeCLI space presentation (PowerPoint) OfficeCLI gaming presentation (PowerPoint) OfficeCLI creative presentation (PowerPoint)

—

Word Documents

OfficeCLI academic paper (Word) OfficeCLI project proposal (Word) OfficeCLI annual report (Word)

—

Excel Spreadsheets

OfficeCLI budget tracker (Excel) OfficeCLI gradebook (Excel) OfficeCLI sales dashboard (Excel)

All documents above were created entirely by AI agents using OfficeCLI — no templates, no manual editing.

For AI Agents — Get Started in One Line

Paste this into your AI agent's chat — it will read the skill file and install everything automatically:

curl -fsSL https://officecli.ai/SKILL.md

That's it. The skill file teaches the agent how to install the binary and use all commands.

For Humans

Option A — GUI: Install AionUi — a desktop app that lets you create and edit Office documents through natural language, powered by OfficeCLI under the hood. Just describe what you want, and AionUi handles the rest.

Option B — CLI: Download the binary for your platform from GitHub Releases, then run:

officecli install

This copies the binary to your PATH and installs the officecli skill into every AI coding agent it detects — Claude Code, Cursor, Windsurf, GitHub Copilot, and more. Your agent can immediately create, read, and edit Office documents on your behalf, no extra configuration needed.

For Developers — See It Live in 30 Seconds

# 1. Install (macOS / Linux) — or: brew install officecli / npm install -g @officecli/officecli
curl -fsSL https://raw.githubusercontent.com/iOfficeAI/OfficeCLI/main/install.sh | bash
# Windows (PowerShell): irm https://raw.githubusercontent.com/iOfficeAI/OfficeCLI/main/install.ps1 | iex

# 2. Create a blank PowerPoint
officecli create deck.pptx

# 3. Start live preview — opens http://localhost:26315 in your browser
officecli watch deck.pptx

# 4. Open another terminal, add a slide — watch the browser update instantly
officecli add deck.pptx / --type slide --prop title="Hello, World!"

That's it. Every add, set, or remove command you run will refresh the preview in real time. Keep experimenting — the browser is your live feedback loop.

Quick Start

# Create a presentation and add content
officecli create deck.pptx
officecli add deck.pptx / --type slide --prop title="Q4 Report" --prop background=1A1A2E
officecli add deck.pptx '/slide[1]' --type shape \
  --prop text="Revenue grew 25%" --prop x=2cm --prop y=5cm \
  --prop font=Arial --prop size=24 --prop color=FFFFFF

# View as outline
officecli view deck.pptx outline
# → Slide 1: Q4 Report
# →   Shape 1 [TextBox]: Revenue grew 25%

# View as HTML — opens a rendered preview in your browser, no server needed
officecli view deck.pptx html

# Get structured JSON for any element
officecli get deck.pptx '/slide[1]/shape[1]' --json

# Save and close — flushes the resident session to disk
officecli close deck.pptx
{
  "tag": "shape",
  "path": "/slide[1]/shape[1]",
  "attributes": {
    "name": "TextBox 1",
    "text": "Revenue grew 25%",
    "x": "720000",
    "y": "1800000"
  }
}

Why OfficeCLI?

What used to take 50 lines of Python and 3 separate libraries:

from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[0])
title = slide.shapes.title
title.text = "Q4 Report"
# ... 45 more lines ...
prs.save('deck.pptx')

Now takes one command:

officecli add deck.pptx / --type slide --prop title="Q4 Report"

What OfficeCLI can do:

  • Create documents from scratch -- blank or with content
  • Read text, structure, styles, formulas -- in plain text or structured JSON
  • Analyze formatting issues, style inconsistencies, and structural problems
  • Modify any element -- text, fonts, colors, layout, formulas, charts, images
  • Reorganize content -- add, remove, move, copy elements across documents
Format Read Modify Create
Word (.docx) ✅ ✅ ✅
Excel (.xlsx) ✅ ✅ ✅
PowerPoint (.pptx) ✅ ✅ ✅

Word — full i18n & RTL support (per-script font slots, per-script BCP-47 lang tags lang.latin/ea/cs, complex-script bold/italic/size, direction=rtl cascading through paragraph/run/section/table/style/header/footer/docDefaults, rtlGutter + pgBorders shorthand, locale-aware page numbering for Hindi/Arabic/Thai/CJK; create --locale ar-SA auto-enables RTL), paragraphs (framePr, tabs shorthand, char-based indents), runs (underline.color, position half-pts), tables (virtual column ops add/remove/move/copyfrom, hMerge), styles, textbox / shape (textbox: rotation, textDirection eaVert/vert270, gradient, shadow, opacity), headers/footers, images (PNG/JPG/GIF/SVG), equations (LaTeX input), diagrams (mermaid → native editable shapes, or any mermaid type as a full-fidelity PNG), comments, footnotes, watermarks, bookmarks, TOC, charts, hyperlinks, sections, form fields, content controls (SDT), fields (22 zero-param types + MERGEFIELD / REF / PAGEREF / SEQ / STYLEREF / DOCPROPERTY / IF), OLE objects, revisions / tracked changes (revision.type=ins\|del\|format\|moveFrom\|moveTo + revision.action=accept\|reject, per-target /revision[@author=Alice] selector, tracked Find&Replace), page background color, document properties

Excel — cells (phonetic guide / furigana on add, Excel-UI --shift left\|up on remove / shift=right\|down on add), formulas (350+ built-in functions with auto-evaluation, spilling dynamic arrays with _xlfn. auto-prefix, financial / bond and statistical families, OFFSET/INDIRECT, defined-name formula bodies inlined at parse, formula-ref rewrite on row/col insert), sheets (visible/hidden/veryHidden, print margins, printTitleRows/Cols, RTL sheetView, cascade-aware sheet rename, empty-cell bloat filter on open), boolean and/or selectors (row[Salary>5000 and Region=EMEA]), tables, sort (sheet / range, multi-key, sidecar-aware), conditional formatting, charts (including box-whisker, pareto with auto-sort + cumulative-%, log axis), pivot tables (multi-field, date grouping, showDataAs, sort, grandTotals, subtotals, compact/outline/tabular layout, repeat item labels, blank rows, calculated fields, persistent labelFilter / topN filters, cache CoW + cross-pivot sharing), slicers, named ranges, data validation, images (PNG/JPG/GIF/SVG with dual-representation fallback), sparklines, comments (RTL), autofilter, shapes, OLE objects, CSV/TSV import, $Sheet:A1 cell addressing

PowerPoint — slides (header/footer/date/slidenum toggles, hidden), shapes (pattern fill, blur effect, hyperlink tooltip + slide-jump links, highlight color on runs, slideMaster/slideLayout typed add/set/remove, arrow alias, effective.X + effective.X.src), images (PNG/JPG/GIF/SVG, fill modes: stretch/contain/cover/tile, brightness/contrast/glow/shadow, rotation, link + tooltip), tables (built-in PowerPoint style catalogue, virtual /col[C] get + swap/copyFrom, row/col Move/CopyFrom, fill/background alias), charts (pieOfPie, barOfPie, per-attr axisLine/gridline setters, series add/remove with theme palette, anchor=x,y,w,h shorthand), animations (15 emphasis + 16 exit template-backed presets, multi-effect chains, motion-path presets, repeat/restart/autoReverse, chart animations + chartBuild), transitions (morph + p14 + 12 p15 PowerPoint 2013+ presets), 3D models (.glb) (combined rotation=ax,ay,az), slide zoom, equations (LaTeX input), diagrams (mermaid flowchart / sequence → native editable shapes, or any mermaid type as a full-fidelity PNG), themes, connectors (from/to accept a full /slide[N]/shape[@name=Foo] path), video/audio (loop, autoStart), groups (link + tooltip; Get/Query/Add/Remove all descend into groups), notes (RTL, lang), comments (RTL, legacy + modern p188 threaded round-trip), SmartArt (round-trip via add-part + raw-set), OLE objects, placeholders (add/set by phType)

Use Cases

For Developers:

  • Automate report generation from databases or APIs
  • Batch-process documents (bulk find/replace, style updates)
  • Build document pipelines in CI/CD environments (generate docs from test results)
  • Headless Office automation in Docker/containerized environments

For AI Agents:

  • Generate presentations from user prompts (see examples above)
  • Extract structured data from documents to JSON
  • Validate and check document quality before delivery

For Teams:

  • Clone document templates and populate with data
  • Automated document validation in CI/CD pipelines

Installation

Ships as a single self-contained binary. The .NET runtime is embedded -- nothing to install, no runtime to manage.

One-line install:

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/iOfficeAI/OfficeCLI/main/install.sh | bash

# Windows (PowerShell)
irm https://raw.githubusercontent.com/iOfficeAI/OfficeCLI/main/install.ps1 | iex

Or via a package manager:

# Homebrew (macOS / Linux)
brew install officecli

# Scoop (Windows)
scoop install officecli

# npm (all platforms — fetches the native binary for your platform)
npm install -g @officecli/officecli

Or download manually from GitHub Releases:

Platform Binary
macOS Apple Silicon officecli-mac-arm64
macOS Intel officecli-mac-x64
Linux x64 officecli-linux-x64
Linux ARM64 officecli-linux-arm64
Windows x64 officecli-win-x64.exe
Windows ARM64 officecli-win-arm64.exe

Verify installation: officecli --version

Or self-install from a downloaded binary (or run bare officecli to auto-install):

officecli install    # explicit
officecli            # bare invocation also triggers install

Updates are checked automatically in the background. Disable with officecli config autoUpdate false or skip per-invocation with OFFICECLI_SKIP_UPDATE=1. Configuration lives under ~/.officecli/config.json.

Key Features

Built-in Engines & Generation Primitives

OfficeCLI is self-contained. The capabilities below ship inside the binary — no Office required.

Rendering engine — high-fidelity, built-in

OfficeCLI's keystone: a from-scratch, high-fidelity HTML rendering engine that lets an AI agent see the rendered document instead of guessing from the DOM. It covers shapes, charts (trendlines, error bars, waterfall, candlestick, sparklines), equations (OMML → LaTeX, rendered with KaTeX), 3D .glb models via Three.js, morph transitions, slide zoom, and shape effects. Per-page PNG screenshots are produced by piping the rendered HTML through a headless browser. Three modes:

  • view html — standalone HTML file, assets inlined. Open in any browser.
  • view screenshot — per-page PNG, ready for multimodal agents to read.
  • watch — local HTTP server with auto-refreshing preview; every add / set / remove updates the browser instantly. Excel watch supports inline cell editing and drag-to-reposition charts.
officecli view deck.pptx html -o /tmp/deck.html
officecli view deck.pptx screenshot -o /tmp/deck.png # add --page 1-N for more slides
officecli watch deck.pptx                            # http://localhost:26315

Without visualization, an agent generating slides is flying blind — it can read the DOM but can't tell if the title overflows or two shapes overlap. Because rendering is built into the binary, the render → look → fix loop works in CI, in Docker, on a server with no display — anywhere the binary runs.

Formula & pivot engine

350+ built-in Excel functions evaluated automatically on write — write =SUM(A1:A2), get the cell, the value is already there. No round-trip through Office to recalc. Covers spilling dynamic arrays (FILTER / SORT / UNIQUE / SEQUENCE / LET / LAMBDA / MAP), VLOOKUP / XLOOKUP / INDEX / MATCH, financial & bond math (XIRR / PRICE / YIELD / DURATION / COUPNUM), statistical distributions, tests & regression (NORM.DIST / T.TEST / LINEST), and date & text functions.

Plus native OOXML pivot tables from a source range with one command — multi-field rows/cols/filters, 10 aggregations, showDataAs modes, date grouping, calculated fields, top-N, layouts. Pivot cache + definition are written to OOXML, so Excel opens the file with the aggregation already populated:

officecli add sales.xlsx '/Sheet1' --type pivottable \
  --prop source='Data!A1:E10000' --prop rows='Region,Category' \
  --prop cols=Quarter --prop values='Revenue:sum,Units:avg' \
  --prop showDataAs=percentOfTotal
Template merge — generate once, fill many

merge replaces {{key}} placeholders in any .docx / .xlsx / .pptx with JSON data — across paragraphs, table cells, shapes, headers, footers, and chart titles. Agent designs the layout once (expensive); production code fills it N times (cheap, deterministic, zero token cost). Avoids the failure mode where an agent regenerates each report from scratch and produces N inconsistent layouts.

officecli merge invoice-template.docx out-001.docx --data '{"client":"Acme","total":"$5,200"}'
officecli merge q4-template.pptx q4-acme.pptx --data data.json
Round-trip dump — learn from existing docs

dump serializes any .docx, .pptx, or .xlsx — whole document or any subtree (a single paragraph, table, slide, worksheet, the styles part, numbering, theme, or settings) — into a replayable batch JSON; batch replays it. Given a sample the user wants to imitate, an agent reads the structured spec instead of raw OOXML XML, mutates, and replays. Bridges "I have an existing template" and "generate me 100 variations."

officecli dump existing.docx -o blueprint.json                  # whole document
officecli dump existing.docx /body/tbl[1] -o table.json         # any subtree
officecli dump existing.xlsx /Sheet1 -o sheet.json              # a single worksheet
officecli batch new.docx --input blueprint.json

Resident Mode & Batch

For multi-step workflows, resident mode keeps the document in memory. Batch mode applies multiple operations in a single pass.

# Resident mode — near-zero latency via named pipes
officecli open report.docx
officecli set report.docx /body/p[1]/r[1] --prop bold=true
officecli set report.docx /body/p[2]/r[1] --prop color=FF0000
officecli close report.docx

# Batch mode — multi-command execution (atomic by default: any failed item rolls back the whole batch)
echo '[{"command":"set","path":"/slide[1]/shape[1]","props":{"text":"Hello"}},
      {"command":"set","path":"/slide[1]/shape[2]","props":{"fill":"FF0000"}}]' \
  | officecli batch deck.pptx --json

# Inline batch with --commands (no stdin needed)
officecli batch deck.pptx --commands '[{"op":"set","path":"/slide[1]/shape[1]","props":{"text":"Hi"}}]'

# Keep whatever succeeds even if some items fail (pre-1.0.137 behavior)
officecli batch deck.pptx --input updates.json --best-effort --json

# Stop at the first failing command instead of running the rest (still rolls back everything unless combined with --best-effort)
officecli batch deck.pptx --input updates.json --stop-on-error --json

Reading the file with another tool? Flush to disk first. officecli's own reads (get/query/view) always see your latest edits, so within officecli you never need to save. But a live resident defers the disk write, so before a non‑officecli program reads the file — python‑docx/openpyxl, Microsoft Word, a renderer, delivery/upload — flush it:

officecli set report.docx /body/p[1] --prop bold=true
officecli save report.docx           # flush, keep the resident warm (or `close` to flush + release)
python my_reader.py report.docx      # now sees the edit

A live resident also auto‑flushes shortly after going idle (adaptive 2–10s, scaled to the document's measured save cost). For a pipeline where another program reads after every command, set OFFICECLI_RESIDENT_FLUSH=each — every mutation is on disk before the command returns, while the resident stays warm. Full flush model (each/auto/fixed/off, save / close, env tuning): wiki → open / close.

Three-Layer Architecture

Start simple, go deep only when needed.

Layer Purpose Commands
L1: Read Semantic views of content view (text, annotated, outline, stats, issues, html, svg, screenshot)
L2: DOM Structured element operations get, query, set, add, remove, move, swap
L3: Raw XML Direct XPath access — universal fallback raw, raw-set, add-part, validate
# L1 — high-level views
officecli view report.docx annotated
officecli view budget.xlsx text --cols A,B,C --max-lines 50

# L2 — element-level operations
officecli query report.docx "run:contains(TODO)"
officecli add budget.xlsx / --type sheet --prop name="Q2 Report"
officecli move report.docx /body/p[5] --to /body --index 1

# L3 — raw XML when L2 isn't enough
officecli raw deck.pptx '/slide[1]'
officecli raw-set report.docx document \
  --xpath "//w:p[1]" --action append \
  --xml '<w:r><w:t>Injected text</w:t></w:r>'

AI Integration

MCP Server

Built-in MCP server — register with one command:

officecli mcp claude       # Claude Code
officecli mcp cursor       # Cursor
officecli mcp vscode       # VS Code / Copilot
officecli mcp lmstudio     # LM Studio
officecli mcp list         # Check registration status

Exposes all document operations as tools over JSON-RPC — no shell access needed.

Direct CLI Integration

Get OfficeCLI working with your AI agent in two steps:

  1. Install the binary -- one command (see Installation)
  2. Done. OfficeCLI automatically detects your AI tools (Claude Code, GitHub Copilot, Codex) by checking known config directories and installs its skill file. Your agent can immediately create, read, and modify any Office document.
Manual setup (optional)

If auto-install doesn't cover your setup, you can install the skill file manually:

Feed SKILL.md to your agent directly:

curl -fsSL https://officecli.ai/SKILL.md

Install as a local skill for Claude Code:

curl -fsSL https://officecli.ai/SKILL.md -o ~/.claude/skills/officecli.md

Other agents: Include the contents of SKILL.md in your agent's system prompt or tool description.

Why your agent will thrive on OfficeCLI

  • Deterministic JSON output — every command supports --json with consistent schemas. No regex parsing, no scraping stdout.
  • Path-based addressing — every element has a stable path (/slide[1]/shape[2]). Agents navigate documents without understanding XML namespaces. (OfficeCLI syntax: 1-based indexing, element local names — not XPath.)
  • Progressive complexity (L1 → L2 → L3) — agents start with read-only views, escalate to DOM ops, fall back to raw XML only when needed. Minimizes token usage.
  • Self-healing workflow — validate, view issues, and the structured error codes (not_found, invalid_value, unsupported_property) return suggestions and valid ranges. Agents self-correct without human intervention.
  • Built-in agent-friendly rendering engine — view html / view screenshot / watch emit HTML and PNG natively. No Office required. Agents can see their output and fix layout issues, even inside CI / Docker / headless environments.
  • Built-in formula & pivot engine — 350+ Excel functions auto-evaluated on write (incl. spilling dynamic arrays, financial / bond and statistical families); native OOXML pivot tables from a source range with one command. Agents read computed values and shipped aggregations immediately, without round-tripping through Office.
  • Template merge — agent designs the layout once, downstream code fills {{key}} placeholders N times. Avoids burning tokens regenerating every report from scratch.
  • Round-trip dump — dump turns any .docx, .pptx, or .xlsx into replayable batch JSON. Agents learn from human-authored samples by reading a structured spec, not raw OOXML XML.
  • Built-in help — when unsure about property names or value formats, the agent runs officecli <format> set <element> instead of guessing.
  • Auto-install — OfficeCLI detects your AI tooling (Claude Code, Cursor, VS Code, …) and configures itself. No manual skill-file setup.

Built-in Help

Don't guess property names — drill into the help:

officecli help pptx set              # All settable elements and properties
officecli help pptx set shape        # Detail for one element type
officecli help docx query            # Selector reference: attributes, :contains, :has(), etc.

Run officecli --help for the full overview.

JSON Output Schemas

All commands support --json. The general response shapes:

Single element (get --json):

{"tag": "shape", "path": "/slide[1]/shape[1]", "attributes": {"name": "TextBox 1", "text": "Hello"}}

List of elements (query --json):

[
  {"tag": "paragraph", "path": "/body/p[1]", "attributes": {"style": "Heading1", "text": "Title"}},
  {"tag": "paragraph", "path": "/body/p[5]", "attributes": {"style": "Heading1", "text": "Summary"}}
]

Errors return a non-zero exit code with a structured error object including error code, suggestion, and valid values when available:

{
  "success": false,
  "error": {
    "error": "Slide 50 not found (total: 8)",
    "code": "not_found",
    "suggestion": "Valid Slide index range: 1-8"
  }
}

Error codes: not_found, invalid_value, unsupported_property, invalid_path, unsupported_type, missing_property, file_not_found, file_locked, invalid_selector. Property names are auto-corrected -- misspelling a property returns a suggestion with the closest match.

Error Recovery -- Agents self-correct by inspecting available elements:

# Agent tries an invalid path
officecli get report.docx /body/p[99] --json
# Returns: {"success": false, "error": {"error": "...", "code": "not_found", "suggestion": "..."}}

# Agent self-corrects by checking available elements
officecli get report.docx /body --depth 1 --json
# Returns the list of available children, agent picks the right path

Mutation confirmations (set, add, remove, move, create with --json):

{"success": true, "path": "/slide[1]/shape[1]"}

Exit codes. 0 — the operation landed. 1 — it did not (process or business failure; the envelope carries error). 2 — it ran with caveats: an unsupported_property was dropped, or a validator raised a warning. Exit 2 covers both "landed with a warning" (success: true) and "nothing applied" (success: false, e.g. every property refused), so scripts must read success in the envelope, not the exit code alone; warnings[] lists what was dropped. The MCP server derives isError from the envelope the same way.

Comparison

OfficeCLI Microsoft Office LibreOffice python-docx / openpyxl
Open source & free ✓ (Apache 2.0) ✗ (paid license) ✓ ✓
AI-native CLI + JSON ✓ ✗ ✗ ✗
Zero install (single binary) ✓ ✗ ✗ ✗ (Python + pip)
Call from any language ✓ (CLI) ✗ (COM/Add-in) ✗ (UNO API) Python only
Path-based element access ✓ ✗ ✗ ✗
Raw XML fallback ✓ ✗ ✗ Partial
Built-in agent-friendly rendering engine ✓ ✗ ✗ ✗
Headless HTML/PNG output ✓ ✗ Partial ✗
Template merge ({{key}}) across formats ✓ ✗ ✗ ✗
Round-trip dump → batch JSON ✓ ✗ ✗ ✗
Live preview (auto-refresh on edit) ✓ ✗ ✗ ✗
Headless / CI ✓ ✗ Partial ✓
Cross-platform ✓ Windows/Mac ✓ ✓
Word + Excel + PowerPoint ✓ ✓ ✓ Separate libs

Command Reference

Command Description
create Create a blank .docx, .xlsx, or .pptx (type from extension)
view View content (modes: outline, text, annotated, stats (--page-count), issues, html, svg, screenshot, pdf (via exporter plugin), forms (via format-handler plugin)). docx supports --render auto|native|html.
load_skill Print embedded SKILL.md content for a specialized skill (no install)
get Get element and children (--depth N, --json)
query CSS-like query with boolean and/or, row-by-column-name (row[Salary>5000]), --find flag
set Modify element properties; accepts selectors and Excel-native paths (parity with get/query), --find/--replace flags
add Add element (or clone with --from <path>)
remove Remove an element
move Move element (--to <parent>, --index N, --after <path>, --before <path>)
swap Swap two elements
validate Validate against OpenXML schema
view <file> issues Enumerate document issues (text overflow, missing alt text, formula errors, ...)
batch Multiple operations applied in a single pass (stdin, --input, or --commands; atomic by default — any failed item rolls back the whole batch — --best-effort to keep partial progress, --stop-on-error to abort early)
dump Serialize a .docx, .pptx, or .xlsx into a replayable batch JSON (round-trip via batch); accepts a subtree path
refresh Recalculate TOC page numbers / PAGE / cross-references (.docx; Word backend on Windows, headless-HTML fallback)
plugins List / inspect / lint installed plugins (extend to .doc, .hwpx, .pdf export via dump-reader / exporter / format-handler kinds)
merge Template merge — replace {{key}} placeholders with JSON data
watch Live HTML preview in browser with auto-refresh
mcp Start MCP server for AI tool integration
raw View raw XML of a document part
raw-set Modify raw XML via XPath
add-part Add a new document part (header, chart, etc.)
open Start resident mode (keep document in memory)
close Save and close resident mode
install Install binary + skills + MCP (all, claude, cursor, etc.)
config Get or set configuration
help <format> <command> Built-in help (e.g. officecli help pptx set shape)

End-to-End Workflow Example

A typical self-healing agent workflow: create a presentation, populate it, verify, and fix issues -- all without human intervention.

# 1. Create
officecli create report.pptx

# 2. Add content
officecli add report.pptx / --type slide --prop title="Q4 Results"
officecli add report.pptx '/slide[1]' --type shape \
  --prop text="Revenue: $4.2M" --prop x=2cm --prop y=5cm --prop size=28
officecli add report.pptx / --type slide --prop title="Details"
officecli add report.pptx '/slide[2]' --type shape \
  --prop text="Growth driven by new markets" --prop x=2cm --prop y=5cm

# 3. Verify
officecli view report.pptx outline
officecli validate report.pptx

# 4. Fix any issues found
officecli view report.pptx issues --json
# Address issues based on output, e.g.:
officecli set report.pptx '/slide[1]/shape[1]' --prop font=Arial

Units & Colors

All dimension and color properties accept flexible input formats:

Type Accepted formats Examples
Dimensions cm, in, pt, px, or raw EMU 2cm, 1in, 72pt, 96px, 914400
Colors Hex, named, RGB, theme #FF0000, FF0000, red, rgb(255,0,0), accent1
Font sizes Bare number or pt-suffixed 14, 14pt, 10.5pt
Spacing pt, cm, in, or multiplier 12pt, 0.5cm, 1.5x, 150%

Common Patterns

# Replace all Heading1 text in a Word doc
officecli query report.docx "paragraph[style=Heading1]" --json | ...
officecli set report.docx /body/p[1]/r[1] --prop text="New Title"

# Export all slide content as JSON
officecli get deck.pptx / --depth 2 --json

# Bulk-update Excel cells
officecli batch budget.xlsx --input updates.json --json

# Import CSV data into an Excel sheet
officecli add budget.xlsx / --type sheet --prop name="Q1 Data"
officecli import budget.xlsx "/Q1 Data" sales.csv --header

# Template merge for batch reports
officecli merge invoice-template.docx invoice-001.docx --data '{"client":"Acme","total":"$5,200"}'

# Check document quality before delivery
officecli validate report.docx && officecli view report.docx issues --json

From Python or Node.js — install one of the thin resident-pipe SDKs (no per-call process spawn):

# Python — `pip install officecli-sdk`
import officecli
with officecli.create("deck.pptx") as doc:          # or officecli.open("deck.pptx")
    doc.send({"command": "add", "parent": "/", "type": "slide"})
    print(doc.send({"command": "get", "path": "/slide[1]"}))
// Node.js — `npm install @officecli/sdk`
const oc = require("@officecli/sdk");
const doc = await oc.create("deck.pptx");            // or oc.open("deck.pptx")
await doc.send({ command: "add", parent: "/", type: "slide" });
console.log(await doc.send({ command: "get", path: "/slide[1]" }));
await doc.close();

Both SDKs auto-provision the native CLI when missing (mirror-first, Windows-capable) and announce the install rather than doing it silently.

Or wrap subprocess directly, one-shot:

import json, subprocess
def cli(*args):
    return json.loads(subprocess.check_output(["officecli", *args, "--json"], text=True))
cli("create", "deck.pptx")

Documentation

The Wiki has detailed guides for every command, element type, and property:

Build from Source

Requires .NET 10 SDK for compilation only. The output is a self-contained, native binary -- .NET is embedded in the binary and is not needed at runtime.

./build.sh

License

Apache License 2.0

Bug reports and contributions are welcome on GitHub Issues.


If you find OfficeCLI useful, please give it a star on GitHub — it helps others discover the project.

OfficeCLI.AI | GitHub

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

146 total
  1. v1.0.152v1.0.152Sep 22, 202614.6K downloads

    ## What's Changed * fix(query): a `>` combinator no longer re-applies the parent's predicates to the child by @argszero in https://github.com/iOfficeAI/OfficeCLI/pull/418 ## New Contributors * @argszero made their first contribution in https://github.com/iOfficeAI/OfficeCLI/pull/418 **Full Changelog**: https://github.com/iOfficeAI/OfficeCLI/compare/v1.0.151...v1.0.152

  2. v1.0.151v1.0.151Sep 16, 202614.6K downloads

    **Full Changelog**: https://github.com/iOfficeAI/OfficeCLI/compare/v1.0.150...v1.0.151

  3. v1.0.150v1.0.150Sep 14, 20267K downloads

    ## What's Changed * fix(pptx): speaker notes scale to match slides by @stephenswetonic in https://github.com/iOfficeAI/OfficeCLI/pull/332 ## New Contributors * @stephenswetonic made their first contribution in https://github.com/iOfficeAI/OfficeCLI/pull/332 **Full Changelog**: https://github.com/iOfficeAI/OfficeCLI/compare/v1.0.149...v1.0.150

  4. v1.0.149v1.0.149Sep 10, 20269.8K downloads

    ## What's Changed * fix(xlsx): synchronize VML note targets during sheet shifts by @y4ho0 in https://github.com/iOfficeAI/OfficeCLI/pull/373 * fix(pptx): preserve equation order in HTML previews by @y4ho0 in https://github.com/iOfficeAI/OfficeCLI/pull/369 **Full Changelog**: https://github.com/iOfficeAI/OfficeCLI/compare/v1.0.148...v1.0.149

  5. v1.0.148v1.0.148Sep 7, 20269.9K downloads

    ## What's Changed * fix(batch): preserve per-item warnings across CLI and MCP by @y4ho0 in https://github.com/iOfficeAI/OfficeCLI/pull/355 * fix(xlsx): exclude phonetic guide text from cell values by @y4ho0 in https://github.com/iOfficeAI/OfficeCLI/pull/348 **Full Changelog**: https://github.com/iOfficeAI/OfficeCLI/compare/v1.0.147...v1.0.148

Code frequency

additions and deletions
+126.6K-126.6KWeek of 2026-03-15: +54,747 linesWeek of 2026-03-15: -13,065 linesWeek of 2026-03-22: +126,585 linesWeek of 2026-03-22: -53,509 linesWeek of 2026-03-29: +31,216 linesWeek of 2026-03-29: -11,484 linesWeek of 2026-04-05: +51,039 linesWeek of 2026-04-05: -24,411 linesWeek of 2026-04-12: +41,849 linesWeek of 2026-04-12: -18,980 linesWeek of 2026-04-19: +16,536 linesWeek of 2026-04-19: -4,574 linesWeek of 2026-04-26: +60,168 linesWeek of 2026-04-26: -38,077 linesWeek of 2026-05-03: +18,028 linesWeek of 2026-05-03: -3,860 linesWeek of 2026-05-10: +23,212 linesWeek of 2026-05-10: -9,059 linesWeek of 2026-05-17: +52,439 linesWeek of 2026-05-17: -22,081 linesWeek of 2026-05-24: +25,529 linesWeek of 2026-05-24: -15,319 linesWeek of 2026-05-31: +28,515 linesWeek of 2026-05-31: -4,976 linesWeek of 2026-06-07: +26,623 linesWeek of 2026-06-07: -18,886 linesWeek of 2026-06-14: +20,592 linesWeek of 2026-06-14: -3,201 linesWeek of 2026-06-21: +49,186 linesWeek of 2026-06-21: -18,359 linesWeek of 2026-06-28: +23,868 linesWeek of 2026-06-28: -5,252 linesWeek of 2026-07-05: +14,076 linesWeek of 2026-07-05: -4,979 linesWeek of 2026-07-12: +4,330 linesWeek of 2026-07-12: -819 linesWeek of 2026-07-19: +4,797 linesWeek of 2026-07-19: -651 linesWeek of 2026-07-26: +2,890 linesWeek of 2026-07-26: -535 linesWeek of 2026-08-02: +7 linesWeek of 2026-08-02: -0 linesWeek of 2026-08-09: +294 linesWeek of 2026-08-09: -52 linesWeek of 2026-08-16: +1,043 linesWeek of 2026-08-16: -58 linesWeek of 2026-08-23: +247 linesWeek of 2026-08-23: -40 linesWeek of 2026-08-30: +1,689 linesWeek of 2026-08-30: -738 linesWeek of 2026-09-06: +364 linesWeek of 2026-09-06: -133 linesWeek of 2026-09-13: +848 linesWeek of 2026-09-13: -170 linesWeek of 2026-09-20: +1,385 linesWeek of 2026-09-20: -150 linesMar 15, 2026Sep 20, 2026
+682.1K lines added, -273.4K removed over the last year.

Commits per week

last 52 weeks
6910Week of 2025-09-28: 0 commitsWeek 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: 139 commitsWeek of 2026-03-22: 392 commitsWeek of 2026-03-29: 232 commitsWeek of 2026-04-05: 290 commitsWeek of 2026-04-12: 298 commitsWeek of 2026-04-19: 221 commitsWeek of 2026-04-26: 691 commitsWeek of 2026-05-03: 358 commitsWeek of 2026-05-10: 226 commitsWeek of 2026-05-17: 519 commitsWeek of 2026-05-24: 201 commitsWeek of 2026-05-31: 266 commitsWeek of 2026-06-07: 445 commitsWeek of 2026-06-14: 380 commitsWeek of 2026-06-21: 549 commitsWeek of 2026-06-28: 252 commitsWeek of 2026-07-05: 251 commitsWeek of 2026-07-12: 89 commitsWeek of 2026-07-19: 105 commitsWeek of 2026-07-26: 43 commitsWeek of 2026-08-02: 1 commitsWeek of 2026-08-09: 10 commitsWeek of 2026-08-16: 2 commitsWeek of 2026-08-23: 13 commitsWeek of 2026-08-30: 15 commitsWeek of 2026-09-06: 14 commitsWeek of 2026-09-13: 17 commitsWeek of 2026-09-20: 22 commitsSep 28, 2025Sep 20, 2026
6K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 58 commitsSun 1:00 — 43 commitsSun 2:00 — 41 commitsSun 3:00 — 37 commitsSun 4:00 — 35 commitsSun 5:00 — 31 commitsSun 6:00 — 26 commitsSun 7:00 — 19 commitsSun 8:00 — 21 commitsSun 9:00 — 12 commitsSun 10:00 — 25 commitsSun 11:00 — 41 commitsSun 12:00 — 27 commitsSun 13:00 — 37 commitsSun 14:00 — 31 commitsSun 15:00 — 30 commitsSun 16:00 — 34 commitsSun 17:00 — 23 commitsSun 18:00 — 25 commitsSun 19:00 — 13 commitsSun 20:00 — 14 commitsSun 21:00 — 25 commitsSun 22:00 — 44 commitsSun 23:00 — 33 commitsMon 0:00 — 38 commitsMon 1:00 — 36 commitsMon 2:00 — 37 commitsMon 3:00 — 44 commitsMon 4:00 — 45 commitsMon 5:00 — 35 commitsMon 6:00 — 39 commitsMon 7:00 — 25 commitsMon 8:00 — 7 commitsMon 9:00 — 22 commitsMon 10:00 — 20 commitsMon 11:00 — 28 commitsMon 12:00 — 43 commitsMon 13:00 — 48 commitsMon 14:00 — 36 commitsMon 15:00 — 52 commitsMon 16:00 — 40 commitsMon 17:00 — 53 commitsMon 18:00 — 45 commitsMon 19:00 — 50 commitsMon 20:00 — 56 commitsMon 21:00 — 41 commitsMon 22:00 — 42 commitsMon 23:00 — 39 commitsTue 0:00 — 55 commitsTue 1:00 — 72 commitsTue 2:00 — 80 commitsTue 3:00 — 93 commitsTue 4:00 — 72 commitsTue 5:00 — 56 commitsTue 6:00 — 40 commitsTue 7:00 — 59 commitsTue 8:00 — 42 commitsTue 9:00 — 32 commitsTue 10:00 — 37 commitsTue 11:00 — 17 commitsTue 12:00 — 17 commitsTue 13:00 — 16 commitsTue 14:00 — 33 commitsTue 15:00 — 41 commitsTue 16:00 — 43 commitsTue 17:00 — 45 commitsTue 18:00 — 37 commitsTue 19:00 — 33 commitsTue 20:00 — 37 commitsTue 21:00 — 40 commitsTue 22:00 — 39 commitsTue 23:00 — 36 commitsWed 0:00 — 29 commitsWed 1:00 — 34 commitsWed 2:00 — 39 commitsWed 3:00 — 55 commitsWed 4:00 — 40 commitsWed 5:00 — 50 commitsWed 6:00 — 23 commitsWed 7:00 — 24 commitsWed 8:00 — 23 commitsWed 9:00 — 24 commitsWed 10:00 — 19 commitsWed 11:00 — 27 commitsWed 12:00 — 23 commitsWed 13:00 — 30 commitsWed 14:00 — 40 commitsWed 15:00 — 22 commitsWed 16:00 — 12 commitsWed 17:00 — 19 commitsWed 18:00 — 18 commitsWed 19:00 — 35 commitsWed 20:00 — 18 commitsWed 21:00 — 52 commitsWed 22:00 — 58 commitsWed 23:00 — 41 commitsThu 0:00 — 48 commitsThu 1:00 — 31 commitsThu 2:00 — 45 commitsThu 3:00 — 46 commitsThu 4:00 — 44 commitsThu 5:00 — 39 commitsThu 6:00 — 37 commitsThu 7:00 — 47 commitsThu 8:00 — 33 commitsThu 9:00 — 43 commitsThu 10:00 — 41 commitsThu 11:00 — 29 commitsThu 12:00 — 40 commitsThu 13:00 — 49 commitsThu 14:00 — 51 commitsThu 15:00 — 36 commitsThu 16:00 — 40 commitsThu 17:00 — 55 commitsThu 18:00 — 36 commitsThu 19:00 — 42 commitsThu 20:00 — 36 commitsThu 21:00 — 33 commitsThu 22:00 — 36 commitsThu 23:00 — 44 commitsFri 0:00 — 50 commitsFri 1:00 — 40 commitsFri 2:00 — 46 commitsFri 3:00 — 48 commitsFri 4:00 — 39 commitsFri 5:00 — 31 commitsFri 6:00 — 20 commitsFri 7:00 — 15 commitsFri 8:00 — 17 commitsFri 9:00 — 10 commitsFri 10:00 — 29 commitsFri 11:00 — 40 commitsFri 12:00 — 47 commitsFri 13:00 — 47 commitsFri 14:00 — 66 commitsFri 15:00 — 19 commitsFri 16:00 — 29 commitsFri 17:00 — 29 commitsFri 18:00 — 42 commitsFri 19:00 — 30 commitsFri 20:00 — 40 commitsFri 21:00 — 35 commitsFri 22:00 — 50 commitsFri 23:00 — 61 commitsSat 0:00 — 37 commitsSat 1:00 — 28 commitsSat 2:00 — 31 commitsSat 3:00 — 26 commitsSat 4:00 — 52 commitsSat 5:00 — 23 commitsSat 6:00 — 18 commitsSat 7:00 — 15 commitsSat 8:00 — 22 commitsSat 9:00 — 19 commitsSat 10:00 — 22 commitsSat 11:00 — 17 commitsSat 12:00 — 23 commitsSat 13:00 — 21 commitsSat 14:00 — 36 commitsSat 15:00 — 57 commitsSat 16:00 — 34 commitsSat 17:00 — 41 commitsSat 18:00 — 34 commitsSat 19:00 — 26 commitsSat 20:00 — 32 commitsSat 21:00 — 17 commitsSat 22:00 — 16 commitsSat 23:00 — 60 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Aug 14, 2026monthly#16+12,740
Aug 13, 2026monthly#16+12,740
Aug 12, 2026monthly#17+12,907
Aug 11, 2026monthly#15+14,276
Aug 10, 2026monthly#15+14,276
Aug 9, 2026monthly#16+15,700
Aug 8, 2026monthly#13+17,141
Aug 7, 2026monthly#8+17,847
Aug 6, 2026monthly#7+17,505
Aug 5, 2026monthly#6+17,070
Aug 4, 2026monthly#6+16,458
Aug 3, 2026monthly#7+16,040
Aug 2, 2026monthly#7+15,871
Aug 1, 2026monthly#8+15,632
Jul 31, 2026monthly#8+15,403
  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • obra/superpowers

    An agentic skills framework & software development methodology that works.

    295.2K stars · Shell

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    272.8K stars · JavaScript

  • NousResearch/hermes-agent

    The agent that grows with you

    251.2K stars · Python

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript

  • yt-dlp/yt-dlp

    A feature-rich command-line audio/video downloader

    195.5K stars · Python