Not in the top 1,000 by GitHub stars
gmickel/sheets-cli
Composable Google Sheets CLI for humans and agents. Read, write, update cells by key—with Agent Skills for Claude Code and OpenAI Codex.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
1c0e3dc0aa7d → 1c0e3dc0aa7d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 1c0e3dc0aa7d
No earlier version was observed for comparison.
Verified commit 1c0e3dc0aa7d158ca06ba45f412cb32a372e657b
git clone --filter=blob:none --no-checkout https://github.com/gmickel/sheets-cli.git .hotskills/gmickel-sheets-cli && git -C .hotskills/gmickel-sheets-cli checkout --detach 1c0e3dc0aa7d158ca06ba45f412cb32a372e657b
# Copy each selected skill directory from .hotskills/gmickel-sheets-cli into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/gmickel/sheets-cli.git .hotskills/gmickel-sheets-cli && git -C .hotskills/gmickel-sheets-cli checkout --detach 1c0e3dc0aa7d158ca06ba45f412cb32a372e657b
# Copy each selected skill directory from .hotskills/gmickel-sheets-cli into .agents/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/gmickel/sheets-cli.git .hotskills/gmickel-sheets-cli && git -C .hotskills/gmickel-sheets-cli checkout --detach 1c0e3dc0aa7d158ca06ba45f412cb32a372e657b
# Copy each selected skill directory from .hotskills/gmickel-sheets-cli into .cursor/skills/<skill-name>/Heat
0.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
sheets-cli
When your agent uses it
Read, write, and update Google Sheets data via CLI. Use when the user asks to read spreadsheet data, update cells, append rows, or work with Google Sheets. Triggers on mentions of spreadsheets, sheets, Google Sheets, tabular data in the cloud, or specific sheet names like "Projects" or "Tasks".
What it loads into context
Frontmatter
72 tokensAlways available to the agent
SKILL.md
1,634 tokensWhen the skill is activated
Reference documents
10,068 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Reference
- Workflow Pattern
- Commands
- Row Numbering
- Global Options
- Output Format
- Best Practices
- Exit Codes
Scripts executed separately
.flow/bin/flowctl.flow/bin/flowctl.pypackage.jsonsrc/__tests__/auth.test.tssrc/__tests__/cli.test.tssrc/__tests__/output.test.tssrc/__tests__/sheets.test.tssrc/__tests__/skill-sync.test.tssrc/__tests__/types.test.tssrc/auth.tssrc/cli.tssrc/output.tssrc/sheets.tssrc/skill.tssrc/types.ts
Files
.claude/CLAUDE.mddoc5,883 bytes.claude/settings.jsonasset226 bytes.claude/skills/sheets-cli.mddoc4,525 bytes.cursor/hooks.jsonasset123 bytes.cursor/rules/ultracite.mdcasset5,230 bytes.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdcasset3,604 bytes.flow/bin/flowctlruns177 bytes.flow/bin/flowctl.pyruns264,573 bytes.flow/config.jsonasset185 bytes.flow/meta.jsonasset118 bytes.flow/usage.mddoc3,379 bytes.github/FUNDING.ymlasset65 bytes.gitignoreasset881 bytes.vscode/settings.jsonasset906 bytesAGENTS.mddoc5,041 bytesCLAUDE.mddoc3,604 bytesREADME.mddoc9,221 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesSKILL.mdcore5,940 bytesbiome.jsoncasset397 bytesbun.lockasset31,756 byteslefthook.ymlasset215 bytespackage.jsonruns1,160 bytesprd.mddoc6,843 bytessrc/__tests__/auth.test.tsruns4,101 bytessrc/__tests__/cli.test.tsruns11,765 bytessrc/__tests__/output.test.tsruns3,315 bytessrc/__tests__/sheets.test.tsruns18,871 bytessrc/__tests__/skill-sync.test.tsruns483 bytessrc/__tests__/types.test.tsruns1,832 bytessrc/auth.tsruns6,663 bytessrc/cli.tsruns23,941 bytessrc/output.tsruns1,093 bytessrc/sheets.tsruns21,985 bytessrc/skill.tsruns228 bytessrc/types.tsruns1,928 bytestsconfig.jsonasset606 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubSkills included
- sheets-cli
Repository facts
- License
- No license detected
- Created
- Dec 16, 2025
- Last pushed
- Feb 11, 2026
- Forks
- 6
- Open issues
- 1
- Project activity
- Slowing
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 14 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 3 dangerous shell commandsin 2 files: src/__tests__/auth.test.ts:23 src/auth.ts:223
- 58 network referencesin 8 files: README.md:1 src/__tests__/sheets.test.ts:360 src/__tests__/types.test.ts:26 and 5 more
- No hidden or obfuscated text
- No instruction overrides
- 15 executable scriptsin 15 files: .flow/bin/flowctl:1 .flow/bin/flowctl.py:1 package.json:1 and 12 more
- 24 references to secretsin 6 files: .flow/bin/flowctl.py:116 src/auth.ts:48 .gitignore:19 and 3 more
- No requests to vote in Hot
Show all 100 signals by file
.flow/bin/flowctl
- Executable scriptline 1
#!/bin/bash
.flow/bin/flowctl.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 406
[Credential-related source omitted] - Access to secretsline 753
[Credential-related source omitted] - Access to secretsline 1233
[Credential-related source omitted] - Access to secretsline 1256
[Credential-related source omitted] - Access to secretsline 1267
[Credential-related source omitted] - Access to secretsline 1268
[Credential-related source omitted] - Access to secretsline 1738
[Credential-related source omitted] - Access to secretsline 1762
[Credential-related source omitted] - Access to secretsline 2406
[Credential-related source omitted] - Access to secretsline 2407
[Credential-related source omitted] - Access to secretsline 5832
[Credential-related source omitted] - Access to secretsline 6056
[Credential-related source omitted] - Access to secretsline 6413
[Credential-related source omitted]
.flow/usage.md
- Network accessline 95
- Human docs: https://github.com/gmickel/gmickel-claude-marketplace/blob/main/plugins/flow-next/docs/flowctl.md
.gitignore
README.md
- Network accessline 1
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://em-content.zobj.net/source/apple/391/scroll_1f4dc.png"> - Network accessline 2
<picture> <source media="(prefers-color-scheme: dark)" srcset="https://em-content.zobj.net/source/apple/391/scroll_1f4dc.png"> <img alt="sheets-cli" src="https://em-content.zobj.net/source/apple/391/scroll_1f4dc.png" width="96"> - Network accessline 3
<source media="(prefers-color-scheme: dark)" srcset="https://em-content.zobj.net/source/apple/391/scroll_1f4dc.png"> - Network accessline 4
<img alt="sheets-cli" src="https://em-content.zobj.net/source/apple/391/scroll_1f4dc.png" width="96"> - Network accessline 23
<p align="center"> <img src="https://img.shields.io/badge/bun-%23000000.svg?style=flat&logo=bun&logoColor=white" alt="Bun"> - Network accessline 24
<img src="https://img.shields.io/badge/bun-%23000000.svg?style=flat&logo=bun&logoColor=white" alt="Bun"> - Network accessline 25
<img src="https://img.shields.io/badge/typescript-%23007ACC.svg?style=flat&logo=typescript&logoColor=white" alt="TypeScript"> - Network accessline 26
<img src="https://img.shields.io/badge/Google%20Sheets-34A853?style=flat&logo=google-sheets&logoColor=white" alt="Google Sheets"> - Network accessline 27
<br> <img src="https://img.shields.io/badge/Claude_Code-D97757?style=flat&logo=anthropic&logoColor=white" alt="Claude Code"> <img src="https://img.shields.io/badge/OpenAI_Codex-412991?style=flat&logo=openai&logoColor=white" alt="OpenAI - Network accessline 28
<img src="https://img.shields.io/badge/Claude_Code-D97757?style=flat&logo=anthropic&logoColor=white" alt="Claude Code"> - Network accessline 29
<img src="https://img.shields.io/badge/OpenAI_Codex-412991?style=flat&logo=openai&logoColor=white" alt="OpenAI Codex"> - Network accessline 34
> **📢 New Project:** Check out [**GNO**](https://gno.sh) — local hybrid search for your documents (Markdown, PDF, Word, Excel). Combines BM25 + vector search with MCP integration for AI agents. Great companion to sheets-cli: search your loc - Network accessline 50
> **🆕 Agent Skills** — Install as a skill for [Claude Code](https://claude.ai/code), [OpenAI Codex](https://openai.com/index/openai-codex/), or VS Code (Insiders preview; enable `chat.useAgentSkills`). The agent automatically discovers shee - Network accessline 56
**Prerequisites:** [Bun](https://bun.sh) runtime - Network accessline 59
git clone https://github.com/gmickel/sheets-cli.git - Network accessline 86
1. Go to [Google Cloud Console → APIs](https://console.cloud.google.com/apis/library) - Network accessline 92
1. Go to [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials) 2. Create **OAuth 2.0 Client ID** → Desktop app 3. Download the JSON file - Network accessline 96
> Desktop apps auto-allow localhost redirects. CLI captures OAuth code via `http://localhost:3847`. - Access to secretsline 101
[Credential-related source omitted] - Network accessline 265
Installs an [Agent Skill](https://docs.anthropic.com/en/docs/agents-and-tools/agent-skills/overview) that teaches the agent how to use sheets-cli. After installing, the agent automatically discovers sheets-cli when you mention spreadsheets, - Network accessline 321
<p align="center"> <sub>Built with <a href="https://bun.sh">Bun</a> • Styled for machines and humans alike</sub> - Network accessline 322
<sub>Built with <a href="https://bun.sh">Bun</a> • Styled for machines and humans alike</sub>
package.json
- Executable scriptline 1
Executable file - Network accessline 7
"repository": { "type": "git", "url": "https://github.com/gmickel/sheets-cli" - Network accessline 8
"type": "git", "url": "https://github.com/gmickel/sheets-cli" }, - Network accessline 9
"url": "https://github.com/gmickel/sheets-cli" - Network accessline 10
}, "bugs": { "url": "https://github.com/gmickel/sheets-cli/issues" - Network accessline 11
"bugs": { "url": "https://github.com/gmickel/sheets-cli/issues" }, - Network accessline 12
"url": "https://github.com/gmickel/sheets-cli/issues"
prd.md
- Network accessline 200
[1]: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/append?utm_source=chatgpt.com "Method: spreadsheets.values.append | Google Sheets" - Network accessline 201
[2]: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchUpdate?utm_source=chatgpt.com "Method: spreadsheets.values.batchUpdate | Google Sheets" - Network accessline 202
[3]: https://bun.com/docs/bundler/executables?utm_source=chatgpt.com "Single-file executable" - Network accessline 203
[4]: https://bun.com/blog/bun-v1.3.3?utm_source=chatgpt.com "Bun v1.3.3 | Bun Blog"
src/__tests__/auth.test.ts
- Executable scriptline 1
Executable file - Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Dangerous shell operationline 23
await Bun.$`rm -rf /tmp/test-sheets-cli`.quiet().nothrow(); - Dangerous shell operationline 28
await Bun.$`rm -rf /tmp/test-sheets-cli`.quiet().nothrow();
src/__tests__/cli.test.ts
- Executable scriptline 1
Executable file
src/__tests__/output.test.ts
- Executable scriptline 1
Executable file
src/__tests__/sheets.test.ts
- Executable scriptline 1
Executable file - Network accessline 360
{ ID: "25", URL: "https://example.com", - Network accessline 361
ID: "25", URL: "https://example.com", Status: "2do", - Network accessline 362
URL: "https://example.com", - Network accessline 390
{ ID: "25", URL: "https://example.com", - Network accessline 391
ID: "25", URL: "https://example.com", Status: "2do", - Network accessline 392
URL: "https://example.com", - Network accessline 405
expect(body.values[0]).toEqual([ "25", "https://example.com", - Network accessline 406
"25", "https://example.com", "2do", - Network accessline 407
"https://example.com",
src/__tests__/skill-sync.test.ts
- Executable scriptline 1
Executable file
src/__tests__/types.test.ts
- Executable scriptline 1
Executable file - Network accessline 26
test("extracts ID from full Google Sheets URL", () => { const url = "https://docs.google.com/spreadsheets/d/abc123-XYZ_test-456/edit#gid=0"; - Network accessline 27
const url = "https://docs.google.com/spreadsheets/d/abc123-XYZ_test-456/edit#gid=0"; expect(parseSpreadsheetId(url)).toBe("abc123-XYZ_test-456"); - Network accessline 28
"https://docs.google.com/spreadsheets/d/abc123-XYZ_test-456/edit#gid=0"; - Network accessline 32
test("extracts ID from URL without fragment", () => { const url = "https://docs.google.com/spreadsheets/d/abc123-XYZ_test/edit"; - Network accessline 33
const url = "https://docs.google.com/spreadsheets/d/abc123-XYZ_test/edit"; - Network accessline 42
test("handles URL with query params", () => { const url = "https://docs.google.com/spreadsheets/d/abc123/edit?usp=sharing"; - Network accessline 43
const url = "https://docs.google.com/spreadsheets/d/abc123/edit?usp=sharing"; expect(parseSpreadsheetId(url)).toBe("abc123"); - Network accessline 44
"https://docs.google.com/spreadsheets/d/abc123/edit?usp=sharing";
src/auth.ts
- Executable scriptline 1
Executable file - Network accessline 6
const SCOPES = [ "https://www.googleapis.com/auth/spreadsheets", - Network accessline 7
"https://www.googleapis.com/auth/spreadsheets", - Network accessline 8
"https://www.googleapis.com/auth/drive.readonly", - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Network accessline 82
server = Bun.serve({ port, fetch(req) { - Network accessline 83
port, fetch(req) { const url = new URL(req.url); - Network accessline 84
fetch(req) { - Access to secretsline 158
[Credential-related source omitted] - Network accessline 161
const redirectUri = `http://localhost:${LOOPBACK_PORT}`; - Access to secretsline 164
[Credential-related source omitted] - Dangerous shell operationline 223
await Bun.$`rm ${tokenPath}`.quiet();
src/cli.ts
- Executable scriptline 1
#!/usr/bin/env bun
src/output.ts
- Executable scriptline 1
Executable file
src/sheets.ts
- Executable scriptline 1
Executable file
src/skill.ts
- Executable scriptline 1
Executable file
src/types.ts
- Executable scriptline 1
Executable file - Access to secretsline 2
[Credential-related source omitted] - Network accessline 6
// Parse Google Sheets URL to extract spreadsheet ID // Supports: https://docs.google.com/spreadsheets/d/ID/edit#gid=0 - Network accessline 7
// Supports: https://docs.google.com/spreadsheets/d/ID/edit#gid=0
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 1 fact
- Contacts www.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentionsrc/auth.ts:7High confidence
Signal confidence: 98 facts
- Executable script in code of a file that runs.flow/bin/flowctl:1High confidence
- Executable script in code of a file that runs.flow/bin/flowctl.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:116Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:406Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:753Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:1233Low confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:1256Low confidence
- Access to secrets in a comment of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:1267Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:1268Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:1738Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:1762Low confidence
- Access to secrets in a comment of a file that runs.flow/bin/flowctl.py:2406Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:2407Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:5832Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:6056Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.flow/bin/flowctl.py:6413Low confidence
- Network access in prose of documentation.flow/usage.md:95Low confidence
- Network access in prose of documentationREADME.md:1Low confidence
- Network access in prose of documentationREADME.md:2Low confidence
- Network access in prose of documentationREADME.md:3Low confidence
- Network access in prose of documentationREADME.md:4Low confidence
- Network access in prose of documentationREADME.md:23Low confidence
- Network access in prose of documentationREADME.md:24Low confidence
- Network access in prose of documentationREADME.md:25Low confidence
- Network access in prose of documentationREADME.md:26Low confidence
- Network access in prose of documentationREADME.md:27Low confidence
- Network access in prose of documentationREADME.md:28Low confidence
- Network access in prose of documentationREADME.md:29Low confidence
- Network access in prose of documentationREADME.md:34Low confidence
- Network access in prose of documentationREADME.md:50Low confidence
- Network access in prose of documentationREADME.md:56Low confidence
- Network access in code of documentationREADME.md:59Low confidence
- Network access in prose of documentationREADME.md:86Low confidence
- Network access in prose of documentationREADME.md:92Low confidence
- Network access in prose of documentationREADME.md:96Low confidence
- Access to secrets in code of documentationREADME.md:101Low confidence
- Network access in prose of documentationREADME.md:265Low confidence
- Network access in prose of documentationREADME.md:321Low confidence
- Network access in prose of documentationREADME.md:322Low confidence
- Executable script in code of a file that runspackage.json:1High confidence
- Network access in code of a file that runspackage.json:7High confidence
- Network access in code of a file that runspackage.json:8High confidence
- Network access in code of a file that runspackage.json:9High confidence
- Network access in code of a file that runspackage.json:10High confidence
- Network access in code of a file that runspackage.json:11High confidence
- Network access in code of a file that runspackage.json:12High confidence
- Network access in prose of documentationprd.md:200Low confidence
- Network access in prose of documentationprd.md:201Low confidence
- Network access in prose of documentationprd.md:202Low confidence
- Network access in prose of documentationprd.md:203Low confidence
and 48 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Path .claude/CLAUDE.md | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Native | Path .cursor/hooks.json | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.