[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AF564Y5TP4QPCQAV2ZBV06":3,"skill-same:01M6AF564Y5TP4QPCQAV2ZBV06":67},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6AF564Y5TP4QPCQAV2ZBV06","pb-migrations",null,"Schema migrations and versioning for PocketBase. Use when creating migrations, managing schema versions, syncing collections between environments, using automigrate, or creating collections programmatically. Covers migrate commands, migration file format, snapshot imports, and the _migrations tracking table.","davila7\u002Fclaude-code-templates","davila7","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6216945?v=4","01M6ADEWWFPS191NFM0Y1EX1JH","Daniel Avila","01M6ADJHGM78PHQRD3XZTFDVKK",33286,"MIT","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fpocketbase\u002Fpb-migrations\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"pb migrations","migrations","when","file","imports","for","environments","collections","commands","pocketbase","migration","schema","use","snapshot","tracking","versioning","table","format","migrate","2026-11-10 10:12:30",false,"---\nname: pb-migrations\ndescription: \"Schema migrations and versioning for PocketBase. Use when creating migrations, managing schema versions, syncing collections between environments, using automigrate, or creating collections programmatically. Covers migrate commands, migration file format, snapshot imports, and the _migrations tracking table.\"\n---\n\n# PocketBase Migrations & Schema Versioning\n\n## Overview\n\nPocketBase supports two approaches to schema management:\n\n1. **Auto-migrate** (default in dev) — Dashboard changes auto-generate migration files in `pb_migrations\u002F`\n2. **Manual migrations** — write migration files by hand for full control\n\n## CLI Commands\n\n```bash\n# Create a new empty migration file\n.\u002Fpocketbase migrate create \"add_posts_collection\"\n# Creates: pb_migrations\u002F1234567890_add_posts_collection.js\n\n# Apply all pending migrations\n.\u002Fpocketbase migrate up\n\n# Revert the last applied migration\n.\u002Fpocketbase migrate down\n\n# Generate a full snapshot of all current collections\n.\u002Fpocketbase migrate collections\n# Creates a migration file that recreates all collections from scratch\n\n# Sync migration history with actual DB state (mark all as applied)\n.\u002Fpocketbase migrate history-sync\n```\n\n## Auto-migrate Mode\n\nEnabled by default. When you change collections in the Dashboard, PocketBase auto-generates migration files in `pb_migrations\u002F`.\n\n```bash\n# Start with auto-migrate (default)\n.\u002Fpocketbase serve\n\n# Disable auto-migrate (production)\n.\u002Fpocketbase serve --automigrate=0\n```\n\n**Workflow**:\n1. Develop with auto-migrate ON — use Dashboard to design schema\n2. Migration files are auto-generated in `pb_migrations\u002F`\n3. Commit these files to git\n4. Deploy: migrations run automatically on `serve` start\n5. In production: use `--automigrate=0` to prevent Dashboard changes from generating new migrations\n\n## Migration File Format\n\n```js\n\u002F\u002F pb_migrations\u002F1234567890_add_posts_collection.js\n\nmigrate(\n    \u002F\u002F UP — apply migration\n    function(app) {\n        var collection = new Collection({\n            name: \"posts\",\n            type: \"base\",\n            fields: [\n                { name: \"title\", type: \"text\", required: true },\n                { name: \"body\", type: \"editor\" },\n                { name: \"author\", type: \"relation\", collectionId: \"USERS_COLLECTION_ID\", cascadeDelete: false, maxSelect: 1, required: true },\n                { name: \"status\", type: \"select\", values: [\"draft\", \"published\", \"archived\"] },\n                { name: \"published_at\", type: \"date\" },\n                { name: \"tags\", type: \"relation\", collectionId: \"TAGS_COLLECTION_ID\", maxSelect: 0 }\n            ],\n            indexes: [\n                \"CREATE INDEX idx_posts_author ON posts (author)\",\n                \"CREATE INDEX idx_posts_status ON posts (status)\",\n                \"CREATE UNIQUE INDEX idx_posts_title ON posts (title)\"\n            ],\n            listRule: \"\",   \u002F\u002F WARNING: \"\" means public access — use a filter or null to restrict\n            viewRule: \"\",   \u002F\u002F WARNING: \"\" means public access — use a filter or null to restrict\n            createRule: \"@request.auth.id != ''\",\n            updateRule: \"author = @request.auth.id\",\n            deleteRule: \"author = @request.auth.id\"\n        })\n        app.save(collection)\n    },\n    \u002F\u002F DOWN — revert migration\n    function(app) {\n        var collection = app.findCollectionByNameOrId(\"posts\")\n        app.delete(collection)\n    }\n)\n```\n\n**Important**: the `app` inside migrations is a transactional instance. If any error occurs, the entire migration is rolled back.\n\n## Creating Collections Programmatically\n\n### Base collection\n\n```js\nvar collection = new Collection({\n    name: \"posts\",\n    type: \"base\",\n    fields: [\n        { name: \"title\", type: \"text\", required: true, min: 3, max: 200 },\n        { name: \"slug\", type: \"text\", required: true, autogenerate: { pattern: \"slugify(title)\" } },\n        { name: \"body\", type: \"editor\" },\n        { name: \"cover\", type: \"file\", maxSelect: 1, maxSize: 5242880, mimeTypes: [\"image\u002Fjpeg\", \"image\u002Fpng\", \"image\u002Fwebp\"] },\n        { name: \"views\", type: \"number\", min: 0 },\n        { name: \"metadata\", type: \"json\", maxSize: 2000000 },\n        { name: \"featured\", type: \"bool\" },\n        { name: \"published_at\", type: \"date\" }\n    ]\n})\napp.save(collection)\n```\n\n### Auth collection\n\n```js\nvar collection = new Collection({\n    name: \"users\",\n    type: \"auth\",\n    fields: [\n        { name: \"name\", type: \"text\", required: true },\n        { name: \"avatar\", type: \"file\", maxSelect: 1, maxSize: 5242880 },\n        { name: \"role\", type: \"select\", values: [\"user\", \"editor\", \"admin\"], required: true }\n    ],\n    passwordAuth: { enabled: true, identityFields: [\"email\", \"username\"] },\n    oauth2: { enabled: true },\n    otp: { enabled: false },\n    mfa: { enabled: false },\n    authToken: { duration: 604800 }  \u002F\u002F 7 days\n})\napp.save(collection)\n```\n\n### View collection\n\n```js\nvar collection = new Collection({\n    name: \"posts_stats\",\n    type: \"view\",\n    viewQuery: \"SELECT p.id, p.title, COUNT(c.id) as comments_count, p.views FROM posts p LEFT JOIN comments c ON c.post = p.id GROUP BY p.id\",\n    listRule: \"\",\n    viewRule: \"\"\n})\napp.save(collection)\n```\n\n## Modifying Existing Collections\n\n```js\nmigrate(function(app) {\n    var collection = app.findCollectionByNameOrId(\"posts\")\n\n    \u002F\u002F Add a new field\n    collection.fields.add({\n        name: \"subtitle\",\n        type: \"text\",\n        max: 500\n    })\n\n    \u002F\u002F Remove a field\n    collection.fields.removeByName(\"old_field\")\n\n    \u002F\u002F Update API rules\n    collection.listRule = \"@request.auth.id != ''\"\n    collection.viewRule = \"\"\n\n    \u002F\u002F Add index\n    collection.indexes.push(\"CREATE INDEX idx_posts_subtitle ON posts (subtitle)\")\n\n    app.save(collection)\n}, function(app) {\n    var collection = app.findCollectionByNameOrId(\"posts\")\n    collection.fields.removeByName(\"subtitle\")\n    app.save(collection)\n})\n```\n\n## Raw SQL in Migrations\n\n```js\nmigrate(function(app) {\n    app.db().newQuery(\"ALTER TABLE posts ADD COLUMN legacy_id TEXT DEFAULT ''\").execute()\n    app.db().newQuery(\"UPDATE posts SET legacy_id = id WHERE legacy_id = ''\").execute()\n}, function(app) {\n    app.db().newQuery(\"ALTER TABLE posts DROP COLUMN legacy_id\").execute()\n})\n```\n\n**Warning**: raw SQL bypasses PocketBase's schema cache. Run `migrate collections` afterward to re-sync if needed.\n\n## Settings & Superuser in Migrations\n\n### Initialize app settings\n\n```js\nonBootstrap(function(e) {\n    var settings = e.app.settings()\n    settings.meta.appName = \"My App\"\n    settings.meta.appURL = \"https:\u002F\u002Fmyapp.com\"\n    settings.meta.senderName = \"My App\"\n    settings.meta.senderAddress = \"noreply@myapp.com\"\n    settings.smtp.enabled = true\n    settings.smtp.host = \"smtp.example.com\"\n    settings.smtp.port = 587\n    settings.smtp.username = $os.getenv(\"SMTP_USER\")\n    settings.smtp.password = $os.getenv(\"SMTP_PASS\")\n    e.app.save(settings)\n    return e.next()\n})\n```\n\n### Create superuser in migration\n\n```js\nmigrate(function(app) {\n    var superusers = app.findCollectionByNameOrId(\"_superusers\")\n    var record = new Record(superusers)\n    \u002F\u002F IMPORTANT: always set PB_ADMIN_EMAIL and PB_ADMIN_PASSWORD env vars\n    var email = $os.getenv(\"PB_ADMIN_EMAIL\")\n    var password = $os.getenv(\"PB_ADMIN_PASSWORD\")\n    if (!email || !password) {\n        throw new Error(\"PB_ADMIN_EMAIL and PB_ADMIN_PASSWORD env vars are required\")\n    }\n    record.set(\"email\", email)\n    record.set(\"password\", password)\n    app.save(record)\n})\n```\n\n## Snapshot Migrations\n\n`.\u002Fpocketbase migrate collections` generates a complete snapshot — useful for:\n- Bootstrapping a new environment\n- Resetting migration history\n- Reviewing full schema in one file\n\nThe generated file uses `app.importCollections(collections)` which supports two modes:\n- **Default (merge\u002Fextend)**: adds new collections and fields, updates existing ones, doesn't delete anything\n- **Delete missing**: `app.importCollections(collections, true)` — deletes collections\u002Ffields not in the snapshot\n\n## `_migrations` Table\n\nPocketBase tracks applied migrations in the internal `_migrations` table:\n- `id` — auto-generated\n- `file` — migration filename\n- `applied` — timestamp\n\n`migrate history-sync` marks all existing migration files as applied without running them — useful when importing an existing database.\n\n## Best Practices\n\n1. **Dev**: use auto-migrate + Dashboard for schema design, commit generated files\n2. **Staging\u002FProd**: deploy with `--automigrate=0`, migrations run on startup\n3. **Always write DOWN migrations** — reversibility saves you when things go wrong\n4. **One concern per migration** — don't mix unrelated schema changes\n5. **Test migrations**: apply on a copy of production data before deploying\n6. **Use `migrate collections`** periodically to snapshot current state for documentation\n7. **Never edit applied migrations** — create a new migration to fix issues\n8. **Seed data**: prefer a dedicated migration for one-time initial data; if using `onBootstrap`, make the seed logic idempotent (existence checks\u002Fupserts) because bootstrap runs on every app start\n","# PocketBase Migrations & Schema Versioning\n\n## Overview\n\nPocketBase supports two approaches to schema management:\n\n1. **Auto-migrate** (default in dev) — Dashboard changes auto-generate migration files in `pb_migrations\u002F`\n2. **Manual migrations** — write migration files by hand for full control\n\n## CLI Commands\n\n```bash\n# Create a new empty migration file\n.\u002Fpocketbase migrate create \"add_posts_collection\"\n# Creates: pb_migrations\u002F1234567890_add_posts_collection.js\n\n# Apply all pending migrations\n.\u002Fpocketbase migrate up\n\n# Revert the last applied migration\n.\u002Fpocketbase migrate down\n\n# Generate a full snapshot of all current collections\n.\u002Fpocketbase migrate collections\n# Creates a migration file that recreates all collections from scratch\n\n# Sync migration history with actual DB state (mark all as applied)\n.\u002Fpocketbase migrate history-sync\n```\n\n## Auto-migrate Mode\n\nEnabled by default. When you change collections in the Dashboard, PocketBase auto-generates migration files in `pb_migrations\u002F`.\n\n```bash\n# Start with auto-migrate (default)\n.\u002Fpocketbase serve\n\n# Disable auto-migrate (production)\n.\u002Fpocketbase serve --automigrate=0\n```\n\n**Workflow**:\n1. Develop with auto-migrate ON — use Dashboard to design schema\n2. Migration files are auto-generated in `pb_migrations\u002F`\n3. Commit these files to git\n4. Deploy: migrations run automatically on `serve` start\n5. In production: use `--automigrate=0` to prevent Dashboard changes from generating new migrations\n\n## Migration File Format\n\n```js\n\u002F\u002F pb_migrations\u002F1234567890_add_posts_collection.js\n\nmigrate(\n    \u002F\u002F UP — apply migration\n    function(app) {\n        var collection = new Collection({\n            name: \"posts\",\n            type: \"base\",\n            fields: [\n                { name: \"title\", type: \"text\", required: true },\n                { name: \"body\", type: \"editor\" },\n                { name: \"author\", type: \"relation\", collectionId: \"USERS_COLLECTION_ID\", cascadeDelete: false, maxSelect: 1, required: true },\n                { name: \"status\", type: \"select\", values: [\"draft\", \"published\", \"archived\"] },\n                { name: \"published_at\", type: \"date\" },\n                { name: \"tags\", type: \"relation\", collectionId: \"TAGS_COLLECTION_ID\", maxSelect: 0 }\n            ],\n            indexes: [\n                \"CREATE INDEX idx_posts_author ON posts (author)\",\n                \"CREATE INDEX idx_posts_status ON posts (status)\",\n                \"CREATE UNIQUE INDEX idx_posts_title ON posts (title)\"\n            ],\n            listRule: \"\",   \u002F\u002F WARNING: \"\" means public access — use a filter or null to restrict\n            viewRule: \"\",   \u002F\u002F WARNING: \"\" means public access — use a filter or null to restrict\n            createRule: \"@request.auth.id != ''\",\n            updateRule: \"author = @request.auth.id\",\n            deleteRule: \"author = @request.auth.id\"\n        })\n        app.save(collection)\n    },\n    \u002F\u002F DOWN — revert migration\n    function(app) {\n        var collection = app.findCollectionByNameOrId(\"posts\")\n        app.delete(collection)\n    }\n)\n```\n\n**Important**: the `app` inside migrations is a transactional instance. If any error occurs, the entire migration is rolled back.\n\n## Creating Collections Programmatically\n\n### Base collection\n\n```js\nvar collection = new Collection({\n    name: \"posts\",\n    type: \"base\",\n    fields: [\n        { name: \"title\", type: \"text\", required: true, min: 3, max: 200 },\n        { name: \"slug\", type: \"text\", required: true, autogenerate: { pattern: \"slugify(title)\" } },\n        { name: \"body\", type: \"editor\" },\n        { name: \"cover\", type: \"file\", maxSelect: 1, maxSize: 5242880, mimeTypes: [\"image\u002Fjpeg\", \"image\u002Fpng\", \"image\u002Fwebp\"] },\n        { name: \"views\", type: \"number\", min: 0 },\n        { name: \"metadata\", type: \"json\", maxSize: 2000000 },\n        { name: \"featured\", type: \"bool\" },\n        { name: \"published_at\", type: \"date\" }\n    ]\n})\napp.save(collection)\n```\n\n### Auth collection\n\n```js\nvar collection = new Collection({\n    name: \"users\",\n    type: \"auth\",\n    fields: [\n        { name: \"name\", type: \"text\", required: true },\n        { name: \"avatar\", type: \"file\", maxSelect: 1, maxSize: 5242880 },\n        { name: \"role\", type: \"select\", values: [\"user\", \"editor\", \"admin\"], required: true }\n    ],\n    passwordAuth: { enabled: true, identityFields: [\"email\", \"username\"] },\n    oauth2: { enabled: true },\n    otp: { enabled: false },\n    mfa: { enabled: false },\n    authToken: { duration: 604800 }  \u002F\u002F 7 days\n})\napp.save(collection)\n```\n\n### View collection\n\n```js\nvar collection = new Collection({\n    name: \"posts_stats\",\n    type: \"view\",\n    viewQuery: \"SELECT p.id, p.title, COUNT(c.id) as comments_count, p.views FROM posts p LEFT JOIN comments c ON c.post = p.id GROUP BY p.id\",\n    listRule: \"\",\n    viewRule: \"\"\n})\napp.save(collection)\n```\n\n## Modifying Existing Collections\n\n```js\nmigrate(function(app) {\n    var collection = app.findCollectionByNameOrId(\"posts\")\n\n    \u002F\u002F Add a new field\n    collection.fields.add({\n        name: \"subtitle\",\n        type: \"text\",\n        max: 500\n    })\n\n    \u002F\u002F Remove a field\n    collection.fields.removeByName(\"old_field\")\n\n    \u002F\u002F Update API rules\n    collection.listRule = \"@request.auth.id != ''\"\n    collection.viewRule = \"\"\n\n    \u002F\u002F Add index\n    collection.indexes.push(\"CREATE INDEX idx_posts_subtitle ON posts (subtitle)\")\n\n    app.save(collection)\n}, function(app) {\n    var collection = app.findCollectionByNameOrId(\"posts\")\n    collection.fields.removeByName(\"subtitle\")\n    app.save(collection)\n})\n```\n\n## Raw SQL in Migrations\n\n```js\nmigrate(function(app) {\n    app.db().newQuery(\"ALTER TABLE posts ADD COLUMN legacy_id TEXT DEFAULT ''\").execute()\n    app.db().newQuery(\"UPDATE posts SET legacy_id = id WHERE legacy_id = ''\").execute()\n}, function(app) {\n    app.db().newQuery(\"ALTER TABLE posts DROP COLUMN legacy_id\").execute()\n})\n```\n\n**Warning**: raw SQL bypasses PocketBase's schema cache. Run `migrate collections` afterward to re-sync if needed.\n\n## Settings & Superuser in Migrations\n\n### Initialize app settings\n\n```js\nonBootstrap(function(e) {\n    var settings = e.app.settings()\n    settings.meta.appName = \"My App\"\n    settings.meta.appURL = \"https:\u002F\u002Fmyapp.com\"\n    settings.meta.senderName = \"My App\"\n    settings.meta.senderAddress = \"noreply@myapp.com\"\n    settings.smtp.enabled = true\n    settings.smtp.host = \"smtp.example.com\"\n    settings.smtp.port = 587\n    settings.smtp.username = $os.getenv(\"SMTP_USER\")\n    settings.smtp.password = $os.getenv(\"SMTP_PASS\")\n    e.app.save(settings)\n    return e.next()\n})\n```\n\n### Create superuser in migration\n\n```js\nmigrate(function(app) {\n    var superusers = app.findCollectionByNameOrId(\"_superusers\")\n    var record = new Record(superusers)\n    \u002F\u002F IMPORTANT: always set PB_ADMIN_EMAIL and PB_ADMIN_PASSWORD env vars\n    var email = $os.getenv(\"PB_ADMIN_EMAIL\")\n    var password = $os.getenv(\"PB_ADMIN_PASSWORD\")\n    if (!email || !password) {\n        throw new Error(\"PB_ADMIN_EMAIL and PB_ADMIN_PASSWORD env vars are required\")\n    }\n    record.set(\"email\", email)\n    record.set(\"password\", password)\n    app.save(record)\n})\n```\n\n## Snapshot Migrations\n\n`.\u002Fpocketbase migrate collections` generates a complete snapshot — useful for:\n- Bootstrapping a new environment\n- Resetting migration history\n- Reviewing full schema in one file\n\nThe generated file uses `app.importCollections(collections)` which supports two modes:\n- **Default (merge\u002Fextend)**: adds new collections and fields, updates existing ones, doesn't delete anything\n- **Delete missing**: `app.importCollections(collections, true)` — deletes collections\u002Ffields not in the snapshot\n\n## `_migrations` Table\n\nPocketBase tracks applied migrations in the internal `_migrations` table:\n- `id` — auto-generated\n- `file` — migration filename\n- `applied` — timestamp\n\n`migrate history-sync` marks all existing migration files as applied without running them — useful when importing an existing database.\n\n## Best Practices\n\n1. **Dev**: use auto-migrate + Dashboard for schema design, commit generated files\n2. **Staging\u002FProd**: deploy with `--automigrate=0`, migrations run on startup\n3. **Always write DOWN migrations** — reversibility saves you when things go wrong\n4. **One concern per migration** — don't mix unrelated schema changes\n5. **Test migrations**: apply on a copy of production data before deploying\n6. **Use `migrate collections`** periodically to snapshot current state for documentation\n7. **Never edit applied migrations** — create a new migration to fix issues\n8. **Seed data**: prefer a dedicated migration for one-time initial data; if using `onBootstrap`, make the seed logic idempotent (existence checks\u002Fupserts) because bootstrap runs on every app start\n",{"name":5,"description":7},"main","2b749c82b5d11fac39d9a6e021ce3f5b8a541bd1","cli-tool\u002Fcomponents\u002Fskills\u002Fpocketbase\u002Fpb-migrations",3909,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates","https:\u002F\u002Faitmpl.com","https:\u002F\u002Fgithub.com\u002Fdavila7","https:\u002F\u002Fdanielavila.me","Building AI dev tools with LLMs","2026-11-11 11:53:30",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add davila7\u002Fclaude-code-templates --skill pb-migrations",{"tool":59,"command":60},"bunx","bunx skills add davila7\u002Fclaude-code-templates --skill pb-migrations",{"tool":62,"command":63},"pnpm","pnpm dlx skills add davila7\u002Fclaude-code-templates --skill pb-migrations","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fpocketbase\u002Fpb-migrations\u002FSKILL.md",true,[],[68,97,124,157,191,215],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":79,"publishedAt":38},"01M70NHBTQ8BV0A2SCAZXEPHCX","wealthville-pool-scoring","Score DeFi liquidity pools before providing liquidity. Returns a 0-100 pool score and an Enter\u002FHold\u002FExit\u002FReduce\u002FAvoid verdict with calibrated confidence for ~68,800 Solana pools and 575 EVM pools, plus a public miss-inclusive track record. Use when asked whether a pool is worth LPing into, which pools look best right now, or how accurate the scores have actually been.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fweb-data\u002Fwealthville-pool-scoring\u002FSKILL.md",[74],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[80,81,82,83,84,24,85,86,31,21,87,88,89,90,91,92,93,94,95,96],"scoring","pool","wealthville pool scoring","liquidity","which","exit","now","reduce","with","record","track","verdict","evm","solana","how","public","look",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":38},"01M70MB6VR8ERJ4EM8D5KHBMEV","technical-debt-auditor","Scans a codebase and produces a quantified technical debt report with a prioritized remediation plan. Analyzes dead code, TODO\u002FFIXME\u002FHACK markers, dependency staleness, complexity hotspots, code duplication signals, test coverage gaps, unused exports, and outdated patterns. Use this skill when the user asks to audit their codebase for tech debt, wants a health check of their code quality, says things like \"where should I focus refactoring\", \"find code smells\", \"audit my codebase\", \"what technical debt do we have\", \"prioritize cleanup work\", or asks about code quality metrics. Also trigger when the user mentions \"code rot\", \"legacy cleanup\", \"refactoring priorities\", or wants to understand the overall health of a project before a major effort. Trigger even if the user doesn't say \"technical debt\" explicitly — any request to systematically assess code quality and identify improvement priorities belongs here.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdevelopment\u002Ftechnical-debt-auditor\u002FSKILL.md",[103],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},[105,106,107,108,109,110,111,112,113,114,115,21,116,117,118,119,120,121,122,123],"technical debt","debt","technical","technical debt auditor","auditor","coverage","complexity","markers","project","cleanup","unused","code","todo","work","plan","focus","signals","audit","dependency",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":139,"publishedAt":38},"01M70KPYH9QNHCNME5GJQGE22K","readonly-sql-guard","Make an agent's database access provably read-only. Use when an agent runs caller-supplied SQL against a production\u002FERP\u002Fanalytics database (a \"query\" MCP tool, text-to-SQL, an admin console), or when reviewing DB-access code for write\u002FDDL\u002Fside-effect\u002Ftransaction-escape risks. Checks what a statement CALLS, not just its shape.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdatabase\u002Freadonly-sql-guard\u002FSKILL.md",[130,133,134],{"categoryNo":131,"categoryName":132,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},{"categoryNo":135,"categoryName":136,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[140,141,142,143,144,145,146,24,147,148,149,150,151,152,153,31,154,155,21,156],"readonly","guard","sql guard","sql","readonly sql guard","erp","effect","read-only","db","just","tool","calls","only","MCP","access","database","query",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":161,"licenseFileUrl":162,"sourceHtmlUrl":163,"categories":164,"keywords":168,"publishedAt":38},"01M6AFY6F7CC2BBZP1QD6VTNVC","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[165],{"categoryNo":166,"categoryName":167,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000009","前端开发",[169,170,171,172,173,174,175,176,177,178,179,180,181,22,182,183,184,185,186,187,188,189,24,190],"artifacts builder","web","web artifacts builder","artifacts","builder","state","routing","state management","component","css","frontend","ui","Tools","components","shadcn","react","Tailwind","suite","jsx","html","single-file","ui components",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":161,"licenseFileUrl":195,"sourceHtmlUrl":196,"categories":197,"keywords":202,"publishedAt":38},"01M6AFWF33SFV9Z3SF4PEEE4BF","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[198,201],{"categoryNo":199,"categoryName":200,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":166,"categoryName":167,"taxonomyType":77,"taxonomyTypeDesc":78},[203,204,205,206,207,170,208,179,180,209,210,211,212,24,213,88,214],"webapp testing","testing","webapp","browser","playwright","applications","debugging","toolkit","logs","screenshots","local","behavior",{"skillNo":216,"name":217,"nameZh":6,"description":218,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":161,"licenseFileUrl":219,"sourceHtmlUrl":220,"categories":221,"keywords":229,"publishedAt":38},"01M6AF67Q67JJJ5V51JR2P52KA","discernment-nudge","After you give a substantive answer or draft that the user may act on — advice or recommendations, drafted artifacts such as goals, plans, pitches, proposals, or emails, estimates or projections, analysis or interpretation of data, factual claims they may rely on, or a multi-step argument — invoke this skill BEFORE finalizing your reply and then, if it applies, append 2-3 short follow-up questions, each tied to something specific in what you just produced, that help the user check key facts, probe the reasoning or assumptions, and notice missing context. Do this at most once per conversation. Skip it when the user asked a trivial how-to or simple lookup, wants a purely educational explanation, asked you only to format, convert, or assemble a file from content they provided, is writing code they will run, is doing creative writing or casual chat, or already asked you to double-check, cite, or review — the skill file explains these boundaries and the exact output format.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FSKILL.md",[222,225,226],{"categoryNo":223,"categoryName":224,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},{"categoryNo":227,"categoryName":228,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000036","内容创作者",[230,231,232,233,234,235,236,237,172,238,22,116,239,240,241,242,243,152,244,21,245,246,247,248,249,94,250],"discernment nudge","nudge","interpretation","help","run","reasoning","data","writing","lookup","content","review","conversation","short","up","invoke","you","analysis","claims","argument","assemble","recommendations"]