[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DCJTYGS7PMBJ8C52EGNBNA":3,"skill-same:01M6DCJTYGS7PMBJ8C52EGNBNA":87},{"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":28,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":65,"commitSha":66,"skillDirectory":67,"forksCount":68,"repositoryHtmlUrl":69,"repositoryHomepageUrl":6,"ownerHtmlUrl":70,"ownerBlogUrl":6,"ownerDescription":71,"updatedAt":72,"install":73,"resources":86},"01M6DCJTYGS7PMBJ8C52EGNBNA","notion",null,"Notion API + ntn CLI: pages, databases, markdown, Workers.","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\u002F15\u002F15da99368e2abb6d971dbb5250872015778c9ceb652d5761caa07adf43353f72\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"macos","cli","linux","windows","notes","database","https","productivity","api","markdown","databases","workers","community","notion api","pages","2026-11-10 10:12:30",false,"---\r\nname: notion\r\ndescription: \"Notion API + ntn CLI: pages, databases, markdown, Workers.\"\r\nversion: 2.0.0\r\nauthor: community\r\nlicense: MIT\r\nplatforms: [linux, macos, windows]\r\nprerequisites:\r\n  env_vars: [NOTION_API_KEY]\r\nmetadata:\r\n  hermes:\r\n    tags: [Notion, Productivity, Notes, Database, API, CLI, Workers]\r\n    homepage: https:\u002F\u002Fdevelopers.notion.com\r\n---\r\n\r\n# Notion\r\n\r\nTalk to Notion two ways. Same integration token works for both — pick by what's available.\r\n\r\n◆ **`ntn` CLI** — Notion's official CLI. Shorter syntax, one-line file uploads, required for Workers. macOS + Linux only as of May 2026 (Windows support \"coming soon\"). **Default when installed.**\r\n◆ **HTTP + curl** — works everywhere including Windows. **Default fallback** when `ntn` isn't installed.\r\n\r\n## Setup\r\n\r\n### 1. Get an integration token (required for both paths)\r\n\r\n1. Create an integration at https:\u002F\u002Fnotion.so\u002Fmy-integrations\r\n2. Copy the API key (starts with `ntn_` or `secret_`)\r\n3. Store in `~\u002F.hermes\u002F.env`:\r\n   ```\r\n   NOTION_API_KEY=[REDACTED]\r\n   ```\r\n4. **Share target pages\u002Fdatabases with the integration** in Notion: page menu `...` → `Connect to` → your integration name. Without this, the API returns 404 for that page even though it exists.\r\n\r\n### 2. Install `ntn` (preferred path on macOS \u002F Linux)\r\n\r\n```bash\r\n# Recommended\r\ncurl -fsSL https:\u002F\u002Fntn.dev | bash\r\n\r\n# Or via npm (needs Node 22+, npm 10+)\r\nnpm install --global ntn\r\n\r\nntn --version    # verify\r\n```\r\n\r\n**Skip `ntn login` — use the integration token instead.** This works headlessly, no browser needed:\r\n```bash\r\nexport NOTION_API_TOKEN=$NOTION_API_KEY      # ntn reads NOTION_API_TOKEN\r\nexport NOTION_KEYRING=0                       # don't try to use the OS keychain\r\n```\r\n\r\nAdd those exports to your shell profile (or to `~\u002F.hermes\u002F.env`) so every session inherits them.\r\n\r\n### 3. Choose path at runtime\r\n\r\n```bash\r\nif command -v ntn >\u002Fdev\u002Fnull 2>&1; then\r\n  # use ntn\r\nelse\r\n  # fall back to curl\r\nfi\r\n```\r\n\r\nWindows users: skip step 2 entirely until native `ntn` ships — Path B works fine. If you want CLI ergonomics now, install `ntn` inside WSL2.\r\n\r\n## API Basics\r\n\r\n`Notion-Version: 2025-09-03` is required on all HTTP requests. `ntn` handles this for you. In this version, what users call \"databases\" are called **data sources** in the API.\r\n\r\n## Path A — `ntn` CLI (preferred, macOS \u002F Linux)\r\n\r\n### Raw API calls (shorthand for curl)\r\n```bash\r\nntn api v1\u002Fusers                                  # GET\r\nntn api v1\u002Fpages parent[page_id]=abc123 \\         # POST with inline body\r\n  properties[title][0][text][content]=\"Notes\"\r\nntn api v1\u002Fpages\u002Fabc123 -X PATCH archived:=true   # PATCH; := is non-string (bool\u002Fnum\u002Fnull)\r\n```\r\n\r\nSyntax notes:\r\n- `key=value` — string fields\r\n- `key[nested]=value` — nested object fields\r\n- `key:=value` — typed assignment (booleans, numbers, null, arrays)\r\n\r\n### Search\r\n```bash\r\nntn api v1\u002Fsearch query=\"page title\"\r\n```\r\n\r\n### Read page metadata\r\n```bash\r\nntn api v1\u002Fpages\u002F{page_id}\r\n```\r\n\r\n### Read page as Markdown (agent-friendly)\r\n```bash\r\nntn api v1\u002Fpages\u002F{page_id}\u002Fmarkdown\r\n```\r\n\r\n### Read page content as blocks\r\n```bash\r\nntn api v1\u002Fblocks\u002F{page_id}\u002Fchildren\r\n```\r\n\r\n### Create page from Markdown\r\n```bash\r\nntn api v1\u002Fpages \\\r\n  parent[page_id]=xxx \\\r\n  properties[title][0][text][content]=\"Notes from meeting\" \\\r\n  markdown=\"# Agenda\r\n\r\n- Q3 roadmap\r\n- Hiring\"\r\n```\r\n\r\n### Patch a page with Markdown\r\n```bash\r\nntn api v1\u002Fpages\u002F{page_id}\u002Fmarkdown -X PATCH \\\r\n  markdown=\"## Update\r\n\r\nShipped the prototype.\"\r\n```\r\n\r\n### Query a database (data source)\r\n```bash\r\nntn api v1\u002Fdata_sources\u002F{data_source_id}\u002Fquery -X POST \\\r\n  filter[property]=Status filter[select][equals]=Active\r\n```\r\n\r\nFor complex queries with `sorts`, multiple filter clauses, or compound logic, pipe JSON in:\r\n```bash\r\necho '{\"filter\": {\"property\": \"Status\", \"select\": {\"equals\": \"Active\"}}, \"sorts\": [{\"property\": \"Date\", \"direction\": \"descending\"}]}' | \\\r\n  ntn api v1\u002Fdata_sources\u002F{data_source_id}\u002Fquery -X POST --json -\r\n```\r\n\r\n### File uploads (one-liner — biggest CLI win)\r\n```bash\r\nntn files create \u003C photo.png\r\nntn files create --external-url https:\u002F\u002Fexample.com\u002Fphoto.png\r\nntn files list\r\n```\r\n\r\nCompare to the 3-step HTTP flow (create upload → PUT bytes → reference).\r\n\r\n### Useful env vars\r\n| Var | Effect |\r\n|---|---|\r\n| `NOTION_API_TOKEN` | Auth token (overrides keychain) — set this to your integration token |\r\n| `NOTION_KEYRING=0` | File-based creds at `~\u002F.config\u002Fnotion\u002Fauth.json` instead of OS keychain |\r\n| `NOTION_WORKSPACE_ID` | Skip the workspace picker prompt |\r\n\r\n## Path B — HTTP + curl (cross-platform, default on Windows)\r\n\r\nAll requests share this pattern:\r\n\r\n```bash\r\ncurl -s -X GET \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002F...\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\"\r\n```\r\n\r\nOn Windows the `curl` shipped with Windows 10+ works as-is. PowerShell users can also use `Invoke-RestMethod`.\r\n\r\n### Search\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fsearch\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"query\": \"page title\"}'\r\n```\r\n\r\n### Read page metadata\r\n```bash\r\ncurl -s \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\u002F{page_id}\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\"\r\n```\r\n\r\n### Read page as Markdown (agent-friendly)\r\n\r\nEasier to feed to a model than block JSON.\r\n\r\n```bash\r\ncurl -s \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\u002F{page_id}\u002Fmarkdown\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\"\r\n```\r\n\r\n### Read page content as blocks (when you need structure)\r\n```bash\r\ncurl -s \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fblocks\u002F{page_id}\u002Fchildren\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\"\r\n```\r\n\r\n### Create page from Markdown\r\n\r\n`POST \u002Fv1\u002Fpages` accepts a `markdown` body param.\r\n\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"parent\": {\"page_id\": \"xxx\"},\r\n    \"properties\": {\"title\": [{\"text\": {\"content\": \"Notes from meeting\"}}]},\r\n    \"markdown\": \"# Agenda\\n\\n- Q3 roadmap\\n- Hiring\\n\\n## Decisions\\n- Ship MVP Friday\"\r\n  }'\r\n```\r\n\r\n### Patch a page with Markdown\r\n```bash\r\ncurl -s -X PATCH \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\u002F{page_id}\u002Fmarkdown\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"markdown\": \"## Update\\n\\nShipped the prototype.\"}'\r\n```\r\n\r\n### Create page in a database (typed properties)\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"parent\": {\"database_id\": \"xxx\"},\r\n    \"properties\": {\r\n      \"Name\": {\"title\": [{\"text\": {\"content\": \"New Item\"}}]},\r\n      \"Status\": {\"select\": {\"name\": \"Todo\"}}\r\n    }\r\n  }'\r\n```\r\n\r\n### Query a database (data source)\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fdata_sources\u002F{data_source_id}\u002Fquery\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"filter\": {\"property\": \"Status\", \"select\": {\"equals\": \"Active\"}},\r\n    \"sorts\": [{\"property\": \"Date\", \"direction\": \"descending\"}]\r\n  }'\r\n```\r\n\r\n### Create a database\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fdata_sources\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"parent\": {\"page_id\": \"xxx\"},\r\n    \"title\": [{\"text\": {\"content\": \"My Database\"}}],\r\n    \"properties\": {\r\n      \"Name\": {\"title\": {}},\r\n      \"Status\": {\"select\": {\"options\": [{\"name\": \"Todo\"}, {\"name\": \"Done\"}]}},\r\n      \"Date\": {\"date\": {}}\r\n    }\r\n  }'\r\n```\r\n\r\n### Update page properties\r\n```bash\r\ncurl -s -X PATCH \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\u002F{page_id}\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"properties\": {\"Status\": {\"select\": {\"name\": \"Done\"}}}}'\r\n```\r\n\r\n### Append blocks to a page\r\n```bash\r\ncurl -s -X PATCH \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fblocks\u002F{page_id}\u002Fchildren\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"children\": [\r\n      {\"object\": \"block\", \"type\": \"paragraph\", \"paragraph\": {\"rich_text\": [{\"text\": {\"content\": \"Hello from Hermes!\"}}]}}\r\n    ]\r\n  }'\r\n```\r\n\r\n### File uploads (3-step flow)\r\n```bash\r\n# 1. Create upload\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Ffile_uploads\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"filename\": \"photo.png\", \"content_type\": \"image\u002Fpng\"}'\r\n\r\n# 2. PUT bytes to the upload_url returned above\r\ncurl -s -X PUT \"{upload_url}\" --data-binary @photo.png\r\n\r\n# 3. Reference {file_upload_id} in a page\u002Fblock payload\r\n```\r\n\r\n## Property Types\r\n\r\nCommon property formats for database items:\r\n\r\n- **Title:** `{\"title\": [{\"text\": {\"content\": \"...\"}}]}`\r\n- **Rich text:** `{\"rich_text\": [{\"text\": {\"content\": \"...\"}}]}`\r\n- **Select:** `{\"select\": {\"name\": \"Option\"}}`\r\n- **Multi-select:** `{\"multi_select\": [{\"name\": \"A\"}, {\"name\": \"B\"}]}`\r\n- **Date:** `{\"date\": {\"start\": \"2026-01-15\", \"end\": \"2026-01-16\"}}`\r\n- **Checkbox:** `{\"checkbox\": true}`\r\n- **Number:** `{\"number\": 42}`\r\n- **URL:** `{\"url\": \"https:\u002F\u002F...\"}`\r\n- **Email:** `{\"email\": \"user@example.com\"}`\r\n- **Relation:** `{\"relation\": [{\"id\": \"page_id\"}]}`\r\n\r\n## API Version 2025-09-03 — Databases vs Data Sources\r\n\r\n- **Databases became data sources.** Use `\u002Fdata_sources\u002F` endpoints for queries and retrieval.\r\n- **Two IDs per database:** `database_id` and `data_source_id`.\r\n  - `database_id` when creating pages: `parent: {\"database_id\": \"...\"}`\r\n  - `data_source_id` when querying: `POST \u002Fv1\u002Fdata_sources\u002F{id}\u002Fquery`\r\n- Search returns databases as `\"object\": \"data_source\"` with the `data_source_id` field.\r\n\r\n## Notion Workers (advanced, requires `ntn`)\r\n\r\nWorkers are TypeScript programs Notion hosts for you. One worker can expose any combination of:\r\n- **Syncs** — pull data from external APIs into a Notion database on a schedule (default 30 min).\r\n- **Tools** — appear as callable tools inside Notion's Custom Agents.\r\n- **Webhooks** — receive HTTP events from external services (GitHub, Stripe, etc.) and act in Notion.\r\n\r\n**Plan \u002F platform gating:**\r\n- CLI works on all plans. **Deploying Workers requires Business or Enterprise.**\r\n- `ntn` is macOS\u002FLinux only as of May 2026. Windows users need WSL2 or to wait for native support.\r\n- Free through August 11, 2026; metered on Notion credits after.\r\n\r\n### Minimal Worker\r\n\r\n```bash\r\nntn workers new my-worker      # scaffold\r\ncd my-worker\r\n# Edit src\u002Findex.ts\r\nntn workers deploy --name my-worker\r\n```\r\n\r\n`src\u002Findex.ts`:\r\n```typescript\r\nimport { Worker } from \"@notionhq\u002Fworkers\";\r\n\r\nconst worker = new Worker();\r\nexport default worker;\r\n\r\nworker.tool(\"greet\", {\r\n  title: \"Greet a User\",\r\n  description: \"Returns a friendly greeting\",\r\n  inputSchema: { type: \"object\", properties: { name: { type: \"string\" } }, required: [\"name\"] },\r\n  execute: async ({ name }) => `Hello, ${name}!`,\r\n});\r\n```\r\n\r\n### Webhook capability\r\n\r\n```typescript\r\nworker.webhook(\"onGithubPush\", {\r\n  title: \"GitHub Push Handler\",\r\n  execute: async (events, { notion }) => {\r\n    for (const event of events) {\r\n      \u002F\u002F event.body, event.rawBody (for signature verification), event.headers\r\n      console.log(\"got delivery\", event.deliveryId);\r\n    }\r\n  },\r\n});\r\n```\r\n\r\nAfter deploy: `ntn workers webhooks list` shows the URL Notion generates. Treat that URL as a secret — anyone with it can POST events unless you add signature verification.\r\n\r\n### Worker lifecycle commands\r\n\r\n```bash\r\nntn workers deploy\r\nntn workers list\r\nntn workers exec \u003Ccapability-key> -d '{\"name\": \"world\"}'\r\nntn workers sync trigger \u003Ckey>            # run a sync now\r\nntn workers sync pause \u003Ckey>\r\nntn workers env set GITHUB_WEBHOOK_SECRET=...\r\nntn workers runs list                     # recent invocations\r\nntn workers runs logs \u003Crun-id>\r\nntn workers webhooks list\r\n```\r\n\r\nWhen asked to build a Worker, scaffold with `ntn workers new`, write the code in `src\u002Findex.ts`, set any secrets with `ntn workers env set`, and deploy. Notion's docs at https:\u002F\u002Fdevelopers.notion.com\u002Fworkers cover the full API surface.\r\n\r\n## Notion-Flavored Markdown (used by `\u002Fmarkdown` endpoints)\r\n\r\nStandard CommonMark plus XML-like tags for Notion-specific blocks. Use **tabs** for indentation.\r\n\r\n**Blocks beyond CommonMark:**\r\n```\r\n\u003Ccallout icon=\"?\" color=\"blue_bg\">\r\n\tShip the MVP by **Friday**.\r\n\u003C\u002Fcallout>\r\n\r\n\u003Cdetails color=\"gray\">\r\n\u003Csummary>Toggle title\u003C\u002Fsummary>\r\n\tChildren indented one tab\r\n\u003C\u002Fdetails>\r\n\r\n\u003Ccolumns>\r\n\t\u003Ccolumn>Left side\u003C\u002Fcolumn>\r\n\t\u003Ccolumn>Right side\u003C\u002Fcolumn>\r\n\u003C\u002Fcolumns>\r\n\r\n\u003Ctable_of_contents color=\"gray\"\u002F>\r\n```\r\n\r\n**Inline:**\r\n- Mentions: `\u003Cmention-user url=\"...\"\u002F>`, `\u003Cmention-page url=\"...\">Title\u003C\u002Fmention-page>`, `\u003Cmention-date start=\"2026-05-15\"\u002F>`\r\n- Underline: `\u003Cspan underline=\"true\">text\u003C\u002Fspan>`\r\n- Color: `\u003Cspan color=\"blue\">text\u003C\u002Fspan>` or block-level `{color=\"blue\"}` on the first line\r\n- Math: inline `$x^2$`, block `$$ ... $$`\r\n- Citations: `[^https:\u002F\u002Fexample.com]`\r\n\r\n**Colors:** `gray brown orange yellow green blue purple pink red`, plus `*_bg` variants for backgrounds.\r\n\r\nHeadings 5\u002F6 collapse to H4. Multiple `>` lines render as separate quote blocks — use `\u003Cbr>` inside a single `>` for multi-line quotes.\r\n\r\n## Choosing the Right Path\r\n\r\n| Task | mac \u002F Linux | Windows |\r\n|---|---|---|\r\n| Read\u002Fwrite pages, search, query databases | `ntn api ...` | curl |\r\n| Read a page for an agent to summarize | `ntn api v1\u002Fpages\u002F{id}\u002Fmarkdown` | curl `\u002Fmarkdown` endpoint |\r\n| Upload a file | `ntn files create \u003C file` | 3-step HTTP flow |\r\n| One-off API exploration | `ntn api ...` | curl |\r\n| Build a sync \u002F webhook \u002F agent tool hosted by Notion | `ntn workers ...` | WSL2 + `ntn workers ...` |\r\n\r\n## Notes\r\n\r\n- Page\u002Fdatabase IDs are UUIDs (with or without dashes — both accepted).\r\n- Rate limit: ~3 requests\u002Fsecond average. The CLI doesn't bypass this.\r\n- The API cannot set database **view** filters — that's UI-only.\r\n- Use `\"is_inline\": true` when creating data sources to embed them in a page.\r\n- Always pass `-s` to curl to suppress progress bars (cleaner agent output).\r\n- Pipe JSON through `jq` when reading: `... | jq '.results[0].properties'`.\r\n- Notion also ships an MCP server now (`Notion MCP`, ~91% more token-efficient on DB ops than the previous version) — wire it via Hermes' MCP support if you want streaming Notion access from inside a session, but the paths above are enough for most one-shot tasks.\r\n","# Notion\r\n\r\nTalk to Notion two ways. Same integration token works for both — pick by what's available.\r\n\r\n◆ **`ntn` CLI** — Notion's official CLI. Shorter syntax, one-line file uploads, required for Workers. macOS + Linux only as of May 2026 (Windows support \"coming soon\"). **Default when installed.**\r\n◆ **HTTP + curl** — works everywhere including Windows. **Default fallback** when `ntn` isn't installed.\r\n\r\n## Setup\r\n\r\n### 1. Get an integration token (required for both paths)\r\n\r\n1. Create an integration at https:\u002F\u002Fnotion.so\u002Fmy-integrations\r\n2. Copy the API key (starts with `ntn_` or `secret_`)\r\n3. Store in `~\u002F.hermes\u002F.env`:\r\n   ```\r\n   NOTION_API_KEY=[REDACTED]\r\n   ```\r\n4. **Share target pages\u002Fdatabases with the integration** in Notion: page menu `...` → `Connect to` → your integration name. Without this, the API returns 404 for that page even though it exists.\r\n\r\n### 2. Install `ntn` (preferred path on macOS \u002F Linux)\r\n\r\n```bash\r\n# Recommended\r\ncurl -fsSL https:\u002F\u002Fntn.dev | bash\r\n\r\n# Or via npm (needs Node 22+, npm 10+)\r\nnpm install --global ntn\r\n\r\nntn --version    # verify\r\n```\r\n\r\n**Skip `ntn login` — use the integration token instead.** This works headlessly, no browser needed:\r\n```bash\r\nexport NOTION_API_TOKEN=$NOTION_API_KEY      # ntn reads NOTION_API_TOKEN\r\nexport NOTION_KEYRING=0                       # don't try to use the OS keychain\r\n```\r\n\r\nAdd those exports to your shell profile (or to `~\u002F.hermes\u002F.env`) so every session inherits them.\r\n\r\n### 3. Choose path at runtime\r\n\r\n```bash\r\nif command -v ntn >\u002Fdev\u002Fnull 2>&1; then\r\n  # use ntn\r\nelse\r\n  # fall back to curl\r\nfi\r\n```\r\n\r\nWindows users: skip step 2 entirely until native `ntn` ships — Path B works fine. If you want CLI ergonomics now, install `ntn` inside WSL2.\r\n\r\n## API Basics\r\n\r\n`Notion-Version: 2025-09-03` is required on all HTTP requests. `ntn` handles this for you. In this version, what users call \"databases\" are called **data sources** in the API.\r\n\r\n## Path A — `ntn` CLI (preferred, macOS \u002F Linux)\r\n\r\n### Raw API calls (shorthand for curl)\r\n```bash\r\nntn api v1\u002Fusers                                  # GET\r\nntn api v1\u002Fpages parent[page_id]=abc123 \\         # POST with inline body\r\n  properties[title][0][text][content]=\"Notes\"\r\nntn api v1\u002Fpages\u002Fabc123 -X PATCH archived:=true   # PATCH; := is non-string (bool\u002Fnum\u002Fnull)\r\n```\r\n\r\nSyntax notes:\r\n- `key=value` — string fields\r\n- `key[nested]=value` — nested object fields\r\n- `key:=value` — typed assignment (booleans, numbers, null, arrays)\r\n\r\n### Search\r\n```bash\r\nntn api v1\u002Fsearch query=\"page title\"\r\n```\r\n\r\n### Read page metadata\r\n```bash\r\nntn api v1\u002Fpages\u002F{page_id}\r\n```\r\n\r\n### Read page as Markdown (agent-friendly)\r\n```bash\r\nntn api v1\u002Fpages\u002F{page_id}\u002Fmarkdown\r\n```\r\n\r\n### Read page content as blocks\r\n```bash\r\nntn api v1\u002Fblocks\u002F{page_id}\u002Fchildren\r\n```\r\n\r\n### Create page from Markdown\r\n```bash\r\nntn api v1\u002Fpages \\\r\n  parent[page_id]=xxx \\\r\n  properties[title][0][text][content]=\"Notes from meeting\" \\\r\n  markdown=\"# Agenda\r\n\r\n- Q3 roadmap\r\n- Hiring\"\r\n```\r\n\r\n### Patch a page with Markdown\r\n```bash\r\nntn api v1\u002Fpages\u002F{page_id}\u002Fmarkdown -X PATCH \\\r\n  markdown=\"## Update\r\n\r\nShipped the prototype.\"\r\n```\r\n\r\n### Query a database (data source)\r\n```bash\r\nntn api v1\u002Fdata_sources\u002F{data_source_id}\u002Fquery -X POST \\\r\n  filter[property]=Status filter[select][equals]=Active\r\n```\r\n\r\nFor complex queries with `sorts`, multiple filter clauses, or compound logic, pipe JSON in:\r\n```bash\r\necho '{\"filter\": {\"property\": \"Status\", \"select\": {\"equals\": \"Active\"}}, \"sorts\": [{\"property\": \"Date\", \"direction\": \"descending\"}]}' | \\\r\n  ntn api v1\u002Fdata_sources\u002F{data_source_id}\u002Fquery -X POST --json -\r\n```\r\n\r\n### File uploads (one-liner — biggest CLI win)\r\n```bash\r\nntn files create \u003C photo.png\r\nntn files create --external-url https:\u002F\u002Fexample.com\u002Fphoto.png\r\nntn files list\r\n```\r\n\r\nCompare to the 3-step HTTP flow (create upload → PUT bytes → reference).\r\n\r\n### Useful env vars\r\n| Var | Effect |\r\n|---|---|\r\n| `NOTION_API_TOKEN` | Auth token (overrides keychain) — set this to your integration token |\r\n| `NOTION_KEYRING=0` | File-based creds at `~\u002F.config\u002Fnotion\u002Fauth.json` instead of OS keychain |\r\n| `NOTION_WORKSPACE_ID` | Skip the workspace picker prompt |\r\n\r\n## Path B — HTTP + curl (cross-platform, default on Windows)\r\n\r\nAll requests share this pattern:\r\n\r\n```bash\r\ncurl -s -X GET \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002F...\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\"\r\n```\r\n\r\nOn Windows the `curl` shipped with Windows 10+ works as-is. PowerShell users can also use `Invoke-RestMethod`.\r\n\r\n### Search\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fsearch\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"query\": \"page title\"}'\r\n```\r\n\r\n### Read page metadata\r\n```bash\r\ncurl -s \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\u002F{page_id}\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\"\r\n```\r\n\r\n### Read page as Markdown (agent-friendly)\r\n\r\nEasier to feed to a model than block JSON.\r\n\r\n```bash\r\ncurl -s \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\u002F{page_id}\u002Fmarkdown\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\"\r\n```\r\n\r\n### Read page content as blocks (when you need structure)\r\n```bash\r\ncurl -s \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fblocks\u002F{page_id}\u002Fchildren\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\"\r\n```\r\n\r\n### Create page from Markdown\r\n\r\n`POST \u002Fv1\u002Fpages` accepts a `markdown` body param.\r\n\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"parent\": {\"page_id\": \"xxx\"},\r\n    \"properties\": {\"title\": [{\"text\": {\"content\": \"Notes from meeting\"}}]},\r\n    \"markdown\": \"# Agenda\\n\\n- Q3 roadmap\\n- Hiring\\n\\n## Decisions\\n- Ship MVP Friday\"\r\n  }'\r\n```\r\n\r\n### Patch a page with Markdown\r\n```bash\r\ncurl -s -X PATCH \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\u002F{page_id}\u002Fmarkdown\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"markdown\": \"## Update\\n\\nShipped the prototype.\"}'\r\n```\r\n\r\n### Create page in a database (typed properties)\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"parent\": {\"database_id\": \"xxx\"},\r\n    \"properties\": {\r\n      \"Name\": {\"title\": [{\"text\": {\"content\": \"New Item\"}}]},\r\n      \"Status\": {\"select\": {\"name\": \"Todo\"}}\r\n    }\r\n  }'\r\n```\r\n\r\n### Query a database (data source)\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fdata_sources\u002F{data_source_id}\u002Fquery\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"filter\": {\"property\": \"Status\", \"select\": {\"equals\": \"Active\"}},\r\n    \"sorts\": [{\"property\": \"Date\", \"direction\": \"descending\"}]\r\n  }'\r\n```\r\n\r\n### Create a database\r\n```bash\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fdata_sources\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"parent\": {\"page_id\": \"xxx\"},\r\n    \"title\": [{\"text\": {\"content\": \"My Database\"}}],\r\n    \"properties\": {\r\n      \"Name\": {\"title\": {}},\r\n      \"Status\": {\"select\": {\"options\": [{\"name\": \"Todo\"}, {\"name\": \"Done\"}]}},\r\n      \"Date\": {\"date\": {}}\r\n    }\r\n  }'\r\n```\r\n\r\n### Update page properties\r\n```bash\r\ncurl -s -X PATCH \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fpages\u002F{page_id}\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"properties\": {\"Status\": {\"select\": {\"name\": \"Done\"}}}}'\r\n```\r\n\r\n### Append blocks to a page\r\n```bash\r\ncurl -s -X PATCH \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fblocks\u002F{page_id}\u002Fchildren\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\r\n    \"children\": [\r\n      {\"object\": \"block\", \"type\": \"paragraph\", \"paragraph\": {\"rich_text\": [{\"text\": {\"content\": \"Hello from Hermes!\"}}]}}\r\n    ]\r\n  }'\r\n```\r\n\r\n### File uploads (3-step flow)\r\n```bash\r\n# 1. Create upload\r\ncurl -s -X POST \"https:\u002F\u002Fapi.notion.com\u002Fv1\u002Ffile_uploads\" \\\r\n  -H \"Authorization: Bearer $NOTION_API_KEY\" \\\r\n  -H \"Notion-Version: 2025-09-03\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"filename\": \"photo.png\", \"content_type\": \"image\u002Fpng\"}'\r\n\r\n# 2. PUT bytes to the upload_url returned above\r\ncurl -s -X PUT \"{upload_url}\" --data-binary @photo.png\r\n\r\n# 3. Reference {file_upload_id} in a page\u002Fblock payload\r\n```\r\n\r\n## Property Types\r\n\r\nCommon property formats for database items:\r\n\r\n- **Title:** `{\"title\": [{\"text\": {\"content\": \"...\"}}]}`\r\n- **Rich text:** `{\"rich_text\": [{\"text\": {\"content\": \"...\"}}]}`\r\n- **Select:** `{\"select\": {\"name\": \"Option\"}}`\r\n- **Multi-select:** `{\"multi_select\": [{\"name\": \"A\"}, {\"name\": \"B\"}]}`\r\n- **Date:** `{\"date\": {\"start\": \"2026-01-15\", \"end\": \"2026-01-16\"}}`\r\n- **Checkbox:** `{\"checkbox\": true}`\r\n- **Number:** `{\"number\": 42}`\r\n- **URL:** `{\"url\": \"https:\u002F\u002F...\"}`\r\n- **Email:** `{\"email\": \"user@example.com\"}`\r\n- **Relation:** `{\"relation\": [{\"id\": \"page_id\"}]}`\r\n\r\n## API Version 2025-09-03 — Databases vs Data Sources\r\n\r\n- **Databases became data sources.** Use `\u002Fdata_sources\u002F` endpoints for queries and retrieval.\r\n- **Two IDs per database:** `database_id` and `data_source_id`.\r\n  - `database_id` when creating pages: `parent: {\"database_id\": \"...\"}`\r\n  - `data_source_id` when querying: `POST \u002Fv1\u002Fdata_sources\u002F{id}\u002Fquery`\r\n- Search returns databases as `\"object\": \"data_source\"` with the `data_source_id` field.\r\n\r\n## Notion Workers (advanced, requires `ntn`)\r\n\r\nWorkers are TypeScript programs Notion hosts for you. One worker can expose any combination of:\r\n- **Syncs** — pull data from external APIs into a Notion database on a schedule (default 30 min).\r\n- **Tools** — appear as callable tools inside Notion's Custom Agents.\r\n- **Webhooks** — receive HTTP events from external services (GitHub, Stripe, etc.) and act in Notion.\r\n\r\n**Plan \u002F platform gating:**\r\n- CLI works on all plans. **Deploying Workers requires Business or Enterprise.**\r\n- `ntn` is macOS\u002FLinux only as of May 2026. Windows users need WSL2 or to wait for native support.\r\n- Free through August 11, 2026; metered on Notion credits after.\r\n\r\n### Minimal Worker\r\n\r\n```bash\r\nntn workers new my-worker      # scaffold\r\ncd my-worker\r\n# Edit src\u002Findex.ts\r\nntn workers deploy --name my-worker\r\n```\r\n\r\n`src\u002Findex.ts`:\r\n```typescript\r\nimport { Worker } from \"@notionhq\u002Fworkers\";\r\n\r\nconst worker = new Worker();\r\nexport default worker;\r\n\r\nworker.tool(\"greet\", {\r\n  title: \"Greet a User\",\r\n  description: \"Returns a friendly greeting\",\r\n  inputSchema: { type: \"object\", properties: { name: { type: \"string\" } }, required: [\"name\"] },\r\n  execute: async ({ name }) => `Hello, ${name}!`,\r\n});\r\n```\r\n\r\n### Webhook capability\r\n\r\n```typescript\r\nworker.webhook(\"onGithubPush\", {\r\n  title: \"GitHub Push Handler\",\r\n  execute: async (events, { notion }) => {\r\n    for (const event of events) {\r\n      \u002F\u002F event.body, event.rawBody (for signature verification), event.headers\r\n      console.log(\"got delivery\", event.deliveryId);\r\n    }\r\n  },\r\n});\r\n```\r\n\r\nAfter deploy: `ntn workers webhooks list` shows the URL Notion generates. Treat that URL as a secret — anyone with it can POST events unless you add signature verification.\r\n\r\n### Worker lifecycle commands\r\n\r\n```bash\r\nntn workers deploy\r\nntn workers list\r\nntn workers exec \u003Ccapability-key> -d '{\"name\": \"world\"}'\r\nntn workers sync trigger \u003Ckey>            # run a sync now\r\nntn workers sync pause \u003Ckey>\r\nntn workers env set GITHUB_WEBHOOK_SECRET=...\r\nntn workers runs list                     # recent invocations\r\nntn workers runs logs \u003Crun-id>\r\nntn workers webhooks list\r\n```\r\n\r\nWhen asked to build a Worker, scaffold with `ntn workers new`, write the code in `src\u002Findex.ts`, set any secrets with `ntn workers env set`, and deploy. Notion's docs at https:\u002F\u002Fdevelopers.notion.com\u002Fworkers cover the full API surface.\r\n\r\n## Notion-Flavored Markdown (used by `\u002Fmarkdown` endpoints)\r\n\r\nStandard CommonMark plus XML-like tags for Notion-specific blocks. Use **tabs** for indentation.\r\n\r\n**Blocks beyond CommonMark:**\r\n```\r\n\u003Ccallout icon=\"?\" color=\"blue_bg\">\r\n\tShip the MVP by **Friday**.\r\n\u003C\u002Fcallout>\r\n\r\n\u003Cdetails color=\"gray\">\r\n\u003Csummary>Toggle title\u003C\u002Fsummary>\r\n\tChildren indented one tab\r\n\u003C\u002Fdetails>\r\n\r\n\u003Ccolumns>\r\n\t\u003Ccolumn>Left side\u003C\u002Fcolumn>\r\n\t\u003Ccolumn>Right side\u003C\u002Fcolumn>\r\n\u003C\u002Fcolumns>\r\n\r\n\u003Ctable_of_contents color=\"gray\"\u002F>\r\n```\r\n\r\n**Inline:**\r\n- Mentions: `\u003Cmention-user url=\"...\"\u002F>`, `\u003Cmention-page url=\"...\">Title\u003C\u002Fmention-page>`, `\u003Cmention-date start=\"2026-05-15\"\u002F>`\r\n- Underline: `\u003Cspan underline=\"true\">text\u003C\u002Fspan>`\r\n- Color: `\u003Cspan color=\"blue\">text\u003C\u002Fspan>` or block-level `{color=\"blue\"}` on the first line\r\n- Math: inline `$x^2$`, block `$$ ... $$`\r\n- Citations: `[^https:\u002F\u002Fexample.com]`\r\n\r\n**Colors:** `gray brown orange yellow green blue purple pink red`, plus `*_bg` variants for backgrounds.\r\n\r\nHeadings 5\u002F6 collapse to H4. Multiple `>` lines render as separate quote blocks — use `\u003Cbr>` inside a single `>` for multi-line quotes.\r\n\r\n## Choosing the Right Path\r\n\r\n| Task | mac \u002F Linux | Windows |\r\n|---|---|---|\r\n| Read\u002Fwrite pages, search, query databases | `ntn api ...` | curl |\r\n| Read a page for an agent to summarize | `ntn api v1\u002Fpages\u002F{id}\u002Fmarkdown` | curl `\u002Fmarkdown` endpoint |\r\n| Upload a file | `ntn files create \u003C file` | 3-step HTTP flow |\r\n| One-off API exploration | `ntn api ...` | curl |\r\n| Build a sync \u002F webhook \u002F agent tool hosted by Notion | `ntn workers ...` | WSL2 + `ntn workers ...` |\r\n\r\n## Notes\r\n\r\n- Page\u002Fdatabase IDs are UUIDs (with or without dashes — both accepted).\r\n- Rate limit: ~3 requests\u002Fsecond average. The CLI doesn't bypass this.\r\n- The API cannot set database **view** filters — that's UI-only.\r\n- Use `\"is_inline\": true` when creating data sources to embed them in a page.\r\n- Always pass `-s` to curl to suppress progress bars (cleaner agent output).\r\n- Pipe JSON through `jq` when reading: `... | jq '.results[0].properties'`.\r\n- Notion also ships an MCP server now (`Notion MCP`, ~91% more token-efficient on DB ops than the previous version) — wire it via Hermes' MCP support if you want streaming Notion access from inside a session, but the paths above are enough for most one-shot tasks.\r\n",{"name":5,"author":41,"license":15,"version":49,"metadata":50,"platforms":61,"description":7,"prerequisites":62},"2.0.0",{"hermes":51},{"tags":52,"homepage":60},[53,54,55,56,57,58,59],"Notion","Productivity","Notes","Database","API","CLI","Workers","https:\u002F\u002Fdevelopers.notion.com",[31,29,32],{"env_vars":63},[64],"NOTION_API_KEY","main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002F15\u002F15da99368e2abb6d971dbb5250872015778c9ceb652d5761caa07adf43353f72",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":74,"prompt":84,"zipAvailable":85},[75,78,81],{"tool":76,"command":77},"npx","npx skills add zapabob\u002FSkills --skill notion",{"tool":79,"command":80},"bunx","bunx skills add zapabob\u002FSkills --skill notion",{"tool":82,"command":83},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill notion","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F15\u002F15da99368e2abb6d971dbb5250872015778c9ceb652d5761caa07adf43353f72\u002FSKILL.md",true,[],[88,112,147,174,201,218],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":99,"publishedAt":44},"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",[94,95,98],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[90,100,29,30,101,31,32,102,103,35,104,37,105,106,107,108,65,109,110,111],"openclaw","github","official","search","social-media","Media","hermes","hermes agent","twitter","social","via","post",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":129,"publishedAt":44},"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",[118,121,124,125,126],{"categoryNo":119,"categoryName":120,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":122,"categoryName":123,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},{"categoryNo":127,"categoryName":128,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000036","内容创作者",[130,131,132,133,29,134,31,135,32,136,137,138,139,140,141,142,143,144,145,146],"writing","writing plans","plans","design","review","workflow","documentation","tasks","development","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":156,"publishedAt":44},"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",[153],{"categoryNo":154,"categoryName":155,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[149,29,31,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":183,"publishedAt":44},"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",[180],{"categoryNo":181,"categoryName":182,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",[184,29,185,186,32,187,188,189,190,191,192,164,193,194,195,196,197,198,199,200],"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":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":208,"publishedAt":44},"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",[207],{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},[203,29,209,101,31,210,211,212,213,214,215,106,107,216,217],"terminal","automation","http","monitoring","cron","json","rss","devops","with",{"skillNo":219,"name":220,"nameZh":6,"description":221,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":222,"categories":223,"keywords":226,"publishedAt":44},"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",[224,225],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[227,228,229,31,230,157,231,232,233,160,234,37,235,236,237,238,239,240,241,242],"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"]