[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M718ESNDFPQBS36QP01PGABF":3,"skill-same:01M718ESNDFPQBS36QP01PGABF":76},{"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":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":54,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M718ESNDFPQBS36QP01PGABF","graphing",null,"Compose polished charts (timeseries, bar, line, area, pie, scatter, or anything else the data calls for) from tabular data using the chartkit primitives, producing PNG, SVG, or self-contained interactive HTML. Use when the user asks to chart, graph, plot, or visualize data and wants something better than raw matplotlib defaults.","anthropics\u002Fclaude-tag-plugins","anthropics","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F76263028?v=4","01M697XGDPXJAVQ8391V2BCYTE","Anthropic","01M718EH1166C48RNGF6QF9Z14",78,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fclaude-tag-data-viz\u002Fskills\u002Fgraphing\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"visualize data","html","bar","data","line","matplotlib","self","tabular","timeseries","interactive","when","chart","use","calls","for","Charts","SVG","compose","visualize","2026-11-10 10:12:30",false,"---\nname: graphing\ndescription: Compose polished charts (timeseries, bar, line, area, pie, scatter, or anything else the data calls for) from tabular data using the chartkit primitives, producing PNG, SVG, or self-contained interactive HTML. Use when the user asks to chart, graph, plot, or visualize data and wants something better than raw matplotlib defaults.\n---\n\n# Graphing\n\nYou write the plotting code. The kit provides the parts that should stay consistent across every chart: typography, color derivation from the background, the title and caption frame, and offline HTML packaging. Everything about the chart itself is your judgement applied to the data in front of you.\n\n## The primitives\n\nImport `chartkit` by putting this skill's `scripts\u002F` directory on `sys.path`. Use its absolute path, not a relative path, since your working directory is the user's project. The examples below write it as `\u002Fpath\u002Fto\u002Fgraphing\u002Fscripts`; substitute the real path.\n\nRelevant primitives:\n- `theme(bg, font)`: sets matplotlib rcParams and returns resolved colors. Foreground colors derive from background luminance, so a dark `bg` produces a correct dark chart. Fields: `bg` `dark` `text` `muted` `grid` `spine` `accent` `secondary` `series` `font_css`. \n- `palette(n, base)`: n colors. No base cycles the default series, a hex base builds a ramp from it, a list cycles the list. \n- `finish(ax, title, subtitle, source)`: The typographic frame. Left-aligned bold title, muted subtitle, small provenance caption. \n- `save(fig, stem, formats, dpi)`: Writes `stem.png`, `stem.svg`, or both. Returns the paths. \n- `write_html(out, data, component_js, title, bg, font)`: Self-contained interactive page. Inlines React, ReactDOM, react-is, and Recharts from `third_party\u002F` so the file opens offline. Your component reads `window.__CHART_DATA__` and renders into `#root`. \n- `zero_fill_days(pairs)` `rolling_mean(values, w)` `log_floor(values)`: Small data helpers for the gotchas listed below. Use them only when they fit. \n\n## Steps\n\n1. **Look at the data and decide what it deserves.** Shape, count, and meaning drive the choice: trends over time want lines or day bars, ranked categories want horizontal bars, parts of a whole with few slices can be a pie, correlation wants a scatter. Nothing limits you to those: stacked areas, dual axes, small multiples, annotated thresholds are all just code you write.\n\n2. **Infer colors from context.** Check your conversation and memory for design indicators: a tailwind config, CSS variables, or brand guidelines, and consider the semantic meaning of the data (red or amber for errors, green for success). Pass the destination background to `theme(bg=...)` and brand colors to `palette(base=...)` or directly. Fall back to the defaults only when nothing is inferable. The font defaults to Inter and only changes when the user names a typeface or the destination has a documented brand font.\n\n3. **Write a short script** in your scratchpad that imports chartkit, builds the figure with plain matplotlib (or a Recharts component for interactive output), calls `finish`, and saves.\n\n4. **Render and look at the result.** Read the PNG back and check it with your own eyes before handing it over: labels legible, nothing overlapping, colors distinguishable, the story of the data actually visible. Fix and re-render until it is right.\n\n## The shape of a chart script\n\nPNG or SVG via matplotlib:\n\n```python\nimport sys\nsys.path.insert(0, \"\u002Fpath\u002Fto\u002Fgraphing\u002Fscripts\")\nimport chartkit as ck\nimport matplotlib.pyplot as plt\n\nc = ck.theme()                       # or theme(bg=\"#0f1419\") for a dark surface\nfig, ax = plt.subplots(figsize=(10, 5))\n# ...plain matplotlib against the data, using c.accent, c.secondary, ck.palette(...)\nck.finish(ax, title=\"What the chart shows\", subtitle=\"scope or time range\",\n          source=\"source: where the data came from, date\")\nprint(ck.save(fig, \"out\u002Freport\", formats=(\"png\", \"svg\")))\n```\n\nInteractive HTML via Recharts, written as plain `React.createElement` with no JSX and no build step:\n\n```python\ncomponent = \"\"\"\n(function () {\n  var e = React.createElement\n  var R = window.Recharts\n  var DATA = window.__CHART_DATA__\n  function App() {\n    return e(R.ResponsiveContainer, { width: \"100%\", height: 420 },\n      e(R.LineChart, { data: DATA },\n        e(R.CartesianGrid, { stroke: \"GRID\", vertical: false }),\n        e(R.XAxis, { dataKey: \"x\" }), e(R.YAxis, null),\n        e(R.Tooltip, null),\n        e(R.Line, { dataKey: \"y\", stroke: \"ACCENT\", strokeWidth: 2.4,\n                    dot: false, isAnimationActive: false })))\n  }\n  ReactDOM.createRoot(document.getElementById(\"root\")).render(e(App))\n})()\n\"\"\"\nck.write_html(\"out\u002Freport.html\", data, component, title=\"What the chart shows\")\n```\n\nSubstitute real colors from the theme into the component and keep `isAnimationActive: false` so the chart is complete the moment the file opens.\n\n## Judgement, not flags\n\nThese are the defaults of good charts. Deviate when the data argues for it.\n\n- Rotate x labels only when they would otherwise collide. Short labels stay horizontal.\n- Cap bar width when there are few categories. Two bars should not fill the canvas edge to edge.\n- Label bars with their values when there are roughly a dozen or fewer. Axes and gridlines are for reading trends, not exact values.\n- Rank categorical bars by value unless the categories have a natural order.\n- Long category names read better on a horizontal bar chart.\n- A title states what the chart shows. A subtitle carries the time range or scope. The source caption says where the data came from and when. Skip any of them only deliberately.\n- Legends only when there is more than one series. A single series is named by the title.\n- Annotate the chart with what matters: a deploy line, a threshold, the peak, the anomaly the user asked about. An annotation the reader did not need is clutter.\n\n## Gotchas the helpers exist for\n\n- Calendar gaps: a timeseries with missing days misleads on a continuous axis. `zero_fill_days` fills them with zero. Skip it when zeros would be the lie (sparse sampling rather than absence of events).\n- Rolling averages: `rolling_mean` is trailing, early points average what exists so far. Do not center it on data that ends today.\n- Log scales: bars whose value equals the axis minimum get zero height. `log_floor` gives a lower bound one decade down.\n- Negative values: matplotlib handles them, but check the y limits include them and add a zero line when bars go both ways. Recharts y domains default to starting at zero, so pass an explicit `domain` on the YAxis when data is negative or log scaled.\n\n## Verification\n\nRun a minimal render and look at it.\n\n```bash\npython3 -c \"\nimport sys\nsys.path.insert(0, '\u002Fpath\u002Fto\u002Fgraphing\u002Fscripts')\nimport chartkit as ck\nimport matplotlib.pyplot as plt\nc = ck.theme()\nfig, ax = plt.subplots(figsize=(8, 4))\nax.bar(['A', 'B', 'C'], [10, 30, 20], color=c.accent, width=0.5)\nck.finish(ax, title='chartkit smoke test')\nprint(ck.save(fig, '\u002Ftmp\u002Fck_smoke'))\n\"\n```\n\nConfirm a non-empty PNG is written, then read it back and check it renders correctly.\n","# Graphing\n\nYou write the plotting code. The kit provides the parts that should stay consistent across every chart: typography, color derivation from the background, the title and caption frame, and offline HTML packaging. Everything about the chart itself is your judgement applied to the data in front of you.\n\n## The primitives\n\nImport `chartkit` by putting this skill's `scripts\u002F` directory on `sys.path`. Use its absolute path, not a relative path, since your working directory is the user's project. The examples below write it as `\u002Fpath\u002Fto\u002Fgraphing\u002Fscripts`; substitute the real path.\n\nRelevant primitives:\n- `theme(bg, font)`: sets matplotlib rcParams and returns resolved colors. Foreground colors derive from background luminance, so a dark `bg` produces a correct dark chart. Fields: `bg` `dark` `text` `muted` `grid` `spine` `accent` `secondary` `series` `font_css`. \n- `palette(n, base)`: n colors. No base cycles the default series, a hex base builds a ramp from it, a list cycles the list. \n- `finish(ax, title, subtitle, source)`: The typographic frame. Left-aligned bold title, muted subtitle, small provenance caption. \n- `save(fig, stem, formats, dpi)`: Writes `stem.png`, `stem.svg`, or both. Returns the paths. \n- `write_html(out, data, component_js, title, bg, font)`: Self-contained interactive page. Inlines React, ReactDOM, react-is, and Recharts from `third_party\u002F` so the file opens offline. Your component reads `window.__CHART_DATA__` and renders into `#root`. \n- `zero_fill_days(pairs)` `rolling_mean(values, w)` `log_floor(values)`: Small data helpers for the gotchas listed below. Use them only when they fit. \n\n## Steps\n\n1. **Look at the data and decide what it deserves.** Shape, count, and meaning drive the choice: trends over time want lines or day bars, ranked categories want horizontal bars, parts of a whole with few slices can be a pie, correlation wants a scatter. Nothing limits you to those: stacked areas, dual axes, small multiples, annotated thresholds are all just code you write.\n\n2. **Infer colors from context.** Check your conversation and memory for design indicators: a tailwind config, CSS variables, or brand guidelines, and consider the semantic meaning of the data (red or amber for errors, green for success). Pass the destination background to `theme(bg=...)` and brand colors to `palette(base=...)` or directly. Fall back to the defaults only when nothing is inferable. The font defaults to Inter and only changes when the user names a typeface or the destination has a documented brand font.\n\n3. **Write a short script** in your scratchpad that imports chartkit, builds the figure with plain matplotlib (or a Recharts component for interactive output), calls `finish`, and saves.\n\n4. **Render and look at the result.** Read the PNG back and check it with your own eyes before handing it over: labels legible, nothing overlapping, colors distinguishable, the story of the data actually visible. Fix and re-render until it is right.\n\n## The shape of a chart script\n\nPNG or SVG via matplotlib:\n\n```python\nimport sys\nsys.path.insert(0, \"\u002Fpath\u002Fto\u002Fgraphing\u002Fscripts\")\nimport chartkit as ck\nimport matplotlib.pyplot as plt\n\nc = ck.theme()                       # or theme(bg=\"#0f1419\") for a dark surface\nfig, ax = plt.subplots(figsize=(10, 5))\n# ...plain matplotlib against the data, using c.accent, c.secondary, ck.palette(...)\nck.finish(ax, title=\"What the chart shows\", subtitle=\"scope or time range\",\n          source=\"source: where the data came from, date\")\nprint(ck.save(fig, \"out\u002Freport\", formats=(\"png\", \"svg\")))\n```\n\nInteractive HTML via Recharts, written as plain `React.createElement` with no JSX and no build step:\n\n```python\ncomponent = \"\"\"\n(function () {\n  var e = React.createElement\n  var R = window.Recharts\n  var DATA = window.__CHART_DATA__\n  function App() {\n    return e(R.ResponsiveContainer, { width: \"100%\", height: 420 },\n      e(R.LineChart, { data: DATA },\n        e(R.CartesianGrid, { stroke: \"GRID\", vertical: false }),\n        e(R.XAxis, { dataKey: \"x\" }), e(R.YAxis, null),\n        e(R.Tooltip, null),\n        e(R.Line, { dataKey: \"y\", stroke: \"ACCENT\", strokeWidth: 2.4,\n                    dot: false, isAnimationActive: false })))\n  }\n  ReactDOM.createRoot(document.getElementById(\"root\")).render(e(App))\n})()\n\"\"\"\nck.write_html(\"out\u002Freport.html\", data, component, title=\"What the chart shows\")\n```\n\nSubstitute real colors from the theme into the component and keep `isAnimationActive: false` so the chart is complete the moment the file opens.\n\n## Judgement, not flags\n\nThese are the defaults of good charts. Deviate when the data argues for it.\n\n- Rotate x labels only when they would otherwise collide. Short labels stay horizontal.\n- Cap bar width when there are few categories. Two bars should not fill the canvas edge to edge.\n- Label bars with their values when there are roughly a dozen or fewer. Axes and gridlines are for reading trends, not exact values.\n- Rank categorical bars by value unless the categories have a natural order.\n- Long category names read better on a horizontal bar chart.\n- A title states what the chart shows. A subtitle carries the time range or scope. The source caption says where the data came from and when. Skip any of them only deliberately.\n- Legends only when there is more than one series. A single series is named by the title.\n- Annotate the chart with what matters: a deploy line, a threshold, the peak, the anomaly the user asked about. An annotation the reader did not need is clutter.\n\n## Gotchas the helpers exist for\n\n- Calendar gaps: a timeseries with missing days misleads on a continuous axis. `zero_fill_days` fills them with zero. Skip it when zeros would be the lie (sparse sampling rather than absence of events).\n- Rolling averages: `rolling_mean` is trailing, early points average what exists so far. Do not center it on data that ends today.\n- Log scales: bars whose value equals the axis minimum get zero height. `log_floor` gives a lower bound one decade down.\n- Negative values: matplotlib handles them, but check the y limits include them and add a zero line when bars go both ways. Recharts y domains default to starting at zero, so pass an explicit `domain` on the YAxis when data is negative or log scaled.\n\n## Verification\n\nRun a minimal render and look at it.\n\n```bash\npython3 -c \"\nimport sys\nsys.path.insert(0, '\u002Fpath\u002Fto\u002Fgraphing\u002Fscripts')\nimport chartkit as ck\nimport matplotlib.pyplot as plt\nc = ck.theme()\nfig, ax = plt.subplots(figsize=(8, 4))\nax.bar(['A', 'B', 'C'], [10, 30, 20], color=c.accent, width=0.5)\nck.finish(ax, title='chartkit smoke test')\nprint(ck.save(fig, '\u002Ftmp\u002Fck_smoke'))\n\"\n```\n\nConfirm a non-empty PNG is written, then read it back and check it renders correctly.\n",{"name":5,"description":7},"main","b6ee25f8f00a291cbdf31eb75bd7cc1a987d6782","claude-tag-data-viz\u002Fskills\u002Fgraphing",23,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins","https:\u002F\u002Fgithub.com\u002Fanthropics","https:\u002F\u002Fanthropic.com","2026-11-10 23:54:27",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add anthropics\u002Fclaude-tag-plugins --skill graphing",{"tool":62,"command":63},"bunx","bunx skills add anthropics\u002Fclaude-tag-plugins --skill graphing",{"tool":65,"command":66},"pnpm","pnpm dlx skills add anthropics\u002Fclaude-tag-plugins --skill graphing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fclaude-tag-data-viz\u002Fskills\u002Fgraphing\u002FSKILL.md",true,[70],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"scripts\u002Fchartkit.py","SCRIPT","脚本",12772,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fclaude-tag-data-viz\u002Fskills\u002Fgraphing\u002Fscripts\u002Fchartkit.py",[77,110,135,160,175,191],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":91,"publishedAt":43},"01M718HA4DD1CEJ82ZS5NJTA15","snowflake-api","Run SQL against Snowflake — submit statements, poll async handles, fetch result partitions, cancel, and browse warehouses\u002Fdatabases\u002Fschemas\u002Ftables. Use this whenever the user wants to query Snowflake, ask \"what tables are in this schema\", check a warehouse's status, or mentions `snowflakecomputing.com`, `\u002Fapi\u002Fv2\u002Fstatements`, or a Snowflake account identifier (like `xy12345.us-east-1`). Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fsnowflake\u002Fskills\u002Fsnowflake-api\u002FSKILL.md",[83,88],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":89,"categoryName":90,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师",[92,93,94,95,96,97,98,99,100,101,36,34,102,103,104,105,106,107,108,109],"snowflake","api","snowflake api","warehouse","databases","fetch","browse","submit","async","schema","query","cancel","ask","partitions","check","with","bundled scripts","result",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":118,"publishedAt":43},"01M718H6HMYYVCR43872FMJR8Q","sentry-api","Query and manage Sentry error-tracking data — list and search issues, drill into events and stack traces, inspect projects and releases, resolve\u002Fignore issues, and pull stats. Use this whenever the user mentions a Sentry issue, crash, error group, or exception; pastes a sentry.io or self-hosted Sentry URL; asks \"why is this erroring\", \"how many times has this happened\", \"what's the top error in {project}\", \"resolve this issue\", or wants a Sentry-based digest — even if they don't say \"API\". Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fsentry\u002Fskills\u002Fsentry-api\u002FSKILL.md",[116,117],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},{"categoryNo":89,"categoryName":90,"taxonomyType":21,"taxonomyTypeDesc":22},[93,119,120,121,122,123,124,125,126,127,34,128,102,129,30,130,131,132,133,134],"sentry","sentry api","error","projects","project","inspect","search","issues","drill","URL","io","stack","top","releases","how","why",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":143,"publishedAt":43},"01M718H3C9JFC86FY6ZQB69FHX","salesforce-api","Query, read, create, update, and describe Salesforce records — Accounts, Contacts, Opportunities, Leads, Cases, and custom objects. Use this whenever the user wants to look up a Salesforce record, run a SOQL query, update an Opportunity, check an object's fields, or asks \"what's in Salesforce\" — even if they don't say \"API\". Also use it for any URL under *.salesforce.com \u002F *.lightning.force.com or a mention of a Salesforce record ID or SOQL. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fsalesforce\u002Fskills\u002Fsalesforce-api\u002FSKILL.md",[141,142],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},{"categoryNo":89,"categoryName":90,"taxonomyType":21,"taxonomyTypeDesc":22},[144,93,145,146,147,148,34,128,102,149,150,151,152,153,154,155,156,157,158,159],"salesforce","salesforce api","up","objects","opportunity","contacts","create","run","update","scripts","read","start","describe","recipes","path","leads",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":167,"publishedAt":43},"01M718GZPG1GAP5T1Z9NVDFDV5","redshift-api","Run SQL against Amazon Redshift — submit statements, poll status, page through results, and browse databases\u002Fschemas\u002Ftables. Use this whenever the user wants to query Redshift (provisioned cluster or Serverless), ask \"what tables are in this schema\", check a query's status, or mentions `redshift-data`, a Redshift cluster identifier \u002F workgroup name, or a `redshift-data.{region}.amazonaws.com` endpoint. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fredshift\u002Fskills\u002Fredshift-api\u002FSKILL.md",[166],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},[168,93,169,96,170,98,99,171,101,36,34,102,104,106,107,172,108,173,151,174],"redshift","redshift api","cluster","page","amazon","results","name",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":183,"publishedAt":43},"01M718GW82ADW06AQS4PVQ1NHQ","pagerduty-api","Query and manage PagerDuty — find out who's on call, list and manage incidents, read escalation policies and schedules, trace who got paged and why, acknowledge\u002Fresolve\u002Fsnooze\u002Fescalate incidents, and create or update services. Use this whenever the user mentions PagerDuty, on-call, paging, escalation, an incident ID like `PXXXXXX` or `Q...`, asks \"who's on call\", \"page the on-call\", \"ack this incident\", \"why wasn't I paged\", or pastes a pagerduty.com URL — even if they don't say \"API\". Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fpagerduty\u002Fskills\u002Fpagerduty-api\u002FSKILL.md",[181,182],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},{"categoryNo":89,"categoryName":90,"taxonomyType":21,"taxonomyTypeDesc":22},[93,184,185,186,34,128,102,150,187,134,152,153,154,155,188,157,158,189,171,190],"pagerduty","pagerduty api","incident","ack","list","escalation","manage",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":199,"publishedAt":43},"01M718GSATK9BT3X2J9WKNAR2P","notion-api","Search, read, and write Notion pages, databases, and blocks. Use this whenever the user wants to find a page in Notion, read a database, add a row, create or append content to a page, or asks \"what's in my Notion\" — even if they don't say \"API\". Also use it for any URL under notion.so or a mention of a Notion page\u002Fdatabase ID. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Fblob\u002Fmain\u002Fnotion\u002Fskills\u002Fnotion-api\u002FSKILL.md",[197,198],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},{"categoryNo":89,"categoryName":90,"taxonomyType":21,"taxonomyTypeDesc":22},[200,201,93,202,96,125,203,34,128,150,153,154,204,155,205,157,206,207,158,38],"notion","notion api","notion pages","database","write","my","add","append"]