[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7EKHRZ95RE38QPEBR0BMPDF":3,"skill-same:01M7EKHRZ95RE38QPEBR0BMPDF":57},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":6,"ownerHtmlUrl":35,"ownerBlogUrl":36,"ownerDescription":6,"updatedAt":37,"install":38,"resources":50},"01M7EKHRZ95RE38QPEBR0BMPDF","cloudinary",null,"Manage Cloudinary media: upload images and videos, list and inspect assets, update metadata, delete assets, and check plan usage. Trigger phrases: cloudinary, upload image, cloudinary usage.","TanNhatCMS\u002Fjarvis","TanNhatCMS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F113796420?v=4","01M753MV17KG5CD3152G3WQEQY","KietNT","01M7EKEDYVYQ6PWVJJMZ911VMX",0,"MIT","https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fconnectors\u002Fcloudinary\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: \"cloudinary\"\ndescription: \"Manage Cloudinary media: upload images and videos, list and inspect assets, update metadata, delete assets, and check plan usage. Trigger phrases: cloudinary, upload image, cloudinary usage.\"\nmetadata: { \"includeInPrompt\": true }\ntagline: \"Manage media on Cloudinary through the Upload and Admin APIs: upload images and videos, list and inspect assets, update metadata and tags, delete assets, and check plan usage (credits, storage, bandwidth, transformations).\"\ncatalog_auth: \"cloud_name + API key + secret via the secure credential flow\"\ncatalog_hosts: [\"api.cloudinary.com\"]\n---\n\n# Cloudinary\n\n## Purpose\nManage media on Cloudinary through the Upload and Admin APIs: upload images and videos, list and inspect assets, update metadata and tags, delete assets, and check plan usage (credits, storage, bandwidth, transformations).\n\n## Tooling\nAll commands go through `bin\u002Fcloudinary.py`:\n\n```bash\nbin\u002Fcloudinary.py auth                                        # verify the connection (also shows plan usage)\nbin\u002Fcloudinary.py usage                                       # plan usage: credits, storage, bandwidth, transformations\nbin\u002Fcloudinary.py upload --file .\u002Fphoto.jpg                  # upload an image\nbin\u002Fcloudinary.py upload --file .\u002Fclip.mp4 --resource-type video   # upload a video\nbin\u002Fcloudinary.py upload --file .\u002Fphoto.jpg --folder products # upload into a folder\nbin\u002Fcloudinary.py list --prefix products\u002F --max-results 20    # list image assets\nbin\u002Fcloudinary.py get --public-id products\u002Fphoto1            # asset details\nbin\u002Fcloudinary.py update --public-id products\u002Fphoto1 --data '{\"tags\":[\"summer\"],\"context\":{\"caption\":\"Beach\"}}'\n                                                             # update metadata\u002Ftags (raw JSON body, per Cloudinary docs)\nbin\u002Fcloudinary.py delete --public-id products\u002Fphoto1         # delete an asset\n```\n\n## Auth\n- Provider id: `cloudinary` (credential is collected as `custom.cloudinary`)\n- Collection: via the secure credential flow (`credentials.request_api_access`) as a single colon-joined value `cloud_name:api_key:api_secret`; the three parts come from the Cloudinary Console at Settings, API Keys. The collection step stores them as three named entries (`cloud_name`, `api_key`, `api_secret`) under `custom.cloudinary`; the CLI splits them at use: `cloud_name` goes into the request host, and `api_key:api_secret` go into the HTTP Basic auth header.\n- Required scopes: n\u002Fa (account API key pair)\n- Allowed hosts: `api.cloudinary.com`\n- Status check: `bin\u002Fcloudinary.py auth`\n- Wire format (verbatim from Cloudinary's docs): `Authorization: Basic base64(api_key:api_secret)` against `https:\u002F\u002Fapi.cloudinary.com\u002Fv1_1\u002F{cloud_name}`.\n\n## Operating Rules\n1. The free plan is credit-based across storage\u002Fbandwidth\u002Ftransformations: run `usage` before heavy work and stay inside the plan.\n2. Confirm with the user before uploading (it consumes bandwidth\u002Ftransformation quota) and before deleting (deletes are permanent).\n3. Never exfiltrate the credential: the CLI only ever handles surrogates. Do not print, log, or transmit the key, secret, or cloud name values.\n\n## Files\n- SKILL.md\n- bin\u002Fcloudinary.py\n\n## Maturity\n🧪 Draft: written from Cloudinary's public Upload and Admin API docs; not yet live-tested end to end. The three-part credential split (single collected value, split into entries at use) is the design assumption to re-verify on first live run.\n","# Cloudinary\n\n## Purpose\nManage media on Cloudinary through the Upload and Admin APIs: upload images and videos, list and inspect assets, update metadata and tags, delete assets, and check plan usage (credits, storage, bandwidth, transformations).\n\n## Tooling\nAll commands go through `bin\u002Fcloudinary.py`:\n\n```bash\nbin\u002Fcloudinary.py auth                                        # verify the connection (also shows plan usage)\nbin\u002Fcloudinary.py usage                                       # plan usage: credits, storage, bandwidth, transformations\nbin\u002Fcloudinary.py upload --file .\u002Fphoto.jpg                  # upload an image\nbin\u002Fcloudinary.py upload --file .\u002Fclip.mp4 --resource-type video   # upload a video\nbin\u002Fcloudinary.py upload --file .\u002Fphoto.jpg --folder products # upload into a folder\nbin\u002Fcloudinary.py list --prefix products\u002F --max-results 20    # list image assets\nbin\u002Fcloudinary.py get --public-id products\u002Fphoto1            # asset details\nbin\u002Fcloudinary.py update --public-id products\u002Fphoto1 --data '{\"tags\":[\"summer\"],\"context\":{\"caption\":\"Beach\"}}'\n                                                             # update metadata\u002Ftags (raw JSON body, per Cloudinary docs)\nbin\u002Fcloudinary.py delete --public-id products\u002Fphoto1         # delete an asset\n```\n\n## Auth\n- Provider id: `cloudinary` (credential is collected as `custom.cloudinary`)\n- Collection: via the secure credential flow (`credentials.request_api_access`) as a single colon-joined value `cloud_name:api_key:api_secret`; the three parts come from the Cloudinary Console at Settings, API Keys. The collection step stores them as three named entries (`cloud_name`, `api_key`, `api_secret`) under `custom.cloudinary`; the CLI splits them at use: `cloud_name` goes into the request host, and `api_key:api_secret` go into the HTTP Basic auth header.\n- Required scopes: n\u002Fa (account API key pair)\n- Allowed hosts: `api.cloudinary.com`\n- Status check: `bin\u002Fcloudinary.py auth`\n- Wire format (verbatim from Cloudinary's docs): `Authorization: Basic base64(api_key:api_secret)` against `https:\u002F\u002Fapi.cloudinary.com\u002Fv1_1\u002F{cloud_name}`.\n\n## Operating Rules\n1. The free plan is credit-based across storage\u002Fbandwidth\u002Ftransformations: run `usage` before heavy work and stay inside the plan.\n2. Confirm with the user before uploading (it consumes bandwidth\u002Ftransformation quota) and before deleting (deletes are permanent).\n3. Never exfiltrate the credential: the CLI only ever handles surrogates. Do not print, log, or transmit the key, secret, or cloud name values.\n\n## Files\n- SKILL.md\n- bin\u002Fcloudinary.py\n\n## Maturity\n🧪 Draft: written from Cloudinary's public Upload and Admin API docs; not yet live-tested end to end. The three-part credential split (single collected value, split into entries at use) is the design assumption to re-verify on first live run.\n",{"name":5,"tagline":24,"metadata":25,"description":7,"catalog_auth":27,"catalog_hosts":28},"Manage media on Cloudinary through the Upload and Admin APIs: upload images and videos, list and inspect assets, update metadata and tags, delete assets, and check plan usage (credits, storage, bandwidth, transformations).",{"includeInPrompt":26},true,"cloud_name + API key + secret via the secure credential flow",[29],"api.cloudinary.com","main","af388a77c2fe5e0b4fd879cca4300a0ffa9a6579","connectors\u002Fcloudinary",1,"https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis","https:\u002F\u002Fgithub.com\u002FTanNhatCMS","https:\u002F\u002Fmrkiet.name.vn","2026-11-07 14:23:08",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":26},[40,43,46],{"tool":41,"command":42},"npx","npx skills add TanNhatCMS\u002Fjarvis --skill cloudinary",{"tool":44,"command":45},"bunx","bunx skills add TanNhatCMS\u002Fjarvis --skill cloudinary",{"tool":47,"command":48},"pnpm","pnpm dlx skills add TanNhatCMS\u002Fjarvis --skill cloudinary","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fconnectors\u002Fcloudinary\u002FSKILL.md",[51],{"path":52,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":55,"sourceHtmlUrl":56},"bin\u002Fcloudinary.py","SCRIPT","脚本",9039,"https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fconnectors\u002Fcloudinary\u002Fbin\u002Fcloudinary.py",[58,65,73,80,87,94],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":19},"01M7EWYJR0J8DARY7E59Z6Y9MV","web-scrape","Turn web pages into LLM-ready markdown via the Firecrawl API (renders JS, anti-bot handling). Use when browser_open\u002Ffetch fails on JS-heavy pages, or when you need clean markdown\u002Fstructured extraction from a site. Requires FIRECRAWL_API_KEY.","https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fskills\u002Fweb-scrape\u002FSKILL.md",[],[],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":69,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M7EWYBN5P6F2AJG3FR24T9BP","design-taste-frontend","tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of 247 curated gallery sites (One Page Love, Awwwards Sites of the Day). Deals researched directions (idea, composition, type, palette, photographs, section blueprints) from a library, enforces a strict no-slop house style with a real-browser inspector, and runs a look-and-fix loop on screenshots. Use this whenever you build, design, redesign, restyle, polish or review a landing page, marketing site, portfolio, product page, one-pager, hero or any public-facing web page, in any stack (HTML\u002FCSS, React, Next.js, Vue, Svelte, Astro, Tailwind) — also when the user says a page looks generic, templated, \"AI-made\", sloppy, or asks to make it look designed, premium, award-level or less like every other site. Not for dashboards or app screens.","https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fskills\u002Ftaste-design\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fskills\u002Ftaste-design\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M7EWY8FQFNQ2GB7NZZWGSSDX","test-driven-development","Use when implementing any feature or bugfix, before writing implementation code","https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fskills\u002Fsuperpowers-tdd\u002FSKILL.md",[],[],{"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":86,"publishedAt":19},"01M7EWY5SHBFRH1HDHVWM9K7TV","systematic-debugging","Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes","https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fskills\u002Fsuperpowers-debugging\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M7EWY3NM0Z0JAKS7HDZ24K66","requesting-code-review","Use when completing tasks, implementing major features, or before merging to verify work meets requirements","https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fskills\u002Fsuperpowers-code-review\u002FSKILL.md",[],[],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":19},"01M7EWY0WRMWX4M9ZFY0WKC593","brainstorming","You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).","https:\u002F\u002Fgithub.com\u002FTanNhatCMS\u002Fjarvis\u002Fblob\u002Fmain\u002Fskills\u002Fsuperpowers-brainstorming\u002FSKILL.md",[],[]]