Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/opagani/cassini-workshop/sqlite-devnpx skills add opagani/cassini-workshop --skill sqlite-devgit clone --depth 1 https://github.com/opagani/cassini-workshopWhat 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 | $0.00246 | $0.02443 |
| Opus 5 | $0.00123 | $0.01222 |
| Sonnet 5 | $0.00049 | $0.00489 |
| Haiku 4.5 | $0.00025 | $0.00244 |
Grade A, and why
sqlite-dev 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 yesterday.
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.
This is a copy
100% identical to sqlite-dev — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 174 lines — stays where its author put it; the contents beside it link to each section on GitHub.
SQLite for Local Dev — Postgres-Portable, Bun + Drizzle
🎯 Why: Design for Change
The goal of writing software is to be able to change it safely — including changing the database. Every rule here (snake_case, plural tables, NOT NULL FKs, JSON document store) exists so the schema ports to Postgres with a dialect swap, not a rewrite. Portability is change-safety: when SQLite stops fitting, you move with a Drizzle config edit instead of a month of forensics.
SQLite here is the development database for a TypeScript/Bun app whose
production system of record will almost certainly be Postgres. That single
fact drives every rule: write the SQLite schema so that switching to
Postgres is a Drizzle dialect change and a data copy, not a redesign.
Use the same names, the same modeling discipline, and the same integrity
rules as postgres-dba — SQLite is just a smaller engine running them.
This skill is about the SQLite schema, the Drizzle layer, and operating
SQLite. For schema-design philosophy (why NOT NULL FKs, why a surrogate
key) the authority is postgres-dba; this skill does not re-argue it, it
ports it. For app-layer TypeScript use the language skills.
How to use this skill
- Match the task to a rule below or in the decision guide.
- Open the matching
references/*.mdfor the rationale, the wrong way, the right way, and the explicit-override escape hatch. - Copy the closest file from
templates/and adapt it — the templates already encode every convention, so you start compliant and portable. - Apply the rule unless you can state, in a code comment, the specific reason it does not apply. "SQLite let me" is not a reason — SQLite lets you do almost anything; Postgres will not.
The hard rules (non-negotiable defaults)
- Naming is identical to
postgres-dba.snake_case, lowercase, unquoted. Tables plural (orders), columns singular (shipped_at), primary key literallyid, FKs<table_singular>_id, booleansis_/has_, timestamps past-tense_at. In Drizzle the TypeScript property may becamelCase, but the column name argument is always thesnake_casename —createdAt: integer('created_at', …). The database never sees a quoted mixed-case identifier. Seereferences/naming.md.
What ships with it
10 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- .DS_Store 6.0 KB
- references/drizzle.md 3.6 KB
- references/naming.md 3.4 KB
- references/portability.md 5.3 KB
- references/production.md 5.0 KB
- references/types.md 3.7 KB
- templates/db.production.ts 2.0 KB runs code
- templates/db.ts 1.2 KB runs code
- templates/drizzle.config.ts 997 B runs code
- templates/schema.ts 6.0 KB runs code
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.
- yesterday First seen · 174 lines · 246 tokens per session scan A 27a2ea0ed4cb
sqlite-dev is a skill published in the GitHub repository opagani/cassini-workshop (0 stars, last pushed 2mo ago), licensed MIT. It adds 246 tokens to every session and 2,443 once invoked, about $0.0012 per session on Opus 5. A static security scan graded it A with 0 findings. It is 100% identical to sqlite-dev, differing in 0 lines, and is treated as a copy.
Other skills, from other repositories
MisakaNet
Skill "MisakaNet" from Ikalus1988/MisakaNet, covering misakanet-failure-memory, when to use this skill, recovery flow, tools and search for lessons.
hono-cloudflare
Hono on Cloudflare Workers - bindings, KV, D1, R2, Durable Objects, and edge deployment patterns.
changelog-writer
This skill should be used when the user asks to "add a changelog entry", "write changelog", "audit changelog", "review changelog", "check changelog entries", or is editing docs-mintlify/changelog.mdx. Enforces a consistent, reader-facing voice and cuts implementation trivia.
add-media
This skill should be used when the user asks to "add a movie", "add a vinyl", "add to my collection", "add physical media", "add a Blu-ray", "add a CD", or "bought these records". It handles both movies (via TMDb/Trakt) and music (via Discogs).
media-search
This skill should be used when the user asks to "search for a movie", "find a record on Discogs", "look up a film", "search TMDb", "search Discogs", "what's the TMDb ID for", "what's the Discogs ID for", or wants to look up media metadata before adding it to the collection.
senado-br
Pesquisa de dados abertos do Senado Federal do Brasil via o MCP senado-br (67 ferramentas): senadores, matérias e projetos de lei, votações nominais, comissões, plenário, discursos, blocos e lideranças, legislação federal, vetos, e o portal e-Cidadania (consultas públicas, ideias legislativas, eventos), além de dados…