[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F6ECRYG1HH0C6BKB5RC0AJ":3,"skill-same:01M6F6ECRYG1HH0C6BKB5RC0AJ":79},{"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":23,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6F6ECRYG1HH0C6BKB5RC0AJ","documenso-upgrade-migration",null,"Execute Documenso API version upgrades and SDK migrations.\nUse when upgrading from v1 to v2 API, updating SDK versions,\nor migrating between Documenso versions.\nTrigger with phrases like \"documenso upgrade\", \"documenso v2 migration\",\n\"update documenso SDK\", \"documenso API version\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1991,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fdocumenso-pack\u002Fskills\u002Fdocumenso-upgrade-migration\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"documenso","documenso upgrade migration","upgrade","migration","version","when","api version","v1","with","trigger","io","migrations","sdk","use","upgrades","execute","edit","write","read","Bash","api","npm","update","2026-11-10 10:12:30",false,"---\nname: documenso-upgrade-migration\ndescription: |\n  Execute Documenso API version upgrades and SDK migrations.\n  Use when upgrading from v1 to v2 API, updating SDK versions,\n  or migrating between Documenso versions.\n  Trigger with phrases like \"documenso upgrade\", \"documenso v2 migration\",\n  \"update documenso SDK\", \"documenso API version\".\nallowed-tools: Read, Write, Edit, Bash(npm:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Documenso Upgrade & Migration\n\n## Overview\nGuide for upgrading Documenso SDK versions and migrating from API v1 to v2.\n\n## Prerequisites\n- Current Documenso integration working\n- Test environment available\n- Feature flag system (recommended)\n- Backup\u002Frollback plan\n\n## API Version Differences\n\n### v1 vs v2 Comparison\n\n| Feature | API v1 | API v2 |\n|---------|--------|--------|\n| Status | Deprecated | Current |\n| SDK Support | Limited | Full TypeScript\u002FPython\u002FGo |\n| Documents | `\u002Fapi\u002Fv1\u002Fdocuments` | `\u002Fapi\u002Fv2\u002Fdocuments` |\n| Templates | `\u002Fapi\u002Fv1\u002Ftemplates` | `\u002Fapi\u002Fv2\u002Ftemplates` |\n| Envelopes | N\u002FA | `\u002Fapi\u002Fv2\u002Fenvelopes` (new) |\n| ID Format | Numeric | Prefixed (doc_, tmpl_, etc.) |\n| Batch Operations | No | Yes |\n| File Streaming | No | Yes |\n\n## Migration Steps\n\n### Step 1: Update SDK\n\n```bash\n# Remove old SDK (if any custom v1 implementation)\nnpm uninstall your-documenso-v1-wrapper\n\n# Install v2 SDK\nnpm install @documenso\u002Fsdk-typescript\n\n# For Python\npip install --upgrade documenso_sdk\n```\n\n### Step 2: Update Import Statements\n\n```typescript\n\u002F\u002F Before (v1 - hypothetical)\nimport { DocumensoClient } from \"documenso-v1\";\n\n\u002F\u002F After (v2)\nimport { Documenso } from \"@documenso\u002Fsdk-typescript\";\n```\n\n### Step 3: Update Client Initialization\n\n```typescript\n\u002F\u002F Before (v1)\nconst client = new DocumensoClient({\n  apiKey: process.env.DOCUMENSO_API_KEY,\n  baseUrl: \"https:\u002F\u002Fapp.documenso.com\u002Fapi\u002Fv1\",\n});\n\n\u002F\u002F After (v2)\nconst client = new Documenso({\n  apiKey: process.env.DOCUMENSO_API_KEY ?? \"\",\n  serverURL: \"https:\u002F\u002Fapp.documenso.com\u002Fapi\u002Fv2\u002F\",\n});\n```\n\n### Step 4: Update Document Operations\n\n```typescript\n\u002F\u002F Before (v1)\nconst document = await client.documents.create({\n  title: \"My Document\",\n  file: fileBuffer,\n});\nconst docId = document.id;  \u002F\u002F Numeric: 12345\n\n\u002F\u002F After (v2)\n\u002F\u002F Note: createV0 is used during beta, will become create\nconst document = await client.documents.createV0({\n  title: \"My Document\",\n  file: pdfBlob,\n});\nconst docId = document.documentId;  \u002F\u002F Prefixed: doc_abc123\n```\n\n### Step 5: Update Recipient Operations\n\n```typescript\n\u002F\u002F Before (v1)\nawait client.documents.addRecipient(docId, {\n  email: \"signer@example.com\",\n  name: \"John Doe\",\n  role: \"signer\",\n});\n\n\u002F\u002F After (v2)\nawait client.documentsRecipients.createV0({\n  documentId: docId,\n  email: \"signer@example.com\",\n  name: \"John Doe\",\n  role: \"SIGNER\",  \u002F\u002F Note: uppercase enum\n});\n```\n\n### Step 6: Update Field Operations\n\n```typescript\n\u002F\u002F Before (v1)\nawait client.documents.addField(docId, recipientId, {\n  type: \"signature\",\n  page: 1,\n  x: 100,\n  y: 600,\n  width: 200,\n  height: 60,\n});\n\n\u002F\u002F After (v2)\nawait client.documentsFields.createV0({\n  documentId: docId,\n  recipientId: recipientId,\n  type: \"SIGNATURE\",  \u002F\u002F Note: uppercase enum\n  page: 1,\n  positionX: 100,     \u002F\u002F Note: renamed from x\u002Fy\n  positionY: 600,\n  width: 200,\n  height: 60,\n});\n```\n\n### Step 7: Update Template Usage\n\n```typescript\n\u002F\u002F Before (v1)\nconst doc = await client.templates.createDocument(templateId, {\n  recipients: [{ email: \"signer@example.com\", name: \"John\" }],\n});\n\n\u002F\u002F After (v2)\nconst envelope = await client.envelopes.useV0({\n  templateId: templateId,\n  recipients: [\n    {\n      email: \"signer@example.com\",\n      name: \"John\",\n      signerIndex: 0,\n    },\n  ],\n});\n```\n\n### Step 8: Update Webhook Handlers\n\n```typescript\n\u002F\u002F Before (v1)\ninterface V1WebhookPayload {\n  type: string;\n  document: {\n    id: number;\n    title: string;\n    status: string;\n  };\n}\n\n\u002F\u002F After (v2)\ninterface V2WebhookPayload {\n  event: string;  \u002F\u002F Note: renamed from type\n  payload: {\n    id: string;   \u002F\u002F Note: string prefixed ID\n    title: string;\n    status: string;\n    recipients: Array\u003C{\n      email: string;\n      signingStatus: string;\n    }>;\n  };\n  createdAt: string;\n  webhookEndpoint: string;\n}\n\n\u002F\u002F Update handler\napp.post(\"\u002Fwebhooks\u002Fdocumenso\", (req, res) => {\n  const { event, payload } = req.body as V2WebhookPayload;\n\n  switch (event) {\n    case \"document.completed\":  \u002F\u002F v2 event name\n      handleDocumentCompleted(payload);\n      break;\n    case \"document.signed\":\n      handleDocumentSigned(payload);\n      break;\n  }\n\n  res.json({ received: true });\n});\n```\n\n## Gradual Migration Strategy\n\n### Step 1: Feature Flag Setup\n\n```typescript\nimport { getDocumenso } from \".\u002Fdocumenso-v2\";\nimport { getLegacyClient } from \".\u002Fdocumenso-v1\";\n\nasync function getClient() {\n  const useV2 = await featureFlags.isEnabled(\"documenso_v2\");\n\n  if (useV2) {\n    return { client: getDocumenso(), version: \"v2\" };\n  } else {\n    return { client: getLegacyClient(), version: \"v1\" };\n  }\n}\n```\n\n### Step 2: Adapter Pattern\n\n```typescript\n\u002F\u002F Create unified interface\ninterface DocumentService {\n  createDocument(title: string, file: Blob): Promise\u003C{ id: string }>;\n  addRecipient(docId: string, email: string, name: string): Promise\u003Cvoid>;\n  sendDocument(docId: string): Promise\u003Cvoid>;\n}\n\n\u002F\u002F v1 adapter\nclass V1DocumentService implements DocumentService {\n  async createDocument(title: string, file: Blob) {\n    const doc = await v1Client.documents.create({ title, file });\n    return { id: String(doc.id) };  \u002F\u002F Convert numeric to string\n  }\n  \u002F\u002F ... other methods\n}\n\n\u002F\u002F v2 adapter\nclass V2DocumentService implements DocumentService {\n  async createDocument(title: string, file: Blob) {\n    const doc = await v2Client.documents.createV0({ title, file });\n    return { id: doc.documentId! };\n  }\n  \u002F\u002F ... other methods\n}\n\n\u002F\u002F Factory\nfunction getDocumentService(): DocumentService {\n  return featureFlags.isEnabled(\"documenso_v2\")\n    ? new V2DocumentService()\n    : new V1DocumentService();\n}\n```\n\n### Step 3: Migration Rollout\n\n```\nWeek 1: Deploy v2 code with feature flag OFF\nWeek 2: Enable v2 for internal users (5%)\nWeek 3: Enable v2 for beta users (20%)\nWeek 4: Enable v2 for all users (100%)\nWeek 5: Remove v1 code\n```\n\n## ID Migration\n\nIf you store document IDs in your database:\n\n```typescript\n\u002F\u002F Migration script\nasync function migrateDocumentIds() {\n  \u002F\u002F v2 IDs have prefix, v1 IDs are numeric\n  const documents = await db.documents.findAll({\n    where: { documensoId: { notLike: 'doc_%' } }\n  });\n\n  for (const doc of documents) {\n    \u002F\u002F Fetch document from v2 API to get new ID\n    \u002F\u002F Note: You may need Documenso support for ID mapping\n    console.log(`Migrate: ${doc.documensoId} -> doc_xxx`);\n  }\n}\n```\n\n## Testing Migration\n\n```typescript\n\u002F\u002F Run both versions and compare\nasync function testMigration(testData: TestDocument) {\n  const v1Result = await v1Service.createDocument(testData);\n  const v2Result = await v2Service.createDocument(testData);\n\n  \u002F\u002F Compare results\n  assert(v2Result.status === v1Result.status);\n  assert(v2Result.recipients.length === v1Result.recipients.length);\n\n  console.log(\"Migration test passed\");\n}\n```\n\n## Rollback Plan\n\n```bash\n# If v2 fails, rollback feature flag\nfeatureFlags.disable(\"documenso_v2\")\n\n# Or deploy previous version\nkubectl rollout undo deployment\u002Fsigning-service\n```\n\n## Output\n- Updated SDK to latest version\n- Migrated from v1 to v2 API\n- Feature flags controlling rollout\n- Rollback procedure ready\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| ID mismatch | v1 vs v2 format | Use adapter to normalize |\n| Missing field | API change | Update to new field names |\n| 404 on template | ID format changed | Fetch new template ID |\n| Enum errors | Case sensitivity | Use uppercase enums |\n\n## Resources\n- [Documenso API v2 Documentation](https:\u002F\u002Fopenapi.documenso.com\u002F)\n- [SDK Changelog](https:\u002F\u002Fgithub.com\u002Fdocumenso\u002Fsdk-typescript\u002Freleases)\n- [Migration Guide](https:\u002F\u002Fdocs.documenso.com\u002Fdevelopers\u002Fpublic-api)\n\n## Next Steps\nFor CI\u002FCD integration, see `documenso-ci-integration`.\n","# Documenso Upgrade & Migration\n\n## Overview\nGuide for upgrading Documenso SDK versions and migrating from API v1 to v2.\n\n## Prerequisites\n- Current Documenso integration working\n- Test environment available\n- Feature flag system (recommended)\n- Backup\u002Frollback plan\n\n## API Version Differences\n\n### v1 vs v2 Comparison\n\n| Feature | API v1 | API v2 |\n|---------|--------|--------|\n| Status | Deprecated | Current |\n| SDK Support | Limited | Full TypeScript\u002FPython\u002FGo |\n| Documents | `\u002Fapi\u002Fv1\u002Fdocuments` | `\u002Fapi\u002Fv2\u002Fdocuments` |\n| Templates | `\u002Fapi\u002Fv1\u002Ftemplates` | `\u002Fapi\u002Fv2\u002Ftemplates` |\n| Envelopes | N\u002FA | `\u002Fapi\u002Fv2\u002Fenvelopes` (new) |\n| ID Format | Numeric | Prefixed (doc_, tmpl_, etc.) |\n| Batch Operations | No | Yes |\n| File Streaming | No | Yes |\n\n## Migration Steps\n\n### Step 1: Update SDK\n\n```bash\n# Remove old SDK (if any custom v1 implementation)\nnpm uninstall your-documenso-v1-wrapper\n\n# Install v2 SDK\nnpm install @documenso\u002Fsdk-typescript\n\n# For Python\npip install --upgrade documenso_sdk\n```\n\n### Step 2: Update Import Statements\n\n```typescript\n\u002F\u002F Before (v1 - hypothetical)\nimport { DocumensoClient } from \"documenso-v1\";\n\n\u002F\u002F After (v2)\nimport { Documenso } from \"@documenso\u002Fsdk-typescript\";\n```\n\n### Step 3: Update Client Initialization\n\n```typescript\n\u002F\u002F Before (v1)\nconst client = new DocumensoClient({\n  apiKey: process.env.DOCUMENSO_API_KEY,\n  baseUrl: \"https:\u002F\u002Fapp.documenso.com\u002Fapi\u002Fv1\",\n});\n\n\u002F\u002F After (v2)\nconst client = new Documenso({\n  apiKey: process.env.DOCUMENSO_API_KEY ?? \"\",\n  serverURL: \"https:\u002F\u002Fapp.documenso.com\u002Fapi\u002Fv2\u002F\",\n});\n```\n\n### Step 4: Update Document Operations\n\n```typescript\n\u002F\u002F Before (v1)\nconst document = await client.documents.create({\n  title: \"My Document\",\n  file: fileBuffer,\n});\nconst docId = document.id;  \u002F\u002F Numeric: 12345\n\n\u002F\u002F After (v2)\n\u002F\u002F Note: createV0 is used during beta, will become create\nconst document = await client.documents.createV0({\n  title: \"My Document\",\n  file: pdfBlob,\n});\nconst docId = document.documentId;  \u002F\u002F Prefixed: doc_abc123\n```\n\n### Step 5: Update Recipient Operations\n\n```typescript\n\u002F\u002F Before (v1)\nawait client.documents.addRecipient(docId, {\n  email: \"signer@example.com\",\n  name: \"John Doe\",\n  role: \"signer\",\n});\n\n\u002F\u002F After (v2)\nawait client.documentsRecipients.createV0({\n  documentId: docId,\n  email: \"signer@example.com\",\n  name: \"John Doe\",\n  role: \"SIGNER\",  \u002F\u002F Note: uppercase enum\n});\n```\n\n### Step 6: Update Field Operations\n\n```typescript\n\u002F\u002F Before (v1)\nawait client.documents.addField(docId, recipientId, {\n  type: \"signature\",\n  page: 1,\n  x: 100,\n  y: 600,\n  width: 200,\n  height: 60,\n});\n\n\u002F\u002F After (v2)\nawait client.documentsFields.createV0({\n  documentId: docId,\n  recipientId: recipientId,\n  type: \"SIGNATURE\",  \u002F\u002F Note: uppercase enum\n  page: 1,\n  positionX: 100,     \u002F\u002F Note: renamed from x\u002Fy\n  positionY: 600,\n  width: 200,\n  height: 60,\n});\n```\n\n### Step 7: Update Template Usage\n\n```typescript\n\u002F\u002F Before (v1)\nconst doc = await client.templates.createDocument(templateId, {\n  recipients: [{ email: \"signer@example.com\", name: \"John\" }],\n});\n\n\u002F\u002F After (v2)\nconst envelope = await client.envelopes.useV0({\n  templateId: templateId,\n  recipients: [\n    {\n      email: \"signer@example.com\",\n      name: \"John\",\n      signerIndex: 0,\n    },\n  ],\n});\n```\n\n### Step 8: Update Webhook Handlers\n\n```typescript\n\u002F\u002F Before (v1)\ninterface V1WebhookPayload {\n  type: string;\n  document: {\n    id: number;\n    title: string;\n    status: string;\n  };\n}\n\n\u002F\u002F After (v2)\ninterface V2WebhookPayload {\n  event: string;  \u002F\u002F Note: renamed from type\n  payload: {\n    id: string;   \u002F\u002F Note: string prefixed ID\n    title: string;\n    status: string;\n    recipients: Array\u003C{\n      email: string;\n      signingStatus: string;\n    }>;\n  };\n  createdAt: string;\n  webhookEndpoint: string;\n}\n\n\u002F\u002F Update handler\napp.post(\"\u002Fwebhooks\u002Fdocumenso\", (req, res) => {\n  const { event, payload } = req.body as V2WebhookPayload;\n\n  switch (event) {\n    case \"document.completed\":  \u002F\u002F v2 event name\n      handleDocumentCompleted(payload);\n      break;\n    case \"document.signed\":\n      handleDocumentSigned(payload);\n      break;\n  }\n\n  res.json({ received: true });\n});\n```\n\n## Gradual Migration Strategy\n\n### Step 1: Feature Flag Setup\n\n```typescript\nimport { getDocumenso } from \".\u002Fdocumenso-v2\";\nimport { getLegacyClient } from \".\u002Fdocumenso-v1\";\n\nasync function getClient() {\n  const useV2 = await featureFlags.isEnabled(\"documenso_v2\");\n\n  if (useV2) {\n    return { client: getDocumenso(), version: \"v2\" };\n  } else {\n    return { client: getLegacyClient(), version: \"v1\" };\n  }\n}\n```\n\n### Step 2: Adapter Pattern\n\n```typescript\n\u002F\u002F Create unified interface\ninterface DocumentService {\n  createDocument(title: string, file: Blob): Promise\u003C{ id: string }>;\n  addRecipient(docId: string, email: string, name: string): Promise\u003Cvoid>;\n  sendDocument(docId: string): Promise\u003Cvoid>;\n}\n\n\u002F\u002F v1 adapter\nclass V1DocumentService implements DocumentService {\n  async createDocument(title: string, file: Blob) {\n    const doc = await v1Client.documents.create({ title, file });\n    return { id: String(doc.id) };  \u002F\u002F Convert numeric to string\n  }\n  \u002F\u002F ... other methods\n}\n\n\u002F\u002F v2 adapter\nclass V2DocumentService implements DocumentService {\n  async createDocument(title: string, file: Blob) {\n    const doc = await v2Client.documents.createV0({ title, file });\n    return { id: doc.documentId! };\n  }\n  \u002F\u002F ... other methods\n}\n\n\u002F\u002F Factory\nfunction getDocumentService(): DocumentService {\n  return featureFlags.isEnabled(\"documenso_v2\")\n    ? new V2DocumentService()\n    : new V1DocumentService();\n}\n```\n\n### Step 3: Migration Rollout\n\n```\nWeek 1: Deploy v2 code with feature flag OFF\nWeek 2: Enable v2 for internal users (5%)\nWeek 3: Enable v2 for beta users (20%)\nWeek 4: Enable v2 for all users (100%)\nWeek 5: Remove v1 code\n```\n\n## ID Migration\n\nIf you store document IDs in your database:\n\n```typescript\n\u002F\u002F Migration script\nasync function migrateDocumentIds() {\n  \u002F\u002F v2 IDs have prefix, v1 IDs are numeric\n  const documents = await db.documents.findAll({\n    where: { documensoId: { notLike: 'doc_%' } }\n  });\n\n  for (const doc of documents) {\n    \u002F\u002F Fetch document from v2 API to get new ID\n    \u002F\u002F Note: You may need Documenso support for ID mapping\n    console.log(`Migrate: ${doc.documensoId} -> doc_xxx`);\n  }\n}\n```\n\n## Testing Migration\n\n```typescript\n\u002F\u002F Run both versions and compare\nasync function testMigration(testData: TestDocument) {\n  const v1Result = await v1Service.createDocument(testData);\n  const v2Result = await v2Service.createDocument(testData);\n\n  \u002F\u002F Compare results\n  assert(v2Result.status === v1Result.status);\n  assert(v2Result.recipients.length === v1Result.recipients.length);\n\n  console.log(\"Migration test passed\");\n}\n```\n\n## Rollback Plan\n\n```bash\n# If v2 fails, rollback feature flag\nfeatureFlags.disable(\"documenso_v2\")\n\n# Or deploy previous version\nkubectl rollout undo deployment\u002Fsigning-service\n```\n\n## Output\n- Updated SDK to latest version\n- Migrated from v1 to v2 API\n- Feature flags controlling rollout\n- Rollback procedure ready\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| ID mismatch | v1 vs v2 format | Use adapter to normalize |\n| Missing field | API change | Update to new field names |\n| 404 on template | ID format changed | Fetch new template ID |\n| Enum errors | Case sensitivity | Use uppercase enums |\n\n## Resources\n- [Documenso API v2 Documentation](https:\u002F\u002Fopenapi.documenso.com\u002F)\n- [SDK Changelog](https:\u002F\u002Fgithub.com\u002Fdocumenso\u002Fsdk-typescript\u002Freleases)\n- [Migration Guide](https:\u002F\u002Fdocs.documenso.com\u002Fdevelopers\u002Fpublic-api)\n\n## Next Steps\nFor CI\u002FCD integration, see `documenso-ci-integration`.\n",{"name":5,"author":52,"license":15,"version":53,"description":54,"allowed-tools":55},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Execute Documenso API version upgrades and SDK migrations.\nUse when upgrading from v1 to v2 API, updating SDK versions,\nor migrating between Documenso versions.\nTrigger with phrases like \"documenso upgrade\", \"documenso v2 migration\",\n\"update documenso SDK\", \"documenso API version\".\n","Read, Write, Edit, Bash(npm:*)","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fdocumenso-pack\u002Fskills\u002Fdocumenso-upgrade-migration",234,"https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust","https:\u002F\u002Fgithub.com\u002FDicklesworthstone","https:\u002F\u002Fwww.jeffreyemanuel.com\u002F","Building in NY","2026-11-13 11:50:27",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill documenso-upgrade-migration",{"tool":71,"command":72},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill documenso-upgrade-migration",{"tool":74,"command":75},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill documenso-upgrade-migration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fdocumenso-pack\u002Fskills\u002Fdocumenso-upgrade-migration\u002FSKILL.md",true,[],[80,120,144,170,196,218],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":85,"sourceHtmlUrl":86,"categories":87,"keywords":93,"publishedAt":47},"01M6FEGPPK0ZTKCCM0R3E3KS33","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\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[88],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,37,112,113,114,115,116,117,118,119],"web artifacts builder","web","artifacts","artifacts builder","builder","frontend","css","components","react","component","routing","state management","state","shadcn","file","ui","Tools","Tailwind","html","single-file","simple","ui components","multi","for","jsx","suite",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":124,"sourceHtmlUrl":125,"categories":126,"keywords":131,"publishedAt":47},"01M6FEE9VTK1W4GY21AKREJXRG","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\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[127,130],{"categoryNo":128,"categoryName":129,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},[132,133,134,99,135,136,95,137,138,139,109,140,141,142,143,32,117],"testing","webapp testing","webapp","screenshots","playwright","debugging","toolkit","browser","logs","applications","behavior","local",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":148,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":47},"01M6FE20F7ZTQBFWKF4MPJ2SBX","neuropixels-analysis","Neuropixels neural recording analysis. Load SpikeGLX\u002FOpenEphys data, preprocess, motion correction, Kilosort4 spike sorting, quality metrics, Allen\u002FIBL curation, AI-assisted visual analysis, for Neuropixels 1.0\u002F2.0 extracellular electrophysiology. Use when working with neural recordings, spike sorting, extracellular electrophysiology, or when the user mentions Neuropixels, SpikeGLX, Open Ephys, Kilosort, quality metrics, or unit curation.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fneuropixels-analysis\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fneuropixels-analysis\u002FSKILL.md",[],[152,153,154,155,156,157,158,159,37,160,161,162,163,164,165,166,32,167,168,169,117,29],"analysis","neuropixels analysis","spike","metrics","data","open","quality","user","recordings","Neural","motion","visual","quality metrics","unit","sorting","curation","recording","load",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":174,"sourceHtmlUrl":175,"categories":176,"keywords":180,"publishedAt":47},"01M6FDP0PDK6F1GGX395C7625Z","skill-creator","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fskill-creator\u002FSKILL.md",[177],{"categoryNo":178,"categoryName":179,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000023","Skill与智能体开发",[181,182,183,184,46,185,186,187,188,189,190,191,192,193,32,117,194,29,195],"skill creator","creator","workflows","create","capabilities","knowledge","tool","integrations","specialized","guide","new skill","existing skill","users","Existing","new",{"skillNo":197,"name":198,"nameZh":6,"description":199,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":200,"sourceHtmlUrl":201,"categories":202,"keywords":204,"publishedAt":47},"01M6FDM8Y7VK7NYG9SM7QPA3PW","notebooklm","Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fnotebooklm\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fnotebooklm\u002FSKILL.md",[203],{"categoryNo":178,"categoryName":179,"taxonomyType":91,"taxonomyTypeDesc":92},[198,205,206,207,208,209,210,139,211,212,37,213,214,215,216,117,217],"google","browser automation","gemini","automation","auth","code","library","management","only","document","query","Citation","source",{"skillNo":219,"name":220,"nameZh":6,"description":221,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":84,"licenseFileUrl":222,"sourceHtmlUrl":223,"categories":224,"keywords":231,"publishedAt":47},"01M6FDHPXE10J3XGTCH5HBHS1M","slack-gif-creator","Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like \"make me a GIF of X doing Y for Slack.\"","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fenterprise-communication\u002Fslack-gif-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fenterprise-communication\u002Fslack-gif-creator\u002FSKILL.md",[225,228],{"categoryNo":226,"categoryName":227,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":229,"categoryName":230,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000016","图像与多媒体",[232,233,234,182,235,110,236,237,186,37,238,193,239,240,241,117,242,29],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]