.stencila/skills/site-config-review/SKILL.md
Review a Stencila site configuration (stencila.toml) for correctness, completeness, best practices, and rendered appearance. Use when asked to review, audit, validate, check, or assess a site config, stencila.toml, site routes, redirects, site layout, layout presets, site nav, navigation, site access, access control, or site deployment readiness.
npx skillsauth add stencila/stencila site-config-reviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Review a Stencila site configuration (stencila.toml) for structural correctness, route validity, dependency completeness, layout quality, best practices, and rendered appearance. The primary mode is assess and report: identify concrete issues, missing configuration, risky assumptions, and deployment blockers.
This is a review-only skill. Do not use it to create a new site configuration from scratch. Use it when the user wants an assessment of an existing stencila.toml or a proposed configuration change.
Use these references:
references/site-configuration.md for the complete field reference with types, defaults, and examples for every subsection
references/snap-tool.md for visual verification of layout and component changes
Use stencila config check to validate the configuration.
Use stencila config show to inspect the resolved configuration after validation and verify that changes took effect as intended.
| Input | Required | Description |
|---|---|---|
| Site config file | Required | Path to stencila.toml or the config content to review |
| Review scope | Optional | Focus area: full review, routes only, layout only, etc. |
| Deployment target | Optional | Whether the site targets Stencila Cloud, self-hosted, or local preview |
When used standalone, these inputs come from the user or the agent's prompt. When used within a workflow, the workflow's stage prompt will specify how to obtain them.
| Output | Description | |---|---| | Review findings | Prioritized list of blocking, important, and optional findings | | Verdict | Overall assessment: ready to deploy, acceptable with caveats, or not ready |
Evaluate the configuration against these dimensions:
deny_unknown_fields is enforced on all config structs)domain: lowercase domain pattern ^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$workspace.id: pattern ws + 10 lowercase alphanumeric charsworkspace.watch: pattern wa + 10 lowercase alphanumeric charssite.root (or workspace root if no root)?/)?arguments for all non-reserved placeholders? (Reserved: {tag}, {branch}, {i})site.nav) all internal (starting with /)?/ for access config)?Cloud-dependent features require workspace.id:
reviews enabled without workspace.id → warninguploads enabled without workspace.id → warningremotes enabled without workspace.id → warningaccess with non-public levels without workspace.id → warningdomain set without workspace.id → likely misconfigurationmain.width = "none", main.padding = "none", main.title = false; api: left nav + simplified right)[site.layout.components]?rows used only in horizontal regions (header, top, bottom, footer) and not in sidebars?routes?false disables)[site.layout.main] configured appropriately? (width, padding, title)[site.layout.responsive] configured? (breakpoint, toggle-style: fixed-edge/header/hamburger)site.specimen.layout) consistent with the main layout?social-links component in layout but no site.socials configuredcopyright component in layout but no site.author configuredlogo component in layout but no site.logo configuredtitle component in layout but no site.title configuredsite.icons, site.labels, site.descriptions keys — are they using the right format (full route vs bare segment vs label)?icon and image set (only icon displayed)logo configured but no dark variant for sites with color-mode togglesearch = true but no site-search component in layoutactions not configuredworkspace.id and site.domain should be set via dedicated commands, not stencila config setsite.glide enabled but prefetch or cache values seem extremesite.auto-index enabled for directories that already have index files (harmless but redundant)/**) precedes a narrow one (e.g., /docs/**), shadowing the narrow overrideUse snap on the /_specimen/ route to verify rendered appearance when a Stencila server is running:
Read the stencila.toml file.
stencila.toml in the current directory and parent directories.Perform structural validation.
stencila config check to validate the configuration against the schema.stencila config show to confirm the config loads and to inspect the resolved values.Verify routes.
site.routes, check that the target file exists relative to site.root (or workspace root if no root is set)./.{tag}, {branch}, {i} are reserved) have matching arguments.stencila site list to see the full resolved route table and cross-reference with config.stencila site list --expand to verify spread route expansion produces the expected routes.site.nav correspond to actual routes.Check dependencies.
workspace.id is set.domain is set, verify workspace.id is present.Review layout configuration.
references/site-configuration.md for preset defaults, region structure, and component types.[site.layout.components].social-links in layout → site.socials configured).rows is used only in horizontal regions (header, top, bottom, footer), not in sidebars.Check best practices.
site.icons, site.labels, site.descriptions, site.featured.Visual verification with snap (when available).
/_specimen/ route:
snap(route: "/_specimen/", measure: "site") — verify layout regions render correctlysnap(route: "/_specimen/", screenshot: true, full_page: true) — visual overviewsnap(route: "/_specimen/", device: "mobile", measure: "site") — responsive checksnap(route: "/_specimen/", dark: true, screenshot: true) — dark mode checksnap(route: "/_specimen/", tokens: true, token_prefix: ["layout", "nav"]) — verify layout token valuessnap(route: "/_specimen/", palette: true) — color harmony"/") and key content routes.index.*, main.*, and README.* act as the index.html for their containing directory, so docs/README.md, docs/main.md, and docs/index.md all render at "/docs/".Produce structured review output.
Structure the response like this:
Each finding should cite the specific config key (e.g., site.layout.header.end) and, when available, snap evidence.
Input: Review our site configuration for deployment readiness.
Output:
stencila.toml — docs preset, 12 routes, custom domain, access restrictionssite.access has non-public routes but workspace.id is not set — access restrictions will not be enforced without Stencila Cloud hostingsite.routes./old-docs/ redirects to /docs/ but uses status 302; use 301 for permanent redirectssite.nav includes /api/reference/ but no matching route exists in site.routes or as a discoverable filesite.featured.docs has both icon and image — only the icon will displaysite.layout.header.end duplicates the docs preset default (["site-search"]) — can be removedsite.logo.dark for sites with color-mode togglesnap(route: "/_specimen/", measure: "site") confirmed all layout regions render; nav-tree shows 10 items matching configsnap(route: "/_specimen/", device: "mobile", measure: "site") showed sidebar collapses correctly at mobile breakpointsnap(route: "/_specimen/", dark: true, screenshot: true) revealed logo is hard to read on dark background — missing dark variantstencila config check — validate configuration against the schemastencila config show — inspect resolved values, verify domain and workspace linkagestencila site list — cross-reference all routesstencila site list --expand — verify spread route expansionInput: Just check the routes in our stencila.toml.
Output (scoped review):
stencila.toml routes section — 8 file routes, 2 redirects, 1 spread/changelog/ points to CHANGELOG.md which is outside site.root = "docs" — file will not be found relative to the site root/old-api/ → /api/ uses status 307 (temporary). If this is permanent, use 301stencila.toml exists, say so and ask whether they want help creating one (redirect to site config creation).[site]), note that a bare config is valid — Stencila uses sensible defaults. Review what the defaults will produce.site.root is set, all file path checks must be relative to that root, not the workspace root.snap cannot be run (no server, no browser), mark visual verification as "pending" and list the specific snap commands to run later. Do not fabricate snap findings.site.nav is not configured, navigation is auto-generated from routes — note this as informational, not as a finding.site.featured keys do not match any nav group route or label, flag as a potential misconfiguration.stencila.local.toml for local overrides, note that local config is typically gitignored and not deployed.site.glide is configured, check that prefetch and cache values are reasonable (not excessively large).site.auto-index is enabled with exclude patterns, verify the patterns are syntactically valid globs.site.search.include-types is set, verify the type names are valid (Heading, Paragraph, Datatable, CodeChunk, Figure, Table are the defaults).documentation
An agent skill providing instructions for AI agents.
testing
Critically review a Stencila workflow and suggest improvements. Use when asked to review, audit, critique, evaluate, or improve a workflow directory or WORKFLOW.md file. Covers frontmatter validation, DOT pipeline quality, workflow structure, agent selection quality, discovery metadata, ephemeral workflow conventions, workflow composition, and adherence to Stencila workflow patterns.
development
Create a new Stencila workflow. Use when asked to create, write, scaffold, or set up a workflow directory or WORKFLOW.md file. Covers workflow discovery, duplicate-name checks, ephemeral workflows, WORKFLOW.md frontmatter, DOT pipeline authoring, goals, agents, branching, composition, and validation.
development
Critically review an existing or proposed Stencila theme artifact for correctness, token usage, target coverage, cross-target portability, dark-mode handling, maintainability, and approval readiness. Use when asked to review, critique, assess, audit, or validate a theme.css file, theme patch, theme plan, site theme, document theme, plot theme, print or PDF theme, check design tokens, assess DOCX or email behavior, review dark mode support, or validate with stencila themes validate.