From grep-research-skills
Build comparison spreadsheets via Grep with structured tabular data — vendor comparisons, market data tables, financial models, dataset analyses, competitive matrices, pricing tables. Use when the user asks for a spreadsheet, table, CSV, comparison matrix, or comparative data. Returns an HTML spreadsheet (with copyable cells / export-CSV button) in the job workspace. Routes to the app-builder expert with output_type=spreadsheet — v2 translates to expert_id=app-builder + effort=build + a "Build a spreadsheet of: " prefix (~$2.00, 10-15 min).
How this skill is triggered — by the user, by Claude, or both
Slash command
/grep-research-skills:grep-build-spreadsheetThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Routes a tabular-data request to Grep's app-builder expert with `output_type=spreadsheet` — sugar for `expert_id=app-builder + effort=build + "Build a spreadsheet of: " prefix`. The result is an HTML spreadsheet (typically `index.html` with copyable cells + export-CSV button) in the job's workspace.
Routes a tabular-data request to Grep's app-builder expert with output_type=spreadsheet — sugar for expert_id=app-builder + effort=build + "Build a spreadsheet of: " prefix. The result is an HTML spreadsheet (typically index.html with copyable cells + export-CSV button) in the job's workspace.
| User wants | Use |
|---|---|
| Spreadsheet / table / CSV / comparison matrix | /grep-build-spreadsheet (you are here) |
| Slidedeck / presentation | /grep-build-slidedeck |
| Interactive HTML app | /grep-build-app |
| Plain research report (with maybe an inline table) | /research |
Concrete signals: "spreadsheet of", "table comparing", "CSV with", "compare X vs Y vs Z on dimensions A, B, C", "build me a financial model", "dataset of top N".
If the user just wants a one-off comparison table inside a written report (not interactive, no export), use /research instead — the build-mode tax (~$2, 10-15 min) isn't worth it for a single table you'd paste into markdown.
node "$SCRIPTS_DIR/update-check.js" 2>/dev/null &
Spreadsheet jobs run at effort=build (~$2.00 PAYG, 10-15 min).
node "$SCRIPTS_DIR/auth.js" status
If "authenticated": false, automatically invoke /grep-login.
SCRIPTS_DIR="$(dirname "$(dirname "$(dirname "$(readlink -f "${CLAUDE_SKILL_DIR}/SKILL.md")")")")/scripts"
RESOURCES_DIR="$(dirname "$SCRIPTS_DIR")/resources"
"Spreadsheet jobs take 10-15 minutes and cost about $2 (PAYG) or count against your subscription. I'll submit now and stream live updates."
If the prompt names the axes ("compare Stripe, Adyen, Braintree on transaction fee, dispute fee, supported currencies"), skip clarification.
If axes aren't obvious, use AskUserQuestion with two questions:
Skip if the prompt is already specific.
If the user wants enforced column types (currency, percent, URL, etc.) or a citation policy per row, plan to pass --json-schema-file="$RESOURCES_DIR/spreadsheet_schema.json" to the submit command in Step 5 (do NOT submit yet — refine the prompt in Step 4 first).
The schema constrains output to {title, description, columns: [{key, label, type, unit}], rows: [{values, citations}], footer_notes}. Column types: string | number | currency | percent | date | url | boolean. Note: per-value type validation against the column types is left to the app-builder — the schema only enforces the shape (columns array, rows array, presence of required top-level fields).
For free-form spreadsheets (no enforced types), omit the schema flag.
Don't submit here. This step decides whether the schema flag will be added to Step 5's command. The actual submit happens once, in Step 5.
Refine the user's raw request into a spreadsheet brief:
Example:
Submit ONCE here, using the refined prompt from Step 4. Append --json-schema-file=... only if Step 3 said to use the schema.
Free-form (no schema):
node "$SCRIPTS_DIR/grep-api.js" run "<refined>" \
--output-type=spreadsheet --max-wait=1800 2>&1
Schema-constrained:
node "$SCRIPTS_DIR/grep-api.js" run "<refined>" \
--output-type=spreadsheet \
--json-schema-file="$RESOURCES_DIR/spreadsheet_schema.json" \
--max-wait=1800 2>&1
--output-type=spreadsheet is sugar for --expert-id=app-builder --effort=build. Don't pass both.
Run with Monitor (timeout_ms: 1800000, persistent: false). Only one submit per skill invocation — the build tier is ~$2 each.
"Spreadsheet job
<slug>started — 10-15 min. I'll stream updates and post the URL when ready."
When the job completes:
node "$SCRIPTS_DIR/grep-api.js" files <slug>
Find the spreadsheet — typically index.html (sometimes with companion data.csv or data.json). Print the URL using $GREP_API_BASE (or fall back to https://api.grep.ai) so staging / preview environments work too:
API_BASE="${GREP_API_BASE:-https://api.grep.ai}"
echo "$API_BASE/api/v2/research/<slug>/files/index.html"
Tell the user how to use it:
"Your spreadsheet is ready:
$API_BASE/api/v2/research/<slug>/files/index.html
- Sort any column by clicking the header
- Export CSV — most templates include a 'Download CSV' button. If not, copy cells directly into Excel/Sheets.
- Local copy:
curl -L \"$API_BASE/api/v2/research/<slug>/files/index.html\" -H 'Authorization: Bearer <token>' > /tmp/spreadsheet.html && open /tmp/spreadsheet.html"
If a data.csv or data.json is in the workspace, mention it — those are easier to pipe into other tools than scraping the HTML.
If the user wants more rows, different columns, or a re-rank, use /grep-continue <slug> "<follow-up>" instead of a fresh job. The existing workspace + research context get reused — cheaper.
/research and let it write a markdown table inline. Build mode is only worth it for interactive spreadsheets the user will sort / filter / export.--effort=low or --effort=medium with --output-type=spreadsheet — sugar already pins effort=build.--expert-id=app-builder alongside --output-type=spreadsheet — redundant; sugar already does that.--max-wait=540 — spreadsheet builds need 10-15 min. --max-wait=1800 + Monitor.Exit code 2 means --max-wait elapsed but the job is still running server-side. Tell the user "Still building (job: ). Checking back." Use result <slug> once enough time passes, or invoke the /ultra-research polling pattern.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub parcha-ai/grep-research-skills --plugin grep-research-skills