[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GEMYNDKX66T4FCEYRYE4Z1":3,"skill-same:01M6GEMYNDKX66T4FCEYRYE4Z1":69},{"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":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M6GEMYNDKX66T4FCEYRYE4Z1","petdex",null,"Install, import, and select animated pet mascots for Hermes.","zapabob\u002FSkills","zapabob","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130830376?v=4","01M6DBMYZAGRTFQDSQYW3W764P","峯岸 亮","01M6DBMZ3GKDSJ01NZ9XTZD7JD",2,"MIT","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002Fcb\u002Fcb07630b9208e087bcfc68e1a5624fdda852bb4a6ea3e3cbde41a6c6c5ab4475\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"macos","cli","linux","windows","desktop","dev","https","productivity","select","hermes","tui","install","import","PET","2026-11-10 10:12:30",false,"---\nname: petdex\ndescription: Install, import, and select animated pet mascots for Hermes.\nversion: 1.0.0\nauthor: Hermes\nlicense: MIT\nplatforms: [linux, macos, windows]\nmetadata:\n  hermes:\n    tags: [petdex, mascot, display, cli, tui, desktop]\n    category: productivity\n    homepage: https:\u002F\u002Fpetdex.dev\n---\n\n# Petdex Skill\n\nBrowse and select animated \"pet\" mascots from the public\n[petdex](https:\u002F\u002Fgithub.com\u002Fcrafter-station\u002Fpetdex) gallery, and **import\nspritesheets that are not in that gallery** (ChatGPT shared pets, hand-made\natlases). An installed pet reacts to agent activity (idle, running a tool,\nreviewing, error, done) across the Hermes CLI, TUI, and desktop app.\n\nThis skill drives the `hermes pets` CLI, the `display.pet` config, and one\nimport script. It does **not** generate sprites from a model — for that, see the\nin-tree `agent\u002Fpet\u002Fgenerate\u002F` path.\n\n## When to Use\n\n- The user wants a desktop\u002Fterminal mascot or asks about \"pets\" \u002F petdex.\n- The user wants to change, preview, or disable the active pet.\n- The user shares a **ChatGPT pet link** (`chatgpt.com\u002Fs\u002Fsharepet_\u003Cid>`) or any\n  other external spritesheet and wants it as a Hermes pet.\n- Diagnosing why a pet isn't showing (terminal graphics support, config).\n\n## Prerequisites\n\n- Network access to `petdex.dev` for the gallery\u002Fmanifest (read-only, no auth).\n- Pillow (a core Hermes dependency) for sprite decoding — already installed.\n- For full-fidelity terminal rendering: a graphics-capable terminal (kitty,\n  Ghostty, WezTerm, iTerm2, or sixel). Otherwise a truecolor Unicode\n  half-block fallback is used automatically.\n\n## How to Run\n\nUse the `terminal` tool to run `hermes pets \u003Csubcommand>`.\n\n## Quick Reference\n\n| Goal | Command |\n| --- | --- |\n| Browse the gallery | `hermes pets list` (add a substring to filter: `hermes pets list cat`) |\n| List installed pets | `hermes pets list --installed` |\n| Install a pet | `hermes pets install \u003Cslug>` (add `--select` to make it active) |\n| Set the active pet | `hermes pets select \u003Cslug>` (omit slug for a picker) |\n| Resize the pet everywhere | `hermes pets scale \u003Cfactor>` (e.g. `0.5`, clamped 0.1–3.0) |\n| Preview\u002Fanimate in terminal | `hermes pets show [slug] [--cycle] [--state run]` |\n| Disable the pet | `hermes pets off` |\n| Remove a pet | `hermes pets remove \u003Cslug>` |\n| Diagnose setup | `hermes pets doctor` |\n| Preview one state | `hermes pets show --state run` (once: `--once`; cycle: `--cycle`) |\n| Import a non-gallery sheet | `python scripts\u002Fimport_spritesheet_pet.py --url \u003Curl> --slug \u003Cslug> --dry-run` |\n\n## Procedure\n\n1. Find a pet: `hermes pets list \u003Cquery>` and note its `slug`.\n2. Install + activate: `hermes pets install \u003Cslug> --select`.\n3. Preview it: `hermes pets show` (Ctrl+C to stop).\n4. Confirm setup: `hermes pets doctor` — shows the resolved pet, configured\n   render mode, detected terminal graphics protocol, and effective mode.\n\nPets install into `\u003CHERMES_HOME>\u002Fpets\u002F\u003Cslug>\u002F` (profile-aware). Selecting a pet\nwrites `display.pet.slug` + `display.pet.enabled` to `config.yaml`.\n\n## Importing a non-gallery spritesheet\n\n`hermes pets install \u003Cslug>` **cannot** do this. `agent\u002Fpet\u002Fstore.py::install_pet`\ncalls `_is_petdex_host()` on both the manifest entry and the asset URLs, and\nraises `PetStoreError(\"refusing non-petdex spritesheet host for ...\")` for any\nhost that is not `petdex.dev` or `*.petdex.dev`. That pin is a deliberate\nanti-SSRF control — do not work around it by editing the source; write the pet\ninto the store directly instead.\n\nThere is no `import_pet` CLI. `export_pet()` produces a \"re-importable\" zip,\nbut nothing in the tree reads one back — verified by search.\n\nUse the bundled script (stdlib + Pillow only):\n\n```\npython scripts\u002Fimport_spritesheet_pet.py \\\n  --url \"\u003Csprite-url>\" --slug hakua \\\n  --display-name \"Hakua\" --description \"...\" --source \"\u003Cpage-url>\" --dry-run\n```\n\nDrop `--dry-run` to write, then `hermes pets select \u003Cslug>`.\n\n### The atlas contract (`agent\u002Fpet\u002Fconstants.py`)\n\n| Constant | Value | Consequence |\n| --- | --- | --- |\n| `FRAME_W` \u002F `FRAME_H` | 192 \u002F 208 | Sheet dims must be exact multiples, or the grid is undecidable |\n| `FRAMES_PER_STATE` | 6 | Only the **first 6 columns** ever animate (petdex CSS `steps(6)`) |\n| `CODEX_STATE_ROWS` | 9 rows | Used when `row_count >= 9` — the current shape, 1536x1872 |\n| `LEGACY_STATE_ROWS` | 8 rows | Fallback for older sheets |\n\nRow names map to Hermes activity states through `STATE_ALIASES`\n(`wave`→`waving`, `jump`→`jumping`, `run`→`running`). A sheet with **more**\nrows than the taxonomy still renders: `state_rows_for_grid()` returns\n`CODEX_STATE_ROWS` for any `row_count >= 9`, so extra trailing rows are simply\nnever played. Truncating to 9 keeps the asset byte-comparable with the other\ninstalled pets.\n\n`pet.json` keys: `id`, `displayName`, `description`, `spritesheetPath`, and\n`createdBy`. **Leave `createdBy` empty for an imported pet** — the value\n`\"generator\"` is what `register_local_pet()` stamps on locally-hatched pets and\n`InstalledPet.generated` keys off it.\n\nEncode the spritesheet **lossless**: `format=\"WEBP\", lossless=True, quality=100,\nmethod=6, exact=True`, matching `store.py::_write_spritesheet`. Gallery pets are\n1.0–2.2 MiB; a sub-500 KiB file means you saved lossy and silently degraded the\nart.\n\n### Fetching a ChatGPT shared pet\n\nThe share page is a React Router app whose pet metadata is **not** in static\nHTML — read it from the server-injected loader payload\n`__reactRouterContext.streamController.enqueue(...)`, which carries\n`spritesheet_url`, `name`, and `description`. Use `web_extract` on the page and\nsearch for `spritesheet_url`.\n\nThe spritesheet endpoint returns **403 `text\u002Fhtml`** to a bare request. Sending\na browser header set (`User-Agent`, `Accept: image\u002F*`, `Referer:\nhttps:\u002F\u002Fchatgpt.com\u002F`, `Sec-Fetch-Dest: image`, `Sec-Fetch-Mode: no-cors`,\n`Sec-Fetch-Site: same-origin`) returns **200 `image\u002Fpng`**. Verified.\n\n**The 403 body is HTML.** A `.png` filename does not make it one — check the\nmagic bytes (`\\x89PNG`) before handing bytes to Pillow, or you get\n`cannot identify image file` with no useful cause.\n\n### Verifying an imported sheet\n\nMeasure, don't eyeball:\n\n- **Per-row non-empty frame count** — a row below `cols` is normal. Some\n  animation frames are intentionally blank (a waving cycle resting between\n  arm positions, a jump's airborne peak). Only an all-empty row is a defect.\n- **Per-row uniqueness of the first 6 frames** — this catches copied placeholder\n  art. **Hash RGBA, never RGB**: a transparent frame and a second transparent\n  frame are identical in RGB after alpha is dropped, so an RGB hash reports\n  spurious collisions on perfectly correct sheets.\n- **A repeated frame that is *empty* is padding, not a duplicate animation\n  pose.** Both hash and `getbbox() is None`. Sheet tails are routinely padded to\n  `FRAMES_PER_STATE` with blank cells; that is not a bug and needs no repair.\n\nAn 11-row ChatGPT sheet measured `5\u002F6 unique` on the `waving` row for exactly\nthis reason — columns 4 and 5 are both fully transparent. Reporting that as \"a\nduplicated frame\" is a false positive.\n\nFor a human check, render a contact sheet (states x frames) with Pillow and open\nit via `open_preview`.\n\n## Configuration\n\nUnder `display.pet` in `config.yaml`:\n\n- `enabled` (bool) — master on\u002Foff.\n- `slug` (str) — active pet; empty = first installed.\n- `render_mode` — `auto` (detect) | `kitty` | `iterm` | `sixel` | `unicode` | `off`.\n- `scale` (float) — on-screen size of the native 192×208 frames (default 0.33,\n  clamped 0.1–3.0). One knob resizes every surface; set it with\n  `hermes pets scale \u003Cfactor>`, the `\u002Fpet scale` slash command, or the desktop\n  Appearance slider.\n- `unicode_cols` (int) — width in columns for the Unicode fallback.\n\n## Pitfalls\n\n- A pet only shows once one is installed AND selected (`enabled: true`).\n- Inside a pipe\u002Fredirect (no TTY) terminal rendering is disabled by design.\n- The petdex npm CLI installs to `~\u002F.codex\u002Fpets`; Hermes uses its own\n  profile-scoped `\u003CHERMES_HOME>\u002Fpets\u002F` instead — install through `hermes pets`.\n- `hermes pets install` rejects non-petdex hosts by design; use the import\n  script rather than loosening `_is_petdex_host`.\n- A sheet whose dimensions are not a multiple of 192x208 has no inferable grid —\n  the script exits rather than guessing.\n- Blank frames inside a row are normal; blank *rows* are not.\n- Uniqueness must be measured on RGBA. On RGB, transparent frames collide.\n- Lossy WebP silently degrades the art. Gallery pets are 1.0-2.2 MiB.\n- `vision_analyze` can fail with `Connection error` on local files. When visual\n  confirmation is the last step, open the image with `open_preview` and let the\n  user look, rather than looping on a failing tool.\n\n## Verification\n\n`hermes pets doctor` reports `✓ ready` when a pet is installed, selected,\nenabled, and Pillow is importable. For an import, the script's own frame table\nis the check: every row non-empty, and the first 6 columns unique per row.\nConfirm the write landed by reading back the dimensions:\n\n```\npython -c \"from PIL import Image; print(Image.open('\u003CHERMES_HOME>\u002Fpets\u002F\u003Cslug>\u002Fspritesheet.webp').size)\"\n```\n\nExpect a multiple of `(192 * 8, 208 * 9)` = `(1536, 1872)` after normalization.\n","# Petdex Skill\n\nBrowse and select animated \"pet\" mascots from the public\n[petdex](https:\u002F\u002Fgithub.com\u002Fcrafter-station\u002Fpetdex) gallery, and **import\nspritesheets that are not in that gallery** (ChatGPT shared pets, hand-made\natlases). An installed pet reacts to agent activity (idle, running a tool,\nreviewing, error, done) across the Hermes CLI, TUI, and desktop app.\n\nThis skill drives the `hermes pets` CLI, the `display.pet` config, and one\nimport script. It does **not** generate sprites from a model — for that, see the\nin-tree `agent\u002Fpet\u002Fgenerate\u002F` path.\n\n## When to Use\n\n- The user wants a desktop\u002Fterminal mascot or asks about \"pets\" \u002F petdex.\n- The user wants to change, preview, or disable the active pet.\n- The user shares a **ChatGPT pet link** (`chatgpt.com\u002Fs\u002Fsharepet_\u003Cid>`) or any\n  other external spritesheet and wants it as a Hermes pet.\n- Diagnosing why a pet isn't showing (terminal graphics support, config).\n\n## Prerequisites\n\n- Network access to `petdex.dev` for the gallery\u002Fmanifest (read-only, no auth).\n- Pillow (a core Hermes dependency) for sprite decoding — already installed.\n- For full-fidelity terminal rendering: a graphics-capable terminal (kitty,\n  Ghostty, WezTerm, iTerm2, or sixel). Otherwise a truecolor Unicode\n  half-block fallback is used automatically.\n\n## How to Run\n\nUse the `terminal` tool to run `hermes pets \u003Csubcommand>`.\n\n## Quick Reference\n\n| Goal | Command |\n| --- | --- |\n| Browse the gallery | `hermes pets list` (add a substring to filter: `hermes pets list cat`) |\n| List installed pets | `hermes pets list --installed` |\n| Install a pet | `hermes pets install \u003Cslug>` (add `--select` to make it active) |\n| Set the active pet | `hermes pets select \u003Cslug>` (omit slug for a picker) |\n| Resize the pet everywhere | `hermes pets scale \u003Cfactor>` (e.g. `0.5`, clamped 0.1–3.0) |\n| Preview\u002Fanimate in terminal | `hermes pets show [slug] [--cycle] [--state run]` |\n| Disable the pet | `hermes pets off` |\n| Remove a pet | `hermes pets remove \u003Cslug>` |\n| Diagnose setup | `hermes pets doctor` |\n| Preview one state | `hermes pets show --state run` (once: `--once`; cycle: `--cycle`) |\n| Import a non-gallery sheet | `python scripts\u002Fimport_spritesheet_pet.py --url \u003Curl> --slug \u003Cslug> --dry-run` |\n\n## Procedure\n\n1. Find a pet: `hermes pets list \u003Cquery>` and note its `slug`.\n2. Install + activate: `hermes pets install \u003Cslug> --select`.\n3. Preview it: `hermes pets show` (Ctrl+C to stop).\n4. Confirm setup: `hermes pets doctor` — shows the resolved pet, configured\n   render mode, detected terminal graphics protocol, and effective mode.\n\nPets install into `\u003CHERMES_HOME>\u002Fpets\u002F\u003Cslug>\u002F` (profile-aware). Selecting a pet\nwrites `display.pet.slug` + `display.pet.enabled` to `config.yaml`.\n\n## Importing a non-gallery spritesheet\n\n`hermes pets install \u003Cslug>` **cannot** do this. `agent\u002Fpet\u002Fstore.py::install_pet`\ncalls `_is_petdex_host()` on both the manifest entry and the asset URLs, and\nraises `PetStoreError(\"refusing non-petdex spritesheet host for ...\")` for any\nhost that is not `petdex.dev` or `*.petdex.dev`. That pin is a deliberate\nanti-SSRF control — do not work around it by editing the source; write the pet\ninto the store directly instead.\n\nThere is no `import_pet` CLI. `export_pet()` produces a \"re-importable\" zip,\nbut nothing in the tree reads one back — verified by search.\n\nUse the bundled script (stdlib + Pillow only):\n\n```\npython scripts\u002Fimport_spritesheet_pet.py \\\n  --url \"\u003Csprite-url>\" --slug hakua \\\n  --display-name \"Hakua\" --description \"...\" --source \"\u003Cpage-url>\" --dry-run\n```\n\nDrop `--dry-run` to write, then `hermes pets select \u003Cslug>`.\n\n### The atlas contract (`agent\u002Fpet\u002Fconstants.py`)\n\n| Constant | Value | Consequence |\n| --- | --- | --- |\n| `FRAME_W` \u002F `FRAME_H` | 192 \u002F 208 | Sheet dims must be exact multiples, or the grid is undecidable |\n| `FRAMES_PER_STATE` | 6 | Only the **first 6 columns** ever animate (petdex CSS `steps(6)`) |\n| `CODEX_STATE_ROWS` | 9 rows | Used when `row_count >= 9` — the current shape, 1536x1872 |\n| `LEGACY_STATE_ROWS` | 8 rows | Fallback for older sheets |\n\nRow names map to Hermes activity states through `STATE_ALIASES`\n(`wave`→`waving`, `jump`→`jumping`, `run`→`running`). A sheet with **more**\nrows than the taxonomy still renders: `state_rows_for_grid()` returns\n`CODEX_STATE_ROWS` for any `row_count >= 9`, so extra trailing rows are simply\nnever played. Truncating to 9 keeps the asset byte-comparable with the other\ninstalled pets.\n\n`pet.json` keys: `id`, `displayName`, `description`, `spritesheetPath`, and\n`createdBy`. **Leave `createdBy` empty for an imported pet** — the value\n`\"generator\"` is what `register_local_pet()` stamps on locally-hatched pets and\n`InstalledPet.generated` keys off it.\n\nEncode the spritesheet **lossless**: `format=\"WEBP\", lossless=True, quality=100,\nmethod=6, exact=True`, matching `store.py::_write_spritesheet`. Gallery pets are\n1.0–2.2 MiB; a sub-500 KiB file means you saved lossy and silently degraded the\nart.\n\n### Fetching a ChatGPT shared pet\n\nThe share page is a React Router app whose pet metadata is **not** in static\nHTML — read it from the server-injected loader payload\n`__reactRouterContext.streamController.enqueue(...)`, which carries\n`spritesheet_url`, `name`, and `description`. Use `web_extract` on the page and\nsearch for `spritesheet_url`.\n\nThe spritesheet endpoint returns **403 `text\u002Fhtml`** to a bare request. Sending\na browser header set (`User-Agent`, `Accept: image\u002F*`, `Referer:\nhttps:\u002F\u002Fchatgpt.com\u002F`, `Sec-Fetch-Dest: image`, `Sec-Fetch-Mode: no-cors`,\n`Sec-Fetch-Site: same-origin`) returns **200 `image\u002Fpng`**. Verified.\n\n**The 403 body is HTML.** A `.png` filename does not make it one — check the\nmagic bytes (`\\x89PNG`) before handing bytes to Pillow, or you get\n`cannot identify image file` with no useful cause.\n\n### Verifying an imported sheet\n\nMeasure, don't eyeball:\n\n- **Per-row non-empty frame count** — a row below `cols` is normal. Some\n  animation frames are intentionally blank (a waving cycle resting between\n  arm positions, a jump's airborne peak). Only an all-empty row is a defect.\n- **Per-row uniqueness of the first 6 frames** — this catches copied placeholder\n  art. **Hash RGBA, never RGB**: a transparent frame and a second transparent\n  frame are identical in RGB after alpha is dropped, so an RGB hash reports\n  spurious collisions on perfectly correct sheets.\n- **A repeated frame that is *empty* is padding, not a duplicate animation\n  pose.** Both hash and `getbbox() is None`. Sheet tails are routinely padded to\n  `FRAMES_PER_STATE` with blank cells; that is not a bug and needs no repair.\n\nAn 11-row ChatGPT sheet measured `5\u002F6 unique` on the `waving` row for exactly\nthis reason — columns 4 and 5 are both fully transparent. Reporting that as \"a\nduplicated frame\" is a false positive.\n\nFor a human check, render a contact sheet (states x frames) with Pillow and open\nit via `open_preview`.\n\n## Configuration\n\nUnder `display.pet` in `config.yaml`:\n\n- `enabled` (bool) — master on\u002Foff.\n- `slug` (str) — active pet; empty = first installed.\n- `render_mode` — `auto` (detect) | `kitty` | `iterm` | `sixel` | `unicode` | `off`.\n- `scale` (float) — on-screen size of the native 192×208 frames (default 0.33,\n  clamped 0.1–3.0). One knob resizes every surface; set it with\n  `hermes pets scale \u003Cfactor>`, the `\u002Fpet scale` slash command, or the desktop\n  Appearance slider.\n- `unicode_cols` (int) — width in columns for the Unicode fallback.\n\n## Pitfalls\n\n- A pet only shows once one is installed AND selected (`enabled: true`).\n- Inside a pipe\u002Fredirect (no TTY) terminal rendering is disabled by design.\n- The petdex npm CLI installs to `~\u002F.codex\u002Fpets`; Hermes uses its own\n  profile-scoped `\u003CHERMES_HOME>\u002Fpets\u002F` instead — install through `hermes pets`.\n- `hermes pets install` rejects non-petdex hosts by design; use the import\n  script rather than loosening `_is_petdex_host`.\n- A sheet whose dimensions are not a multiple of 192x208 has no inferable grid —\n  the script exits rather than guessing.\n- Blank frames inside a row are normal; blank *rows* are not.\n- Uniqueness must be measured on RGBA. On RGB, transparent frames collide.\n- Lossy WebP silently degrades the art. Gallery pets are 1.0-2.2 MiB.\n- `vision_analyze` can fail with `Connection error` on local files. When visual\n  confirmation is the last step, open the image with `open_preview` and let the\n  user look, rather than looping on a failing tool.\n\n## Verification\n\n`hermes pets doctor` reports `✓ ready` when a pet is installed, selected,\nenabled, and Pillow is importable. For an import, the script's own frame table\nis the check: every row non-empty, and the first 6 columns unique per row.\nConfirm the write landed by reading back the dimensions:\n\n```\npython -c \"from PIL import Image; print(Image.open('\u003CHERMES_HOME>\u002Fpets\u002F\u003Cslug>\u002Fspritesheet.webp').size)\"\n```\n\nExpect a multiple of `(192 * 8, 208 * 9)` = `(1536, 1872)` after normalization.\n",{"name":5,"author":38,"license":15,"version":39,"metadata":40,"platforms":46,"description":7},"Hermes","1.0.0",{"hermes":41},{"tags":42,"category":26,"homepage":45},[5,43,44,20,29,23],"mascot","display","https:\u002F\u002Fpetdex.dev",[21,19,22],"main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002Fcb\u002Fcb07630b9208e087bcfc68e1a5624fdda852bb4a6ea3e3cbde41a6c6c5ab4475",0,"https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills","https:\u002F\u002Fgithub.com\u002Fzapabob","The Open University of JAPAN　2019-now\r\n\r\nTokyo University of Science　2007-2010","2026-10-26 16:29:01",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add zapabob\u002FSkills --skill petdex",{"tool":61,"command":62},"bunx","bunx skills add zapabob\u002FSkills --skill petdex",{"tool":64,"command":65},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill petdex","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002Fcb\u002Fcb07630b9208e087bcfc68e1a5624fdda852bb4a6ea3e3cbde41a6c6c5ab4475\u002FSKILL.md",true,[],[70,102,137,164,191,208],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":89,"publishedAt":33},"01M6GJTE1GESGGF9K028Y7753E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fxurl\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[76,81,84],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":82,"categoryName":83,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[72,90,19,20,91,21,22,92,93,25,94,95,96,28,97,98,47,99,100,101],"openclaw","github","official","search","social-media","api","Media","hermes agent","twitter","social","via","post",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":119,"publishedAt":33},"01M6GJT8S1PXQ8WPXT1HSNBWH2","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwriting-plans\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[108,111,114,115,116],{"categoryNo":109,"categoryName":110,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":112,"categoryName":113,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":82,"categoryName":83,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},{"categoryNo":117,"categoryName":118,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000036","内容创作者",[120,121,122,123,19,124,21,125,22,126,127,128,129,130,131,132,133,134,135,136],"writing","writing plans","plans","design","review","workflow","documentation","tasks","development","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":146,"publishedAt":33},"01M6GJST0H5X7WHBJ3BZK0DVKH","whisper","OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwhisper\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[143],{"categoryNo":144,"categoryName":145,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000016","图像与多媒体",[139,19,21,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":173,"publishedAt":33},"01M6GJSMRQ8EETZTYMG72P70EA","weights-and-biases","W&B: log ML experiments, sweeps, model registry, dashboards.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fweights-and-biases\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[170],{"categoryNo":171,"categoryName":172,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000013","分析与可视化",[174,19,175,176,22,177,178,179,180,181,182,154,183,184,185,186,187,188,189,190],"weights and biases","tensorflow","experiments","pytorch","visualization","registry","real-time","tuning","dashboards","experiment","log","time","Experiment Tracking","Model Registry","Hyperparameter Tuning","WandB","Real-Time Visualization",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":198,"publishedAt":33},"01M6GJS19KDPRY112JTR326S06","watchers","Poll RSS, JSON APIs, and GitHub with watermark dedup.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwatchers\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[197],{"categoryNo":82,"categoryName":83,"taxonomyType":79,"taxonomyTypeDesc":80},[193,19,199,91,21,200,201,202,203,204,205,28,97,206,207],"terminal","automation","http","monitoring","cron","json","rss","devops","with",{"skillNo":209,"name":210,"nameZh":6,"description":211,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":212,"categories":213,"keywords":216,"publishedAt":33},"01M6GJRHJD2A6Q830SWF9W48BC","serving-llms-vllm","vLLM: high-throughput LLM serving, OpenAI API, quantization.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fvllm\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[214,215],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},[217,218,219,21,220,147,221,222,223,150,224,95,225,226,227,228,229,230,231,232],"llms","vLLM","serving llms vllm","research","openai api","tensor","Inference Serving","Production","llm serving","High Throughput","PagedAttention","Continuous Batching","Quantization","Tensor Parallelism","high-throughput","throughput"]