Rill is a business intelligence tool for turning data sources into SQL models, metrics, dashboards, and natural-language analysis. It is used by business users and coding agents, with OLAP engines such as ClickHouse and DuckDB supporting its queries. Its catalogue add-ons support agent-driven work on Rill projects.
Borrowing it
Nothing to install: this file belongs to rilldata/rill. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/rilldata/rill/main/.claude/skills/i18n-migrate/SKILL.mdgit clone --depth 1 https://github.com/rilldata/rillWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/rilldata/rill/i18n-migrate)<a href="https://agentmods.dev/skills/rilldata/rill/i18n-migrate"><img src="https://agentmods.dev/badge/skills/rilldata/rill/i18n-migrate/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/rilldata/rill/i18n-migrate"><img src="https://agentmods.dev/badge/skills/rilldata/rill/i18n-migrate.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00032 | $0.00909 |
| Opus 5.5 | $0.00013 | $0.00364 |
| Sonnet 5.5 | $0.00006 | $0.00182 |
| Haiku 4.5 | $0.00003 | $0.00091 |
Grade A, and why
i18n-migrate scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 59 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Audit the changes on the current branch for hardcoded user-facing strings that should be moved to i18n (Paraglide/inlang messages), following the conventions in web-common/src/lib/i18n/README.md.
Optional focus: $ARGUMENTS
Instructions
1. Determine the diff to audit
- If
$ARGUMENTSlists files or directories, scope the audit to those paths only. - Otherwise, audit the PR diff:
git diff --merge-base mainto get changed lines across the branch. - Only consider added or modified lines. Do not flag pre-existing strings unless the file was explicitly passed in
$ARGUMENTS. - Only frontend files are in scope:
web-common/,web-admin/,web-local/, with extensions.svelteand.ts/.svelte.ts.
2. Find hardcoded user-facing strings
Mirror the heuristics in scripts/i18n-guard.js:
- Svelte visible text: content between
>and<that contains real words. - Human-facing attributes:
placeholder,title,aria-label,alt,label. - TypeScript: string literals used as user-facing copy — e.g.
label:,header:,body:, toast/notification text, thrown error messages shown to users, option arrays.
Skip (not user-facing): identifiers, URLs, paths, CONSTANT_CASE, class/style names, object keys, console.*/log messages, code comments, test files (*.spec.ts, *.test.ts, e2e), and lines with an i18n-ignore comment on or above them.
3. Propose keys, reusing what exists
For each finding, before proposing a new key, grep web-common/src/lib/i18n/messages/en.json for the exact copy — reuse an existing key if one matches (especially common_*).
When a new key is needed, follow the README conventions:
- Naming:
feature_component_purpose, lower snake_case, grouped by prefix. common_*for copy reused across features; otherwise prefix with the feature directory name.- Generic shared components (in
web-common/src/components/) should usecommon_*keys, not feature-specific ones. - Interpolation: named placeholders, never string concatenation —
"Sort by {label}", not"Sort by " + label. - Pluralization: use Paraglide variants, not
count === 1 ? ... : ....
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 59 lines · 32 tokens per session scan A 07e60e936631
i18n-migrate is a skill published in the GitHub repository rilldata/rill (2,970 stars, last pushed yesterday), licensed Apache-2.0. It adds 32 tokens to every session and 909 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
hardwood-cli
Inspect, debug, and convert Apache Parquet files with the hardwood CLI. Use whenever a user is debugging code that reads or writes Parquet (Arrow / Spark / Flink / Java / Python) and the data file itself may be the cause — to check the schema, physical and logical types, repetition, or a row sample. Use it to diagnose…
analytical-databases-expert
Design and query columnar analytical stores: DuckDB, ClickHouse and cloud warehouses, including file formats, partitioning, sort keys and cost control. Use when the user mentions DuckDB, ClickHouse, Parquet, columnar storage, OLAP, a data warehouse or lakehouse, analytical queries over large tables, or when the task…
exasol-import-export
Exasol IMPORT and EXPORT SQL statements: syntax, file formats (CSV, FBV, Parquet), cloud storage (S3, Azure, GCS), connection objects, error handling, and ETL staging patterns.
duckdb
Use when analytical SQL must run in-process with no server: Parquet/CSV/JSON/Arrow queried in place, OLAP embedded in an app or notebook, a slow pandas groupby on multi-GB data, or S3/lakehouse data read without downloading. NOT a multi-user analytics server (that is clickhouse-analytics), NOT an app's transactional…
duckdb
Run embedded OLAP SQL on Parquet/CSV locally; configure memory and thread limits; attach remote files safely; export with COPY; avoid multi-writer locks and treating DuckDB as a production server database.
data-pipeline
ETL and data transformation: CSV, JSON, Parquet, NDJSON processing with filtering, mapping, joining, aggregating.