[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70PFHMH9ADY0CRE6047Y4B2":3,"skill-same:01M70PFHMH9ADY0CRE6047Y4B2":84},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image",null,"Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",60,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"show image","kitty show image","image","show","kitty","Bash","text","read","use","open","file","get","via","with","xdg","ls","send","when","2026","dev","2026-11-10 10:12:30",false,"---\nname: kitty-show-image\ndescription: Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.\nallowed-tools: Bash(bash *), Bash(kitty @ ls), Bash(kitty @ ls *), Bash(kitty @ get-text *), Bash(open *), Bash(xdg-open *), Read, Write\ncreated: 2026-10-24\nmodified: 2026-11-09\nreviewed: 2026-11-09\n---\n\n# Showing an Image to the User\n\nClaude Code cannot draw images inside the chat. Kitty's graphics protocol\nneeds escape codes written to a real terminal, and both the Bash tool and the\nuser's `!` commands run without `\u002Fdev\u002Ftty`. A plain `kitty +kitten icat` from\neither fails with `open \u002Fdev\u002Ftty: device not configured`.\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|---|---|\n| The user should look at a screenshot, render or diagram | Only Claude needs to see the image: `Read` it directly |\n| A visual gate needs the user's verdict on an image | Running other `kitty @` commands: `kitty-remote-control` |\n| `kitty +kitten icat` fails with `open \u002Fdev\u002Ftty: device not configured` | A keybinding does nothing in kitty: `macos-plugin:tui-keybinding-debug` |\n\n## Every image goes out with a note\n\nThe user should never have to switch back to the chat to find out what they\nare looking at. Whichever channel you use, send the explanation with the image:\n\n- **What it is**: the subject, the run or commit, and what each panel shows\n  when the image has several.\n- **What to look at**: for several figures or regions, a table of each one and\n  what it should show.\n- **What is expected to look off for now**, so the user doesn't report a known\n  gap.\n- **For a decision**: the question and the exact answer to type back in Claude\n  Code (\"23 accept\", or name the figure that is wrong).\n\nFor the kitty tab, write the note to a file and pass `--note`. For a file-send\ntool, put the same text in its caption. Send one image per question.\n\n## Pick the channel\n\n| Situation | Channel |\n|---|---|\n| Default, when the session has a tool that sends a file to the user (for example `SendUserFile`) | That tool, rendered inline, with the note as its caption. It does not touch the terminal, and the file can reach the user's other devices. |\n| The user wants it in kitty, or asked to see it \"here\" | [`show-image.sh`](#show-imagesh). It opens and focuses a tab, so it needs the user's ask; one ask covers the rest of that session's images. |\n| No file-send tool, not in kitty (`$KITTY_WINDOW_ID` unset), and the user is at this machine | The desktop viewer: `open \u003Cfile>` on macOS, `xdg-open \u003Cfile>` on Linux. Print the note in the chat. |\n\n## show-image.sh\n\n```\nbash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fshow-image.sh\" [--note FILE] IMAGE [IMAGE...]\n```\n\nIt needs kitty remote control: `allow_remote_control` and `listen_on` set in\n`kitty.conf`, so `$KITTY_LISTEN_ON` is exported into the shell. Check with\n`kitty @ ls` (read-only) before the first use.\n\nOpens a tab titled **Claude: image viewer** with a banner saying it is\nClaude Code's image viewer. Under the images it prints their file names and\nthen the `--note` text, just above the key prompt. With several images, only\nthe last stay on screen above the note; earlier ones scroll off the top. One\nkey press closes the tab, after which kitty returns focus to the previous tab.\nThe script prints the new window id. To confirm the tab rendered, read it\nwithout touching it: `kitty @ get-text --match id:\u003Cid>`.\n\n| Exit | Meaning | Next step |\n|---|---|---|\n| 0 | Tab launched | Tell the user which tab to look at and that a key press closes it |\n| 1 | Bad arguments or missing file | Fix the path |\n| 2 | Not in kitty, or remote control unreachable | Fall back to a file-send tool or the desktop viewer |\n\n## Don't\n\n- **Don't send an image without its note.** A bare image makes the user switch\n  back to the chat to find out what to judge.\n- **Don't hand the user `! kitty +kitten icat …`.** The `!` shell has no TTY,\n  so it fails the same way the Bash tool does.\n- **Don't use `kitty @ launch --hold`, or `--type=overlay` without a banner.**\n  `--hold` leaves an interactive shell prompt behind. An unlabelled overlay with\n  a prompt looks exactly like Claude Code has exited; a user who hit this tried\n  `fg` before discovering that `ctrl+d` got them back.\n- **Don't close the tab for the user.** It closes on their key press;\n  `close-window` is on the destructive list in `kitty-remote-control`.\n\n## Agentic Optimizations\n\n| Context | Command |\n|---|---|\n| Is remote control reachable? | `kitty @ ls >\u002Fdev\u002Fnull && echo ok` |\n| Did the tab render? | `kitty @ get-text --match id:\u003Cid>` |\n| Script contract test | `bash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Ftests\u002Ftest-show-image.sh\"` |\n","# Showing an Image to the User\n\nClaude Code cannot draw images inside the chat. Kitty's graphics protocol\nneeds escape codes written to a real terminal, and both the Bash tool and the\nuser's `!` commands run without `\u002Fdev\u002Ftty`. A plain `kitty +kitten icat` from\neither fails with `open \u002Fdev\u002Ftty: device not configured`.\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|---|---|\n| The user should look at a screenshot, render or diagram | Only Claude needs to see the image: `Read` it directly |\n| A visual gate needs the user's verdict on an image | Running other `kitty @` commands: `kitty-remote-control` |\n| `kitty +kitten icat` fails with `open \u002Fdev\u002Ftty: device not configured` | A keybinding does nothing in kitty: `macos-plugin:tui-keybinding-debug` |\n\n## Every image goes out with a note\n\nThe user should never have to switch back to the chat to find out what they\nare looking at. Whichever channel you use, send the explanation with the image:\n\n- **What it is**: the subject, the run or commit, and what each panel shows\n  when the image has several.\n- **What to look at**: for several figures or regions, a table of each one and\n  what it should show.\n- **What is expected to look off for now**, so the user doesn't report a known\n  gap.\n- **For a decision**: the question and the exact answer to type back in Claude\n  Code (\"23 accept\", or name the figure that is wrong).\n\nFor the kitty tab, write the note to a file and pass `--note`. For a file-send\ntool, put the same text in its caption. Send one image per question.\n\n## Pick the channel\n\n| Situation | Channel |\n|---|---|\n| Default, when the session has a tool that sends a file to the user (for example `SendUserFile`) | That tool, rendered inline, with the note as its caption. It does not touch the terminal, and the file can reach the user's other devices. |\n| The user wants it in kitty, or asked to see it \"here\" | [`show-image.sh`](#show-imagesh). It opens and focuses a tab, so it needs the user's ask; one ask covers the rest of that session's images. |\n| No file-send tool, not in kitty (`$KITTY_WINDOW_ID` unset), and the user is at this machine | The desktop viewer: `open \u003Cfile>` on macOS, `xdg-open \u003Cfile>` on Linux. Print the note in the chat. |\n\n## show-image.sh\n\n```\nbash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fshow-image.sh\" [--note FILE] IMAGE [IMAGE...]\n```\n\nIt needs kitty remote control: `allow_remote_control` and `listen_on` set in\n`kitty.conf`, so `$KITTY_LISTEN_ON` is exported into the shell. Check with\n`kitty @ ls` (read-only) before the first use.\n\nOpens a tab titled **Claude: image viewer** with a banner saying it is\nClaude Code's image viewer. Under the images it prints their file names and\nthen the `--note` text, just above the key prompt. With several images, only\nthe last stay on screen above the note; earlier ones scroll off the top. One\nkey press closes the tab, after which kitty returns focus to the previous tab.\nThe script prints the new window id. To confirm the tab rendered, read it\nwithout touching it: `kitty @ get-text --match id:\u003Cid>`.\n\n| Exit | Meaning | Next step |\n|---|---|---|\n| 0 | Tab launched | Tell the user which tab to look at and that a key press closes it |\n| 1 | Bad arguments or missing file | Fix the path |\n| 2 | Not in kitty, or remote control unreachable | Fall back to a file-send tool or the desktop viewer |\n\n## Don't\n\n- **Don't send an image without its note.** A bare image makes the user switch\n  back to the chat to find out what to judge.\n- **Don't hand the user `! kitty +kitten icat …`.** The `!` shell has no TTY,\n  so it fails the same way the Bash tool does.\n- **Don't use `kitty @ launch --hold`, or `--type=overlay` without a banner.**\n  `--hold` leaves an interactive shell prompt behind. An unlabelled overlay with\n  a prompt looks exactly like Claude Code has exited; a user who hit this tried\n  `fg` before discovering that `ctrl+d` got them back.\n- **Don't close the tab for the user.** It closes on their key press;\n  `close-window` is on the destructive list in `kitty-remote-control`.\n\n## Agentic Optimizations\n\n| Context | Command |\n|---|---|\n| Is remote control reachable? | `kitty @ ls >\u002Fdev\u002Fnull && echo ok` |\n| Did the tab render? | `kitty @ get-text --match id:\u003Cid>` |\n| Script contract test | `bash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Ftests\u002Ftest-show-image.sh\"` |\n",{"name":5,"created":49,"modified":50,"reviewed":50,"description":7,"allowed-tools":51},1792800000000,1794182400000,"Bash(bash *), Bash(kitty @ ls), Bash(kitty @ ls *), Bash(kitty @ get-text *), Bash(open *), Bash(xdg-open *), Read, Write","main","4ce428979f89281ce915e0c022270791a6fa5b08","kitty-plugin\u002Fskills\u002Fkitty-show-image",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-15 03:36:11",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add laurigates\u002Fclaude-plugins --skill kitty-show-image",{"tool":66,"command":67},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill kitty-show-image",{"tool":69,"command":70},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill kitty-show-image","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",true,[74,80],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"scripts\u002Fshow-image.sh","SCRIPT","脚本",2349,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002Fscripts\u002Fshow-image.sh",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"scripts\u002Ftests\u002Ftest-show-image.sh",1121,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002Fscripts\u002Ftests\u002Ftest-show-image.sh",[85,106,122,145,175,200],{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":44},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[28,92,93,94,95,96,41,29,97,98,99,42,31,100,101,102,103,104,105,32],"kitty session persistence","session","persistence","false","snapshots","uname","reboot","terminal","write","edit","snapshot","macos","sessions","restore",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":44},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[113,114,28,115,116,39,117,118,35,119,120,32,41,121,29,30,37,99,42,31],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":44},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[129,130,131,132,133,134,135,136,137,138,32,41,29,139,34,140,141,142,143,144],"docs reference check","check","reference check","reference","docs","links","python3","repo","files","auto","drift","lint","wiring","chezmoi","references","cp",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":160,"publishedAt":44},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[151,154,155],{"categoryNo":152,"categoryName":153,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":156,"categoryName":157,"taxonomyType":158,"taxonomyTypeDesc":159},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[161,162,163,164,135,165,31,166,101,167,168,169,32,29,34,170,171,41,172,173,174,36,42],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"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":44},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[181],{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[185,186,187,188,163,164,189,190,191,192,193,31,194,195,196,197,32,198,41,37,199,42],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":207,"publishedAt":44},"01M6C6N7DB5HEV8SZSJ0475Z1B","workflow-wave-dispatch","Sequential-wave dispatch for multi-agent work with cross-task dependencies. Use when planning multi-step work, fixing parallel-dispatch order, or gating waves on verification.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fworkflow-orchestration-plugin\u002Fskills\u002Fworkflow-wave-dispatch\u002FSKILL.md",[206],{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},[208,209,210,211,212,213,214,31,215,32,216,217,218,219,95,41,220,37,221,222,42],"dispatch","workflow wave dispatch","workflow","parallel","verification","work","planning","grep","multi-agent","sep","for","gating","task","multi","dependencies"]