[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CPFE7397DTE7QYW5X73X8S":3,"skill-same:01M6CPFE7397DTE7QYW5X73X8S":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":65,"commitSha":66,"skillDirectory":67,"forksCount":68,"repositoryHtmlUrl":69,"repositoryHomepageUrl":70,"ownerHtmlUrl":71,"ownerBlogUrl":72,"ownerDescription":73,"updatedAt":74,"install":75,"resources":87},"01M6CPFE7397DTE7QYW5X73X8S","notes_export_pdf",null,"Export a Notes note to a PDF file at an absolute path. Notes\ndoesn't expose Export-as-PDF via AppleScript dictionary; this\nskill drives the File menu + Save sheet via UI scripting.\n\nThe Save sheet is the standard NSSavePanel — we type the filename\ninto the focused field, use Cmd+Shift+G to set the destination\ndirectory, then press Return to commit. The skill does NOT use\nthe Print → Save as PDF route (3+ extra dialog clicks); it uses\nNotes' direct File → Export as PDF... menu.\n\nAfter the save, the skill polls for the file's existence to\nconfirm completion before returning.","LocalKinAI\u002Fkinclaw","LocalKinAI","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F228881863?v=4","01M6CPDM368JVRW78EPV2NDABD","01M6CPDM7CKTKCXE8JD7K3658Q",9,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw\u002Fblob\u002Fmain\u002Fskills\u002Fnotes_export_pdf\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"notes export pdf","notes","export","PDF","ok","me","done","route","activate","show","default","menu bar","up","auto","remove","dialog","text","open","SET","commit","2026-11-10 10:12:30",false,"---\nname: notes_export_pdf\ndescription: |\n  Export a Notes note to a PDF file at an absolute path. Notes\n  doesn't expose Export-as-PDF via AppleScript dictionary; this\n  skill drives the File menu + Save sheet via UI scripting.\n\n  The Save sheet is the standard NSSavePanel — we type the filename\n  into the focused field, use Cmd+Shift+G to set the destination\n  directory, then press Return to commit. The skill does NOT use\n  the Print → Save as PDF route (3+ extra dialog clicks); it uses\n  Notes' direct File → Export as PDF... menu.\n\n  After the save, the skill polls for the file's existence to\n  confirm completion before returning.\ncommand:\n  - sh\n  - -c\n  - |\n    NOTE=\"$1\"; OUT_PATH=\"$2\"\n    [ -z \"$NOTE\" ] && { echo \"note title required\" >&2; exit 1; }\n    [ -z \"$OUT_PATH\" ] && { echo \"output path required\" >&2; exit 1; }\n\n    # Split path into directory + filename\n    OUT_DIR=\"$(\u002Fusr\u002Fbin\u002Fdirname \"$OUT_PATH\")\"\n    OUT_FILE=\"$(\u002Fusr\u002Fbin\u002Fbasename \"$OUT_PATH\")\"\n    \u002Fbin\u002Fmkdir -p \"$OUT_DIR\"\n    # Remove existing file so we can detect creation precisely\n    \u002Fbin\u002Frm -f \"$OUT_PATH\"\n\n    osascript 2>&1 \u003C\u003CAPPLE\n    tell application \"Notes\"\n        activate\n        try\n            show (first note whose name = \"$NOTE\")\n        on error\n            return \"ERR: note not found\"\n        end try\n    end tell\n    delay 0.8\n\n    tell application \"System Events\"\n        tell process \"Notes\"\n            try\n                click menu item \"Export as PDF…\" of menu \"File\" of menu bar 1\n            on error\n                -- Fallback: try without ellipsis\n                try\n                    click menu item \"Export as PDF\" of menu \"File\" of menu bar 1\n                on error e\n                    return \"ERR_MENU: \" & e\n                end try\n            end try\n        end tell\n    end tell\n    delay 1.5\n\n    -- Save sheet is now open. Filename field is auto-focused.\n    -- 1) clear current name (Cmd+A in text field selects, then type new)\n    tell application \"System Events\"\n        keystroke \"a\" using {command down}\n        delay 0.1\n        keystroke \"$OUT_FILE\"\n        delay 0.3\n        -- 2) Cmd+Shift+G opens Go to: sheet inside the save panel\n        keystroke \"g\" using {command down, shift down}\n        delay 0.5\n        keystroke \"$OUT_DIR\"\n        delay 0.3\n        -- 3) Press return: closes Go-to sheet\n        keystroke return\n        delay 0.5\n        -- 4) Press return again: triggers default Save button\n        keystroke return\n        delay 0.5\n    end tell\n    APPLE\n\n    # Poll for file creation (up to 8 seconds)\n    for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do\n      if [ -f \"$OUT_PATH\" ]; then\n        SIZE=$(\u002Fusr\u002Fbin\u002Fstat -f %z \"$OUT_PATH\")\n        if [ \"$SIZE\" -gt 1000 ]; then\n          echo \"ok: saved $OUT_PATH ($SIZE bytes)\"\n          exit 0\n        fi\n      fi\n      \u002Fbin\u002Fsleep 0.5\n    done\n\n    echo \"ERR: PDF not created at $OUT_PATH after 8s\" >&2\n    exit 1\n  - \"_\"\nargs:\n  - \"{{note}}\"\n  - \"{{out_path}}\"\nschema:\n  note:\n    type: string\n    description: Exact note title\n    required: true\n  out_path:\n    type: string\n    description: Absolute POSIX path where the PDF should be saved (e.g. \u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F168-note.pdf)\n    required: true\ntimeout: 30\n---\n\n# notes_export_pdf — export a Notes note to PDF at a path\n\nNotes' File menu has direct \"Export as PDF...\" which opens an\nNSSavePanel. The agent's typical failure mode is to open the\nFile menu + click Export as PDF, then get lost in the Save sheet\n— filename field, location field (which is hidden behind a\nCmd+Shift+G shortcut), and the actual Save button. This skill\ndrives all of that deterministically.\n\n## Examples\n\n```\nnotes_export_pdf note=\"KinBench Print 168\" out_path=\"\u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F168-note.pdf\"\n  → ok: saved \u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F168-note.pdf (47823 bytes)\n\nnotes_export_pdf note=\"KinBench Export 182\" out_path=\"\u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F182-note.pdf\"\n  → ok: saved \u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F182-note.pdf (45612 bytes)\n```\n\n## Why not Print → Save as PDF\n\nThe Print → Save as PDF route requires (1) Cmd+P, (2) click PDF\ndropdown bottom-left, (3) click \"Save as PDF…\", (4) navigate Save\nsheet. Notes' direct File → Export as PDF... is one click + Save\nsheet — half the friction. This skill uses the direct path.\n","# notes_export_pdf — export a Notes note to PDF at a path\n\nNotes' File menu has direct \"Export as PDF...\" which opens an\nNSSavePanel. The agent's typical failure mode is to open the\nFile menu + click Export as PDF, then get lost in the Save sheet\n— filename field, location field (which is hidden behind a\nCmd+Shift+G shortcut), and the actual Save button. This skill\ndrives all of that deterministically.\n\n## Examples\n\n```\nnotes_export_pdf note=\"KinBench Print 168\" out_path=\"\u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F168-note.pdf\"\n  → ok: saved \u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F168-note.pdf (47823 bytes)\n\nnotes_export_pdf note=\"KinBench Export 182\" out_path=\"\u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F182-note.pdf\"\n  → ok: saved \u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F182-note.pdf (45612 bytes)\n```\n\n## Why not Print → Save as PDF\n\nThe Print → Save as PDF route requires (1) Cmd+P, (2) click PDF\ndropdown bottom-left, (3) click \"Save as PDF…\", (4) navigate Save\nsheet. Notes' direct File → Export as PDF... is one click + Save\nsheet — half the friction. This skill uses the direct path.\n",{"args":48,"name":5,"schema":51,"command":58,"timeout":63,"description":64},[49,50],"{{note}}","{{out_path}}",{"note":52,"out_path":56},{"type":53,"required":54,"description":55},"string",true,"Exact note title",{"type":53,"required":54,"description":57},"Absolute POSIX path where the PDF should be saved (e.g. \u002FUsers\u002Fme\u002FDesktop\u002Fkinbench\u002F168-note.pdf)",[59,60,61,62],"sh","-c","NOTE=\"$1\"; OUT_PATH=\"$2\"\n[ -z \"$NOTE\" ] && { echo \"note title required\" >&2; exit 1; }\n[ -z \"$OUT_PATH\" ] && { echo \"output path required\" >&2; exit 1; }\n\n# Split path into directory + filename\nOUT_DIR=\"$(\u002Fusr\u002Fbin\u002Fdirname \"$OUT_PATH\")\"\nOUT_FILE=\"$(\u002Fusr\u002Fbin\u002Fbasename \"$OUT_PATH\")\"\n\u002Fbin\u002Fmkdir -p \"$OUT_DIR\"\n# Remove existing file so we can detect creation precisely\n\u002Fbin\u002Frm -f \"$OUT_PATH\"\n\nosascript 2>&1 \u003C\u003CAPPLE\ntell application \"Notes\"\n    activate\n    try\n        show (first note whose name = \"$NOTE\")\n    on error\n        return \"ERR: note not found\"\n    end try\nend tell\ndelay 0.8\n\ntell application \"System Events\"\n    tell process \"Notes\"\n        try\n            click menu item \"Export as PDF…\" of menu \"File\" of menu bar 1\n        on error\n            -- Fallback: try without ellipsis\n            try\n                click menu item \"Export as PDF\" of menu \"File\" of menu bar 1\n            on error e\n                return \"ERR_MENU: \" & e\n            end try\n        end try\n    end tell\nend tell\ndelay 1.5\n\n-- Save sheet is now open. Filename field is auto-focused.\n-- 1) clear current name (Cmd+A in text field selects, then type new)\ntell application \"System Events\"\n    keystroke \"a\" using {command down}\n    delay 0.1\n    keystroke \"$OUT_FILE\"\n    delay 0.3\n    -- 2) Cmd+Shift+G opens Go to: sheet inside the save panel\n    keystroke \"g\" using {command down, shift down}\n    delay 0.5\n    keystroke \"$OUT_DIR\"\n    delay 0.3\n    -- 3) Press return: closes Go-to sheet\n    keystroke return\n    delay 0.5\n    -- 4) Press return again: triggers default Save button\n    keystroke return\n    delay 0.5\nend tell\nAPPLE\n\n# Poll for file creation (up to 8 seconds)\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do\n  if [ -f \"$OUT_PATH\" ]; then\n    SIZE=$(\u002Fusr\u002Fbin\u002Fstat -f %z \"$OUT_PATH\")\n    if [ \"$SIZE\" -gt 1000 ]; then\n      echo \"ok: saved $OUT_PATH ($SIZE bytes)\"\n      exit 0\n    fi\n  fi\n  \u002Fbin\u002Fsleep 0.5\ndone\n\necho \"ERR: PDF not created at $OUT_PATH after 8s\" >&2\nexit 1\n","_",30,"Export a Notes note to a PDF file at an absolute path. Notes\ndoesn't expose Export-as-PDF via AppleScript dictionary; this\nskill drives the File menu + Save sheet via UI scripting.\n\nThe Save sheet is the standard NSSavePanel — we type the filename\ninto the focused field, use Cmd+Shift+G to set the destination\ndirectory, then press Return to commit. The skill does NOT use\nthe Print → Save as PDF route (3+ extra dialog clicks); it uses\nNotes' direct File → Export as PDF... menu.\n\nAfter the save, the skill polls for the file's existence to\nconfirm completion before returning.\n","main","d1b92d10cddb779854af342bea74d0b6c46788e2","skills\u002Fnotes_export_pdf",3,"https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw","https:\u002F\u002Fwww.localkin.app\u002Fkinclaw","https:\u002F\u002Fgithub.com\u002FLocalKinAI","localkin.ai","Faith and Chinese medicine at localkin.ai · the LocalKin agent platform at localkin.dev · open-source tools (kinfer, KinClaw, …) at localkin.app","2026-11-01 12:25:06",{"source":8,"skillName":5,"commands":76,"prompt":86,"zipAvailable":54},[77,80,83],{"tool":78,"command":79},"npx","npx skills add LocalKinAI\u002Fkinclaw --skill notes_export_pdf",{"tool":81,"command":82},"bunx","bunx skills add LocalKinAI\u002Fkinclaw --skill notes_export_pdf",{"tool":84,"command":85},"pnpm","pnpm dlx skills add LocalKinAI\u002Fkinclaw --skill notes_export_pdf","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw\u002Fblob\u002Fmain\u002Fskills\u002Fnotes_export_pdf\u002FSKILL.md",[],[89,120,135,163,174,185],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":102,"publishedAt":43},"01M6CPGNC9S31FTGMV90NZ0EN9","web","Universal web tool — fetches and interacts with web pages through\nreal Chromium (Playwright). Renders JavaScript, follows redirects,\nhandles cookies, bypasses many anti-scrape stubs that block plain\n`web_fetch`. Each call launches a fresh browser, executes the\nrequested flow, closes. ~2-3s cold start; no persistent state.\n\nUse INSTEAD of `web_fetch` when:\n  - Target is a JS-heavy SPA (prices via XHR, lazy content)\n  - `web_fetch` returned an anti-scrape placeholder (Zhihu's\n    \"click here\" stub, JD's chrome-only HTML)\n  - You need to interact (click, fill input) before extracting\n\nCommon patterns:\n  fetch rendered text:           url=X\n  wait for content then read:    url=X wait_for=\".price\"\n  extract specific element:      url=X selector=\".product-list\"\n  click and read result:         url=X click=\".search-button\"\n  fill form, then read:          url=X click=\"input[name=q]\" type_text=\"kinclaw\"\n  fill + Enter (React forms):    url=X click=\"input\" type_text=\"hi\" press_enter=true wait_for=\".reply\"\n  screenshot the page:           url=X screenshot=true (returns image:\u002F\u002F marker)\n  run JS and get result:         url=X js=\"document.title\"\n\nFirst-time setup (one-time per machine, ~500MB Chromium download):\n  pip install playwright\n  playwright install chromium","https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw\u002Fblob\u002Fmain\u002Fskills\u002Fweb\u002FSKILL.md",[95,96,99],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":97,"categoryName":98,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":100,"categoryName":101,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",[91,103,104,105,106,107,108,39,109,110,111,112,26,113,114,115,116,117,118,119],"image","search","forms","files","log","read","wait for","how","scrape","start","run","generate","placeholder","change","react","css","directory",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":43},"01M6CPGJTGF7P8QS3HXPCZE3KV","weather","Current conditions plus a three-day forecast (today \u002F tomorrow \u002F day\nafter) for a place, in metric, from wttr.in. No API key. Use this for\nany weather question — including \"明天\" and \"后天\" — before reaching\nfor web search.","https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw\u002Fblob\u002Fmain\u002Fskills\u002Fweather\u002FSKILL.md",[],[122,104,127,128,129,130,131,132,133,134,91],"three","location","use","question","python3","web search","api","forecast",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":147,"publishedAt":43},"01M6CPGDR0W8FR0WMBBJ2282GM","tts","Synthesize speech from text and play it through the macOS speakers.\nTalks to a local LocalKin Service Audio Server (default :8001 \u002F Kokoro).\nWhen `record` is running with audio=true, the spoken audio is\ncaptured into the recording — use this in place of `shell say` for\nhigh-quality multilingual narration in demo videos. Set the\nTTS_ENDPOINT env var to point at a different server.","https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftts\u002FSKILL.md",[141,144],{"categoryNo":142,"categoryName":143,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":145,"categoryName":146,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[137,148,149,150,151,33,152,153,154,155,36,156,39,157,158,41,159,160,161,162],"next","back","chinese","multilingual","Echo","payload","pick","code","model","Audio","Video","data","server","only","macos",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":43},"01M6CPGAM9K2VN0MVYD4CMC92E","translate","Translate text between languages using the system's translate command","https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftranslate\u002FSKILL.md",[],[165,150,170,171,152,172,39,173],"spanish","language","command","system",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":183,"publishedAt":43},"01M6CPG8DWEY0GWCFDGTTBWA2Q","summarize","Summarize a file's contents into key bullet points","https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw\u002Fblob\u002Fmain\u002Fskills\u002Fsummarize\u002FSKILL.md",[180],{"categoryNo":181,"categoryName":182,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",[176,184],"file",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":192,"publishedAt":43},"01M6CPG48P3AYKRREAGYSGT944","stt","Transcribe an audio file (wav\u002Fmp3\u002Fmp4\u002Fm4a) into text via a local\nLocalKin Service Audio Server (default :8000 \u002F SenseVoice). Pair\nwith `record action=start mic=true` to turn a recorded mic track\ninto text. Set STT_ENDPOINT env var to point at a different server.","https:\u002F\u002Fgithub.com\u002FLocalKinAI\u002Fkinclaw\u002Fblob\u002Fmain\u002Fskills\u002Fstt\u002FSKILL.md",[191],{"categoryNo":142,"categoryName":143,"taxonomyType":20,"taxonomyTypeDesc":21},[187,39,149,193,33,152,194,36,195,196,197,198,157,199,41,112,160,200,155,201],"do","en","pair","just","returns","mp4","endpoint","transcribe","go"]