[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EFPHE2W6GPA3BRVPXCK1ST":3,"skill-same:01M6EFPHE2W6GPA3BRVPXCK1ST":46},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":28,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M6EFPHE2W6GPA3BRVPXCK1ST","onenote",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fonenote\u002FSKILL.md",[],[18],"OneNote","2026-11-10 10:12:30",false,"# OneNote\n\n## Overview\n\nThis skill helps AI agents integrate with Microsoft OneNote via the Graph API. It covers creating and managing notebooks, sections, and pages, generating rich page content with HTML, extracting text and images, and searching across notes.\n\n## Instructions\n\n### Authentication\n\n```typescript\n\u002F\u002F Same Azure AD app as other Microsoft 365 services\n\u002F\u002F Permissions needed:\n\u002F\u002F   Notes.ReadWrite — read\u002Fwrite user's notebooks\n\u002F\u002F   Notes.ReadWrite.All — access all notebooks (admin)\n\u002F\u002F   Notes.Create — create only\n\nimport { Client } from '@microsoft\u002Fmicrosoft-graph-client';\n\u002F\u002F ... same auth setup as other Graph API skills\n```\n\n### Notebooks & Sections\n\n```typescript\n\u002F\u002F List notebooks\nconst notebooks = await graphClient.api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fnotebooks`)\n  .select('id,displayName,createdDateTime,lastModifiedDateTime')\n  .get();\n\n\u002F\u002F Create notebook\nconst notebook = await graphClient.api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fnotebooks`)\n  .post({ displayName: 'Project Notes' });\n\n\u002F\u002F List sections in a notebook\nconst sections = await graphClient\n  .api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fnotebooks\u002F${notebookId}\u002Fsections`)\n  .select('id,displayName')\n  .get();\n\n\u002F\u002F Create section\nconst section = await graphClient\n  .api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fnotebooks\u002F${notebookId}\u002Fsections`)\n  .post({ displayName: 'Meeting Notes' });\n\n\u002F\u002F Create section group (for organizing sections)\nconst group = await graphClient\n  .api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fnotebooks\u002F${notebookId}\u002FsectionGroups`)\n  .post({ displayName: 'Q1 2026' });\n```\n\n### Create Pages\n\nOneNote pages are created using HTML. The API accepts a subset of HTML with OneNote-specific data attributes.\n\n```typescript\n\u002F\u002F Simple page\nawait graphClient.api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fsections\u002F${sectionId}\u002Fpages`)\n  .header('Content-Type', 'application\u002Fxhtml+xml')\n  .post(`\n    \u003C!DOCTYPE html>\n    \u003Chtml>\n    \u003Chead>\n      \u003Ctitle>Sprint 14 Standup — March 1, 2026\u003C\u002Ftitle>\n      \u003Cmeta name=\"created\" content=\"2026-03-01T09:30:00-05:00\" \u002F>\n    \u003C\u002Fhead>\n    \u003Cbody>\n      \u003Ch1>Sprint 14 Daily Standup\u003C\u002Fh1>\n      \u003Cp>Date: March 1, 2026 | Attendees: Sarah, Mike, Dani\u003C\u002Fp>\n      \n      \u003Ch2>Sarah\u003C\u002Fh2>\n      \u003Cul>\n        \u003Cli>\u003Cb>Yesterday:\u003C\u002Fb> Completed payment retry logic PR #142\u003C\u002Fli>\n        \u003Cli>\u003Cb>Today:\u003C\u002Fb> Start integration tests for retry flow\u003C\u002Fli>\n        \u003Cli>\u003Cb>Blockers:\u003C\u002Fb> None\u003C\u002Fli>\n      \u003C\u002Ful>\n      \n      \u003Ch2>Mike\u003C\u002Fh2>\n      \u003Cul>\n        \u003Cli>\u003Cb>Yesterday:\u003C\u002Fb> Reviewed 3 PRs, fixed CI flakiness\u003C\u002Fli>\n        \u003Cli>\u003Cb>Today:\u003C\u002Fb> Dashboard performance optimization\u003C\u002Fli>\n        \u003Cli>\u003Cb>Blockers:\u003C\u002Fb> Need access to production Datadog\u003C\u002Fli>\n      \u003C\u002Ful>\n      \n      \u003Ch2>Action Items\u003C\u002Fh2>\n      \u003Cul>\n        \u003Cli data-tag=\"to-do\">Grant Mike Datadog access — Sarah\u003C\u002Fli>\n        \u003Cli data-tag=\"to-do\">Schedule sprint demo for Friday — Dani\u003C\u002Fli>\n      \u003C\u002Ful>\n      \n      \u003Ch2>Notes\u003C\u002Fh2>\n      \u003Cp>Sprint velocity tracking at 38 points, capacity is 42. On track for all commitments.\u003C\u002Fp>\n    \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  `);\n\n\u002F\u002F Page with table\nawait graphClient.api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fsections\u002F${sectionId}\u002Fpages`)\n  .header('Content-Type', 'application\u002Fxhtml+xml')\n  .post(`\n    \u003C!DOCTYPE html>\n    \u003Chtml>\n    \u003Chead>\u003Ctitle>Weekly Metrics\u003C\u002Ftitle>\u003C\u002Fhead>\n    \u003Cbody>\n      \u003Ch1>Weekly Metrics — Feb 24-28, 2026\u003C\u002Fh1>\n      \u003Ctable border=\"1\">\n        \u003Ctr>\u003Cth>Metric\u003C\u002Fth>\u003Cth>Value\u003C\u002Fth>\u003Cth>Target\u003C\u002Fth>\u003Cth>Status\u003C\u002Fth>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>Revenue\u003C\u002Ftd>\u003Ctd>$98,200\u003C\u002Ftd>\u003Ctd>$90,000\u003C\u002Ftd>\u003Ctd>✅ Above\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>Sign-ups\u003C\u002Ftd>\u003Ctd>142\u003C\u002Ftd>\u003Ctd>150\u003C\u002Ftd>\u003Ctd>⚠️ Below\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>Churn\u003C\u002Ftd>\u003Ctd>0.4%\u003C\u002Ftd>\u003Ctd>0.5%\u003C\u002Ftd>\u003Ctd>✅ Below\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>NPS\u003C\u002Ftd>\u003Ctd>72\u003C\u002Ftd>\u003Ctd>65\u003C\u002Ftd>\u003Ctd>✅ Above\u003C\u002Ftd>\u003C\u002Ftr>\n      \u003C\u002Ftable>\n    \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  `);\n\n\u002F\u002F Page with image from URL\nawait graphClient.api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fsections\u002F${sectionId}\u002Fpages`)\n  .header('Content-Type', 'application\u002Fxhtml+xml')\n  .post(`\n    \u003C!DOCTYPE html>\n    \u003Chtml>\n    \u003Chead>\u003Ctitle>Architecture Diagram\u003C\u002Ftitle>\u003C\u002Fhead>\n    \u003Cbody>\n      \u003Ch1>System Architecture — v2\u003C\u002Fh1>\n      \u003Cimg src=\"https:\u002F\u002Fexample.com\u002Farchitecture-diagram.png\" alt=\"Architecture diagram\" \u002F>\n      \u003Cp>Updated March 2026. Changes: added Redis cache layer, split API gateway.\u003C\u002Fp>\n    \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  `);\n```\n\n#### OneNote HTML Tags Reference\n\nKey `data-tag` values: `to-do`, `important`, `question`, `remember-for-later`, `definition`, `highlight`, `contact`, `idea`, `critical`, `project-a`, `project-b`. Use `\u003Cmeta name=\"created\" content=\"2026-03-01T09:00:00-05:00\" \u002F>` for timestamps. Standard `\u003Cul>` nesting creates indented outlines.\n\n### Read Pages\n\n```typescript\n\u002F\u002F List pages in a section\nconst pages = await graphClient\n  .api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fsections\u002F${sectionId}\u002Fpages`)\n  .select('id,title,createdDateTime,lastModifiedDateTime')\n  .orderby('lastModifiedDateTime DESC')\n  .top(50)\n  .get();\n\n\u002F\u002F Get page content (returns HTML)\nconst pageContent = await graphClient\n  .api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fpages\u002F${pageId}\u002Fcontent`)\n  .get();\n\u002F\u002F Returns full HTML of the page\n\n\u002F\u002F Get page metadata\nconst pageMeta = await graphClient\n  .api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fpages\u002F${pageId}`)\n  .select('id,title,createdDateTime,lastModifiedDateTime,contentUrl')\n  .get();\n```\n\n### Update Pages\n\n```typescript\n\u002F\u002F Append content to existing page\nawait graphClient.api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fpages\u002F${pageId}\u002Fcontent`)\n  .patch([\n    {\n      target: 'body',\n      action: 'append',\n      position: 'after',\n      content: '\u003Ch2>Update — March 2\u003C\u002Fh2>\u003Cp>Sprint demo completed successfully. All 3 features demoed.\u003C\u002Fp>',\n    },\n  ]);\n\n\u002F\u002F Replace specific element\nawait graphClient.api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fpages\u002F${pageId}\u002Fcontent`)\n  .patch([\n    {\n      target: '#status-section', \u002F\u002F Element with data-id=\"status-section\"\n      action: 'replace',\n      content: '\u003Cp data-id=\"status-section\">Status: \u003Cb>Complete\u003C\u002Fb> ✅\u003C\u002Fp>',\n    },\n  ]);\n\n\u002F\u002F Prepend content\nawait graphClient.api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fpages\u002F${pageId}\u002Fcontent`)\n  .patch([\n    {\n      target: 'body',\n      action: 'prepend',\n      content: '\u003Cp style=\"color:red;\">\u003Cb>⚠️ UPDATED: See new figures below\u003C\u002Fb>\u003C\u002Fp>',\n    },\n  ]);\n```\n\n### Search\n\n```typescript\n\u002F\u002F Search across all OneNote content\nconst results = await graphClient\n  .api(`\u002Fusers\u002F${userId}\u002Fonenote\u002Fpages`)\n  .filter(\"contains(title, 'standup')\")\n  .select('id,title,createdDateTime,parentSection')\n  .expand('parentSection($select=displayName)')\n  .orderby('lastModifiedDateTime DESC')\n  .get();\n\n\u002F\u002F Full-text search via Microsoft Search API\nconst searchResults = await graphClient.api('\u002Fsearch\u002Fquery')\n  .post({\n    requests: [{\n      entityTypes: ['driveItem'],\n      query: { queryString: 'filetype:one AND \"sprint planning\"' },\n      size: 20,\n    }],\n  });\n```\n\n### Common Patterns\n\n## Examples\n\n### Example 1: Create structured meeting notes in OneNote\n**User prompt:** \"Create a OneNote page in my Engineering notebook's Sprint section for today's sprint retrospective. Attendees are Marcus, Jenna, and Priya. We discussed what went well with the payment migration and what to improve in CI pipeline times.\"\n\nThe agent will use the Graph API to first look up the notebook named \"Engineering\" via `GET \u002Fonenote\u002Fnotebooks?$filter=displayName eq 'Engineering'`, find the \"Sprint\" section, then create a new page via `POST \u002Fonenote\u002Fsections\u002F{sectionId}\u002Fpages` with XHTML content. The page HTML includes a `\u003Ctitle>Sprint 14 Retrospective — February 18, 2026\u003C\u002Ftitle>`, a `\u003Cmeta name=\"created\">` timestamp, an `\u003Ch1>` header, attendee list, an `\u003Ch2>What Went Well\u003C\u002Fh2>` section with bullet points about the payment migration completing 2 days ahead of schedule, an `\u003Ch2>What to Improve\u003C\u002Fh2>` section noting CI pipeline averaging 18 minutes (target: under 10), and an `\u003Ch2>Action Items\u003C\u002Fh2>` with `data-tag=\"to-do\"` items like \"Marcus: investigate parallel test execution to cut CI time\" and \"Priya: document payment migration rollback procedure.\"\n\n### Example 2: Search OneNote and append updates to an existing page\n**User prompt:** \"Find my OneNote page titled 'Q1 OKR Tracker' and append a progress update for the 'reduce churn' objective — we hit 2.1% churn this month, down from 2.8% in January.\"\n\nThe agent will search for the page using `GET \u002Fonenote\u002Fpages?$filter=contains(title, 'Q1 OKR Tracker')&$select=id,title,parentSection`, retrieve the page ID, then call `PATCH \u002Fonenote\u002Fpages\u002F{pageId}\u002Fcontent` with a JSON body targeting `body` with action `append` and position `after`. The appended HTML content is `\u003Ch2>Update — February 18, 2026\u003C\u002Fh2>\u003Cp>\u003Cb>Reduce Churn Objective:\u003C\u002Fb> Monthly churn dropped to 2.1%, down from 2.8% in January. On track to hit Q1 target of 1.8%.\u003C\u002Fp>\u003Cp data-tag=\"important\">Key driver: improved onboarding flow launched Feb 3 reduced 30-day churn by 25%.\u003C\u002Fp>`.\n\n## Guidelines\n\n- Pages are created with HTML — use valid XHTML (close all tags, quote attributes)\n- OneNote API supports a subset of HTML — stick to basic tags (h1-h6, p, ul, ol, table, img, b, i)\n- Use `data-tag` attributes for to-do items, important notes, etc. — renders as OneNote tags\n- Set `\u003Ctitle>` in HTML head — it becomes the page title in OneNote\n- Use `\u003Cmeta name=\"created\">` to set custom creation timestamps\n- Page updates use PATCH with target\u002Faction arrays — not full HTML replacement\n- Images can be inline (base64 in multipart request) or URL references\n- Search works on page titles via `$filter`; for full-text, use Microsoft Search API\n- Rate limits: same as other Graph API resources (10,000 per 10 min)\n- OneNote pages are stored in OneDrive — large notebooks count against storage quota\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fonenote",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":7,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill onenote",{"tool":38,"command":39},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill onenote",{"tool":41,"command":42},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill onenote","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fonenote\u002FSKILL.md",true,[],[47,61,71,80,86,93],{"skillNo":48,"name":49,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":57,"publishedAt":19},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[52],{"categoryNo":53,"categoryName":54,"taxonomyType":55,"taxonomyTypeDesc":56},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[58,59,60],"model","model hierarchy","model hierarchy skill",{"skillNo":62,"name":63,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":67,"publishedAt":19},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[66],{"categoryNo":53,"categoryName":54,"taxonomyType":55,"taxonomyTypeDesc":56},[68,69,70],"MCP","zoom","zoom mcp",{"skillNo":72,"name":73,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[77,78,79,69],"sdk","zoom apps sdk","apps",{"skillNo":81,"name":82,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[82],{"skillNo":87,"name":88,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":92,"publishedAt":19},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[91],{"categoryNo":53,"categoryName":54,"taxonomyType":55,"taxonomyTypeDesc":56},[88],{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":19},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[95]]