| name | sheet-read |
| description | Read rows from the coach's Programming Source Sheet and/or Movement Source Sheet using gogcli, resolving the real spreadsheet ID from local plugin data instead of any hardcoded value. Use this as stage 1 of the Rubicon programming pipeline, before programming-inference. |
Sheet Read
Stage 1 of 4 in the Rubicon coach programming pipeline:
sheet-read → programming-inference → preview → publish
This skill reads raw rows out of Google Sheets so they can later be
transformed into Rubicon's programming graph. It does not write anything to
Rubicon. Stop after this stage and let the coach confirm the pulled rows look
right before moving on to programming-inference.
Where the sheet IDs come from
This plugin never hardcodes a spreadsheet ID or URL — not as a real value,
not as a "just an example" placeholder. The real IDs belong to the coach
(Chris) and only exist locally, outside this repo.
On first install, the sheet-id-onboarding hook (hooks/hooks.json) prompts
for both sheet IDs/URLs and writes them to:
$PLUGIN_DATA/sheet-ids.json
with shape:
{
"programmingSourceSheetId": "<resolved at runtime>",
"movementSourceSheetId": "<resolved at runtime>"
}
Before reading any sheet, read this file and use the ID it contains. If the
file is missing or a field is empty, tell the user to re-run onboarding
rather than asking them to paste the ID into chat (chat transcripts are not
a safe place for this either — treat the sheet identity as sensitive, same
as a credential).
Refer to the two sheets by name in all output to the user:
- "the Programming Source Sheet"
- "the Movement Source Sheet"
Never print the literal spreadsheet ID or a docs.google.com/.../d/... URL
into any file this plugin writes to the repo, into commit messages, or into
any artifact that might get shared publicly. It is fine to use the ID
in-memory to make the gog call itself.
Reading rows with gogcli
This plugin uses gogcli (the gog CLI, installed at /opt/homebrew/bin/gog
in the reference environment) for all Google Sheets access. gog is
keychain-backed, per-account OAuth — it authenticates as the coach's own
Google account and addresses sheets purely by spreadsheetId. No Google
credentials are ever embedded in this plugin.
The exact flag names below are illustrative, not guaranteed — consult
gog sheets --help (and gog --help) for the exact current flags before
relying on this shape, since gogcli's CLI surface may have moved since this
skill was written:
gog sheets read \
--spreadsheet-id "<id from sheet-ids.json>" \
--range "<sheet name or A1 range, e.g. 'Programming'!A1:Z>"
General approach:
- Load
programmingSourceSheetId and/or movementSourceSheetId from
$PLUGIN_DATA/sheet-ids.json depending on what the coach asked for.
- Run
gog sheets --help if you haven't confirmed the current subcommand
and flag names in this session.
- Read the relevant range(s). Prefer reading a named tab/range over the
whole sheet if the coach specifies a week, block, or session.
- Return the rows as structured data (e.g. a table or JSON) in the
conversation so the coach can sanity-check them — do not silently pass
them forward to
programming-inference without a checkpoint, unless the
coach explicitly says to proceed.
Handoff
Once the coach confirms the pulled rows look correct, hand off to the
programming-inference skill with the raw row data. Do not attempt to infer
Rubicon programming operations in this skill — that belongs entirely to
programming-inference.