[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JA7CSFS7NJRSC4NENECEXJ":3,"skill-same:01M6JA7CSFS7NJRSC4NENECEXJ":80},{"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":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":53,"repositoryHtmlUrl":62,"repositoryHomepageUrl":6,"ownerHtmlUrl":63,"ownerBlogUrl":64,"ownerDescription":65,"updatedAt":66,"install":67,"resources":79},"01M6JA7CSFS7NJRSC4NENECEXJ","utility-plaid",null,"Plaid banking API expert for financial data integration. Covers Plaid Link, Auth (account\u002Frouting numbers), Transactions, Identity verification, Balance checking, and webhooks. Build fintech apps with bank connections, ACH transfers, and transaction history. Triggers on Plaid, banking API, Plaid Link, bank connection, ACH, financial data, transaction history.","Flissel\u002Fvibemind-os","Flissel","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F104565236?v=4","01M6J8Q88NWAJGKPC5TEG9YCNV","Felix Baumann","01M6J8Q8D7XAFY44P70XTJFZBW",1,"MIT","https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os\u002Fblob\u002Fmaster\u002Fskills\u002Futility\u002Fplaid\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"utility plaid","utility","plaid","2026","auth","source","for","bank","transfers","balance","apps","imported","expert","webhooks","repo","history","transactions","api","data","verification","identity","2026-11-10 10:12:30",false,"---\nname: utility-plaid\ndescription: Plaid banking API expert for financial data integration. Covers Plaid\n  Link, Auth (account\u002Frouting numbers), Transactions, Identity verification, Balance\n  checking, and webhooks. Build fintech apps with bank connections, ACH transfers,\n  and transaction history. Triggers on Plaid, banking API, Plaid Link, bank connection,\n  ACH, financial data, transaction history.\napp: utility\nrequires_approval: true\nagents:\n- '*'\ninputs: []\nexpected_state:\n  description: Imported skill — behavior matches source repo\n  verification_tool: none\nconfidence: 1.0\nattempts: 0\nsuccesses: 0\nlast_adjusted: '2026-05-11T21:22:16+00:00'\n---\n\n# Plaid Banking API Expert\n\nPlaid connects applications to users' bank accounts for financial data access, payments, and identity verification.\n\n## When to Use\n\n- Connecting bank accounts in fintech apps\n- Implementing Plaid Link flow\n- Retrieving transactions, balances, or account info\n- Setting up ACH transfers\n- Identity\u002Fincome verification\n- Handling Plaid webhooks\n\n## Core Products\n\n| Product | Purpose |\n|---------|---------|\n| **Auth** | Bank account\u002Frouting numbers for ACH |\n| **Transactions** | Transaction history (up to 24 months) |\n| **Identity** | Verify user via bank account ownership |\n| **Balance** | Real-time account balances |\n| **Investments** | Holdings from investment accounts |\n| **Liabilities** | Loan and credit card data |\n\n## Quick Start\n\n### 1. Install SDK\n\n```bash\nnpm install plaid react-plaid-link\n```\n\n### 2. Create Plaid Client\n\n```typescript\nimport { Configuration, PlaidApi, PlaidEnvironments } from \"plaid\";\n\nconst client = new PlaidApi(\n  new Configuration({\n    basePath: PlaidEnvironments.sandbox,\n    baseOptions: {\n      headers: {\n        \"PLAID-CLIENT-ID\": process.env.PLAID_CLIENT_ID,\n        \"PLAID-SECRET\": process.env.PLAID_SECRET,\n      },\n    },\n  })\n);\n```\n\n### 3. Create Link Token (Server)\n\n```typescript\n\u002F\u002F POST \u002Fapi\u002Fplaid\u002Fcreate-link-token\nexport async function POST(req: Request) {\n  const response = await client.linkTokenCreate({\n    user: { client_user_id: userId },\n    client_name: \"Your App\",\n    products: [\"auth\", \"transactions\"],\n    country_codes: [\"US\"],\n    language: \"en\",\n  });\n\n  return Response.json({ link_token: response.data.link_token });\n}\n```\n\n### 4. Plaid Link (Client)\n\n```tsx\nimport { usePlaidLink } from \"react-plaid-link\";\n\nfunction ConnectBank({ linkToken }) {\n  const { open, ready } = usePlaidLink({\n    token: linkToken,\n    onSuccess: async (public_token, metadata) => {\n      \u002F\u002F Exchange for access_token on server\n      await fetch(\"\u002Fapi\u002Fplaid\u002Fexchange-token\", {\n        method: \"POST\",\n        body: JSON.stringify({ public_token }),\n      });\n    },\n  });\n\n  return (\n    \u003Cbutton onClick={() => open()} disabled={!ready}>\n      Connect Bank Account\n    \u003C\u002Fbutton>\n  );\n}\n```\n\n### 5. Exchange Token (Server)\n\n```typescript\n\u002F\u002F POST \u002Fapi\u002Fplaid\u002Fexchange-token\nexport async function POST(req: Request) {\n  const { public_token } = await req.json();\n\n  const response = await client.itemPublicTokenExchange({\n    public_token,\n  });\n\n  \u002F\u002F Store access_token securely (encrypted in database)\n  await db.users.update(userId, {\n    plaid_access_token: response.data.access_token,\n    plaid_item_id: response.data.item_id,\n  });\n\n  return Response.json({ success: true });\n}\n```\n\n## Data Retrieval\n\n### Get Auth (Account\u002FRouting Numbers)\n\n```typescript\nconst response = await client.authGet({ access_token });\n\nconst ach = response.data.numbers.ach[0];\nconsole.log(\"Account:\", ach.account);\nconsole.log(\"Routing:\", ach.routing);\n```\n\n### Get Transactions\n\n```typescript\nconst response = await client.transactionsGet({\n  access_token,\n  start_date: \"2024-01-01\",\n  end_date: \"2024-12-31\",\n});\n\nlet transactions = response.data.transactions;\n\n\u002F\u002F Handle pagination\nwhile (transactions.length \u003C response.data.total_transactions) {\n  const more = await client.transactionsGet({\n    access_token,\n    start_date: \"2024-01-01\",\n    end_date: \"2024-12-31\",\n    offset: transactions.length,\n  });\n  transactions = transactions.concat(more.data.transactions);\n}\n```\n\n**Transaction object:**\n```typescript\n{\n  transaction_id: \"abc123\",\n  amount: 12.34,           \u002F\u002F Positive = outflow\n  date: \"2024-11-16\",\n  name: \"Starbucks\",\n  merchant_name: \"Starbucks\",\n  category: [\"Food and Drink\", \"Coffee Shop\"],\n  pending: false,\n}\n```\n\n### Get Balance\n\n```typescript\nconst response = await client.accountsBalanceGet({ access_token });\n\nresponse.data.accounts.forEach((account) => {\n  console.log(`${account.name}: $${account.balances.current}`);\n});\n```\n\n### Get Identity\n\n```typescript\nconst response = await client.identityGet({ access_token });\n\nconst owner = response.data.accounts[0].owners[0];\nconsole.log(\"Name:\", owner.names[0]);\nconsole.log(\"Email:\", owner.emails[0].data);\nconsole.log(\"Phone:\", owner.phone_numbers[0].data);\n```\n\n## Webhooks\n\n### Setup Endpoint\n\n```typescript\n\u002F\u002F POST \u002Fapi\u002Fplaid\u002Fwebhook\nexport async function POST(req: Request) {\n  const { webhook_type, webhook_code, item_id } = await req.json();\n\n  switch (webhook_type) {\n    case \"TRANSACTIONS\":\n      if (webhook_code === \"DEFAULT_UPDATE\") {\n        \u002F\u002F New transactions available - fetch them\n        await syncTransactions(item_id);\n      }\n      break;\n\n    case \"ITEM\":\n      if (webhook_code === \"ERROR\") {\n        \u002F\u002F Connection issue - prompt user to re-authenticate\n        await notifyUserReauth(item_id);\n      }\n      break;\n  }\n\n  return Response.json({ received: true });\n}\n```\n\n**Key webhook events:**\n| Event | Meaning |\n|-------|---------|\n| `TRANSACTIONS: INITIAL_UPDATE` | First batch ready |\n| `TRANSACTIONS: DEFAULT_UPDATE` | New transactions |\n| `ITEM: ERROR` | Connection issue |\n| `ITEM: PENDING_EXPIRATION` | Credentials expiring |\n\n## Environments\n\n| Environment | Use Case | Base Path |\n|-------------|----------|-----------|\n| **Sandbox** | Testing | `PlaidEnvironments.sandbox` |\n| **Development** | Limited live (100 connections) | `PlaidEnvironments.development` |\n| **Production** | Live | `PlaidEnvironments.production` |\n\n### Sandbox Test Credentials\n\n- Username: `user_good`\n- Password: `pass_good`\n- MFA: `1234`\n\n## Error Handling\n\n### Re-authentication (Update Mode)\n\nWhen credentials expire:\n\n```typescript\n\u002F\u002F Create link token for update mode\nconst response = await client.linkTokenCreate({\n  user: { client_user_id: userId },\n  client_name: \"Your App\",\n  access_token: existingAccessToken, \u002F\u002F Triggers update mode\n  country_codes: [\"US\"],\n  language: \"en\",\n});\n```\n\n### Common Errors\n\n| Error | Solution |\n|-------|----------|\n| `ITEM_LOGIN_REQUIRED` | Re-authenticate via Link update mode |\n| `RATE_LIMIT_EXCEEDED` | Implement exponential backoff |\n| `PRODUCT_NOT_READY` | Wait for webhook or retry |\n\n## Security Best Practices\n\n**DO:**\n- Store access tokens encrypted in database\n- Use environment variables for credentials\n- Verify webhook signatures\n- Use HTTPS for all endpoints\n\n**DON'T:**\n- Expose secret keys client-side\n- Log access tokens\n- Store credentials in code\n\n## Next.js App Router Example\n\n```typescript\n\u002F\u002F app\u002Fapi\u002Fplaid\u002Fcreate-link-token\u002Froute.ts\nimport { NextResponse } from \"next\u002Fserver\";\nimport { Configuration, PlaidApi, PlaidEnvironments } from \"plaid\";\n\nconst client = new PlaidApi(\n  new Configuration({\n    basePath: PlaidEnvironments.sandbox,\n    baseOptions: {\n      headers: {\n        \"PLAID-CLIENT-ID\": process.env.PLAID_CLIENT_ID!,\n        \"PLAID-SECRET\": process.env.PLAID_SECRET!,\n      },\n    },\n  })\n);\n\nexport async function POST(req: Request) {\n  const session = await getSession();\n\n  const response = await client.linkTokenCreate({\n    user: { client_user_id: session.user.id },\n    client_name: \"Your App\",\n    products: [\"auth\", \"transactions\"],\n    country_codes: [\"US\"],\n    language: \"en\",\n    webhook: `${process.env.NEXT_PUBLIC_URL}\u002Fapi\u002Fplaid\u002Fwebhook`,\n  });\n\n  return NextResponse.json({ link_token: response.data.link_token });\n}\n```\n\n## Implementation Checklist\n\n- [ ] Sign up for Plaid account\n- [ ] Get client ID and secret\n- [ ] Install `plaid` and `react-plaid-link`\n- [ ] Set environment variables\n- [ ] Create link token endpoint\n- [ ] Implement token exchange endpoint\n- [ ] Integrate Plaid Link on frontend\n- [ ] Store access tokens securely\n- [ ] Set up webhook endpoint\n- [ ] Handle re-authentication errors\n- [ ] Test with sandbox credentials\n\n## Resources\n\n- **Docs:** https:\u002F\u002Fplaid.com\u002Fdocs\u002F\n- **API Reference:** https:\u002F\u002Fplaid.com\u002Fdocs\u002Fapi\u002F\n- **Quickstart:** https:\u002F\u002Fgithub.com\u002Fplaid\u002Fquickstart\n","# Plaid Banking API Expert\n\nPlaid connects applications to users' bank accounts for financial data access, payments, and identity verification.\n\n## When to Use\n\n- Connecting bank accounts in fintech apps\n- Implementing Plaid Link flow\n- Retrieving transactions, balances, or account info\n- Setting up ACH transfers\n- Identity\u002Fincome verification\n- Handling Plaid webhooks\n\n## Core Products\n\n| Product | Purpose |\n|---------|---------|\n| **Auth** | Bank account\u002Frouting numbers for ACH |\n| **Transactions** | Transaction history (up to 24 months) |\n| **Identity** | Verify user via bank account ownership |\n| **Balance** | Real-time account balances |\n| **Investments** | Holdings from investment accounts |\n| **Liabilities** | Loan and credit card data |\n\n## Quick Start\n\n### 1. Install SDK\n\n```bash\nnpm install plaid react-plaid-link\n```\n\n### 2. Create Plaid Client\n\n```typescript\nimport { Configuration, PlaidApi, PlaidEnvironments } from \"plaid\";\n\nconst client = new PlaidApi(\n  new Configuration({\n    basePath: PlaidEnvironments.sandbox,\n    baseOptions: {\n      headers: {\n        \"PLAID-CLIENT-ID\": process.env.PLAID_CLIENT_ID,\n        \"PLAID-SECRET\": process.env.PLAID_SECRET,\n      },\n    },\n  })\n);\n```\n\n### 3. Create Link Token (Server)\n\n```typescript\n\u002F\u002F POST \u002Fapi\u002Fplaid\u002Fcreate-link-token\nexport async function POST(req: Request) {\n  const response = await client.linkTokenCreate({\n    user: { client_user_id: userId },\n    client_name: \"Your App\",\n    products: [\"auth\", \"transactions\"],\n    country_codes: [\"US\"],\n    language: \"en\",\n  });\n\n  return Response.json({ link_token: response.data.link_token });\n}\n```\n\n### 4. Plaid Link (Client)\n\n```tsx\nimport { usePlaidLink } from \"react-plaid-link\";\n\nfunction ConnectBank({ linkToken }) {\n  const { open, ready } = usePlaidLink({\n    token: linkToken,\n    onSuccess: async (public_token, metadata) => {\n      \u002F\u002F Exchange for access_token on server\n      await fetch(\"\u002Fapi\u002Fplaid\u002Fexchange-token\", {\n        method: \"POST\",\n        body: JSON.stringify({ public_token }),\n      });\n    },\n  });\n\n  return (\n    \u003Cbutton onClick={() => open()} disabled={!ready}>\n      Connect Bank Account\n    \u003C\u002Fbutton>\n  );\n}\n```\n\n### 5. Exchange Token (Server)\n\n```typescript\n\u002F\u002F POST \u002Fapi\u002Fplaid\u002Fexchange-token\nexport async function POST(req: Request) {\n  const { public_token } = await req.json();\n\n  const response = await client.itemPublicTokenExchange({\n    public_token,\n  });\n\n  \u002F\u002F Store access_token securely (encrypted in database)\n  await db.users.update(userId, {\n    plaid_access_token: response.data.access_token,\n    plaid_item_id: response.data.item_id,\n  });\n\n  return Response.json({ success: true });\n}\n```\n\n## Data Retrieval\n\n### Get Auth (Account\u002FRouting Numbers)\n\n```typescript\nconst response = await client.authGet({ access_token });\n\nconst ach = response.data.numbers.ach[0];\nconsole.log(\"Account:\", ach.account);\nconsole.log(\"Routing:\", ach.routing);\n```\n\n### Get Transactions\n\n```typescript\nconst response = await client.transactionsGet({\n  access_token,\n  start_date: \"2024-01-01\",\n  end_date: \"2024-12-31\",\n});\n\nlet transactions = response.data.transactions;\n\n\u002F\u002F Handle pagination\nwhile (transactions.length \u003C response.data.total_transactions) {\n  const more = await client.transactionsGet({\n    access_token,\n    start_date: \"2024-01-01\",\n    end_date: \"2024-12-31\",\n    offset: transactions.length,\n  });\n  transactions = transactions.concat(more.data.transactions);\n}\n```\n\n**Transaction object:**\n```typescript\n{\n  transaction_id: \"abc123\",\n  amount: 12.34,           \u002F\u002F Positive = outflow\n  date: \"2024-11-16\",\n  name: \"Starbucks\",\n  merchant_name: \"Starbucks\",\n  category: [\"Food and Drink\", \"Coffee Shop\"],\n  pending: false,\n}\n```\n\n### Get Balance\n\n```typescript\nconst response = await client.accountsBalanceGet({ access_token });\n\nresponse.data.accounts.forEach((account) => {\n  console.log(`${account.name}: $${account.balances.current}`);\n});\n```\n\n### Get Identity\n\n```typescript\nconst response = await client.identityGet({ access_token });\n\nconst owner = response.data.accounts[0].owners[0];\nconsole.log(\"Name:\", owner.names[0]);\nconsole.log(\"Email:\", owner.emails[0].data);\nconsole.log(\"Phone:\", owner.phone_numbers[0].data);\n```\n\n## Webhooks\n\n### Setup Endpoint\n\n```typescript\n\u002F\u002F POST \u002Fapi\u002Fplaid\u002Fwebhook\nexport async function POST(req: Request) {\n  const { webhook_type, webhook_code, item_id } = await req.json();\n\n  switch (webhook_type) {\n    case \"TRANSACTIONS\":\n      if (webhook_code === \"DEFAULT_UPDATE\") {\n        \u002F\u002F New transactions available - fetch them\n        await syncTransactions(item_id);\n      }\n      break;\n\n    case \"ITEM\":\n      if (webhook_code === \"ERROR\") {\n        \u002F\u002F Connection issue - prompt user to re-authenticate\n        await notifyUserReauth(item_id);\n      }\n      break;\n  }\n\n  return Response.json({ received: true });\n}\n```\n\n**Key webhook events:**\n| Event | Meaning |\n|-------|---------|\n| `TRANSACTIONS: INITIAL_UPDATE` | First batch ready |\n| `TRANSACTIONS: DEFAULT_UPDATE` | New transactions |\n| `ITEM: ERROR` | Connection issue |\n| `ITEM: PENDING_EXPIRATION` | Credentials expiring |\n\n## Environments\n\n| Environment | Use Case | Base Path |\n|-------------|----------|-----------|\n| **Sandbox** | Testing | `PlaidEnvironments.sandbox` |\n| **Development** | Limited live (100 connections) | `PlaidEnvironments.development` |\n| **Production** | Live | `PlaidEnvironments.production` |\n\n### Sandbox Test Credentials\n\n- Username: `user_good`\n- Password: `pass_good`\n- MFA: `1234`\n\n## Error Handling\n\n### Re-authentication (Update Mode)\n\nWhen credentials expire:\n\n```typescript\n\u002F\u002F Create link token for update mode\nconst response = await client.linkTokenCreate({\n  user: { client_user_id: userId },\n  client_name: \"Your App\",\n  access_token: existingAccessToken, \u002F\u002F Triggers update mode\n  country_codes: [\"US\"],\n  language: \"en\",\n});\n```\n\n### Common Errors\n\n| Error | Solution |\n|-------|----------|\n| `ITEM_LOGIN_REQUIRED` | Re-authenticate via Link update mode |\n| `RATE_LIMIT_EXCEEDED` | Implement exponential backoff |\n| `PRODUCT_NOT_READY` | Wait for webhook or retry |\n\n## Security Best Practices\n\n**DO:**\n- Store access tokens encrypted in database\n- Use environment variables for credentials\n- Verify webhook signatures\n- Use HTTPS for all endpoints\n\n**DON'T:**\n- Expose secret keys client-side\n- Log access tokens\n- Store credentials in code\n\n## Next.js App Router Example\n\n```typescript\n\u002F\u002F app\u002Fapi\u002Fplaid\u002Fcreate-link-token\u002Froute.ts\nimport { NextResponse } from \"next\u002Fserver\";\nimport { Configuration, PlaidApi, PlaidEnvironments } from \"plaid\";\n\nconst client = new PlaidApi(\n  new Configuration({\n    basePath: PlaidEnvironments.sandbox,\n    baseOptions: {\n      headers: {\n        \"PLAID-CLIENT-ID\": process.env.PLAID_CLIENT_ID!,\n        \"PLAID-SECRET\": process.env.PLAID_SECRET!,\n      },\n    },\n  })\n);\n\nexport async function POST(req: Request) {\n  const session = await getSession();\n\n  const response = await client.linkTokenCreate({\n    user: { client_user_id: session.user.id },\n    client_name: \"Your App\",\n    products: [\"auth\", \"transactions\"],\n    country_codes: [\"US\"],\n    language: \"en\",\n    webhook: `${process.env.NEXT_PUBLIC_URL}\u002Fapi\u002Fplaid\u002Fwebhook`,\n  });\n\n  return NextResponse.json({ link_token: response.data.link_token });\n}\n```\n\n## Implementation Checklist\n\n- [ ] Sign up for Plaid account\n- [ ] Get client ID and secret\n- [ ] Install `plaid` and `react-plaid-link`\n- [ ] Set environment variables\n- [ ] Create link token endpoint\n- [ ] Implement token exchange endpoint\n- [ ] Integrate Plaid Link on frontend\n- [ ] Store access tokens securely\n- [ ] Set up webhook endpoint\n- [ ] Handle re-authentication errors\n- [ ] Test with sandbox credentials\n\n## Resources\n\n- **Docs:** https:\u002F\u002Fplaid.com\u002Fdocs\u002F\n- **API Reference:** https:\u002F\u002Fplaid.com\u002Fdocs\u002Fapi\u002F\n- **Quickstart:** https:\u002F\u002Fgithub.com\u002Fplaid\u002Fquickstart\n",{"app":25,"name":5,"agents":50,"inputs":52,"attempts":53,"successes":53,"confidence":14,"description":7,"last_adjusted":54,"expected_state":55,"requires_approval":58},[51],"*",[],0,"2026-05-11T21:22:16+00:00",{"description":56,"verification_tool":57},"Imported skill — behavior matches source repo","none",true,"master","5f13b5d2b532c0ab6f847e3aa24d4bfe66f7d461","skills\u002Futility\u002Fplaid","https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os","https:\u002F\u002Fgithub.com\u002FFlissel","https:\u002F\u002Fvibemind.space","Co-founder & CTO, VibeMind - a voice-first agentic OS for non-technical founders. Agents that do the work, not describe it.","2026-11-11 05:34:01",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":58},[69,72,75],{"tool":70,"command":71},"npx","npx skills add Flissel\u002Fvibemind-os --skill utility-plaid",{"tool":73,"command":74},"bunx","bunx skills add Flissel\u002Fvibemind-os --skill utility-plaid",{"tool":76,"command":77},"pnpm","pnpm dlx skills add Flissel\u002Fvibemind-os --skill utility-plaid","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os\u002Fblob\u002Fmaster\u002Fskills\u002Futility\u002Fplaid\u002FSKILL.md",[],[81,89,96,124,132,146],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":45},"01M6JAA67M92TRE7GWDJDBTA9T","review","Review a change.","https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os\u002Fblob\u002Fmaster\u002Fspaces\u002Frowboat\u002Frowboat\u002Fpackages\u002Fopenai-plugin-runtime\u002Ftest\u002Ffixtures\u002Fcomplete-plugin\u002Fskills\u002Freview\u002FSKILL.md",[],[83,88],"change",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":45},"01M6JAA3DZR55G8ZY493BE9NBB","triage","Triage a change.","https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os\u002Fblob\u002Fmaster\u002Fspaces\u002Frowboat\u002Frowboat\u002Fpackages\u002Fopenai-plugin-runtime\u002Ftest\u002Ffixtures\u002Fcomplete-plugin\u002Fskills\u002Fgroup\u002Ftriage\u002FSKILL.md",[],[91,88],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":45},"01M6JA9XPVHENK0FQN7HBK54NV","zentrale-werkzeuge","Werkzeuge der Zentrale – nutzen bei GitHub-Fragen (Projekte updaten, Repos, Issues, PRs, Commits, CI\u002FActions-Status, README), bei Fragen zum eigenen Gitea (Sicherung\u002FSpiegel, Repos, Issues, Commits), wenn neueste Docs\u002FDoku zu einer Bibliothek oder einem Dienst geholt werden sollen, wenn ein Dashboard aus meinen Daten gebaut werden soll und wenn ich sage 'auf meinem PC suchen' oder 'such auf dem Rechner nach …'.","https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os\u002Fblob\u002Fmaster\u002Fspaces\u002Frowboat\u002Fdeploy\u002Fheadless\u002Fskills\u002Fzentrale-werkzeuge\u002FSKILL.md",[],[103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123],"zentrale werkzeuge","grep","file","README","list","fetch","todo","gitea","add","URL","mkdir","prs","commits","ci","actions","issues","status","repos","dashboard","github","docs",{"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":130,"publishedAt":45},"01M6JA9SQPX187CVC148SQT1SP","wissen-suchen","Bedeutungssuche im Rowboat-Wissen – IMMER zuerst nutzen, wenn nach Kunden, Kontakten, Themen, Interessen, Notizen oder 'was wissen wir über …' gefragt wird, besonders wenn die genauen Wörter unklar sind.","https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os\u002Fblob\u002Fmaster\u002Fspaces\u002Frowboat\u002Fdeploy\u002Fheadless\u002Fskills\u002Fwissen-suchen\u002FSKILL.md",[],[131],"wissen suchen",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":45},"01M6JA9P6GNFPE21101SDZS3BT","reel-aus-material","Reel aus vorhandenen Laura-Videos: passende Stellen im Transkript finden; spricht dort eine Person, bleibt ihr Originalton (mit Untertiteln aus dem Transkript), sonst trägt ein eingesprochener Satz den Clip. Bei Aufträgen der Art 'material'.","https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os\u002Fblob\u002Fmaster\u002Fspaces\u002Fmarketing\u002Fvideo_claw\u002Fskills\u002Freel-aus-material\u002FSKILL.md",[],[139,140,141,142,143,144,145],"material","reel","reel aus material","person","videos","Art","clip",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":45},"01M6JA9KSATRT42ACWT66514ZP","reel-aus-bildern","Reel ohne Filmmaterial: Titelkarte, 3–5 Markenbilder mit wechselnder Bewegung, Schlusskarte mit Handlung; Farben und Logo der Firma. Bei Aufträgen der Art 'bilder'.","https:\u002F\u002Fgithub.com\u002FFlissel\u002Fvibemind-os\u002Fblob\u002Fmaster\u002Fspaces\u002Fmarketing\u002Fvideo_claw\u002Fskills\u002Freel-aus-bildern\u002FSKILL.md",[],[140,153,154,144],"reel aus bildern","logo"]