- opencode agent (fitness-trainer) for personal training conversations - fitness-workout skill with programming methodology guidelines - workout.py script (1RM, volume, cycle helpers) - logs/ directory for workout and check-in markdown files - inputs/ with user profile (equipment, goals, medical, Juggernaut history) - google-sheets-automation skill for optional Sheets integration - AGENTS.md with setup documentation
125 lines
3.5 KiB
Markdown
125 lines
3.5 KiB
Markdown
---
|
|
name: google-sheets-automation
|
|
description: "Lightweight Google Sheets integration with standalone OAuth authentication. No MCP server required. Full read/write access."
|
|
risk: safe
|
|
---
|
|
|
|
# Google Sheets
|
|
|
|
Lightweight Google Sheets integration with standalone OAuth authentication. No MCP server required. Full read/write access.
|
|
|
|
## Prerequisites
|
|
|
|
```bash
|
|
uv sync
|
|
source .venv/bin/activate
|
|
```
|
|
|
|
## First-Time Setup
|
|
|
|
Authenticate with Google (opens browser):
|
|
```bash
|
|
python .agents/skills/google-sheets-automation/scripts/auth.py login
|
|
```
|
|
|
|
Check authentication status:
|
|
```bash
|
|
python .agents/skills/google-sheets-automation/scripts/auth.py status
|
|
```
|
|
|
|
Logout when needed:
|
|
```bash
|
|
python .agents/skills/google-sheets-automation/scripts/auth.py logout
|
|
```
|
|
|
|
## Read Commands
|
|
|
|
```bash
|
|
# Get spreadsheet content as plain text (default)
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py get-text SPREADSHEET_ID
|
|
|
|
# Get spreadsheet content as CSV
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py get-text SPREADSHEET_ID --format csv
|
|
|
|
# Get spreadsheet content as JSON
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py get-text SPREADSHEET_ID --format json
|
|
|
|
# Get values from a specific range (A1 notation)
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py get-range SPREADSHEET_ID "Sheet1!A1:D10"
|
|
|
|
# Find spreadsheets by search query
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py find "budget 2024"
|
|
|
|
# Get spreadsheet metadata
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py get-metadata SPREADSHEET_ID
|
|
```
|
|
|
|
## Write Commands
|
|
|
|
```bash
|
|
# Update a range of cells with values (JSON 2D array)
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py update-range SPREADSHEET_ID "Sheet1!A1:B2" '[["Hello","World"],["Foo","Bar"]]'
|
|
|
|
# Update with RAW input (no formula parsing)
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py update-range SPREADSHEET_ID "Sheet1!A1:B1" '[["=SUM(A1:A5)","text"]]' --raw
|
|
|
|
# Append rows after the last data row
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py append-rows SPREADSHEET_ID "Sheet1!A:Z" '[["New Row Col A","New Row Col B"]]'
|
|
|
|
# Clear values from a range (keeps formatting)
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py clear-range SPREADSHEET_ID "Sheet1!A1:B10"
|
|
|
|
# Batch update (advanced - for formatting, merging, etc.)
|
|
python .agents/skills/google-sheets-automation/scripts/sheets.py batch-update SPREADSHEET_ID '[{"updateCells":{"range":{"sheetId":0},"fields":"userEnteredValue"}}]'
|
|
```
|
|
|
|
## Spreadsheet ID
|
|
|
|
You can use either:
|
|
- The spreadsheet ID: `1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms`
|
|
- The full URL: `https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit`
|
|
|
|
The script automatically extracts the ID from URLs.
|
|
|
|
## Output Formats
|
|
|
|
### Text (default)
|
|
```
|
|
Name | Revenue | Units
|
|
Product A | 10000 | 50
|
|
```
|
|
|
|
### CSV
|
|
```
|
|
Name,Revenue,Units
|
|
Product A,10000,50
|
|
```
|
|
|
|
### JSON
|
|
```json
|
|
{
|
|
"Q1": [
|
|
["Name", "Revenue", "Units"],
|
|
["Product A", "10000", "50"]
|
|
]
|
|
}
|
|
```
|
|
|
|
## A1 Notation Examples
|
|
|
|
- `Sheet1!A1:B10` - Range A1 to B10 on Sheet1
|
|
- `Sheet1!A:A` - All of column A
|
|
- `Sheet1!1:1` - All of row 1
|
|
- `A1:C5` - Range on the first sheet
|
|
|
|
## Token Management
|
|
|
|
Tokens stored securely using the system keyring:
|
|
- **macOS**: Keychain
|
|
- **Windows**: Windows Credential Locker
|
|
- **Linux**: Secret Service API (GNOME Keyring, KDE Wallet, etc.)
|
|
|
|
Service name: `google-sheets-skill-oauth`
|
|
|
|
Tokens automatically refresh when expired.
|