[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GD337PDCZ3YKZS5QC44CH3":3,"skill-same:01M6GD337PDCZ3YKZS5QC44CH3":77},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":6,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M6GD337PDCZ3YKZS5QC44CH3","windows-local-service-ops",null,"Windows service ops: port zombies, env pollution, health.","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\u002Fb3\u002Fb3bafae79ec18a85ab72cc75f3237bcbdf48abdaff51af24bf5d24902a2ad639\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"windows","windows local service ops","service","local","ops","tts","hermes","hermes agent","bridge","operations","health","restart","startup","pollution","gateway","env","personal","irodori","line","port","2026-11-10 10:12:30",false,"---\r\nname: windows-local-service-ops\r\ndescription: \"Windows service ops: port zombies, env pollution, health.\"\r\nversion: 0.1.0\r\nauthor: Hermes Agent\r\nlicense: MIT\r\nmetadata:\r\n  hermes:\r\n    tags: [windows, service, ops, port, zombie, restart, irodori, line-bridge]\r\n    related_skills: [line-personal-bridge, irodori-tts-windows-startup, hermes-gateway-operations]\r\n---\r\n\r\n# Windows Local Service Ops\r\n\r\n## When to Use\r\n\r\n- A local background service on this Windows box is down, crash-looping, or failing health checks\r\n- The daily audit flags a service failure (LINE bridge, irodori-TTS, llama)\r\n- `listen EADDRINUSE` appears repeatedly in a service log\r\n- Launching a venv server from the Hermes shell and it crashes on import\r\n\r\nCovers port-zombie recovery, MSYS\u002Fgit-bash quirks, venv env pollution, and the launch → health-check pattern. The canonical per-service skills (`irodori-tts-windows-startup`, `line-personal-bridge`) live in the DEFAULT profile (`~\u002F.hermes\u002Fskills\u002F`) — read them for service internals; this skill is the generic recovery playbook that works from any profile.\r\n\r\n## Service inventory (this box)\r\n\r\n| Service | Port | Health probe | Launcher |\r\n|---|---|---|---|\r\n| Irodori-TTS | 8088 | GET \u002Fhealth | `.venv\u002FScripts\u002Fpython.exe -m irodori_openai_tts` (server repo) |\r\n| Personal LINE bridge worker | 9101 | GET \u002Fstatus | `start_personal_line_bridge.py` supervisor |\r\n| Personal LINE reply server | 9102 | GET \u002Fhealth | same supervisor |\r\n| Local llama server | 8080 | GET \u002Fv1\u002Fmodels | SuperGemma4-LlamaServer.vbs (Startup) |\r\n\r\n## Port zombie recovery (EADDRINUSE crash loop)\r\n\r\nSymptom: a service crash-loops with `listen EADDRINUSE: address already in use 127.0.0.1:\u003Cport>` (e.g. every 5 min in its log), or a watchdog keeps failing to bind.\r\n\r\n1. Find the holder: `netstat -ano | grep \u003Cport> | grep LISTEN` → PID.\r\n2. Identify it before killing: `wmic process where \"ProcessId=\u003CPID>\" get Name,CommandLine`.\r\n3. Kill it — **git-bash mangles Windows flags**: plain `taskkill \u002F\u002FF \u002F\u002FPID \u003CPID>` fails with \"Invalid argument\u002Foption\". Use:\r\n   `MSYS_NO_PATHCONV=1 taskkill \u002FF \u002FPID \u003CPID>`\r\n4. Confirm the port is free (TIME_WAIT remnants are harmless).\r\n5. Restart via the service's normal launcher, then health-check.\r\n\r\n## Launching venv servers from the Hermes shell\r\n\r\n- **Never** use nohup\u002F& wrappers — Hermes rejects them. Launch with `terminal(command=..., background=true)`, then probe health in a separate call after a short wait (model servers take ~20-30s).\r\n- **Python environment pollution pitfall** — an inherited `PYTHONPATH` can make a server venv import another interpreter's packages, producing `ModuleNotFoundError: No module named 'pydantic_core._pydantic_core'` even when the server's own dependencies are intact. Compare package origins under inherited and isolated environments before reinstalling anything. For a module installed in its own venv, launch `.venv\u002FScripts\u002Fpython.exe -I -m \u003Cserver_module>`: isolated mode ignores `PYTHONPATH`, `PYTHONHOME`, and user-site packages without mutating the parent. Irodori's shared PowerShell launcher uses this boundary. For source-only applications that require `PYTHONPATH`, explicitly construct the child environment rather than removing the parent's settings globally. Verify child package origins, health, and an actual request.\r\n- Use the venv's own interpreter (`.venv\u002FScripts\u002Fpython.exe`); bare `python` on this box is the MS Store stub — use `python3.12` for ad-hoc scripts.\r\n- Always health-check after launch: curl the health endpoint AND confirm a LISTEN line on the port.\r\n\r\n## Pitfalls\r\n\r\n- **Detached Windows children can hold captured pipes open:** `subprocess.run(capture_output=True)` may wait for EOF after PowerShell has exited if `Start-Process` passes inherited handles to a persistent server. Even timeout cleanup can block inside `communicate()`. Confirm that the script exited and that the requested artifact was actually written before blaming slow inference. Capture wrapper stdout\u002Fstderr with `tempfile.TemporaryFile()` handles and decode them after the wrapper exits. Keep these handles outside the input `TemporaryDirectory`: ordinary named files in that directory may remain locked by the server and cause `WinError 32` during cleanup. A live regression should prove that the wrapper returns while the server still answers health. The test driver must use bounded `Popen.wait()` and clean up only its own synthetic server.\r\n- A crash-loop with EADDRINUSE is almost always a zombie process holding the port; killing the holder fixes the loop — do not chase the crash itself.\r\n- MSYS rewrites `\u002Fc\u002F...`-style args too; prefix `MSYS_NO_PATHCONV=1` for any Windows-native flag\u002Farg that must pass through verbatim.\r\n- `skill_view` can't see default-profile skills from the secretary profile; read them via read_file at `%USERPROFILE%\\.hermes\\skills\\...` when needed.\r\n\r\n## Verified recipes\r\n\r\n- `references\u002Fline-personal-bridge-recovery.md` — EADDRINUSE loop + QR re-link workflow.\r\n- `references\u002Firodori-launch-cpu.md` — PYTHONPATH-crash fix and verified CPU launch.\r\n","# Windows Local Service Ops\r\n\r\n## When to Use\r\n\r\n- A local background service on this Windows box is down, crash-looping, or failing health checks\r\n- The daily audit flags a service failure (LINE bridge, irodori-TTS, llama)\r\n- `listen EADDRINUSE` appears repeatedly in a service log\r\n- Launching a venv server from the Hermes shell and it crashes on import\r\n\r\nCovers port-zombie recovery, MSYS\u002Fgit-bash quirks, venv env pollution, and the launch → health-check pattern. The canonical per-service skills (`irodori-tts-windows-startup`, `line-personal-bridge`) live in the DEFAULT profile (`~\u002F.hermes\u002Fskills\u002F`) — read them for service internals; this skill is the generic recovery playbook that works from any profile.\r\n\r\n## Service inventory (this box)\r\n\r\n| Service | Port | Health probe | Launcher |\r\n|---|---|---|---|\r\n| Irodori-TTS | 8088 | GET \u002Fhealth | `.venv\u002FScripts\u002Fpython.exe -m irodori_openai_tts` (server repo) |\r\n| Personal LINE bridge worker | 9101 | GET \u002Fstatus | `start_personal_line_bridge.py` supervisor |\r\n| Personal LINE reply server | 9102 | GET \u002Fhealth | same supervisor |\r\n| Local llama server | 8080 | GET \u002Fv1\u002Fmodels | SuperGemma4-LlamaServer.vbs (Startup) |\r\n\r\n## Port zombie recovery (EADDRINUSE crash loop)\r\n\r\nSymptom: a service crash-loops with `listen EADDRINUSE: address already in use 127.0.0.1:\u003Cport>` (e.g. every 5 min in its log), or a watchdog keeps failing to bind.\r\n\r\n1. Find the holder: `netstat -ano | grep \u003Cport> | grep LISTEN` → PID.\r\n2. Identify it before killing: `wmic process where \"ProcessId=\u003CPID>\" get Name,CommandLine`.\r\n3. Kill it — **git-bash mangles Windows flags**: plain `taskkill \u002F\u002FF \u002F\u002FPID \u003CPID>` fails with \"Invalid argument\u002Foption\". Use:\r\n   `MSYS_NO_PATHCONV=1 taskkill \u002FF \u002FPID \u003CPID>`\r\n4. Confirm the port is free (TIME_WAIT remnants are harmless).\r\n5. Restart via the service's normal launcher, then health-check.\r\n\r\n## Launching venv servers from the Hermes shell\r\n\r\n- **Never** use nohup\u002F& wrappers — Hermes rejects them. Launch with `terminal(command=..., background=true)`, then probe health in a separate call after a short wait (model servers take ~20-30s).\r\n- **Python environment pollution pitfall** — an inherited `PYTHONPATH` can make a server venv import another interpreter's packages, producing `ModuleNotFoundError: No module named 'pydantic_core._pydantic_core'` even when the server's own dependencies are intact. Compare package origins under inherited and isolated environments before reinstalling anything. For a module installed in its own venv, launch `.venv\u002FScripts\u002Fpython.exe -I -m \u003Cserver_module>`: isolated mode ignores `PYTHONPATH`, `PYTHONHOME`, and user-site packages without mutating the parent. Irodori's shared PowerShell launcher uses this boundary. For source-only applications that require `PYTHONPATH`, explicitly construct the child environment rather than removing the parent's settings globally. Verify child package origins, health, and an actual request.\r\n- Use the venv's own interpreter (`.venv\u002FScripts\u002Fpython.exe`); bare `python` on this box is the MS Store stub — use `python3.12` for ad-hoc scripts.\r\n- Always health-check after launch: curl the health endpoint AND confirm a LISTEN line on the port.\r\n\r\n## Pitfalls\r\n\r\n- **Detached Windows children can hold captured pipes open:** `subprocess.run(capture_output=True)` may wait for EOF after PowerShell has exited if `Start-Process` passes inherited handles to a persistent server. Even timeout cleanup can block inside `communicate()`. Confirm that the script exited and that the requested artifact was actually written before blaming slow inference. Capture wrapper stdout\u002Fstderr with `tempfile.TemporaryFile()` handles and decode them after the wrapper exits. Keep these handles outside the input `TemporaryDirectory`: ordinary named files in that directory may remain locked by the server and cause `WinError 32` during cleanup. A live regression should prove that the wrapper returns while the server still answers health. The test driver must use bounded `Popen.wait()` and clean up only its own synthetic server.\r\n- A crash-loop with EADDRINUSE is almost always a zombie process holding the port; killing the holder fixes the loop — do not chase the crash itself.\r\n- MSYS rewrites `\u002Fc\u002F...`-style args too; prefix `MSYS_NO_PATHCONV=1` for any Windows-native flag\u002Farg that must pass through verbatim.\r\n- `skill_view` can't see default-profile skills from the secretary profile; read them via read_file at `%USERPROFILE%\\.hermes\\skills\\...` when needed.\r\n\r\n## Verified recipes\r\n\r\n- `references\u002Fline-personal-bridge-recovery.md` — EADDRINUSE loop + QR re-link workflow.\r\n- `references\u002Firodori-launch-cpu.md` — PYTHONPATH-crash fix and verified CPU launch.\r\n",{"name":5,"author":44,"license":15,"version":45,"metadata":46,"description":7},"Hermes Agent","0.1.0",{"hermes":47},{"tags":48,"related_skills":51},[19,21,23,38,49,30,36,50],"zombie","line-bridge",[52,53,54],"line-personal-bridge","irodori-tts-windows-startup","hermes-gateway-operations","main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002Fb3\u002Fb3bafae79ec18a85ab72cc75f3237bcbdf48abdaff51af24bf5d24902a2ad639",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":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add zapabob\u002FSkills --skill windows-local-service-ops",{"tool":69,"command":70},"bunx","bunx skills add zapabob\u002FSkills --skill windows-local-service-ops",{"tool":72,"command":73},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill windows-local-service-ops","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002Fb3\u002Fb3bafae79ec18a85ab72cc75f3237bcbdf48abdaff51af24bf5d24902a2ad639\u002FSKILL.md",true,[],[78,113,148,175,202,219],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":97,"publishedAt":39},"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",[84,89,92],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":90,"categoryName":91,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[80,98,99,100,101,102,19,103,104,105,106,107,108,25,26,109,55,110,111,112],"openclaw","macos","cli","github","linux","official","search","https","social-media","api","Media","twitter","social","via","post",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":130,"publishedAt":39},"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",[119,122,125,126,127],{"categoryNo":120,"categoryName":121,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":123,"categoryName":124,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":90,"categoryName":91,"taxonomyType":87,"taxonomyTypeDesc":88},{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},{"categoryNo":128,"categoryName":129,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000036","内容创作者",[131,132,133,134,99,135,102,136,19,137,138,139,140,141,142,143,144,145,146,147],"writing","writing plans","plans","design","review","workflow","documentation","tasks","development","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":157,"publishedAt":39},"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",[154],{"categoryNo":155,"categoryName":156,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000016","图像与多媒体",[150,99,102,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":184,"publishedAt":39},"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",[181],{"categoryNo":182,"categoryName":183,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000013","分析与可视化",[185,99,186,187,19,188,189,190,191,192,193,165,194,195,196,197,198,199,200,201],"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":203,"name":204,"nameZh":6,"description":205,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":206,"categories":207,"keywords":209,"publishedAt":39},"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",[208],{"categoryNo":90,"categoryName":91,"taxonomyType":87,"taxonomyTypeDesc":88},[204,99,210,101,102,211,212,213,214,215,216,25,26,217,218],"terminal","automation","http","monitoring","cron","json","rss","devops","with",{"skillNo":220,"name":221,"nameZh":6,"description":222,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":223,"categories":224,"keywords":227,"publishedAt":39},"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",[225,226],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},[228,229,230,102,231,158,232,233,234,161,235,107,236,237,238,239,240,241,242,243],"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"]