[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F7C52AS1HM9RG2T5FD2S59":3,"skill-same:01M6F7C52AS1HM9RG2T5FD2S59":79},{"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":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6F7C52AS1HM9RG2T5FD2S59","apple-notes-sdk-patterns",null,"Apply production-ready patterns for Apple Notes JXA\u002FAppleScript automation.\nTrigger: \"apple notes patterns\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapple-notes-sdk-patterns\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"sdk","apple notes sdk patterns","apple","patterns","notes","apple notes","code","saas","Bash","read","write","edit","ready","automation","io","trigger","osascript","apple-notes","jxa","applescript","2026-11-10 10:12:30",false,"---\nname: apple-notes-sdk-patterns\ndescription: |\n  Apply production-ready patterns for Apple Notes JXA\u002FAppleScript automation.\n  Trigger: \"apple notes patterns\".\nallowed-tools: Read, Write, Edit, Bash(osascript:*), Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, macos, apple-notes, automation]\ncompatible-with: claude-code\n---\n\n# Apple Notes SDK Patterns\n\n## Overview\nProduction patterns for Apple Notes automation: JXA wrapper class, error handling, batch operations, and cross-account support.\n\n## Instructions\n\n### Step 1: JXA Client Wrapper (Node.js)\n```typescript\n\u002F\u002F src\u002Fnotes-client.ts\nimport { execSync } from \"child_process\";\n\nclass AppleNotesClient {\n  private runJxa(script: string): string {\n    const escaped = script.replace(\u002F'\u002Fg, \"\\\\'\");\n    return execSync(`osascript -l JavaScript -e '${escaped}'`, {\n      encoding: \"utf8\",\n      timeout: 30000,\n    }).trim();\n  }\n\n  listNotes(folder?: string, limit: number = 50): Array\u003C{ id: string; title: string; modified: string }> {\n    const script = folder\n      ? `const Notes = Application(\"Notes\"); const f = Notes.defaultAccount.folders().find(f => f.name() === \"${folder}\"); (f ? f.notes() : []).slice(0, ${limit}).map(n => JSON.stringify({id: n.id(), title: n.name(), modified: n.modificationDate().toISOString()})).join(\"\\\\n\")`\n      : `const Notes = Application(\"Notes\"); Notes.defaultAccount.notes().slice(0, ${limit}).map(n => JSON.stringify({id: n.id(), title: n.name(), modified: n.modificationDate().toISOString()})).join(\"\\\\n\")`;\n    return this.runJxa(script).split(\"\\n\").filter(Boolean).map(l => JSON.parse(l));\n  }\n\n  createNote(title: string, body: string, folder?: string): string {\n    const folderPart = folder\n      ? `let f = account.folders().find(f => f.name() === \"${folder}\"); if (!f) { f = Notes.Folder({name: \"${folder}\"}); account.folders.push(f); }`\n      : \"let f = account.folders[0];\";\n    return this.runJxa(`\n      const Notes = Application(\"Notes\");\n      const account = Notes.defaultAccount;\n      ${folderPart}\n      const note = Notes.Note({name: ${JSON.stringify(title)}, body: ${JSON.stringify(body)}});\n      f.notes.push(note);\n      note.id();\n    `);\n  }\n\n  searchNotes(query: string): Array\u003C{ title: string; folder: string }> {\n    const result = this.runJxa(`\n      const Notes = Application(\"Notes\");\n      const q = \"${query}\".toLowerCase();\n      Notes.defaultAccount.notes().filter(n =>\n        n.name().toLowerCase().includes(q) || n.body().toLowerCase().includes(q)\n      ).slice(0, 20).map(n => JSON.stringify({title: n.name(), folder: n.container().name()})).join(\"\\\\n\");\n    `);\n    return result.split(\"\\n\").filter(Boolean).map(l => JSON.parse(l));\n  }\n}\n\nexport { AppleNotesClient };\n```\n\n### Step 2: Batch Operations with Throttling\n```typescript\nasync function batchCreateNotes(\n  client: AppleNotesClient,\n  notes: Array\u003C{ title: string; body: string; folder?: string }>,\n  delayMs: number = 500,\n): Promise\u003Cstring[]> {\n  const ids: string[] = [];\n  for (const note of notes) {\n    const id = client.createNote(note.title, note.body, note.folder);\n    ids.push(id);\n    await new Promise(r => setTimeout(r, delayMs));\n  }\n  return ids;\n}\n```\n\n## Output\n- Type-safe JXA client wrapper for Node.js\n- List, create, search operations via osascript\n- Batch operations with throttling\n\n## Resources\n\n- [Mac Automation Scripting Guide](https:\u002F\u002Fdeveloper.apple.com\u002Flibrary\u002Farchive\u002Fdocumentation\u002FLanguagesUtilities\u002FConceptual\u002FMacAutomationScriptingGuide\u002F)\n- [JXA Examples](https:\u002F\u002Fjxa-examples.akjems.com\u002F)\n\n","# Apple Notes SDK Patterns\n\n## Overview\nProduction patterns for Apple Notes automation: JXA wrapper class, error handling, batch operations, and cross-account support.\n\n## Instructions\n\n### Step 1: JXA Client Wrapper (Node.js)\n```typescript\n\u002F\u002F src\u002Fnotes-client.ts\nimport { execSync } from \"child_process\";\n\nclass AppleNotesClient {\n  private runJxa(script: string): string {\n    const escaped = script.replace(\u002F'\u002Fg, \"\\\\'\");\n    return execSync(`osascript -l JavaScript -e '${escaped}'`, {\n      encoding: \"utf8\",\n      timeout: 30000,\n    }).trim();\n  }\n\n  listNotes(folder?: string, limit: number = 50): Array\u003C{ id: string; title: string; modified: string }> {\n    const script = folder\n      ? `const Notes = Application(\"Notes\"); const f = Notes.defaultAccount.folders().find(f => f.name() === \"${folder}\"); (f ? f.notes() : []).slice(0, ${limit}).map(n => JSON.stringify({id: n.id(), title: n.name(), modified: n.modificationDate().toISOString()})).join(\"\\\\n\")`\n      : `const Notes = Application(\"Notes\"); Notes.defaultAccount.notes().slice(0, ${limit}).map(n => JSON.stringify({id: n.id(), title: n.name(), modified: n.modificationDate().toISOString()})).join(\"\\\\n\")`;\n    return this.runJxa(script).split(\"\\n\").filter(Boolean).map(l => JSON.parse(l));\n  }\n\n  createNote(title: string, body: string, folder?: string): string {\n    const folderPart = folder\n      ? `let f = account.folders().find(f => f.name() === \"${folder}\"); if (!f) { f = Notes.Folder({name: \"${folder}\"}); account.folders.push(f); }`\n      : \"let f = account.folders[0];\";\n    return this.runJxa(`\n      const Notes = Application(\"Notes\");\n      const account = Notes.defaultAccount;\n      ${folderPart}\n      const note = Notes.Note({name: ${JSON.stringify(title)}, body: ${JSON.stringify(body)}});\n      f.notes.push(note);\n      note.id();\n    `);\n  }\n\n  searchNotes(query: string): Array\u003C{ title: string; folder: string }> {\n    const result = this.runJxa(`\n      const Notes = Application(\"Notes\");\n      const q = \"${query}\".toLowerCase();\n      Notes.defaultAccount.notes().filter(n =>\n        n.name().toLowerCase().includes(q) || n.body().toLowerCase().includes(q)\n      ).slice(0, 20).map(n => JSON.stringify({title: n.name(), folder: n.container().name()})).join(\"\\\\n\");\n    `);\n    return result.split(\"\\n\").filter(Boolean).map(l => JSON.parse(l));\n  }\n}\n\nexport { AppleNotesClient };\n```\n\n### Step 2: Batch Operations with Throttling\n```typescript\nasync function batchCreateNotes(\n  client: AppleNotesClient,\n  notes: Array\u003C{ title: string; body: string; folder?: string }>,\n  delayMs: number = 500,\n): Promise\u003Cstring[]> {\n  const ids: string[] = [];\n  for (const note of notes) {\n    const id = client.createNote(note.title, note.body, note.folder);\n    ids.push(id);\n    await new Promise(r => setTimeout(r, delayMs));\n  }\n  return ids;\n}\n```\n\n## Output\n- Type-safe JXA client wrapper for Node.js\n- List, create, search operations via osascript\n- Batch operations with throttling\n\n## Resources\n\n- [Mac Automation Scripting Guide](https:\u002F\u002Fdeveloper.apple.com\u002Flibrary\u002Farchive\u002Fdocumentation\u002FLanguagesUtilities\u002FConceptual\u002FMacAutomationScriptingGuide\u002F)\n- [JXA Examples](https:\u002F\u002Fjxa-examples.akjems.com\u002F)\n\n",{"name":5,"tags":49,"author":51,"license":15,"version":52,"description":53,"allowed-tools":54,"compatible-with":55},[31,50,41,37],"macos","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Apply production-ready patterns for Apple Notes JXA\u002FAppleScript automation.\nTrigger: \"apple notes patterns\".\n","Read, Write, Edit, Bash(osascript:*), Grep","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapple-notes-sdk-patterns",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill apple-notes-sdk-patterns",{"tool":71,"command":72},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill apple-notes-sdk-patterns",{"tool":74,"command":75},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill apple-notes-sdk-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapple-notes-sdk-patterns\u002FSKILL.md",true,[],[80,90,100,108,114,121],{"skillNo":81,"name":82,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":86,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[85],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[87,88,89],"model","model hierarchy","model hierarchy skill",{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":96,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[95],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[97,98,99],"MCP","zoom","zoom mcp",{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[24,106,107,98],"zoom apps sdk","apps",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[110],{"skillNo":115,"name":116,"nameZh":6,"description":6,"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":120,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[119],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[116],{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[123]]