[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DFY8PA0G0WFS2VFKHP7DNF":3,"skill-same:01M6DFY8PA0G0WFS2VFKHP7DNF":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":13,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":43,"install":44,"resources":57},"01M6DFY8PA0G0WFS2VFKHP7DNF","add-image-vision",null,"Add image vision to NanoDex agents. Resizes and processes WhatsApp image attachments, then sends them to Codex as multimodal content blocks.","mbaker95\u002Fnanodex","mbaker95","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F11398294?v=4","01M6DFXVNAJHZG78Y2D700Y6V3","01M6DFXVTTW83QGKTJ9FJ5YCH5",0,"MIT","https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fadd-image-vision\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32],"image","image vision","vision","add image vision","whatsapp","codex","multimodal","content","attachments","as","2026-11-10 10:12:30",false,"---\nname: add-image-vision\ndescription: Add image vision to NanoDex agents. Resizes and processes WhatsApp image attachments, then sends them to Codex as multimodal content blocks.\n---\n\n# Image Vision Skill\n\nAdds the ability for NanoDex agents to see and understand images sent via WhatsApp. Images are downloaded, resized with sharp, saved to the group workspace, and passed to the agent as base64-encoded multimodal content blocks.\n\n## Phase 1: Pre-flight\n\n1. Check if `src\u002Fimage.ts` exists — skip to Phase 3 if already applied\n2. Confirm `sharp` is installable (native bindings require build tools)\n\n**Prerequisite:** The bundled WhatsApp channel must already be configured. This skill modifies WhatsApp channel files.\n\n## Phase 2: Apply Code Changes\n\n### Ensure WhatsApp fork remote\n\n```bash\ngit remote -v\n```\n\nIf `whatsapp` is missing, add it:\n\n```bash\ngit remote add whatsapp https:\u002F\u002Fgithub.com\u002Fqwibitai\u002Fnanoclaw-whatsapp.git\n```\n\n### Merge the skill branch\n\n```bash\ngit fetch whatsapp skill\u002Fimage-vision\ngit merge whatsapp\u002Fskill\u002Fimage-vision\n```\n\nThis merges in:\n- `src\u002Fimage.ts` (image download, resize via sharp, base64 encoding)\n- `src\u002Fimage.test.ts` (8 unit tests)\n- Image attachment handling in `src\u002Fchannels\u002Fwhatsapp.ts`\n- Image passing to agent in `src\u002Findex.ts` and `src\u002Fcontainer-runner.ts`\n- Image content block support in `container\u002Fagent-runner\u002Fsrc\u002Findex.ts`\n- `sharp` npm dependency in `package.json`\n\nIf the merge reports conflicts, resolve them by reading the conflicted files and understanding the intent of both sides.\n\n### Validate code changes\n\n```bash\nnpm install\nnpm run build\nnpx vitest run src\u002Fimage.test.ts\n```\n\nAll tests must pass and build must be clean before proceeding.\n\n## Phase 3: Configure\n\n1. Rebuild the container (agent-runner changes need a rebuild):\n   ```bash\n   .\u002Fcontainer\u002Fbuild.sh\n   ```\n\n2. Sync agent-runner source to group caches:\n   ```bash\n   for dir in data\u002Fsessions\u002F*\u002Fagent-runner-src\u002F; do\n     cp container\u002Fagent-runner\u002Fsrc\u002F*.ts \"$dir\"\n   done\n   ```\n\n3. Restart the service:\n   ```bash\n   launchctl kickstart -k gui\u002F$(id -u)\u002Fcom.nanodex\n   ```\n\n## Phase 4: Verify\n\n1. Send an image in a registered WhatsApp group\n2. Check the agent responds with understanding of the image content\n3. Check logs for \"Processed image attachment\":\n   ```bash\n   tail -50 groups\u002F*\u002Flogs\u002Fcontainer-*.log\n   ```\n\n## Troubleshooting\n\n- **\"Image - download failed\"**: Check WhatsApp connection stability. The download may timeout on slow connections.\n- **\"Image - processing failed\"**: Sharp may not be installed correctly. Run `npm ls sharp` to verify.\n- **Agent doesn't mention image content**: Check container logs for \"Loaded image\" messages. If missing, ensure agent-runner source was synced to group caches.\n","# Image Vision Skill\n\nAdds the ability for NanoDex agents to see and understand images sent via WhatsApp. Images are downloaded, resized with sharp, saved to the group workspace, and passed to the agent as base64-encoded multimodal content blocks.\n\n## Phase 1: Pre-flight\n\n1. Check if `src\u002Fimage.ts` exists — skip to Phase 3 if already applied\n2. Confirm `sharp` is installable (native bindings require build tools)\n\n**Prerequisite:** The bundled WhatsApp channel must already be configured. This skill modifies WhatsApp channel files.\n\n## Phase 2: Apply Code Changes\n\n### Ensure WhatsApp fork remote\n\n```bash\ngit remote -v\n```\n\nIf `whatsapp` is missing, add it:\n\n```bash\ngit remote add whatsapp https:\u002F\u002Fgithub.com\u002Fqwibitai\u002Fnanoclaw-whatsapp.git\n```\n\n### Merge the skill branch\n\n```bash\ngit fetch whatsapp skill\u002Fimage-vision\ngit merge whatsapp\u002Fskill\u002Fimage-vision\n```\n\nThis merges in:\n- `src\u002Fimage.ts` (image download, resize via sharp, base64 encoding)\n- `src\u002Fimage.test.ts` (8 unit tests)\n- Image attachment handling in `src\u002Fchannels\u002Fwhatsapp.ts`\n- Image passing to agent in `src\u002Findex.ts` and `src\u002Fcontainer-runner.ts`\n- Image content block support in `container\u002Fagent-runner\u002Fsrc\u002Findex.ts`\n- `sharp` npm dependency in `package.json`\n\nIf the merge reports conflicts, resolve them by reading the conflicted files and understanding the intent of both sides.\n\n### Validate code changes\n\n```bash\nnpm install\nnpm run build\nnpx vitest run src\u002Fimage.test.ts\n```\n\nAll tests must pass and build must be clean before proceeding.\n\n## Phase 3: Configure\n\n1. Rebuild the container (agent-runner changes need a rebuild):\n   ```bash\n   .\u002Fcontainer\u002Fbuild.sh\n   ```\n\n2. Sync agent-runner source to group caches:\n   ```bash\n   for dir in data\u002Fsessions\u002F*\u002Fagent-runner-src\u002F; do\n     cp container\u002Fagent-runner\u002Fsrc\u002F*.ts \"$dir\"\n   done\n   ```\n\n3. Restart the service:\n   ```bash\n   launchctl kickstart -k gui\u002F$(id -u)\u002Fcom.nanodex\n   ```\n\n## Phase 4: Verify\n\n1. Send an image in a registered WhatsApp group\n2. Check the agent responds with understanding of the image content\n3. Check logs for \"Processed image attachment\":\n   ```bash\n   tail -50 groups\u002F*\u002Flogs\u002Fcontainer-*.log\n   ```\n\n## Troubleshooting\n\n- **\"Image - download failed\"**: Check WhatsApp connection stability. The download may timeout on slow connections.\n- **\"Image - processing failed\"**: Sharp may not be installed correctly. Run `npm ls sharp` to verify.\n- **Agent doesn't mention image content**: Check container logs for \"Loaded image\" messages. If missing, ensure agent-runner source was synced to group caches.\n",{"name":5,"description":7},"main","b6b2f4d4a0c7243409d1684119a6772629bfeba6",".agents\u002Fskills\u002Fadd-image-vision","https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex","https:\u002F\u002Fgithub.com\u002Fmbaker95","2026-03-12 23:02:12",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add mbaker95\u002Fnanodex --skill add-image-vision",{"tool":50,"command":51},"bunx","bunx skills add mbaker95\u002Fnanodex --skill add-image-vision",{"tool":53,"command":54},"pnpm","pnpm dlx skills add mbaker95\u002Fnanodex --skill add-image-vision","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fadd-image-vision\u002FSKILL.md",true,[58],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},"references\u002Fretrieval-validation-gates.md","REFERENCE","参考文档",10404,"https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002Fskills\u002Fauto-research\u002Freferences\u002Fretrieval-validation-gates.md",[65,94,113,135,147,159],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":74,"publishedAt":33},"01M6DG2XYNH5XV7XGTJJ1SF0TG","agent-browser","Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data, and test web pages. Use whenever a browser would be useful, not just when the user explicitly asks.","https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex\u002Fblob\u002Fmain\u002Fcontainer\u002Fskills\u002Fagent-browser\u002FSKILL.md",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],"agent browser","browser","pages","forms","task","test web","take","use","extract","data","user","read","screenshots","research","test","web","just","Bash","browse",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":103,"publishedAt":33},"01M6DG2TPZAT3SMWSYFJ3K82TE","x-integration","X (Twitter) integration for NanoClaw. Post tweets, like, reply, retweet, and quote. Use for setup, testing, or troubleshooting X functionality. Triggers on \"setup x\", \"x integration\", \"twitter\", \"post tweet\", \"tweet\".","https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fx-integration\u002FSKILL.md",[100],{"categoryNo":101,"categoryName":102,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",[104,105,82,106,107,108,109,110,111,112],"x integration","integration","testing","setup","troubleshooting","twitter","reply","quote","triggers",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":33},"01M6DG2Q4BJQ046BZSR9N7GZ72","use-local-whisper","Use when the user wants local voice transcription instead of OpenAI Whisper API. Switches to whisper.cpp running on Apple Silicon. WhatsApp only for now. Requires voice-transcription skill to be applied first.","https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fuse-local-whisper\u002FSKILL.md",[],[120,121,82,122,123,124,125,126,85,127,128,129,130,131,132,133,134,27],"whisper","local whisper","local","use local whisper","apple","openai whisper","only","voice","apple silicon","api","first","openai","cpp","transcription","openai whisper api",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":33},"01M6DG2N2Z1V8VV4MQFRKFAQV0","update-skills","Check for and apply updates to installed skill branches from upstream.","https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fupdate-skills\u002FSKILL.md",[],[142,143,144,145,146],"update","update skills","upstream","branches","check",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":33},"01M6DG2J5D7Y3R2BF8V87XZAXF","update-nanoclaw","Efficiently bring upstream NanoClaw updates into a customized install, with preview, selective cherry-pick, and low token usage.","https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fupdate-nanoclaw\u002FSKILL.md",[],[142,154,155,156,144,157,158],"update nanoclaw","install","pick","token","preview",{"skillNo":160,"name":107,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":33},"01M6DG2FN7S7DVD337CNT5Y67D","Run initial NanoClaw setup. Use when user wants to install dependencies, authenticate messaging channels, register their main channel, or start the background services. Triggers on \"setup\", \"install\", \"configure nanoclaw\", or first-time setup requests.","https:\u002F\u002Fgithub.com\u002Fmbaker95\u002Fnanodex\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsetup\u002FSKILL.md",[],[107,155,112,165,166,38,82,167,85,168,130,169,170,171,172],"time","dependencies","channel","configure","services","start","messaging","run"]