Master Schedule
Silent setup check. Verifies master-schedule.json exists and the sheet is accessible. If not, copies the template sheet to the user's account and writes master-schedule.json. Called automatically by other skills before reading or writing product data.
Install
Copy install prompt for AI
Natural-language prompt you can paste into any Claude conversation. Claude Code installs it to ~/.claude/skills/master-schedule/; claude.ai and Claude Desktop adopt it for the current chat and tell you how to save it permanently.
Copy install command
curl -fsSL https://spellbook.build/i/master-schedule | bash
Drops the file into ~/.claude/skills/master-schedule/SKILL.md. The script is plain shell — inspect it by dropping the | bash.
Download skill folder
Download .zipA master-schedule/ folder with SKILL.md (and any supporting files) — unzip into ~/.claude/skills/.
Benchmarks
This skill isn't in a benchmarked category yet. Set metadata.type in the frontmatter to activate scorecards.
Skill content
---
name: master-schedule
description: Silent setup check. Verifies master-schedule.json exists and the sheet is accessible. If not, copies the template sheet to the user's account and writes master-schedule.json. Called automatically by other skills before reading or writing product data.
allowed-tools:
- Read
- Write
- Bash
- mcp__google-sheets__list_sheets
- mcp__google-sheets__get_sheet_data
- mcp__google-sheets__create_spreadsheet
- mcp__google-sheets__update_cells
---
# /master-schedule — Sheet Setup Check
**Called automatically by all product skills before reading or writing.** Can also be run manually to reconnect or reset.
Template sheet ID: `1mWnExnSWTKJv0vbu1mDnrQFmv_Iz_fNklIeuBYfMB5k`
---
## Step 1: Check for master-schedule.json
```bash
cat ./master-schedule.json 2>/dev/null
```
**Legacy config:** if `master-schedule.json` is missing but `./canoa.json` exists (written by plugin versions ≤ 1.0.0), migrate it — `mv ./canoa.json ./master-schedule.json` — and continue as found.
### Found and valid → Step 2 (verify access)
### Not found → Step 3 (auto-setup)
---
## Step 2: Verify Sheet Access
Call `mcp__google-sheets__list_sheets` with the `master_sheet_id` from `master-schedule.json`.
- **Success** → sheet is accessible. Return silently — the calling skill continues.
- **404 / error** → sheet was deleted or moved. Proceed to Step 3 to set up a new one.
---
## Step 3: Auto-Setup
No config found or sheet inaccessible. Set up automatically without asking the user.
### 3a: Copy the template
Attempt to copy the template sheet using the Google Drive API (`files.copy`). If a Drive MCP tool is available, use it:
```
drive.files.copy
fileId: "1mWnExnSWTKJv0vbu1mDnrQFmv_Iz_fNklIeuBYfMB5k"
title: "Product Library — {today's date}"
```
**If no Drive copy tool is available**, fall back to creating a new spreadsheet and writing the header row:
1. Call `mcp__google-sheets__create_spreadsheet` with title `"Product Library — {today's date}"`
2. Write the 33-column header row to `Sheet1!A1:AG1` using the CSV header from `../../schema/product-schema.md`
Note in `master-schedule.json` whether this was a template copy or a fresh sheet (`"setup": "copy"` or `"setup": "fresh"`).
### 3b: Identify the Products tab
Look for a tab named `Products`. If not found (e.g. fresh sheet named `Sheet1`), use whatever tab exists and record its name in `master-schedule.json`.
### 3c: Write master-schedule.json
```json
{
"master_sheet_id": "{new sheet ID}",
"sheet_title": "Product Library — {date}",
"sheet_url": "https://docs.google.com/spreadsheets/d/{id}",
"products_tab": "Products",
"project_name": "",
"setup": "copy",
"created_at": "{ISO timestamp}"
}
```
### 3d: Notify the user
```
✓ Product library created and connected.
docs.google.com/spreadsheets/d/{id}
You may want to rename this sheet and set a project name.
Run /master-schedule to update.
```
Then return — the calling skill continues.
---
## Manual Run
When invoked directly (`/master-schedule`), run the same flow but also:
- If `master-schedule.json` exists and the sheet is accessible, show current status:
```
Product library connected.
Project: {project_name or "(unnamed)"}
Sheet: {sheet_title}
URL: docs.google.com/spreadsheets/d/{id}
Tab: {products_tab}
Options:
1. Update project name
2. Connect a different sheet (paste URL)
3. Reset (create a new copy of the template)
```
- If user chooses (2), ask for URL, validate, update `master-schedule.json`.
- If user chooses (3), run Step 3 again.
---
## MCP Connection Errors
If any MCP call fails with "tool not found" or auth error, stop and report:
```
Google Sheets MCP is not connected or not authenticated.
To connect it, add to ~/.claude/mcp_settings.json:
{
"mcpServers": {
"google-sheets": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-google-sheets"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "<path-to-service-account-json>"
}
}
}
}
Then restart Claude Code and try again.
Need help creating a service account? Ask for instructions.
```
---
## Edge Cases
| Situation | Handling |
|-----------|----------|
| `master-schedule.json` exists, sheet accessible | Return silently |
| `master-schedule.json` exists, sheet deleted | Auto-create new copy, update `master-schedule.json` |
| `master-schedule.json` missing | Auto-create new copy, write `master-schedule.json` |
| Drive copy tool not available | Fall back to fresh sheet + header row |
| MCP not connected | Stop, show setup instructions |