Semantic Analyst
sidequery/sidemantic
Answer analytical, KPI, metric, trend, cohort, and business-performance questions through a Sidemantic semantic layer.
Write, review, and migrate Supabase logs queries against the ClickHouse-backed logs table (the logs.all.otel analytics endpoint).
$ npx skills add supabase/supabase --skill clickhouse-logs-queries -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install supabase/supabase clickhouse-logs-queries --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/supabase/supabase.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/clickhouse-logs-queries .claude/skills/clickhouse-logs-queries && 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 "clickhouse-logs-queries" agent skill from https://github.com/supabase/supabase/tree/master/.agents/skills/clickhouse-logs-queries into .claude/skills/clickhouse-logs-queries/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "clickhouse-logs-queries", 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/supabase/supabase/tree/master/.agents/skills/clickhouse-logs-queriesType 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 supabase/supabase --skill clickhouse-logs-queries -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install supabase/supabase clickhouse-logs-queries --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/supabase/supabase.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/clickhouse-logs-queries .agents/skills/clickhouse-logs-queries && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "clickhouse-logs-queries" agent skill from https://github.com/supabase/supabase/tree/master/.agents/skills/clickhouse-logs-queries into .agents/skills/clickhouse-logs-queries/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "clickhouse-logs-queries", 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 supabase/supabase --skill clickhouse-logs-queries -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install supabase/supabase clickhouse-logs-queries --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/supabase/supabase.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/clickhouse-logs-queries .cursor/skills/clickhouse-logs-queries && 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 "clickhouse-logs-queries" agent skill from https://github.com/supabase/supabase/tree/master/.agents/skills/clickhouse-logs-queries into .cursor/skills/clickhouse-logs-queries/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "clickhouse-logs-queries", 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/supabase/supabase.git --path .agents/skills/clickhouse-logs-queries--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 supabase/supabase --skill clickhouse-logs-queries -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install supabase/supabase clickhouse-logs-queries --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/supabase/supabase.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/clickhouse-logs-queries .gemini/skills/clickhouse-logs-queries && 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 "clickhouse-logs-queries" agent skill from https://github.com/supabase/supabase/tree/master/.agents/skills/clickhouse-logs-queries into .gemini/skills/clickhouse-logs-queries/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "clickhouse-logs-queries", 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 supabase/supabase clickhouse-logs-queriesInstalls 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 supabase/supabase --skill clickhouse-logs-queries -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/supabase/supabase.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/clickhouse-logs-queries .github/skills/clickhouse-logs-queries && 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 "clickhouse-logs-queries" agent skill from https://github.com/supabase/supabase/tree/master/.agents/skills/clickhouse-logs-queries into .github/skills/clickhouse-logs-queries/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "clickhouse-logs-queries", 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 supabase/supabase --skill clickhouse-logs-queries -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install supabase/supabase clickhouse-logs-queries --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/supabase/supabase.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/clickhouse-logs-queries .opencode/skills/clickhouse-logs-queries && 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 "clickhouse-logs-queries" agent skill from https://github.com/supabase/supabase/tree/master/.agents/skills/clickhouse-logs-queries into .opencode/skills/clickhouse-logs-queries/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "clickhouse-logs-queries", 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.
clickhouse-logs-queriesWrite, review, and migrate Supabase logs queries against the ClickHouse-backed logs table (the logs.all.otel analytics endpoint).
Clickhouse Logs Queries is an agent skill from supabase/supabase, published by the product's own GitHub organization. Write, review, and migrate Supabase logs queries against the ClickHouse-backed logs table (the logs.all.otel analytics endpoint). Use this whenever a task involves Logs Explorer SQL, the logattributes map, querying a log source (edgelogs, postgreslogs, authlogs, etc.), translating an old BigQuery cross join unnest(metadata) logs query to ClickHouse, or wiring analytics log SQL in apps/studio/data/logs and apps/studio/components/interfaces/Settings/Logs. Reach for it even when the user just says "logs query"…
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/bigquery-migration.md` and `references/codebase-integration.md`).
It sits in Databases, covering Data warehousing. It works with ClickHouse, Supabase, Google BigQuery and SQL. The repository describes itself as: The Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. The licence is Apache-2.0.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0b85e0d. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are sql).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Clickhouse Logs Queries loads about 2.4k tokens when it runs, and up to ~4.9k if it reads all its reference files. Until then it costs about 163 tokens; SKILL.md has 866 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); files beside SKILL.md are not scanned.
The full file from supabase/supabase at commit 0b85e0d, republished under its Apache-2.0 licence (© supabase). 866 words, ~2,375 tokens.
.claude/skills/clickhouse-logs-queries/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Supabase logs live in a single ClickHouse logs table, served by the
logs.all.otel analytics endpoint. Every log line from every part of the stack
is one row in this table, tagged by a source column. This replaces the older
BigQuery model, where each service had its own table and fields were reached
through cross join unnest(metadata).
Two kinds of work use this skill, and they share the same SQL model:
If you are converting an existing BigQuery logs query, read references/bigquery-migration.md for the full translation table.
Each row has a small set of real columns. Everything specific to a service lives
in log_attributes.
| Column | Type | Notes |
|---|---|---|
id | String | Unique log identifier. |
timestamp | DateTime64 (UTC) | When the log was produced. Order/compare it directly. |
event_message | String | The raw log line. |
severity_text | String | Log level, when the source sets one. |
source | String | The service the log came from. Always filter on this. |
log_attributes | Map(String, String) | Structured per-source fields, keyed by a dotted path. |
timestamp is formatted like 2026-06-22T09:34:06.215000 (ISO 8601, microsecond
precision, no trailing Z). In the Logs Explorer the selected time range is
applied for you, so you rarely need to write a timestamp filter by hand.
A minimal, well-formed query. Lead with a comment naming the query, filter by
source, and always limit:
-- recent edge requests
select timestamp, event_message
from logs
where source = 'edge_logs'
order by timestamp desc
limit 100;source selects the service. The common ones:
edge_logs — API gateway requests and responsespostgres_logs — database statements and errors (also where pg_cron logs live)auth_logs — authentication and authorization activityfunction_edge_logs — edge function requests and responsesfunction_logs — console output from inside edge functionsstorage_logs — object upload and retrieval activityrealtime_logs — Realtime client connectionspostgrest_logs, supavisor_logs, pgbouncer_logs — mostly id, timestamp, event_messageThe Logs Explorer Field Reference drawer lists every source and the fields it actually sets. When in doubt about a key, discover it from real data rather than guessing (see below).
log_attributes maps a string key to a string value. Read a field with bracket
access. There are no unnesting joins:
select
log_attributes['request.method'] as method,
log_attributes['request.path'] as path,
log_attributes['response.status_code'] as status
from logs
where source = 'edge_logs'The key keeps the dotted path that BigQuery expressed through nested structs, with
the metadata root dropped: BigQuery metadata.request.method becomes
log_attributes['request.method']. Keep the full prefix — request.cf.country
is log_attributes['request.cf.country'], not log_attributes['cf.country'].
Common keys by source:
edge_logs: request.method, request.path, request.search, response.status_code, identifierpostgres_logs: parsed.error_severity, parsed.detail, parsed.hint, parsed.query, identifierauth_logs: level, status, path, msg, errorfunction_edge_logs: response.status_code, request.method, request.pathname, function_id, execution_id, execution_time_msfunction_logs: event_type, function_id, execution_id, levelMap values are always strings. To compare or aggregate a numeric field, wrap it in
toInt32OrZero, which returns 0 for missing or non-numeric values so it never
errors on partial data:
select count() as server_errors
from logs
where source = 'edge_logs'
and toInt32OrZero(log_attributes['response.status_code']) between 500 and 599Read mapKeys from recent rows rather than guessing key names:
select arrayJoin(mapKeys(log_attributes)) as key, count() as n
from logs
where source = 'postgres_logs'
group by key
order by n desc
limit 100;arrayJoin(mapKeys(...)) flattens the map keys into one row per key so you can
rank them by frequency. (The Studio codebase does exactly this for the Field
Reference drawer and to feed real keys to the AI rewrite.)
These are the substitutions that trip people up most:
| Need | BigQuery | ClickHouse |
|---|---|---|
| Count rows | count(*) | count() |
| Regex match | regexp_contains(x, 'p') | match(x, 'p') |
| Substring match | x like '%p%' | x ilike '%p%' (case-insensitive) or like |
| Numeric coercion | cast(x as int64) | toInt32OrZero(x) |
| Read the timestamp | cast(timestamp as datetime) | timestamp (use the column directly) |
| Map keys | n/a (used unnest) | mapKeys(log_attributes) |
The logs.all.otel analytics endpoint (and the Logs Explorer on top of it)
rejects count(*) and select * — use count() and list the columns you need.
(Raw ClickHouse supports both; this is a constraint of the logs query surface.)
These keep queries correct and cheap. Log tables are large; an unbounded scan reads far more data than you need.
-- errors since last deploy). It labels the query in logs and review, and makes each of several queries in a file easy to tell apart.LIMIT. Even for aggregates while you iterate.from logs where source = '...'. There is no per-service table (no edge_logs, postgres_logs, etc. table) — there is one logs table, and source scopes it to a service. Filtering by source is required, not just an optimization.source, timestamp) before reaching into
log_attributes.timestamp desc to see the most recent logs first.count(), not count(*) or select *.Requests by status code:
select
toInt32OrZero(log_attributes['response.status_code']) as status,
count() as count
from logs
where source = 'edge_logs'
group by status
order by count desc
limit 50Auth errors:
select timestamp, event_message, log_attributes['msg'] as message
from logs
where source = 'auth_logs'
and log_attributes['level'] in ('error', 'fatal')
order by timestamp desc
limit 100Search the raw message:
select timestamp, event_message
from logs
where source = 'postgres_logs'
and event_message ilike '%deadlock%'
order by timestamp desc
limit 100Postgres errors grouped by severity (the canonical unnest-to-map conversion):
select log_attributes['parsed.error_severity'] as severity, count() as count
from logs
where source = 'postgres_logs'
and log_attributes['parsed.error_severity'] in ('ERROR', 'FATAL', 'PANIC')
group by severity
order by count desc
limit 100Convert it rather than running it as-is. The mechanical steps (drop the
per-service table for from logs where source = ..., remove every
cross join unnest(...), rewrite unnest-alias columns as log_attributes['...']
lookups, swap the functions above) are spelled out with a full before/after in
references/bigquery-migration.md. The Logs
Explorer also has a built-in Rewrite to ClickHouse action that does this with
AI; point users to it for one-off conversions in the dashboard.
© supabase, Apache-2.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 2 other files (references) in .agents/skills/clickhouse-logs-queries of supabase/supabase.
Open the folder on GitHubat commit 0b85e0d
Clickhouse Logs Queries 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 |
|---|---|---|---|---|---|---|
| Clickhouse Logs Queries this skillsupabase/supabase | 111k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Semantic Analystsidequery/sidemantic | 129 | — | ~982 | Automated safety check: Pass | AGPL-3.0 | |
| Chdb SQLvemetric/vemetric | 395 | 1 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Querying Tempotempoxyz/tidx | 107 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Database MigrationRain-kl/OpenFlare | 288 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| SQL Queriesw95/awesome-claude-corporate-skills | 239 | 3 repos | ~2.8k | Automated safety check: Pass | MIT |
sidequery/sidemantic
Answer analytical, KPI, metric, trend, cohort, and business-performance questions through a Sidemantic semantic layer.
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…
tempoxyz/tidx
Query indexed Tempo chain data via tidx HTTP API and CLI. An agent skill from tempoxyz/tidx.
Rain-kl/OpenFlare
Wavelet 项目专用:当新增或修改数据库表结构、索引、初始化数据、系统配置 seed、模板 seed、默认管理员、goose SQL 迁移、internal/infra/persistence/migrator、ClickHouse 分析库 DDL 或数据库升级流程时必须使用。本技能指导在 internal/infra/persistence/migrator/goose 下编写…
w95/awesome-claude-corporate-skills
Write correct, performant SQL across all major data warehouse dialects (Snowflake, BigQuery, Databricks, PostgreSQL, etc.).
HybridAIOne/hybridclaw
Review and run read-only natural-language SQL against a customer data warehouse with cached schema introspection and explicit write grants.
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
supabase/supabase
Review Supabase docs changes locally in your supabase/supabase checkout — either an open PR (triage, classify, verify) or your own branch before opening a PR (local self-review).
supabase/supabase
Vitest API and config reference (Jest-compatible) — mocking with vi., spies, fake timers, coverage configuration, fixtures, snapshots, and test filtering.
supabase/supabase
A skill your agent uses whenever code will build, return, fetch, or execute SQL that runs against a user's real Postgres database — even when the request reads like an ordinary feature or bug fix…
supabase/supabase
Write and run Playwright E2E tests for Supabase Studio (e2e/studio).
supabase/supabase
Error display and troubleshooting pattern for Supabase Studio.
Categories
Write, review, and migrate Supabase logs queries against the ClickHouse-backed logs table (the logs.all.otel analytics endpoint). Clickhouse Logs Queries is an agent skill from supabase/supabase, published by the product's own GitHub organization.otel analytics endpoint).
Clickhouse Logs Queries fits situations like: just says logs query; pastes a BigQuery logs query to convert; not only when they name ClickHouse.
Run `npx skills add supabase/supabase --skill clickhouse-logs-queries -a claude-code`. Or copy the skill folder (.agents/skills/clickhouse-logs-queries in supabase/supabase) into .claude/skills/clickhouse-logs-queries in your project. Claude Code loads it when a task matches its description.
Run `npx skills add supabase/supabase --skill clickhouse-logs-queries -a codex`. Or copy the skill folder (.agents/skills/clickhouse-logs-queries in supabase/supabase) into .agents/skills/clickhouse-logs-queries 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 supabase/supabase --skill clickhouse-logs-queries -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/clickhouse-logs-queries, .gemini/skills/clickhouse-logs-queries, .github/skills/clickhouse-logs-queries and .opencode/skills/clickhouse-logs-queries in your project.
SKILL.md names no scripts, command-line tools or credentials: Clickhouse Logs Queries is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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. Review the folder before installing.
Clickhouse Logs Queries is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.5k 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 2.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Clickhouse Logs Queries: Semantic Analyst (sidequery/sidemantic, 129 stars), Chdb SQL (vemetric/vemetric, 395 stars), Querying Tempo (tempoxyz/tidx, 107 stars) and Database Migration (Rain-kl/OpenFlare, 288 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
supabase (a GitHub organization, an official publisher) maintains it in supabase/supabase, which has 111,256 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 9, 2026.
Source: supabase/supabase on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.