bigquery-sql
BigQuery-specific SQL patterns: UNNEST for array expansion, STRUCT, ARRAY_AGG,…
Load when the user asks about Tableau: find, build, copy, edit, redesign, or check a Tableau workbook, dashboard, view, or data source. Covers the tableau_* tools, the .twb builder with its design layer, data sources on SignalPilot connections, the design standard, and the
$ npx -y skills add signalpilot-labs/signalpilot --skill tableau --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/tableauContext preview
The summary Claude sees to decide when to auto-load this skill.
Load when the user asks about Tableau: find, build, copy, edit, redesign, or check a Tableau workbook, dashboard, view, or data source. Covers the tableau_* tools, the .twb builder with its design layer, data sources on SignalPilot connections, the design standard, and the
name: tableau description: "Load when the user asks about Tableau: find, build, copy, edit, redesign, or check a Tableau workbook, dashboard, view, or data source. Covers the tableau_* tools, the .twb builder with its design layer, data sources on SignalPilot connections, the design standard, and the render review." type: skill
The org connected a Tableau site to SignalPilot. The `tableau_*` tools act on that site. The gateway holds the Tableau token and the warehouse passwords. You never see them and you must not ask the user for them.
A Tableau workbook is one XML file (`.twb`). A dashboard is part of a workbook. To change a dashboard, you download the workbook, change the XML, and publish the workbook again. Workbooks can be large (1 to 15 MB). Do not read a whole workbook file into your context. Use the scripts in this skill directory and targeted `grep` or Python edits.
Scripts (Python standard library only). Run them with `python3 "${CLAUDE_SKILL_DIR}/<script>"`:
| Script | Use it to | |---|---| | `twb_inspect.py` | Summarize a workbook: data sources, dashboards, sheets, warnings. Show one sheet or one dashboard in detail. | | `twb_retarget.py` | Point a workbook at other data: remove extracts, change database servers, change the Tableau site, rename published data source references, replace file sources. | | `twb_build.py` | Build a workbook from a JSON spec. The contract is `twb_spec.schema.json`. With `"theme": {"name": "sp"}` it uses the design layer (`twb_design.py`, `twb_layout.py`): cards, combo charts, ranked and status bars, styled tables, and a card-grid page. Examples: `examples/team_scorecard.spec.json`, `examples/ae_scorecard.spec.json`. |
Read these files in this skill directory:
| File | When | |---|---| | `DESIGN.md` | Before you build or change any dashboard. It is the design standard and the render review checklist. | | `QUIRKS.md` | When a publish or a render fails, or before you edit workbook XML by hand. |
| Tool | What it does | |---|---| | `tableau_search` | Find workbooks, views, data sources, and projects by name. | | `tableau_get_workbook` | Get one workbook: project, URL, views, and connections. | | `tableau_download_workbook` | Save the workbook `.twb` in `tableau/` and return a short summary. | | `tableau_publish_workbook` | Publish a `.twb` from your workspace. The gateway adds warehouse credentials to database connections on the SignalPilot connection host. | | `tableau_publish_datasource` | Publish a live data source on a SignalPilot connection (a table or a SQL query). | | `tableau_datasource_fields` | List the fields and types of a published data source. | | `tableau_query_datasource` | Run an aggregate query through Tableau on a published data source. | | `tableau_view_image` | Render a view or dashboard to PNG. It saves `artifacts/tableau-<name>.png` and returns the path, not the image. Open the file with the Read tool to look at it. | | `tableau_view_data` | Get the data behind a view as CSV. | | `tableau_connection_info` | Get the server, port, database, and user name Tableau must use for a SignalPilot connection. No password. |
1. Find before you build. Search the site first. If the user names a workbook or dashboard, use that one. 2. Render before you change. Before you edit a dashboard, render it with `tableau_view_image`. Keep that image to compare. 3. Render after you publish. Render every dashboard you changed or built. Open the saved PNG with the Read tool and look at it. Fix empty sheets, errors, and wrong labels before you report. 4. Check the numbers. For each headline number, compare `tableau_query_datasource` (or `tableau_view_data`) with a SignalPilot SQL query on the same model. Report the two values. 5. Data comes from SignalPilot connections. Use the chat's selected connection unless the user names another one. Build data sources on dbt models (marts) when one fits the question. 6. Edit in place only when the user asks to edit. To edit, publish with the same workbook name, the same project, and `overwrite` true. If the user asks for a new or copied dashboard, use a new workbook name. 7. Do not delete Tableau content. There is no delete tool. 8. Never write a password, token, or secret into a file. 9. If a step fails, read the error, fix the cause, and try again. Do not report success until the render shows the data. 10. Design is part of the task. Every dashboard you build or change must meet `DESIGN.md`. Use the design layer for new pages. Review each render with the checklist in `DESIGN.md` and fix what fails before you report.
For a small change (a title, a filter, a formula), edit the XML (steps below). For a redesign, or when the page does not meet `DESIGN.md`, rebuild the page with the design layer (Flow B) and replace the old dashboard in the same workbook. Keep every number the old page showed.
1. `tableau_search` with the dashboard or workbook name. Get the workbook. 2. `tableau_view_image` on the dashboard. Keep the image. 3. `tableau_download_workbook`. Then run `twb_inspect.py tableau/<file>.twb` for the summary. 4. Run `twb_inspect.py FILE --dashboard "<name>"` to see its sheets. Run `twb_inspect.py FILE --worksheet "<sheet>"` to see shelves, filters, and formulas of a sheet. 5. Change the XML with a small Python script (read, replace, write). Keep the internal data source names and field names. Tableau uses them in every shelf. Common edits:
worksheet, or a text zone on the dashboard.
the `<column caption='...'>` of the data source.
Repo: signalpilot-labs/signalpilot
BigQuery-specific SQL patterns: UNNEST for array expansion, STRUCT, ARRAY_AGG,…
Load when dbt run or dbt parse fails. Covers YML duplicate patches, ref errors, passthrough…
Populate the knowledge base from dbt project research. Proposes entries across all 6…
Load when task involves dbt snapshots, SCD Type 2, or tracking data changes over time. Covers…
Load when task involves adding, writing, or fixing dbt unit tests. Covers unit_tests YAML…
Load when task involves dbt model versioning, creating v2 of a model, or backward-compatible…