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/tanstack/ai/build-drizzle-adapternpx skills add TanStack/ai --skill build-drizzle-adaptergit clone --depth 1 https://github.com/TanStack/aiWrote 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/tanstack/ai/build-drizzle-adapter)<a href="https://agentmods.dev/skills/tanstack/ai/build-drizzle-adapter"><img src="https://agentmods.dev/badge/skills/tanstack/ai/build-drizzle-adapter.svg" alt="Measured on agentmods" height="20"></a>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 | $0.00079 | $0.05218 |
| Opus 5 | $0.00039 | $0.02609 |
| Sonnet 5 | $0.00016 | $0.01044 |
| Haiku 4.5 | $0.00008 | $0.00522 |
Grade A, and why
ai-persistence/build-drizzle-adapter 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 4d 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 — 563 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Drizzle Chat Persistence
The deliverable is one file in the app — src/lib/chat-persistence.ts —
exporting a ChatPersistence built from the app's existing Drizzle db. Plus
four tables added to the app's existing schema file and a migration generated
through the app's existing drizzle-kit setup.
Do not create a package, a second db instance, a migration runner, or a
drizzle.config.ts. The app has those.
Read the Store Reference
(docs/persistence/store-reference.md) for the store contracts and
invariants, and ai-persistence/stores for the shape rules. Every
store below mirrors the reference in-memory backend in
@tanstack/ai-persistence (memory.ts); the shared conformance testkit is the
proof.
1. Read the app before writing anything
| Find | Where to look | What it decides |
|---|---|---|
| Dialect | drizzle.config.ts dialect:, or the drizzle-orm/*-core import |
sqlite-core vs pg-core vs mysql-core column builders |
| Schema file(s) | drizzle.config.ts schema: glob |
Where the four tables go — append, never start a new file |
The db handle |
src/db/index.ts, src/db.ts, src/server/db.ts |
Module singleton (export const db) vs factory (getDb()) |
| Migration flow | drizzle.config.ts out:, the migrations/ or drizzle/ journal |
Which generate/apply commands to tell the user to run |
| Naming conventions | Existing tables in the schema file | Table prefix, var casing, snake_case column names |
| Import alias | tsconfig.json paths |
@/db, ~/db, #/db/index, or a relative path |
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.
- 4d ago First seen · 563 lines · 79 tokens per session scan A 27ea133fdc65
ai-persistence/build-drizzle-adapter is a skill published in the GitHub repository TanStack/ai (3,056 stars, last pushed yesterday), licensed MIT. It adds 79 tokens to every session and 5,218 once invoked, about $0.0004 per session on Opus 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
database-migration-helper
Create and manage database migrations safely with rollback support. Use when modifying database schema, adding indexes, or managing database changes.
query-optimizer
Optimize SQL queries for performance with indexing strategies, query rewriting, and execution plan analysis. Use when queries are slow, optimizing database performance, or analyzing query execution.
schema-designer
Design database schemas with proper normalization, relationships, constraints, and indexes. Use when creating database tables, modeling data relationships, or designing database structure.
things-mac
Manage Things 3 via the things CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database). Use when a user asks Bitterbot to add a task to Things, list inbox/today/upcoming, search tasks, or inspect projects/areas/tags.
backend-patterns
Backend architecture patterns, API design, database optimization, and server-side best practices for Node.js, Express, and Next.js API routes.
cachibot-full-stack-entity
Add a complete full-stack entity to CachiBot spanning database table, repository, Pydantic models, API routes, TypeScript types, API client, and Zustand store. Use this skill when adding a new data entity or resource that needs persistence and CRUD across the entire stack — e.g., "add bookmarks", "add a reminders…