Querying Tempo
tempoxyz/tidx
Query indexed Tempo chain data via tidx HTTP API and CLI. An agent skill from tempoxyz/tidx.
Build interactive analytics webapps, demos, dashboards, or embedded app surfaces from Sidemantic semantic models using copyable component primitives and deterministic query inspection.
$ npx skills add sidequery/sidemantic --skill webapp-builder -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sidequery/sidemantic webapp-builder --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sidequery/sidemantic.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/sidemantic/skills/webapp-builder .claude/skills/webapp-builder && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "webapp-builder" agent skill from https://github.com/sidequery/sidemantic/tree/main/plugins/sidemantic/skills/webapp-builder into .claude/skills/webapp-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "webapp-builder", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sidequery/sidemantic/tree/main/plugins/sidemantic/skills/webapp-builderType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sidequery/sidemantic --skill webapp-builder -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sidequery/sidemantic webapp-builder --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sidequery/sidemantic.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/sidemantic/skills/webapp-builder .agents/skills/webapp-builder && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "webapp-builder" agent skill from https://github.com/sidequery/sidemantic/tree/main/plugins/sidemantic/skills/webapp-builder into .agents/skills/webapp-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "webapp-builder", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sidequery/sidemantic --skill webapp-builder -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sidequery/sidemantic webapp-builder --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sidequery/sidemantic.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/sidemantic/skills/webapp-builder .cursor/skills/webapp-builder && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "webapp-builder" agent skill from https://github.com/sidequery/sidemantic/tree/main/plugins/sidemantic/skills/webapp-builder into .cursor/skills/webapp-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "webapp-builder", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sidequery/sidemantic.git --path plugins/sidemantic/skills/webapp-builder--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sidequery/sidemantic --skill webapp-builder -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sidequery/sidemantic webapp-builder --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sidequery/sidemantic.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/sidemantic/skills/webapp-builder .gemini/skills/webapp-builder && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "webapp-builder" agent skill from https://github.com/sidequery/sidemantic/tree/main/plugins/sidemantic/skills/webapp-builder into .gemini/skills/webapp-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "webapp-builder", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sidequery/sidemantic webapp-builderInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sidequery/sidemantic --skill webapp-builder -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sidequery/sidemantic.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/sidemantic/skills/webapp-builder .github/skills/webapp-builder && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "webapp-builder" agent skill from https://github.com/sidequery/sidemantic/tree/main/plugins/sidemantic/skills/webapp-builder into .github/skills/webapp-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "webapp-builder", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sidequery/sidemantic --skill webapp-builder -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sidequery/sidemantic webapp-builder --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sidequery/sidemantic.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/sidemantic/skills/webapp-builder .opencode/skills/webapp-builder && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "webapp-builder" agent skill from https://github.com/sidequery/sidemantic/tree/main/plugins/sidemantic/skills/webapp-builder into .opencode/skills/webapp-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "webapp-builder", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
webapp-builderBuild interactive analytics webapps, demos, dashboards, or embedded app surfaces from Sidemantic semantic models using copyable component primitives and deterministic query inspection.
Webapp Builder is an agent skill from sidequery/sidemantic. Build interactive analytics webapps, demos, dashboards, or embedded app surfaces from Sidemantic semantic models using copyable component primitives and deterministic query inspection. Use when asked to create a web UI around Sidemantic models, generate a metric explorer, copy reusable analytics components into a project, connect a frontend to Sidemantic query APIs, build a Pyodide/DuckDB-WASM or Sidemantic Rust WASM/DuckDB-WASM demo, expose Sidemantic through an app server, or adapt the Sidemantic widget/UI…
Its SKILL.md is about 5.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 19 other files, including scripts, reference files and assets (for example `agents/openai.yaml`, `assets/templates/static-dashboard/app.js` and `assets/ui-dist/sidemantic-ui-static.js`).
It sits in Databases, covering Data warehousing and Frontend development. It works with DuckDB, WebAssembly, Rust and SQL. The repository describes itself as: The universal metrics layer. Compatible with 15+ formats: Cube, MetricFlow, LookML, Omni, BSL, LDM, Cortex, Malloy, OSI, SML, TML, Hex, Rill, Superset. The licence is AGPL-3.0.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit db203eb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 5 files in scripts/ (JavaScript and Python), which the agent can run.
Shell commands in SKILL.md call:
uvbunxbunFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv and bunx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Webapp Builder loads about 5.5k tokens when it runs, and up to ~8.7k if it reads all its reference files. Until then it costs about 140 tokens; SKILL.md has 2,511 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from sidequery/sidemantic at commit db203eb, republished under its AGPL-3.0 licence (© sidequery). 2,511 words, ~5,511 tokens.
.claude/skills/webapp-builder/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.Build webapps around a validated Sidemantic semantic layer. Use the canonical built UI distribution, then wire runtime-specific data adapters to its documented props or mount functions.
In command examples, set SIDEMANTIC_PLUGIN_ROOT to the installed sidemantic plugin directory.
Treat assets/ui-dist/ as the generated distribution of the sole component source in webapp/src. Never regenerate or fork component markup in a target project.
Copy React + Tailwind components for product apps:
uv run ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/copy_components.py \
--kind react-tailwind \
--target src/components/sidemanticCopy the static component files for plain HTML demos or generated scaffolds:
uv run ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/copy_components.py \
--kind static \
--target public/sidemantic-componentsUse --list to inspect the distribution. Existing target files are never overwritten unless --force is passed.
Available React primitives:
Analytics surfaces:
DashboardShell: dense analytics page frame with status and toolbar slots.MetricCard: metric label, value, inline delta with comparison caption, loading, selected state.Leaderboard: ranked dimension rows with bars, selection, and stable data attributes.FilterPill: active filter display and removal.QueryDebugPanel (+ tokenizeSql): generated SQL/debug surface.DataPreviewTable: stable sample row preview.DataTable (+ columnTotal, paginateRows): sortable, paginated result table with optional client search, totals footer, and sticky header.LoadingState, EmptyState, ErrorState, StatusDot, ErrorBoundary: status surfaces.Charts (hand-rolled SVG, theme-token driven, shared ChartTooltip/useChartTooltip):
TimeSeriesChart: full-size metric series with crosshair, comparison overlay, brush-to-zoom.LineChart, Sparkline: compact trend lines.ColumnChart: categorical bars with a zero baseline.BarLineCombo: dual-axis bars + independently scaled line.StackedAreaChart: composition over time using the categorical --viz-N palette.DonutChart (+ donutSegments): part-of-whole with center total and legend.HistogramChart (+ binValues): distribution of one numeric field.ScatterChart: numeric x/y correlation, optional multi-series coloring.HeatmapChart: category-by-category intensity grid.WaterfallChart (+ waterfallSteps): contribution bridge with running totals.NetworkChart (+ layoutNetwork): deterministic force-directed graph.Inputs and controls (dependency-free, accessible):
Button, Select, Switch, Tabs: base controls in the data-tool idiom.Combobox (+ filterOptions): searchable listbox; single-select, or multiple with removable chips. Use Combobox for multi-select or long lists where typeahead beats scanning; Select for a short static single choice.DatePicker (+ monthGrid): single or range calendar, inline or popover, ISO string values.DateRangeControl: preset + custom date range with comparison-mode picker.GrainSelect, TimezoneSelect, ViewSwitcher: dashboard toolbar controls.Tooltip: hover tooltip for arbitrary triggers (header hints, truncated labels), on the same surface as chart tooltips.Standard conventions shared by the primitives:
rowsToCategories, rowsToBarLine, rowsToPoints, rowsToSeries (long-to-wide pivot), rowsToCells, rowsToTimeSeries — instead of hand-reshaping per call site. parseTemporal normalizes ISO strings, epoch seconds/milliseconds, and Date values.TooltipRows (heading + aligned label/value rows + series swatches) inside ChartTooltip, so every hover reads the same. Custom charts should do the same rather than inventing new tooltip markup.vizColor(index) / VIZ_COLOR_COUNT cycle the theme's --viz-1..--viz-6 categorical colors; override them (and all other tokens) via applyThemeTokens.State primitives are conditional UI branches. Do not render loading, empty, and error examples as permanent app content unless the user explicitly asks for a component gallery.
Available static mount helpers in sidemantic-ui-static.js:
aliasForSemanticRef, toComponentResult, toComponentQuery, filterZeroMetricRows.labelize, formatValue, metricConfigFor, metricValueFormat, formatDateLike, seriesRangeLabel.renderMetricCards, renderMetricSummaryCards, renderLeaderboard, renderDimensionLeaderboardCards, renderFilterPills, renderSparkline, renderColumnChart, renderHighlightedQueryDebug, renderDataPreview, renderValidationState, renderState.renderSelectOptions, setControlsDisabled, syncScrollPosition.normalizeFilterValue, toggleFilterValue, removeFilterValue, removeFilterDimension.Use those static helpers before writing one-off DOM wiring. They are intentionally generic: they work for metric explorers, focused dashboards, debug tools, and browser-only demos as long as the app passes semantic query metadata plus row results into them. Runtime adapters for Python APIs, Pyodide, Rust WASM, DuckDB-WASM, or product backends should stay outside the copied component files.
info and the inspector in noninteractive agent work. Use validate only when the current CLI exits cleanly in your environment:uv run sidemantic info path/to/models
uv run ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/inspect_layer.py path/to/models \
--db path/to/data.duckdb \
--require-executeuv run ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/inspect_layer.py path/to/models \
--db path/to/data.duckdb \
--require-execute \
--output /tmp/sidemantic-app-spec.jsonUse --leaderboard-dimension field_name when domain judgment says one dimension should drive the first leaderboard. Without it, the inspector prefers common categorical dimensions over identifiers and booleans.
Keep the inspection inventory outside public or committed directories: it contains internal SQL, model metadata, and sampled data. Connection strings and raw database errors are omitted. Only the scaffold's allowlisted selected dashboard data belongs in the published app; review that dataset before publishing. The static scaffold does not publish generated SQL or unrelated models and samples.
uv run ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/copy_components.py \
--kind react-tailwind \
--target src/components/sidemanticAdapt imports, class names, and styling conventions after copying. Preserve the data contract conventions: data-metric, data-dimension, data-value, and data-testid hooks for metric totals, dimension leaderboards, and query debug surfaces.
For a minimal static app scaffold from the executed spec:
uv run ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/scaffold_static_app.py \
/tmp/sidemantic-app-spec.json \
--output dist/sidemantic-dashboard \
--title "Metrics Dashboard"The scaffold copies readable source from assets/templates/static-dashboard/ and the static component files. If you need a richer generated app, edit those copied source files in the target project; do not bury application JavaScript in Python strings or generated HTML fragments.
sidemantic.api_server.create_app() or start_api_server() when a FastAPI API is acceptable.sidemantic-wasm npm package (Sidemantic Rust WASM) + DuckDB-WASM, or Pyodide + DuckDB-WASM, only for static demos or docs pages that must run without a backend.sidemantic.widget.MetricsExplorer instead of rebuilding the widget.sidemantic server mcp --apps --http --port 4100 and existing chart resources when the target is an MCP Apps-compatible host.{
"metrics": ["orders.revenue"],
"dimensions": ["orders.order_date__day"],
"filters": ["orders.status = 'completed'"],
"order_by": ["orders.order_date__day"],
"limit": 500
}If a control is visible, it must change the app state or data. Do not satisfy interaction requirements by only changing a status label. Removing a filter must recompute metric cards, leaderboards, charts, and preview rows. Clicking a leaderboard row must add or toggle a filter. Selecting a metric must change the leaderboard ranking metric.
uv run sidemantic info path/to/models
uv run ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/inspect_layer.py path/to/models --db path/to/data.duckdb --require-execute
uv run sidemantic query "SELECT metric_name FROM model_name LIMIT 5" --models path/to/models --db path/to/data.duckdb
uv run ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/verify_static_app.py dist/sidemantic-dashboard
bunx --bun -p playwright node ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/verify_static_interactions.mjs --url http://127.0.0.1:5174/
bun run buildFor frontend changes, run the app on a 4xxx-5xxx port and verify with browser screenshots at desktop and mobile widths. If browser tooling is unavailable, run verify_static_app.py or another deterministic DOM/data check and state that real browser visual verification was not run.
For interactive dashboards, verify behavior, not just render counts:
For static dashboards that use the bundled component contracts, use the smoke-test script after starting a local server:
bunx --bun -p playwright playwright install chromium # first run only, if Playwright reports a missing browser
bunx --bun -p playwright node ${SIDEMANTIC_PLUGIN_ROOT}/skills/webapp-builder/scripts/verify_static_interactions.mjs \
--url http://127.0.0.1:4519/The script clicks filter pills, leaderboard rows, metric cards, and reset controls, and fails if visible data does not change.
Use the generated app spec first. For deeper implementation details, read references/webapp-patterns.md.
Default query set:
model.time_dimension__grain, ordered by time, capped around 500 points.Use inspect_layer.py --require-execute when a database is available. This adds result.columns, result.sample_rows, and sample_row_count to each compiled query and exits nonzero if execution is missing or fails. Use plain --execute only when a warning is acceptable.
For crossfilter leaderboards, exclude the dimension's own filter while querying that same dimension. If device_os = iOS is active, the device OS card should still show peer OS values while other cards show values within iOS.
Use explicit aliases at API boundaries so UI column names stay stable. The inspector emits output_aliases and, with --execute, actual result columns. Do not make display components depend on database-specific column casing or quoted identifiers.
Run DuckDB validation serially against a file database. Do not run the inspector and sidemantic query concurrently against the same .duckdb path; DuckDB file locks can make valid workflows fail.
When the app can call Python directly, prefer the existing HTTP API:
GET /healthGET /modelsGET /graphPOST /compilePOST /query?format=jsonPOST /query?format=arrowPOST /sqlWhen building a TypeScript frontend with a separate backend, keep Sidemantic execution in Python unless the project already has a stable Python service. A Hono server can proxy to the Sidemantic API, add auth/session context, and normalize responses.
Never concatenate user-entered filter values into SQL in the frontend. Pass structured filter values to a server-side query builder or quote them with the same rules as Sidemantic/widget code.
The CLI sidemantic query auto-adds default time dimensions for metrics when a model has default_time_dimension. For exact app query shapes like true totals, prefer the inspector-generated SQL/result samples or the Python/API structured query path using skip_default_time_dimensions=True internally.
scripts/inspect_layer.py: inspect models, compile app query shapes, execute samples with --execute, or require execution with --require-execute.scripts/copy_components.py: copy the React + Tailwind or static component distribution from assets/ui-dist/ into a project.scripts/scaffold_static_app.py: create a small static dashboard from an executed app spec by copying templates and components. It writes index.html, styles.css, sidemantic-components.js, app.js, and data/app-spec.json.scripts/verify_static_app.py: dependency-free fallback verifier for static dashboards. It checks files, executed result samples, true totals, non-id leaderboard dimensions, and expected DOM/data bindings.scripts/verify_static_interactions.mjs: Playwright smoke test for standard static component contracts. It verifies real data changes for filter, leaderboard, metric, reset, and chart-bounds behavior.assets/ui-dist/sidemantic-ui.js + sidemantic-ui.css: the built React + Tailwind distribution copied by copy_components.py --kind react-tailwind.assets/ui-dist/sidemantic-ui-static.js: the static mount-helper bundle copied by copy_components.py --kind static.assets/templates/static-dashboard/: readable static app templates used by scaffold_static_app.py.After copying assets into a project, treat them as that project's code. Modify them to match local component APIs, naming, tests, and design system constraints.
Use browser-only Sidemantic execution for static demos, docs, and shareable examples. The UI should still consume the copied static component files; keep runtime adapters separate from components.
sidemantic-wasm package (bun add sidemantic-wasm), call createSidemanticRuntime(), compile/validate/rewrite through it, and keep the generated SQL visible in the debug panel. For a no-bundler static page, vendor the package's bundle (see examples/sidemantic_wasm_demo).Analytics webapps should feel work-focused:
rx) on bars or heatmap cells; rounding is for chrome (buttons, chips, cards), never for marks.sidemantic validate requires textual or opens a TUI, use sidemantic info plus inspect_layer.py as the noninteractive check.inspect_layer.py --require-execute when possible so result columns and sample rows are checked and failures are nonzero.viewBox, padding, and overflow: hidden; verify with screenshots.3000 or 8000 in worktrees. Prefer 4100, 4400, 5174, or another available 4xxx-5xxx port.file:// when it fetches JSON/CSV. Serve it locally instead, because browser file-scheme fetch behavior differs from a real app.© sidequery, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 12 other files (scripts, references, assets) in plugins/sidemantic/skills/webapp-builder of sidequery/sidemantic.
Open the folder on GitHubat commit db203eb
Webapp Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Webapp Builder this skillsidequery/sidemantic | 129 | — | ~5.5k | Automated safety check: Pass | AGPL-3.0 | |
| Querying Tempotempoxyz/tidx | 107 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Pytorch Clickhousepytorch/test-infra | 113 | — | ~2.8k | Automated safety check: Pass | Custom licence | |
| Chdb SQLvemetric/vemetric | 394 | 1 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Clickhouse Best Practicesvemetric/vemetric | 394 | 2 repos | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Clickhouse System QueriesFrankChen021/datastoria | 327 | — | ~731 | Automated safety check: Pass | Custom licence |
tempoxyz/tidx
Query indexed Tempo chain data via tidx HTTP API and CLI. An agent skill from tempoxyz/tidx.
pytorch/test-infra
Load this FIRST whenever working with PyTorch CI data (any pytorch/ org repo), the torchci/HUD codebase, or the PyTorch HUD ClickHouse database.
vemetric/vemetric
A skill your agent uses when the user wants to run SQL — especially analytical SQL — on local files (parquet/csv/json), URLs, S3 paths, or remote databases (Postgres, MySQL, MongoDB, ClickHouse…
vemetric/vemetric
MUST USE when reviewing ClickHouse schemas, queries, or configurations.
FrankChen021/datastoria
Query ClickHouse system tables to inspect query logs, monitor cluster health, check replication status, and analyze slow queries.
hypequery/hypequery
Cut a stable hypequery release via Changesets, or explain/check the canary flow.
sidequery/sidemantic
Build, validate, and manage semantic models using Sidemantic.
sidequery/sidemantic
Answer analytical, KPI, metric, trend, cohort, and business-performance questions through a Sidemantic semantic layer.
Categories
Build interactive analytics webapps, demos, dashboards, or embedded app surfaces from Sidemantic semantic models using copyable component primitives and deterministic query inspection. Webapp Builder is an agent skill from sidequery/sidemantic. Build interactive analytics webapps, demos, dashboards, or embedded app surfaces from Sidemantic semantic models using copyable component primitives and deterministic query inspection.
Webapp Builder fits situations like: asked to create a web UI around Sidemantic models; generate a metric explorer; copy reusable analytics components into a project; connect a frontend to Sidemantic query APIs.
Run `npx skills add sidequery/sidemantic --skill webapp-builder -a claude-code`. Or copy the skill folder (plugins/sidemantic/skills/webapp-builder in sidequery/sidemantic) into .claude/skills/webapp-builder in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sidequery/sidemantic --skill webapp-builder -a codex`. Or copy the skill folder (plugins/sidemantic/skills/webapp-builder in sidequery/sidemantic) into .agents/skills/webapp-builder in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sidequery/sidemantic --skill webapp-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/webapp-builder, .gemini/skills/webapp-builder, .github/skills/webapp-builder and .opencode/skills/webapp-builder in your project.
Going by SKILL.md and its folder, Webapp Builder needs JavaScript and Python for the scripts in its folder and the command-line tools its instructions call (uv, bunx and bun). Our summary lists: Python 3; Node.js.
SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Webapp Builder is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.5k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Webapp Builder: Querying Tempo (tempoxyz/tidx, 107 stars), Pytorch Clickhouse (pytorch/test-infra, 113 stars), Chdb SQL (vemetric/vemetric, 394 stars) and Clickhouse Best Practices (vemetric/vemetric, 394 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sidequery (a GitHub organization) maintains it in sidequery/sidemantic, which has 129 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.
Source: sidequery/sidemantic on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.