[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CFYCDPWRYGEA59HS85FZ5C":3,"skill-same:01M6CFYCDPWRYGEA59HS85FZ5C":166},{"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":26,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6CFYCDPWRYGEA59HS85FZ5C","{skill-name}",null,"{what this skill teaches agents}","spboyer\u002Fsensei","spboyer","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7681382?v=4","01M6CFYAEW2827181XXSYD95QD","Shayne Boyer","01M6CFYAJQK7N5X1TZEB8DCCQM",60,"MIT","https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fskill.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39],"{skill name}","skill name","name","testing","design","api","how","error-handling","learned","error","api-design","manual","high","2026-11-10 10:12:30",false,"---\nname: documentation-lookup\ndescription: Use up-to-date library and framework docs via Context7 MCP instead of training data. Activates for setup questions, API references, code examples, or when the user names a framework (e.g. React, Next.js, Prisma).\norigin: ECC\n---\n\n# Documentation Lookup (Context7)\n\nWhen the user asks about libraries, frameworks, or APIs, fetch current documentation via the Context7 MCP (tools `resolve-library-id` and `query-docs`) instead of relying on training data.\n\n## Core Concepts\n\n- **Context7**: MCP server that exposes live documentation; use it instead of training data for libraries and APIs.\n- **resolve-library-id**: Returns Context7-compatible library IDs (e.g. `\u002Fvercel\u002Fnext.js`) from a library name and query.\n- **query-docs**: Fetches documentation and code snippets for a given library ID and question. Always call resolve-library-id first to get a valid library ID.\n\n## When to use\n\nActivate when the user:\n\n- Asks setup or configuration questions (e.g. \"How do I configure Next.js middleware?\")\n- Requests code that depends on a library (\"Write a Prisma query for...\")\n- Needs API or reference information (\"What are the Supabase auth methods?\")\n- Mentions specific frameworks or libraries (React, Vue, Svelte, Express, Tailwind, Prisma, Supabase, etc.)\n\nUse this skill whenever the request depends on accurate, up-to-date behavior of a library, framework, or API. Applies across harnesses that have the Context7 MCP configured (e.g. Claude Code, Cursor, Codex).\n\n## How it works\n\n### Step 1: Resolve the Library ID\n\nCall the **resolve-library-id** MCP tool with:\n\n- **libraryName**: The library or product name taken from the user's question (e.g. `Next.js`, `Prisma`, `Supabase`).\n- **query**: The user's full question. This improves relevance ranking of results.\n\nYou must obtain a Context7-compatible library ID (format `\u002Forg\u002Fproject` or `\u002Forg\u002Fproject\u002Fversion`) before querying docs. Do not call query-docs without a valid library ID from this step.\n\n### Step 2: Select the Best Match\n\nFrom the resolution results, choose one result using:\n\n- **Name match**: Prefer exact or closest match to what the user asked for.\n- **Benchmark score**: Higher scores indicate better documentation quality (100 is highest).\n- **Source reputation**: Prefer High or Medium reputation when available.\n- **Version**: If the user specified a version (e.g. \"React 19\", \"Next.js 15\"), prefer a version-specific library ID if listed (e.g. `\u002Forg\u002Fproject\u002Fv1.2.0`).\n\n### Step 3: Fetch the Documentation\n\nCall the **query-docs** MCP tool with:\n\n- **libraryId**: The selected Context7 library ID from Step 2 (e.g. `\u002Fvercel\u002Fnext.js`).\n- **query**: The user's specific question or task. Be specific to get relevant snippets.\n\nLimit: do not call query-docs (or resolve-library-id) more than 3 times per question. If the answer is unclear after 3 calls, state the uncertainty and use the best information you have rather than guessing.\n\n### Step 4: Use the Documentation\n\n- Answer the user's question using the fetched, current information.\n- Include relevant code examples from the docs when helpful.\n- Cite the library or version when it matters (e.g. \"In Next.js 15...\").\n\n## Examples\n\n### Example: Next.js middleware\n\n1. Call **resolve-library-id** with `libraryName: \"Next.js\"`, `query: \"How do I set up Next.js middleware?\"`.\n2. From results, pick the best match (e.g. `\u002Fvercel\u002Fnext.js`) by name and benchmark score.\n3. Call **query-docs** with `libraryId: \"\u002Fvercel\u002Fnext.js\"`, `query: \"How do I set up Next.js middleware?\"`.\n4. Use the returned snippets and text to answer; include a minimal `middleware.ts` example from the docs if relevant.\n\n### Example: Prisma query\n\n1. Call **resolve-library-id** with `libraryName: \"Prisma\"`, `query: \"How do I query with relations?\"`.\n2. Select the official Prisma library ID (e.g. `\u002Fprisma\u002Fprisma`).\n3. Call **query-docs** with that `libraryId` and the query.\n4. Return the Prisma Client pattern (e.g. `include` or `select`) with a short code snippet from the docs.\n\n### Example: Supabase auth methods\n\n1. Call **resolve-library-id** with `libraryName: \"Supabase\"`, `query: \"What are the auth methods?\"`.\n2. Pick the Supabase docs library ID.\n3. Call **query-docs**; summarize the auth methods and show minimal examples from the fetched docs.\n\n## Best Practices\n\n- **Be specific**: Use the user's full question as the query where possible for better relevance.\n- **Version awareness**: When users mention versions, use version-specific library IDs from the resolve step when available.\n- **Prefer official sources**: When multiple matches exist, prefer official or primary packages over community forks.\n- **No sensitive data**: Redact API keys, passwords, tokens, and other secrets from any query sent to Context7. Treat the user's question as potentially containing secrets before passing it to resolve-library-id or query-docs.\n","# Documentation Lookup (Context7)\n\nWhen the user asks about libraries, frameworks, or APIs, fetch current documentation via the Context7 MCP (tools `resolve-library-id` and `query-docs`) instead of relying on training data.\n\n## Core Concepts\n\n- **Context7**: MCP server that exposes live documentation; use it instead of training data for libraries and APIs.\n- **resolve-library-id**: Returns Context7-compatible library IDs (e.g. `\u002Fvercel\u002Fnext.js`) from a library name and query.\n- **query-docs**: Fetches documentation and code snippets for a given library ID and question. Always call resolve-library-id first to get a valid library ID.\n\n## When to use\n\nActivate when the user:\n\n- Asks setup or configuration questions (e.g. \"How do I configure Next.js middleware?\")\n- Requests code that depends on a library (\"Write a Prisma query for...\")\n- Needs API or reference information (\"What are the Supabase auth methods?\")\n- Mentions specific frameworks or libraries (React, Vue, Svelte, Express, Tailwind, Prisma, Supabase, etc.)\n\nUse this skill whenever the request depends on accurate, up-to-date behavior of a library, framework, or API. Applies across harnesses that have the Context7 MCP configured (e.g. Claude Code, Cursor, Codex).\n\n## How it works\n\n### Step 1: Resolve the Library ID\n\nCall the **resolve-library-id** MCP tool with:\n\n- **libraryName**: The library or product name taken from the user's question (e.g. `Next.js`, `Prisma`, `Supabase`).\n- **query**: The user's full question. This improves relevance ranking of results.\n\nYou must obtain a Context7-compatible library ID (format `\u002Forg\u002Fproject` or `\u002Forg\u002Fproject\u002Fversion`) before querying docs. Do not call query-docs without a valid library ID from this step.\n\n### Step 2: Select the Best Match\n\nFrom the resolution results, choose one result using:\n\n- **Name match**: Prefer exact or closest match to what the user asked for.\n- **Benchmark score**: Higher scores indicate better documentation quality (100 is highest).\n- **Source reputation**: Prefer High or Medium reputation when available.\n- **Version**: If the user specified a version (e.g. \"React 19\", \"Next.js 15\"), prefer a version-specific library ID if listed (e.g. `\u002Forg\u002Fproject\u002Fv1.2.0`).\n\n### Step 3: Fetch the Documentation\n\nCall the **query-docs** MCP tool with:\n\n- **libraryId**: The selected Context7 library ID from Step 2 (e.g. `\u002Fvercel\u002Fnext.js`).\n- **query**: The user's specific question or task. Be specific to get relevant snippets.\n\nLimit: do not call query-docs (or resolve-library-id) more than 3 times per question. If the answer is unclear after 3 calls, state the uncertainty and use the best information you have rather than guessing.\n\n### Step 4: Use the Documentation\n\n- Answer the user's question using the fetched, current information.\n- Include relevant code examples from the docs when helpful.\n- Cite the library or version when it matters (e.g. \"In Next.js 15...\").\n\n## Examples\n\n### Example: Next.js middleware\n\n1. Call **resolve-library-id** with `libraryName: \"Next.js\"`, `query: \"How do I set up Next.js middleware?\"`.\n2. From results, pick the best match (e.g. `\u002Fvercel\u002Fnext.js`) by name and benchmark score.\n3. Call **query-docs** with `libraryId: \"\u002Fvercel\u002Fnext.js\"`, `query: \"How do I set up Next.js middleware?\"`.\n4. Use the returned snippets and text to answer; include a minimal `middleware.ts` example from the docs if relevant.\n\n### Example: Prisma query\n\n1. Call **resolve-library-id** with `libraryName: \"Prisma\"`, `query: \"How do I query with relations?\"`.\n2. Select the official Prisma library ID (e.g. `\u002Fprisma\u002Fprisma`).\n3. Call **query-docs** with that `libraryId` and the query.\n4. Return the Prisma Client pattern (e.g. `include` or `select`) with a short code snippet from the docs.\n\n### Example: Supabase auth methods\n\n1. Call **resolve-library-id** with `libraryName: \"Supabase\"`, `query: \"What are the auth methods?\"`.\n2. Pick the Supabase docs library ID.\n3. Call **query-docs**; summarize the auth methods and show minimal examples from the fetched docs.\n\n## Best Practices\n\n- **Be specific**: Use the user's full question as the query where possible for better relevance.\n- **Version awareness**: When users mention versions, use version-specific library IDs from the resolve step when available.\n- **Prefer official sources**: When multiple matches exist, prefer official or primary packages over community forks.\n- **No sensitive data**: Redact API keys, passwords, tokens, and other secrets from any query sent to Context7. Treat the user's question as potentially containing secrets before passing it to resolve-library-id or query-docs.\n",{"name":45,"origin":46,"description":47},"documentation-lookup","ECC","Use up-to-date library and framework docs via Context7 MCP instead of training data. Activates for setup questions, API references, code examples, or when the user names a framework (e.g. React, Next.js, Prisma).","master","9f95519d9ca52dd8ed67129aca89b2a6051002f9",".ai-team-templates",8,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei","https:\u002F\u002Fspboyer.github.io\u002Fsensei\u002F","https:\u002F\u002Fgithub.com\u002Fspboyer","http:\u002F\u002Fwww.tattoocoder.com","Member of Technical Staff","2026-11-09 00:17:36",{"source":8,"skillName":45,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add spboyer\u002Fsensei --skill documentation-lookup",{"tool":64,"command":65},"bunx","bunx skills add spboyer\u002Fsensei --skill documentation-lookup",{"tool":67,"command":68},"pnpm","pnpm dlx skills add spboyer\u002Fsensei --skill documentation-lookup","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fskill.md",true,[72,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"casting-history.json","REFERENCE","参考文档",70,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fcasting-history.json",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"casting-policy.json",718,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fcasting-policy.json",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"casting-registry.json",19,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fcasting-registry.json",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"ceremonies.md",978,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fceremonies.md",{"path":91,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":92,"sourceHtmlUrl":93},"charter.md",2059,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fcharter.md",{"path":95,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":96,"sourceHtmlUrl":97},"copilot-instructions.md",1830,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fcopilot-instructions.md",{"path":99,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":100,"sourceHtmlUrl":101},"history.md",265,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fhistory.md",{"path":103,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":104,"sourceHtmlUrl":105},"orchestration-log.md",1106,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Forchestration-log.md",{"path":107,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":108,"sourceHtmlUrl":109},"raw-agent-output.md",1336,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fraw-agent-output.md",{"path":111,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":112,"sourceHtmlUrl":113},"roster.md",2095,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Froster.md",{"path":115,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":116,"sourceHtmlUrl":117},"routing.md",3517,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Frouting.md",{"path":119,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":120,"sourceHtmlUrl":121},"run-output.md",1500,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Frun-output.md",{"path":123,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":124,"sourceHtmlUrl":125},"scribe-charter.md",5121,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fscribe-charter.md",{"path":127,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":128,"sourceHtmlUrl":129},"workflows\u002Fsquad-ci.yml",403,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-ci.yml",{"path":131,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":132,"sourceHtmlUrl":133},"workflows\u002Fsquad-docs.yml",1029,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-docs.yml",{"path":135,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":136,"sourceHtmlUrl":137},"workflows\u002Fsquad-heartbeat.yml",12236,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-heartbeat.yml",{"path":139,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":140,"sourceHtmlUrl":141},"workflows\u002Fsquad-issue-assign.yml",6254,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-issue-assign.yml",{"path":143,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":144,"sourceHtmlUrl":145},"workflows\u002Fsquad-label-enforce.yml",6851,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-label-enforce.yml",{"path":147,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":148,"sourceHtmlUrl":149},"workflows\u002Fsquad-main-guard.yml",3183,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-main-guard.yml",{"path":151,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":152,"sourceHtmlUrl":153},"workflows\u002Fsquad-preview.yml",999,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-preview.yml",{"path":155,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":156,"sourceHtmlUrl":157},"workflows\u002Fsquad-release.yml",2222,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-release.yml",{"path":159,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":160,"sourceHtmlUrl":161},"workflows\u002Fsquad-triage.yml",10971,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsquad-triage.yml",{"path":163,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":164,"sourceHtmlUrl":165},"workflows\u002Fsync-squad-labels.yml",6634,"https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fworkflows\u002Fsync-squad-labels.yml",[167,182,212],{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":174,"publishedAt":40},"01M6CFYXGVR5A3QMJMR462AKM8","sample-skill","Utility for working with files","https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002Fdemo-docs\u002Fsample-skill\u002FSKILL.md",[173],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[175,176,177,178,179,180,181],"sample","sample skill","with files","files","utility","with","for",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":186,"sourceHtmlUrl":187,"categories":188,"keywords":191,"publishedAt":40},"01M6CFYJN9FX0GHAH3J13VTNPW","sensei","**WORKFLOW SKILL** - Iteratively improve skill frontmatter and routing clarity. WHEN: \"run sensei\", \"sensei help\", \"improve skill\", \"fix frontmatter\", \"score skill\", \"check skill tokens\". INVOKES: token CLI, test runners, git. FOR SINGLE OPERATIONS: use the token CLI directly.","https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002FSKILL.md",[189,190],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[184,192,193,194,195,196,197,198,181,199,200,201,202,203,204,205,206,207,208,209,210,211],"check","fix","operations","use","token","tokens","workflow skill","single","when","workflow","cli","clarity","test","run","routing","help","git","runners","improve skill","improve",{"skillNo":213,"name":214,"nameZh":6,"description":215,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":216,"categories":217,"keywords":218,"publishedAt":40},"01M6CFYG8RJ13PCRS48E9TV5AB","squad-conventions","Core conventions and patterns used in the Squad codebase","https:\u002F\u002Fgithub.com\u002Fspboyer\u002Fsensei\u002Fblob\u002Fmain\u002F.ai-team-templates\u002Fskills\u002Fsquad-conventions\u002FSKILL.md",[],[219,220,221,222,223,224,225,38,39,226],"squad","squad conventions","conventions","core","project-conventions","patterns","project","codebase"]