Matlab Use Database
matlab/matlab-agentic-toolkit
Reads from, writes to, and manages relational databases using MATLAB Database Toolbox.
A skill your agent uses when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING…
$ npx skills add ericrisco/rsc-harness --skill sql -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness sql --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/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/sql .claude/skills/sql && 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 "sql" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/sql into .claude/skills/sql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sql", 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/ericrisco/rsc-harness/tree/main/skills/sqlType 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 ericrisco/rsc-harness --skill sql -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness sql --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/sql .agents/skills/sql && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sql" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/sql into .agents/skills/sql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sql", 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 ericrisco/rsc-harness --skill sql -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness sql --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/sql .cursor/skills/sql && 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 "sql" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/sql into .cursor/skills/sql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sql", 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/ericrisco/rsc-harness.git --path skills/sql--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 ericrisco/rsc-harness --skill sql -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness sql --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/sql .gemini/skills/sql && 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 "sql" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/sql into .gemini/skills/sql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sql", 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 ericrisco/rsc-harness sqlInstalls 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 ericrisco/rsc-harness --skill sql -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/sql .github/skills/sql && 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 "sql" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/sql into .github/skills/sql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sql", 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 ericrisco/rsc-harness --skill sql -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness sql --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/sql .opencode/skills/sql && 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 "sql" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/sql into .opencode/skills/sql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sql", 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.
sqlA skill your agent uses when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING…
SQL is an agent skill from ericrisco/rsc-harness. Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING SETS aggregation, and set operations — or when a query returns too many rows, too few, or wrong totals. NOT engine internals, indexes or EXPLAIN (that is postgresdb), NOT MySQL config (that is mysql), NOT OLAP columnar specifics (that is duckdb).
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/ctes-and-recursion.md`).
It sits in Databases, covering SQL. It works with SQL, MySQL and DuckDB. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 92fde8f. 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 1 file in scripts/ (Shell), which the agent can run.
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.
SQL loads about 3.8k tokens when it runs, and up to ~7k if it reads all its reference files. Until then it costs about 108 tokens; SKILL.md has 1,499 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 ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,499 words, ~3,785 tokens.
.claude/skills/sql/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.This skill is the portable query-writing layer that sits above any one database engine. It owns
the SELECT-side craft: joins and what each does to row count and NULLs, window functions
(PARTITION/ORDER/frame), CTEs (including recursive), aggregation (GROUP BY/GROUPING SETS/HAVING),
set operations (UNION/INTERSECT/EXCEPT), conditional logic (CASE/COALESCE/NULLIF), and the
NULL three-valued-logic traps that quietly corrupt results across every engine. You write queries a
reviewer accepts on Postgres, MySQL 8, SQLite, DuckDB, SQL Server, or BigQuery with minimal change, and
you flag exactly where a construct is non-portable and what the dialect substitute is. The target
standard is SQL:2023 (ISO/IEC 9075:2023), the ninth edition published June 2023; window functions
have been standard since SQL:2003, so they are safe to assume everywhere.
This is about thinking in sets and frames, not about one product's planner, DDL, indexing, or ops.
PARTITION BY vs GROUP BY, or ROWS vs RANGE
vs GROUPS frames.GROUP BY, HAVING, GROUPING SETS/ROLLUP/CUBE, conditional aggregates.UNION/INTERSECT/EXCEPT; deciding ALL vs distinct.NOT IN), or
wrong aggregates (counting joined duplicates).| The ask | Route to |
|---|---|
| Engine-level Postgres: DDL types, indexes, EXPLAIN, VACUUM, RLS, pooling | ../postgresdb/SKILL.md |
| MySQL-specific behavior/config (InnoDB, buffer pool) | ../mysql/SKILL.md |
| DuckDB local-analytics / columnar specifics | ../duckdb/SKILL.md |
| ClickHouse columnar OLAP engine specifics | ../clickhouse-analytics/SKILL.md |
| ORM/builder API ergonomics (the API, not the emitted SQL) | ../drizzle-orm/SKILL.md, ../prisma-orm/SKILL.md |
| Schema design / DDL / migrations | ../db-migrations/SKILL.md |
| BI dashboards, reporting layout, metric definitions | ../business-intelligence/SKILL.md |
| Cleaning messy data as a pipeline task | ../data-cleaning/SKILL.md |
The defining line: sql = portable query-language craft; engine skills = one product's behavior,
storage, and operations. When the engine isn't decided, or the question is "how do I express this in
SQL at all" rather than "how does Postgres run it" — you are in the right place.
JOIN syntax, never comma-joins. FROM a, b WHERE a.id = b.a_id hides the join
condition in the filter — drop the WHERE clause by accident and you get a silent cross product.SELECT id, name is ambiguous and breaks
the moment two joined tables share a column name; SELECT o.id, c.name survives schema changes.NOT EXISTS over NOT IN whenever the inner side is nullable. NOT IN returns zero rows if the
subquery yields a single NULL (3VL UNKNOWN is never TRUE); NOT EXISTS is NULL-safe. Standard, not
engine-specific.ORDER BY but no explicit frame defaults to
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, which lumps tied rows together — not ROWS. This
silently wrong running total is the single most common window bug, identical across engines. Write the
frame explicitly.GROUP BY. Engines that let you skip it (old MySQL)
return an arbitrary row per group — a correctness landmine, not a convenience.UNION ALL unless you genuinely need dedup. Bare UNION sorts/hashes to remove duplicates — real
cost — and silently collapses rows you meant to keep. Add ALL by default; remove it deliberately.NULL = NULL is UNKNOWN, x <> 5 excludes
NULL x, and COUNT(col) skips NULLs while COUNT(*) does not. Decide what NULL means before the WHERE.| Want | Use | Row-count effect | NULL behavior |
|---|---|---|---|
| Only matching pairs | INNER JOIN | Can shrink and fan out on 1-to-many | Unmatched rows dropped |
| All left rows + matches | LEFT JOIN | ≥ left row count | Right columns NULL when no match |
| All rows from both | FULL JOIN | ≥ max(left, right) | NULLs on whichever side lacks a match |
| Every combination | CROSS JOIN | left × right (multiplies!) | None |
| "Left rows that have a match" | semi-join via EXISTS | = left, no duplication | No right columns added |
| "Left rows with no match" | anti-join via NOT EXISTS | ≤ left | NULL-safe (unlike NOT IN) |
A 1-to-many JOIN fans out the left row once per match. If you then SUM/COUNT, the aggregate is
inflated. Use a semi-join (EXISTS) when you only want existence, not the joined columns.
| You want… | Use | Result |
|---|---|---|
| One row per group (collapse detail) | GROUP BY | Fewer rows; only group keys + aggregates survive |
| Keep every row and add a per-group number | ... OVER (PARTITION BY …) | Same row count; aggregate alongside detail |
Rule of thumb: if the question is "per X, the total/rank/previous," and you still want the individual
rows, it is a window function. If you only want the rollup, it is GROUP BY.
ROWS / RANGE / GROUPS)| Frame unit | Counts by | Use for | Portability |
|---|---|---|---|
ROWS | Physical rows | Running totals, moving averages | Everywhere |
RANGE | Value range of the ORDER BY key | "All rows within ±N of this value/date" | Everywhere |
GROUPS | Peer groups (tied rows) | "N distinct ordering-value steps back" | Not in MySQL 8 |
ROWS and RANGE plus EXCLUDE and numeric RANGE offsets work on Postgres 11+ and SQLite 3.28+.
MySQL 8 supports only ROWS and RANGE — no GROUPS, no EXCLUDE. See references/window-functions.md.
| Need | Reach for |
|---|---|
| Existence / anti-existence test | correlated EXISTS / NOT EXISTS |
| Combine columns from another table | JOIN |
| Name an intermediate result, reuse or read it cleanly | CTE (WITH) |
| Hierarchy, graph walk, generated series | recursive CTE (WITH RECURSIVE) |
Every fence is sql. Full depth in references/.
Top-N per group — never LIMIT inside a correlated subquery.
-- Bad: correlated subquery runs once per customer; non-portable LIMIT placement
SELECT * FROM orders o
WHERE o.id IN (
SELECT id FROM orders i WHERE i.customer_id = o.customer_id
ORDER BY i.amount DESC LIMIT 3
);
-- Good: one pass, ranked, then filtered
SELECT customer_id, id, amount
FROM (
SELECT customer_id, id, amount,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY amount DESC) AS rn
FROM orders
) ranked
WHERE rn <= 3;Running total — make the frame explicit so ties don't lump.
-- Bad: no frame -> implicit RANGE, tied dates collapse into one running value
SELECT day, SUM(amount) OVER (ORDER BY day) AS running FROM sales;
-- Good: explicit ROWS frame counts physical rows
SELECT day,
SUM(amount) OVER (ORDER BY day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running
FROM sales;Period-over-period with LAG.
-- Good: previous row's value per partition; NULL on the first row is expected
SELECT month, revenue,
revenue - LAG(revenue) OVER (PARTITION BY product_id ORDER BY month) AS delta,
ROUND(100.0 * (revenue - LAG(revenue) OVER (PARTITION BY product_id ORDER BY month))
/ NULLIF(LAG(revenue) OVER (PARTITION BY product_id ORDER BY month), 0), 2) AS pct_change
FROM monthly_revenue;NULLIF(prev, 0) guards against divide-by-zero; the first row's LAG is NULL by design.
Dedup keeping latest — QUALIFY is convenient but narrow.
-- Portable: rank then filter in an outer query
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY email ORDER BY updated_at DESC) AS rn
FROM users
) d WHERE rn = 1;
-- DuckDB / BigQuery / Snowflake only: QUALIFY skips the wrapper. NOT in Postgres/MySQL/SQLite.
SELECT * FROM users
QUALIFY ROW_NUMBER() OVER (PARTITION BY email ORDER BY updated_at DESC) = 1;Recursive CTE with a depth guard — always bound the recursion.
-- Good: org chart walk; depth column stops runaway / cyclic graphs
WITH RECURSIVE tree AS (
SELECT id, manager_id, name, 1 AS depth
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.manager_id, e.name, t.depth + 1
FROM employees e JOIN tree t ON e.manager_id = t.id
WHERE t.depth < 50 -- hard ceiling; for true cycles track a path array
)
SELECT * FROM tree;Conditional aggregation / pivot — FILTER reads cleaner than CASE.
-- Portable everywhere: CASE inside the aggregate
SELECT region,
SUM(CASE WHEN status = 'paid' THEN amount ELSE 0 END) AS paid,
SUM(CASE WHEN status = 'open' THEN amount ELSE 0 END) AS open
FROM invoices GROUP BY region;
-- Postgres/SQLite/DuckDB: FILTER is the standard, more readable form. NOT in MySQL/SQL Server.
SELECT region,
SUM(amount) FILTER (WHERE status = 'paid') AS paid,
SUM(amount) FILTER (WHERE status = 'open') AS open
FROM invoices GROUP BY region;GROUPING SETS / ROLLUP — one scan, multiple aggregation levels.
-- Good: subtotals per (region, product), per region, and grand total in one query
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product); -- = GROUPING SETS ((region,product),(region),())Anti-join via NOT EXISTS — the NULL-safe "rows with no match."
-- Good: customers who never ordered; correct even if orders.customer_id has NULLs
SELECT c.id, c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);The NOT IN-NULL footgun.
-- Bad: if ANY returned customer_id is NULL, this yields ZERO rows, silently
SELECT * FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);
-- Good: NOT EXISTS, or NOT IN with an explicit IS NOT NULL filter on the inner column
SELECT * FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);| Construct | Notes |
|---|---|
QUALIFY | DuckDB / BigQuery / Snowflake only — elsewhere wrap in a subquery and filter rn |
FILTER (WHERE …) | Postgres / SQLite / DuckDB — MySQL & SQL Server need CASE |
GROUPS frame, EXCLUDE | Postgres 11+, SQLite 3.28+ — not in MySQL 8 |
EXCEPT | Standard; Oracle spells it MINUS |
| Row limiting | LIMIT … OFFSET (Postgres/MySQL/SQLite/DuckDB) vs FETCH FIRST n ROWS ONLY (standard/SQL Server 2012+) vs TOP n (SQL Server) |
| Set-op column match | By position and type, not by name — order your columns identically |
Full six-engine matrix in references/portability.md.
| Rationalization | Reality | STOP |
|---|---|---|
"NOT IN is clearer than NOT EXISTS" | One NULL in the inner set returns zero rows, silently | Use NOT EXISTS for nullable inner columns |
"SELECT * is fine in this query" | Hides which columns matter; breaks GROUP BY, ambiguous on joins | Project explicit, qualified columns |
| "Old MySQL let me skip the GROUP BY column" | You get an arbitrary row per group | List every non-aggregated column |
| "No frame needed, I just want a running sum" | Implicit RANGE lumps tied rows -> wrong total | Write ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW |
| "I'll loop in app code and query per row" | N+1 round trips; a window function does it in one scan | Express it as one set-based statement |
"UNION to merge these results" | Pays a dedup sort and drops rows you wanted | UNION ALL unless dedup is the goal |
"COUNT(*) after the join is the real count" | A 1-to-many join fanned the rows out | Count on the base table or use a semi-join |
"Add DISTINCT to fix the duplicate rows" | Masks a fan-out join instead of fixing it | Find the join multiplying rows; fix the grain |
Run scripts/verify.sh from your project root. It is read-only, never connects to a database, and runs
on stock macOS bash 3.2. It heuristically scans discovered .sql files and warns on the footguns above
(NOT IN (SELECT …), comma-joins with WHERE-join predicates, SELECT * alongside GROUP BY, window
OVER (… ORDER BY …) with no explicit frame) and, if sqlfluff is installed, lints with --dialect ansi.
It exits non-zero only on a real sqlfluff lint error or unbalanced parens/quotes (dollar-quote aware);
every heuristic is advisory [warn], and an empty target passes clean.
references/window-functions.md — ranking/offset/aggregate-over catalog, every frame unit worked, EXCLUDE, named windows, implicit-frame trap, per-engine matrix.references/joins-and-sets.md — every join type with row-count reasoning, semi/anti/lateral joins, set ops + ALL/dedup/MINUS, the fan-out-inflates-aggregates bug.references/ctes-and-recursion.md — CTE structuring, recursive template (hierarchy/graph/series) with cycle + depth guards, the optimization-fence portability note.references/portability.md — full dialect matrix across Postgres / MySQL 8 / SQLite / DuckDB / SQL Server / BigQuery.../postgresdb/SKILL.md, ../mysql/SKILL.md, ../duckdb/SKILL.md, ../clickhouse-analytics/SKILL.md, ../drizzle-orm/SKILL.md, ../prisma-orm/SKILL.md, ../db-migrations/SKILL.md. ORM/engine internals are out of scope here — this skill owns the SQL those tools ultimately emit.© ericrisco, MIT. 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 7 other files (scripts, references) in skills/sql of ericrisco/rsc-harness.
Open the folder on GitHubat commit 92fde8f
SQL 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 |
|---|---|---|---|---|---|---|
| SQL this skillericrisco/rsc-harness | 156 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Matlab Use Databasematlab/matlab-agentic-toolkit | 1.1k | — | ~3.1k | Automated safety check: Pass | Custom licence | |
| SQL Database Support for pRESTprest/prest | 4.6k | — | ~1.6k | Automated safety check: Pass | MIT | |
| Chdb SQLvemetric/vemetric | 394 | 1 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Sql2erystemsrx/sql_to_ER | 188 | — | ~1.1k | Automated safety check: Pass | AGPL-3.0 | |
| Squixeduardofuncao/squix | 273 | — | ~784 | Automated safety check: Pass | MIT |
matlab/matlab-agentic-toolkit
Reads from, writes to, and manages relational databases using MATLAB Database Toolbox.
prest/prest
Guides classifying, gap-analyzing and scaffolding support for a new SQL database in pREST, from Postgres-compatible variants to entirely new dialects.
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…
ystemsrx/sql_to_ER
A skill your agent uses when the user wants a Chen-model ER diagram from SQL CREATE TABLE statements or DBML, wants to rearrange or clean up an existing sql2er state, wants a skeleton-only overview…
eduardofuncao/squix
Run SQL queries across databases (Postgres, MySQL, SQLite, etc.) via the squix CLI.
sidequery/sidemantic
Build, validate, and manage semantic models using Sidemantic.
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Categories
A skill your agent uses when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING…. SQL is an agent skill from ericrisco/rsc-harness. Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING SETS aggregation, and set operations — or when a query returns too many rows, too few, or wrong totals.
SQL fits situations like: reviewing advanced SQL query logic independent of any one engine — multi-table joins; window functions; CTEs including recursive ones; GROUP BY and GROUPING SETS aggregation.
Run `npx skills add ericrisco/rsc-harness --skill sql -a claude-code`. Or copy the skill folder (skills/sql in ericrisco/rsc-harness) into .claude/skills/sql in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill sql -a codex`. Or copy the skill folder (skills/sql in ericrisco/rsc-harness) into .agents/skills/sql 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 ericrisco/rsc-harness --skill sql -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sql, .gemini/skills/sql, .github/skills/sql and .opencode/skills/sql in your project.
Going by SKILL.md and its folder, SQL needs a shell for the scripts in its folder. Our summary lists: A Bash shell.
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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
SQL is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k 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 SQL: Matlab Use Database (matlab/matlab-agentic-toolkit, 1.1k stars), SQL Database Support for pREST (prest/prest, 4.6k stars), Chdb SQL (vemetric/vemetric, 394 stars) and Sql2er (ystemsrx/sql_to_ER, 188 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.