[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CQW7WFCKT840ASF46RN46C":3,"skill-same:01M6CQW7WFCKT840ASF46RN46C":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":28,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":14,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M6CQW7WFCKT840ASF46RN46C","api-integrator",null,"Learn and integrate new APIs, creating permanent skills for external service access.","dundas\u002Fagentbootup-public","dundas","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F627426?v=4","01M6CQVP2KHXEP7JH9WKKF59S7","David K. Dundas","01M6CQVP76D48NCMMXYDK9CBA8",0,"MIT","https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftemplates\u002F.claude\u002Fskills\u002Fapi-integrator\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34],"api","api integrator","learn","access","autonomous","integrate","2026-11-10 10:12:30",false,"---\nname: api-integrator\ndescription: Learn and integrate new APIs, creating permanent skills for external service access.\ncategory: autonomous\n---\n\n# API Integrator\n\n> **Important: Instruction Template**\n> This skill provides instructions for Claude Code to follow when integrating APIs.\n> There is no automatic credential encryption - you must implement your own secure\n> storage mechanism. Never store credentials in plaintext in files that will be committed.\n\n## Goal\nTransform API access credentials into permanent, reusable integration skills.\n\n## When to Use\n- User provides a new API key\n- Need to connect to an external service\n- Building automation that requires API access\n- Extending agent capabilities with new tools\n\n## Process\n\n### Step 1: Receive Credentials\nWhen user provides API access:\n```\n\"Here's my [Service] API key: xxx\"\n```\n\n1. **Acknowledge** receipt (never echo the key)\n2. **Store securely** in designated location\n3. **Confirm** storage without exposing value\n\n### Step 2: Learn the API\n\n1. **Fetch Documentation**\n   - Request docs URL if not provided\n   - Read API reference\n   - Identify authentication method\n\n2. **Understand Capabilities**\n   - List available endpoints\n   - Note rate limits\n   - Identify common use cases\n\n3. **Map to User Needs**\n   - What will the user likely want to do?\n   - What are the most valuable operations?\n\n### Step 3: Build Integration\n\n1. **Test Authentication**\n   - Make a simple API call\n   - Verify credentials work\n   - Handle auth errors gracefully\n\n2. **Implement Core Operations**\n   - Start with most common use cases\n   - Build reusable patterns\n   - Add error handling\n\n3. **Validate End-to-End**\n   - Test each operation\n   - Verify output formats\n   - Check edge cases\n\n### Step 4: Create Skill\n\nSave as `skills\u002F\u003Cservice>-api\u002FSKILL.md`:\n\n```yaml\n---\nname: service-api\ndescription: Integration with [Service] for [capabilities].\nenv:\n  - SERVICE_API_KEY\n---\n\n# [Service] API Integration\n\n## Goal\n[What this integration enables]\n\n## Capabilities\n- [Capability 1]\n- [Capability 2]\n- [Capability 3]\n\n## Authentication\n- Type: [API Key \u002F OAuth \u002F etc.]\n- Header: [Where key goes]\n\n## Operations\n\n### [Operation 1]\n**Endpoint:** `GET \u002Fendpoint`\n**Purpose:** [What it does]\n**Example:** [How to use]\n\n### [Operation 2]\n...\n\n## Rate Limits\n- [Limit details]\n- [Retry strategy]\n\n## Error Handling\n- [Common errors]\n- [How to handle]\n```\n\n### Step 5: Announce Integration\n\n```\n\"I've integrated with [Service]! ?\n\nI can now:\n• [Capability 1]\n• [Capability 2]\n• [Capability 3]\n\nThis is permanently saved. Try asking me to [example task].\"\n```\n\n## Integration Templates\n\n### REST API Template\n```yaml\n---\nname: rest-service-api\ndescription: REST API integration template\nenv:\n  - API_KEY\n---\n\n# REST Service Integration\n\n## Authentication\n```\nHeaders: {\n  \"Authorization\": \"Bearer ${API_KEY}\"\n}\n```\n\n## Base URL\n`https:\u002F\u002Fapi.service.com\u002Fv1`\n\n## Operations\n\n### List Items\n```\nGET \u002Fitems\nResponse: { items: [...] }\n```\n\n### Create Item\n```\nPOST \u002Fitems\nBody: { name, description }\nResponse: { id, name, description }\n```\n\n### Get Item\n```\nGET \u002Fitems\u002F{id}\nResponse: { id, name, description }\n```\n```\n\n### Webhook Integration Template\n```yaml\n---\nname: webhook-service\ndescription: Webhook-based service integration\n---\n\n# Webhook Integration\n\n## Receiving Webhooks\n- Endpoint: `\u002Fwebhooks\u002Fservice`\n- Verification: [How to verify]\n- Events: [List of events]\n\n## Event Handlers\n\n### on_event_type\n```\nPayload: { ... }\nAction: [What to do]\n```\n```\n\n## Common Integrations\n\n### Communication APIs\n- **Twilio:** SMS, voice calls, WhatsApp\n- **SendGrid:** Email sending\n- **Slack:** Messaging, notifications\n- **Discord:** Bot messages, webhooks\n\n### Productivity APIs\n- **Google Calendar:** Events, scheduling\n- **Notion:** Pages, databases\n- **Todoist:** Tasks, projects\n- **Linear:** Issues, projects\n\n### Development APIs\n- **GitHub:** Repos, PRs, issues\n- **Vercel:** Deployments\n- **Cloudflare:** DNS, workers\n\n### AI\u002FML APIs\n- **OpenAI:** GPT, embeddings, DALL-E\n- **Anthropic:** Claude models\n- **ElevenLabs:** Voice synthesis\n- **Replicate:** Model hosting\n\n## Security Guidelines\n\n### Do\n- Store credentials encrypted\n- Use environment variables\n- Implement rate limiting\n- Log API usage (not secrets)\n\n### Don't\n- Echo API keys in responses\n- Store credentials in code\n- Ignore rate limits\n- Make unnecessary API calls\n\n## Credential Storage\n\nStore in `~\u002F.agent\u002Fcredentials\u002F`:\n```\ncredentials\u002F\n├── github.enc\n├── openai.enc\n└── slack.enc\n```\n\nAccess pattern:\n```\n1. Check if credential exists\n2. Load and decrypt\n3. Use for API call\n4. Never log or display\n```\n\n## Error Handling Patterns\n\n### Rate Limiting\n```\nif response.status == 429:\n    wait_time = response.headers['Retry-After']\n    sleep(wait_time)\n    retry()\n```\n\n### Authentication Failure\n```\nif response.status == 401:\n    notify_user(\"API key may be invalid or expired\")\n    suggest_reconfiguration()\n```\n\n### Service Unavailable\n```\nif response.status >= 500:\n    retry_with_backoff(max_retries=3)\n    if still_failing:\n        notify_user(\"Service temporarily unavailable\")\n```\n\n## References\n- See `skill-creator` for skill creation patterns\n- See `memory-manager` for logging integrations\n- See `AUTONOMOUS_BOOTUP_SPEC.md` for architecture\n","# API Integrator\n\n> **Important: Instruction Template**\n> This skill provides instructions for Claude Code to follow when integrating APIs.\n> There is no automatic credential encryption - you must implement your own secure\n> storage mechanism. Never store credentials in plaintext in files that will be committed.\n\n## Goal\nTransform API access credentials into permanent, reusable integration skills.\n\n## When to Use\n- User provides a new API key\n- Need to connect to an external service\n- Building automation that requires API access\n- Extending agent capabilities with new tools\n\n## Process\n\n### Step 1: Receive Credentials\nWhen user provides API access:\n```\n\"Here's my [Service] API key: xxx\"\n```\n\n1. **Acknowledge** receipt (never echo the key)\n2. **Store securely** in designated location\n3. **Confirm** storage without exposing value\n\n### Step 2: Learn the API\n\n1. **Fetch Documentation**\n   - Request docs URL if not provided\n   - Read API reference\n   - Identify authentication method\n\n2. **Understand Capabilities**\n   - List available endpoints\n   - Note rate limits\n   - Identify common use cases\n\n3. **Map to User Needs**\n   - What will the user likely want to do?\n   - What are the most valuable operations?\n\n### Step 3: Build Integration\n\n1. **Test Authentication**\n   - Make a simple API call\n   - Verify credentials work\n   - Handle auth errors gracefully\n\n2. **Implement Core Operations**\n   - Start with most common use cases\n   - Build reusable patterns\n   - Add error handling\n\n3. **Validate End-to-End**\n   - Test each operation\n   - Verify output formats\n   - Check edge cases\n\n### Step 4: Create Skill\n\nSave as `skills\u002F\u003Cservice>-api\u002FSKILL.md`:\n\n```yaml\n---\nname: service-api\ndescription: Integration with [Service] for [capabilities].\nenv:\n  - SERVICE_API_KEY\n---\n\n# [Service] API Integration\n\n## Goal\n[What this integration enables]\n\n## Capabilities\n- [Capability 1]\n- [Capability 2]\n- [Capability 3]\n\n## Authentication\n- Type: [API Key \u002F OAuth \u002F etc.]\n- Header: [Where key goes]\n\n## Operations\n\n### [Operation 1]\n**Endpoint:** `GET \u002Fendpoint`\n**Purpose:** [What it does]\n**Example:** [How to use]\n\n### [Operation 2]\n...\n\n## Rate Limits\n- [Limit details]\n- [Retry strategy]\n\n## Error Handling\n- [Common errors]\n- [How to handle]\n```\n\n### Step 5: Announce Integration\n\n```\n\"I've integrated with [Service]! ?\n\nI can now:\n• [Capability 1]\n• [Capability 2]\n• [Capability 3]\n\nThis is permanently saved. Try asking me to [example task].\"\n```\n\n## Integration Templates\n\n### REST API Template\n```yaml\n---\nname: rest-service-api\ndescription: REST API integration template\nenv:\n  - API_KEY\n---\n\n# REST Service Integration\n\n## Authentication\n```\nHeaders: {\n  \"Authorization\": \"Bearer ${API_KEY}\"\n}\n```\n\n## Base URL\n`https:\u002F\u002Fapi.service.com\u002Fv1`\n\n## Operations\n\n### List Items\n```\nGET \u002Fitems\nResponse: { items: [...] }\n```\n\n### Create Item\n```\nPOST \u002Fitems\nBody: { name, description }\nResponse: { id, name, description }\n```\n\n### Get Item\n```\nGET \u002Fitems\u002F{id}\nResponse: { id, name, description }\n```\n```\n\n### Webhook Integration Template\n```yaml\n---\nname: webhook-service\ndescription: Webhook-based service integration\n---\n\n# Webhook Integration\n\n## Receiving Webhooks\n- Endpoint: `\u002Fwebhooks\u002Fservice`\n- Verification: [How to verify]\n- Events: [List of events]\n\n## Event Handlers\n\n### on_event_type\n```\nPayload: { ... }\nAction: [What to do]\n```\n```\n\n## Common Integrations\n\n### Communication APIs\n- **Twilio:** SMS, voice calls, WhatsApp\n- **SendGrid:** Email sending\n- **Slack:** Messaging, notifications\n- **Discord:** Bot messages, webhooks\n\n### Productivity APIs\n- **Google Calendar:** Events, scheduling\n- **Notion:** Pages, databases\n- **Todoist:** Tasks, projects\n- **Linear:** Issues, projects\n\n### Development APIs\n- **GitHub:** Repos, PRs, issues\n- **Vercel:** Deployments\n- **Cloudflare:** DNS, workers\n\n### AI\u002FML APIs\n- **OpenAI:** GPT, embeddings, DALL-E\n- **Anthropic:** Claude models\n- **ElevenLabs:** Voice synthesis\n- **Replicate:** Model hosting\n\n## Security Guidelines\n\n### Do\n- Store credentials encrypted\n- Use environment variables\n- Implement rate limiting\n- Log API usage (not secrets)\n\n### Don't\n- Echo API keys in responses\n- Store credentials in code\n- Ignore rate limits\n- Make unnecessary API calls\n\n## Credential Storage\n\nStore in `~\u002F.agent\u002Fcredentials\u002F`:\n```\ncredentials\u002F\n├── github.enc\n├── openai.enc\n└── slack.enc\n```\n\nAccess pattern:\n```\n1. Check if credential exists\n2. Load and decrypt\n3. Use for API call\n4. Never log or display\n```\n\n## Error Handling Patterns\n\n### Rate Limiting\n```\nif response.status == 429:\n    wait_time = response.headers['Retry-After']\n    sleep(wait_time)\n    retry()\n```\n\n### Authentication Failure\n```\nif response.status == 401:\n    notify_user(\"API key may be invalid or expired\")\n    suggest_reconfiguration()\n```\n\n### Service Unavailable\n```\nif response.status >= 500:\n    retry_with_backoff(max_retries=3)\n    if still_failing:\n        notify_user(\"Service temporarily unavailable\")\n```\n\n## References\n- See `skill-creator` for skill creation patterns\n- See `memory-manager` for logging integrations\n- See `AUTONOMOUS_BOOTUP_SPEC.md` for architecture\n",{"name":5,"category":33,"description":7},"main","47b89745588c3057f0ccd0517a2eb8967df27054","templates\u002F.claude\u002Fskills\u002Fapi-integrator","https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public","https:\u002F\u002Fgithub.com\u002Fdundas","derivative.io","2026-09-02 20:12:15",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add dundas\u002Fagentbootup-public --skill api-integrator",{"tool":53,"command":54},"bunx","bunx skills add dundas\u002Fagentbootup-public --skill api-integrator",{"tool":56,"command":57},"pnpm","pnpm dlx skills add dundas\u002Fagentbootup-public --skill api-integrator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftemplates\u002F.claude\u002Fskills\u002Fapi-integrator\u002FSKILL.md",true,[61],{"path":62,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":65,"sourceHtmlUrl":66},"skill-bundle-manifest.json","REFERENCE","参考文档",792,"https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftemplates\u002F.claude\u002Fskills\u002Fapi-integrator\u002Fskill-bundle-manifest.json",[68,80,98,118,127,147],{"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":77,"publishedAt":35},"01M6CQZ7DFJB965BJJ5ZZ54CXY","fixture-skill","Secret-free recovery fixture skill.","https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftests\u002Fruntime-adapters\u002Ffixtures\u002Fhermes\u002F0.18.2-darwin-arm64-real\u002Froot\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[74],{"categoryNo":75,"categoryName":76,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[78,79],"fixture skill","recovery",{"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":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":89,"publishedAt":35},"01M6CQZ4NN0KVH1Z4E1Y1GJ3X9","user-story-generator","Generate standalone user stories for features without creating a full PRD. Perfect for backlog grooming and story refinement.","https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftemplates\u002F.claude\u002Fskills\u002Fuser-story-generator\u002FSKILL.md",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000031","产品经理",[90,91,92,93,94,95,96,97],"user story generator","Story","user story","user","prd","documentation","generate","backlog",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":110,"publishedAt":35},"01M6CQZ16VC27HMWM31CCKK6BC","user-journey-mapper","Map user flows and journeys through your application for UX design and workflow visualization, independent of testing.","https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftemplates\u002F.claude\u002Fskills\u002Fuser-journey-mapper\u002FSKILL.md",[104,107],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":108,"categoryName":109,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000032","设计师",[111,112,93,95,113,114,115,116,117],"user journey mapper","journey","ux","visualization","workflow","design","testing",{"skillNo":119,"name":120,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":35},"01M6CQYXSQQJ4Z5CRAX2SSMHW1","transcript-query","https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftemplates\u002F.claude\u002Fskills\u002Ftranscript-query\u002FSKILL.md",[],[124,125,126],"transcript","transcript query","query",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":135,"publishedAt":35},"01M6CQYT7A1G4CPQTZKXR5TCK9","test-plan-generator","Generate comprehensive E2E test plans from PRDs, task lists, or descriptions with environment-aware prerequisites and issue tracking.","https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftemplates\u002F.claude\u002Fskills\u002Ftest-plan-generator\u002FSKILL.md",[133,134],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[136,137,138,139,140,141,142,143,144,145,96,146],"plan","test plan generator","test plan","test","task","issue","e2e test","environment","tracking","quality","e2e",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":154,"publishedAt":35},"01M6CQYQAWFSPTYE2VTJJVW72G","tasklist-generator","Generate high-level tasks and gated sub-tasks from a PRD, with agent assignments, commit\u002FPR strategy, and relevant files.","https:\u002F\u002Fgithub.com\u002Fdundas\u002Fagentbootup-public\u002Fblob\u002Fmain\u002Ftemplates\u002F.claude\u002Fskills\u002Ftasklist-generator\u002FSKILL.md",[153],{"categoryNo":75,"categoryName":76,"taxonomyType":21,"taxonomyTypeDesc":22},[155,156,157,158,94,96,159,160,161,115],"tasklist generator","gated","files","strategy","tasks","pr","commit"]