[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-elastic-docs-skill-review":3,"mdc--f4satt-key":36,"related-repo-elastic-docs-skill-review":1385,"related-org-elastic-docs-skill-review":1464},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":31,"sourceUrl":34,"mdContent":35},"docs-skill-review","review Elastic agent skills","Review an Elastic agent skill against official documentation for accuracy, completeness, and coverage gaps. Use when a writer wants to review, audit, or validate a skill from a repository of agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"elastic","Elastic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Felastic.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Documentation","documentation","tag",{"name":17,"slug":18,"type":15},"Audit","audit",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Technical Writing","technical-writing",71,"https:\u002F\u002Fgithub.com\u002Felastic\u002Felastic-docs-skills","2026-07-12T07:49:37.342912",null,9,[29,8,30],"docs","skills",{"repoUrl":24,"stars":23,"forks":27,"topics":32,"description":33},[29,8,30],"Instructions for code agents on how to author Elastic docs","https:\u002F\u002Fgithub.com\u002Felastic\u002Felastic-docs-skills\u002Ftree\u002FHEAD\u002Fskills\u002Freview\u002Fskill-review","---\nname: docs-skill-review\nversion: 1.3.1\ndescription: Review an Elastic agent skill against official documentation for accuracy, completeness, and coverage gaps. Use when a writer wants to review, audit, or validate a skill from a repository of agent skills.\ndisable-model-invocation: true\nargument-hint: \u003Cpath-to-skill-folder-or-SKILL.md>\ncontext: fork\nallowed-tools: Read, Grep, Glob, CallMcpTool, WebFetch\nsources:\n  - https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Fagent-skills\u002Fbest-practices\n  - https:\u002F\u002Fdocs-v3-preview.elastic.dev\u002Felastic\u002Fdocs-builder\u002Ftree\u002Fmain\u002Fmcp\n---\n\u003C!-- Copyright Elasticsearch B.V. and\u002For licensed to Elasticsearch B.V. under one\nor more contributor license agreements. See the NOTICE file distributed with\nthis work for additional information regarding copyright\nownership. Elasticsearch B.V. licenses this file to you under\nthe Apache License, Version 2.0 (the \"License\"); you may\nnot use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n\thttp:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\nUnless required by applicable law or agreed to in writing,\nsoftware distributed under the License is distributed on an\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, either express or implied.  See the License for the\nspecific language governing permissions and limitations\nunder the License. -->\n\nYou are a skill reviewer for official Elastic skills. Your job is to review a skill's SKILL.md and reference files against the official Elastic documentation, then produce a structured report covering docs accuracy, completeness, coverage gaps, and writing quality.\n\n## Inputs\n\n`$ARGUMENTS` is a path to a skill folder or SKILL.md file. If empty, ask the user what to review.\n\nResolve the skill folder:\n\n- If the path points to a file, use its parent directory.\n- If the path points to a directory, use it directly.\n- Read `SKILL.md` from the resolved folder. If no `SKILL.md` exists, stop and tell the user this is not a valid skill folder.\n\n## Phase 1: Parse the skill\n\nRead `SKILL.md` in full. Then glob for `references\u002F**\u002F*.md` in the skill folder and read each file.\n\nExtract the following from the combined content:\n\n1. **Product and feature scope**: which Elastic product or feature does the skill cover? Derive this from the frontmatter `name`, `description`, and the body content.\n2. **Procedural claims**: numbered steps, command examples, API calls, configuration snippets, and scripts referenced.\n3. **Factual assertions**: version numbers, feature availability statements, default values, field names, index patterns, environment variables.\n4. **Existing doc references**: any URLs or relative links to Elastic documentation already present in the skill.\n5. **API claim inventory**: explicit API methods, endpoint paths, request\u002Fresponse fields, status codes, and auth requirements mentioned by the skill.\n\n## Phase 2: Discover relevant official docs\n\nUse the Elastic Docs MCP server at `https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002F_mcp\u002F` to find the authoritative documentation for the topics identified in Phase 1. The server is a stateless HTTP endpoint — no authentication required.\n\n**Important: version baseline.** Only consider documentation for Elastic version 9.x and higher as the source of truth. Pre-9.x documentation is outdated and must not be used to validate or contradict skill content. If a skill references pre-9.x versions, flag those references as requiring updates.\n\n### Available MCP tools\n\nThe server exposes six tools organized into three groups:\n\n**Search tools:**\n\n| Tool | Purpose |\n|------|---------|\n| `search_docs` | Search all published Elastic docs by meaning. Supports filtering by product and navigation section. Returns AI summaries, relevance scores, and navigation context. |\n| `find_related_docs` | Find pages related to a given topic. Useful for discovering adjacent content the skill should reference. |\n\n**Document tools:**\n\n| Tool | Purpose |\n|------|---------|\n| `get_document_by_url` | Retrieve a specific page by URL or path. Returns title, AI summaries, headings, navigation context, and optionally the full body. |\n| `analyze_document_structure` | Analyze page structure: heading count, link count, parent pages, and AI enrichment status. |\n\n**Coherence tools:**\n\n| Tool | Purpose |\n|------|---------|\n| `check_docs_coherence` | Check how coherently a topic is covered across all Elastic docs. Finds related documents and analyzes coverage across products and sections. |\n| `find_docs_inconsistencies` | Find potential inconsistencies across pages covering the same topic within a product area. |\n\n### How to use them\n\n1. **`search_docs`**: run 2–3 targeted searches covering the skill's scope. Use the product name and key feature terms as queries.\n2. **`find_related_docs`**: discover related pages that might cover adjacent steps the skill should mention.\n3. **`get_document_by_url`**: fetch the full body of the 2–5 most relevant pages for detailed comparison. Request the body content, not just summaries.\n4. **`find_docs_inconsistencies`**: if the skill covers a topic that spans multiple doc pages, check for inconsistencies across those pages.\n\nIf the skill already contains doc URLs, fetch those pages with `get_document_by_url` too — they are the skill author's own source claims and must be verified.\n\n### Pre-9.0 version history: elastic.co\u002Fguide\n\n`https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002F` covers **9.0 and later only**. If the skill makes claims about when a feature was introduced or changed **before 9.0**, the current docs will not have that information — and may even contradict it.\n\nUse **WebFetch** on `https:\u002F\u002Fwww.elastic.co\u002Fguide\u002F` (which covers up to 8.19) when:\n\n- The skill states a feature was introduced or changed in a version earlier than 9.0 (e.g., \"Introduced 8.18\").\n- The current docs show a different introduction version and you need to verify which is correct.\n- The skill describes behavior that may have changed between the 8.x and 9.x releases.\n\nExample: if a skill says \"LOOKUP JOIN was introduced in 8.18\" but the 9.x docs say \"Preview in 9.0, GA since 9.1\", fetch the 8.18 release notes or the feature page from `\u002Fguide\u002F` to determine whether the 8.x claim is accurate or was a pre-release detail that never shipped.\n\nDo not flag a discrepancy between the skill and 9.x docs as an error if the skill is making a claim about 8.x history — verify against `\u002Fguide\u002F` first.\n\n### API docs requirement (mandatory when API claims exist)\n\nIf Phase 1 finds any API claim inventory items, you must explicitly attempt API operation-level verification, not only narrative docs.\n\n1. Run at least one API-focused search query that includes the method\u002Fpath or operation name (for example, `PUT \u002F_index_template\u002F{name}`).\n2. Fetch up to 3 operation-level pages under `\u002Fdocs\u002Fapi\u002Fdoc\u002F...\u002Foperation\u002F...` when available.\n3. Also fetch at least one narrative\u002Freference page for behavior context.\n4. If operation pages are not retrievable via MCP after reasonable attempts:\n   - Attempt **WebFetch** directly on the corresponding public API operation URL (for example under `\u002Fdocs\u002Fapi\u002Fdoc\u002F...\u002Foperation\u002F...`) before recording a limitation.\n   - Record this as an **API evidence retrieval limitation**.\n   - Do NOT mark a contradiction based only on missing retrievability.\n   - Continue with the best available narrative\u002Freference evidence and clearly state confidence limits.\n\n### Fallback: WebFetch\n\nIf the MCP is unavailable, or MCP cannot retrieve specific API operation pages, construct URLs manually:\n\n1. Search `https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002F` for the product and feature.\n2. Use **WebFetch** to retrieve page content.\n\n## Phase 3: Cross-reference skill against docs\n\nCompare the skill content against the fetched documentation across three dimensions.\n\n### 3a. Accuracy\n\nDoes the skill contradict the docs?\n\nFor each procedural claim and factual assertion from Phase 1, check whether the official docs agree:\n\n- API endpoints, parameters, and response formats.\n- Configuration syntax and default values.\n- Version-specific claims (feature introduced in X, deprecated in Y).\n- Field names, index patterns, and environment variables.\n- **Function, command, and feature existence**: for every function, command, operator, or feature the skill references, actively search for it in the official docs. Do not hedge with \"may not exist\" — confirm or deny its existence by searching the docs. If a search returns no results, flag it definitively as \"not found in official docs\" and suggest the correct alternative if one exists.\n\nFlag contradictions with citations from both the skill and the docs.\n\nWhen API claim inventory exists, follow the API docs requirement above and treat operation-level and narrative evidence as complementary.\n\n### 3b. Completeness\n\nDoes the skill omit steps or information that the docs include and a user would need?\n\nCompare the skill's procedure against the docs' equivalent procedure. Look for:\n\n- Missing prerequisite steps (authentication, permissions, installation).\n- Omitted configuration options that affect the outcome.\n- Missing warnings or caveats documented in the official docs.\n- Missing error handling for common failure modes.\n\nFlag missing content as **skill improvement opportunities**.\n\n### 3c. Coverage gaps\n\nDoes the skill explain things not covered in the official docs?\n\nLook for:\n\n- Tribal knowledge encoded in the skill (workarounds, undocumented behaviors, practical tips).\n- Procedures that span multiple doc pages and are not documented as an end-to-end workflow.\n- Configuration patterns or query templates not present in the docs.\n\nFlag these as **docs improvement opportunities**, not as errors. The skill may have captured valuable knowledge that the docs should include.\n\n## Phase 4: Writing and structural quality\n\nReview the prose content (SKILL.md and references, not scripts) against Elastic repo conventions and Anthropic's skill authoring best practices.\n\n### Frontmatter checks\n\nBefore checking frontmatter, look for a repo-level conventions file (`AGENTS.md`, `CLAUDE.md`, or `CONTRIBUTING.md`) in the skill's repository root. If one exists, read it and apply its frontmatter rules. If none exists, fall back to Anthropic's standard skill requirements.\n\n**Repo-specific rules** (apply only if defined in the conventions file):\n\n- Naming pattern (e.g., `\u003Cgroup>-\u003Cskill-folder>`).\n- Description length limit (e.g., 200 characters).\n- Required metadata fields (e.g., `metadata.author`, `metadata.version`).\n- Any other constraints the repo enforces.\n\n**Universal rules** (always apply):\n\n- `name` is present, kebab-case, and matches the skill's folder name.\n- `description` is present and includes both *what the skill does* and *when to use it*.\n- `description` is written in third person (\"Executes queries...\", not \"I help you execute queries\").\n- `version` or `metadata.version` is present and follows SemVer.\n\nNote the conventions file path in the report so reviewers can verify the rules are current.\n\n### Instruction quality\n\n- **Specific and actionable**: flag vague directives like \"validate things properly\" that lack concrete commands or expected output.\n- **Error handling** check whether the skill includes a troubleshooting section or documents common failure modes and how to recover.\n- **Examples** check for concrete usage examples. Input\u002Foutput pairs are preferred.\n- **Feedback loops** for quality-critical workflows, check for \"run validator, fix errors, repeat\" patterns.\n\n### Conciseness\n\n- Flag over-explained concepts that Claude already knows. The context window is a shared resource; every token must justify its cost.\n- Flag unnecessary verbosity where a concise version conveys the same meaning.\n- Challenge explanatory paragraphs: \"Does Claude really need this explanation, or is it obvious from the code example?\"\n\n### Progressive disclosure\n\n- SKILL.md should contain core instructions. Detailed reference material belongs in `references\u002F`.\n- Flag skills that exceed 500 lines in SKILL.md without offloading detail to `references\u002F`.\n- Check that references are one level deep from SKILL.md — no nested references where file A links to file B which links to file C.\n- Flag reference files over 100 lines that lack a table of contents at the top.\n\n### Voice and structure\n\n- **Imperative voice**: instructions should use imperative mood (\"Query the API\"), not conditional (\"you might want to query\").\n- **Numbered steps**: procedures should use numbered steps, not prose paragraphs.\n- **Clear sections**: the skill should have identifiable sections for what it does, when to use it, and how to use it.\n\n### Anti-patterns\n\nFlag the following if found:\n\n- **Time-sensitive information**: hardcoded dates or version conditionals that will rot (e.g., \"before August 2025\", \"if you're on version 8.x\").\n- **Inconsistent terminology**: mixing terms for the same concept within the skill.\n- **Too many options**: presenting multiple approaches without a clear default and recommendation.\n- **Windows-style paths**: backslashes in file paths.\n\n## Phase 5: Report\n\nPresent all findings as a single structured report.\n\n```text\n## Skill review: \u003Cskill-name>\n\n### Skill summary\n- **Product**: \u003CElastic product or feature>\n- **Scope**: \u003Cone-sentence summary of what the skill does>\n- **Files reviewed**: SKILL.md, references\u002F... (list all)\n- **Docs pages consulted**: \u003Clist with URLs>\n- **API evidence coverage**: \u003Coperation-level API pages checked, or explicit MCP retrieval limitation>\n\n### Docs accuracy\n\u003CFor each issue: what the skill says, what the docs say, and a citation for each.>\n\u003CIf no issues: \"No contradictions found.\">\n\n### Completeness (skill improvement opportunities)\n\u003CSteps or information in the docs that the skill omits.>\n\u003CIf none: \"No missing steps identified.\">\n\n### Coverage gaps (docs improvement opportunities)\n\u003CKnowledge in the skill that is not in the official docs.>\n\u003CIf none: \"No coverage gaps identified.\">\n\n### Writing quality\n\u003CIssues grouped by category: frontmatter, instruction quality, conciseness,\nprogressive disclosure, voice\u002Fstructure, anti-patterns.>\n\u003CIf no issues: \"No writing quality issues found.\">\n\n### Recommendations\nPrioritized list of suggested actions, split into:\n- **Skill fixes** — things to change in the skill\n- **Docs opportunities** — things to add to official documentation\n```\n\nIf the skill has no issues in a section, say so explicitly rather than omitting the section. Every section must appear in the report.\n\n## Guidelines\n\n- Treat the official Elastic documentation for version 9.x and higher as the ultimate source of truth for accuracy checks. Ignore pre-9.x docs.\n- **Verify, don't hedge.** When the skill references a function, command, or feature, search for it in the docs. Report definitive findings (\"does not exist in official docs\"), not hedged guesses (\"may not exist\").\n- Do NOT treat coverage gaps as errors. Skills often capture useful knowledge that docs should adopt.\n- Be specific in citations: include the doc URL and the relevant passage, not just \"the docs say otherwise.\"\n- Review SKILL.md and `references\u002F` files. Do not review scripts.\n- Do not modify any files. This skill is read-only.\n- If the MCP returns no relevant docs, say so and skip Phase 3. Do not fabricate doc references.\n",{"data":37,"body":46},{"name":4,"version":38,"description":6,"disable-model-invocation":39,"argument-hint":40,"context":41,"allowed-tools":42,"sources":43},"1.3.1",true,"\u003Cpath-to-skill-folder-or-SKILL.md>","fork","Read, Grep, Glob, CallMcpTool, WebFetch",[44,45],"https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Fagent-skills\u002Fbest-practices","https:\u002F\u002Fdocs-v3-preview.elastic.dev\u002Felastic\u002Fdocs-builder\u002Ftree\u002Fmain\u002Fmcp",{"type":47,"children":48},"root",[49,57,64,76,81,116,122,141,146,217,223,236,246,253,258,266,328,336,390,398,452,458,513,525,531,556,576,594,607,619,625,630,712,718,723,748,754,759,765,770,775,808,813,818,824,829,834,857,868,874,879,884,902,914,920,925,931,959,969,1013,1023,1088,1093,1099,1142,1148,1166,1172,1208,1214,1247,1253,1258,1301,1307,1312,1324,1329,1335],{"type":50,"tag":51,"props":52,"children":53},"element","p",{},[54],{"type":55,"value":56},"text","You are a skill reviewer for official Elastic skills. Your job is to review a skill's SKILL.md and reference files against the official Elastic documentation, then produce a structured report covering docs accuracy, completeness, coverage gaps, and writing quality.",{"type":50,"tag":58,"props":59,"children":61},"h2",{"id":60},"inputs",[62],{"type":55,"value":63},"Inputs",{"type":50,"tag":51,"props":65,"children":66},{},[67,74],{"type":50,"tag":68,"props":69,"children":71},"code",{"className":70},[],[72],{"type":55,"value":73},"$ARGUMENTS",{"type":55,"value":75}," is a path to a skill folder or SKILL.md file. If empty, ask the user what to review.",{"type":50,"tag":51,"props":77,"children":78},{},[79],{"type":55,"value":80},"Resolve the skill folder:",{"type":50,"tag":82,"props":83,"children":84},"ul",{},[85,91,96],{"type":50,"tag":86,"props":87,"children":88},"li",{},[89],{"type":55,"value":90},"If the path points to a file, use its parent directory.",{"type":50,"tag":86,"props":92,"children":93},{},[94],{"type":55,"value":95},"If the path points to a directory, use it directly.",{"type":50,"tag":86,"props":97,"children":98},{},[99,101,107,109,114],{"type":55,"value":100},"Read ",{"type":50,"tag":68,"props":102,"children":104},{"className":103},[],[105],{"type":55,"value":106},"SKILL.md",{"type":55,"value":108}," from the resolved folder. If no ",{"type":50,"tag":68,"props":110,"children":112},{"className":111},[],[113],{"type":55,"value":106},{"type":55,"value":115}," exists, stop and tell the user this is not a valid skill folder.",{"type":50,"tag":58,"props":117,"children":119},{"id":118},"phase-1-parse-the-skill",[120],{"type":55,"value":121},"Phase 1: Parse the skill",{"type":50,"tag":51,"props":123,"children":124},{},[125,126,131,133,139],{"type":55,"value":100},{"type":50,"tag":68,"props":127,"children":129},{"className":128},[],[130],{"type":55,"value":106},{"type":55,"value":132}," in full. Then glob for ",{"type":50,"tag":68,"props":134,"children":136},{"className":135},[],[137],{"type":55,"value":138},"references\u002F**\u002F*.md",{"type":55,"value":140}," in the skill folder and read each file.",{"type":50,"tag":51,"props":142,"children":143},{},[144],{"type":55,"value":145},"Extract the following from the combined content:",{"type":50,"tag":147,"props":148,"children":149},"ol",{},[150,177,187,197,207],{"type":50,"tag":86,"props":151,"children":152},{},[153,159,161,167,169,175],{"type":50,"tag":154,"props":155,"children":156},"strong",{},[157],{"type":55,"value":158},"Product and feature scope",{"type":55,"value":160},": which Elastic product or feature does the skill cover? Derive this from the frontmatter ",{"type":50,"tag":68,"props":162,"children":164},{"className":163},[],[165],{"type":55,"value":166},"name",{"type":55,"value":168},", ",{"type":50,"tag":68,"props":170,"children":172},{"className":171},[],[173],{"type":55,"value":174},"description",{"type":55,"value":176},", and the body content.",{"type":50,"tag":86,"props":178,"children":179},{},[180,185],{"type":50,"tag":154,"props":181,"children":182},{},[183],{"type":55,"value":184},"Procedural claims",{"type":55,"value":186},": numbered steps, command examples, API calls, configuration snippets, and scripts referenced.",{"type":50,"tag":86,"props":188,"children":189},{},[190,195],{"type":50,"tag":154,"props":191,"children":192},{},[193],{"type":55,"value":194},"Factual assertions",{"type":55,"value":196},": version numbers, feature availability statements, default values, field names, index patterns, environment variables.",{"type":50,"tag":86,"props":198,"children":199},{},[200,205],{"type":50,"tag":154,"props":201,"children":202},{},[203],{"type":55,"value":204},"Existing doc references",{"type":55,"value":206},": any URLs or relative links to Elastic documentation already present in the skill.",{"type":50,"tag":86,"props":208,"children":209},{},[210,215],{"type":50,"tag":154,"props":211,"children":212},{},[213],{"type":55,"value":214},"API claim inventory",{"type":55,"value":216},": explicit API methods, endpoint paths, request\u002Fresponse fields, status codes, and auth requirements mentioned by the skill.",{"type":50,"tag":58,"props":218,"children":220},{"id":219},"phase-2-discover-relevant-official-docs",[221],{"type":55,"value":222},"Phase 2: Discover relevant official docs",{"type":50,"tag":51,"props":224,"children":225},{},[226,228,234],{"type":55,"value":227},"Use the Elastic Docs MCP server at ",{"type":50,"tag":68,"props":229,"children":231},{"className":230},[],[232],{"type":55,"value":233},"https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002F_mcp\u002F",{"type":55,"value":235}," to find the authoritative documentation for the topics identified in Phase 1. The server is a stateless HTTP endpoint — no authentication required.",{"type":50,"tag":51,"props":237,"children":238},{},[239,244],{"type":50,"tag":154,"props":240,"children":241},{},[242],{"type":55,"value":243},"Important: version baseline.",{"type":55,"value":245}," Only consider documentation for Elastic version 9.x and higher as the source of truth. Pre-9.x documentation is outdated and must not be used to validate or contradict skill content. If a skill references pre-9.x versions, flag those references as requiring updates.",{"type":50,"tag":247,"props":248,"children":250},"h3",{"id":249},"available-mcp-tools",[251],{"type":55,"value":252},"Available MCP tools",{"type":50,"tag":51,"props":254,"children":255},{},[256],{"type":55,"value":257},"The server exposes six tools organized into three groups:",{"type":50,"tag":51,"props":259,"children":260},{},[261],{"type":50,"tag":154,"props":262,"children":263},{},[264],{"type":55,"value":265},"Search tools:",{"type":50,"tag":267,"props":268,"children":269},"table",{},[270,289],{"type":50,"tag":271,"props":272,"children":273},"thead",{},[274],{"type":50,"tag":275,"props":276,"children":277},"tr",{},[278,284],{"type":50,"tag":279,"props":280,"children":281},"th",{},[282],{"type":55,"value":283},"Tool",{"type":50,"tag":279,"props":285,"children":286},{},[287],{"type":55,"value":288},"Purpose",{"type":50,"tag":290,"props":291,"children":292},"tbody",{},[293,311],{"type":50,"tag":275,"props":294,"children":295},{},[296,306],{"type":50,"tag":297,"props":298,"children":299},"td",{},[300],{"type":50,"tag":68,"props":301,"children":303},{"className":302},[],[304],{"type":55,"value":305},"search_docs",{"type":50,"tag":297,"props":307,"children":308},{},[309],{"type":55,"value":310},"Search all published Elastic docs by meaning. Supports filtering by product and navigation section. Returns AI summaries, relevance scores, and navigation context.",{"type":50,"tag":275,"props":312,"children":313},{},[314,323],{"type":50,"tag":297,"props":315,"children":316},{},[317],{"type":50,"tag":68,"props":318,"children":320},{"className":319},[],[321],{"type":55,"value":322},"find_related_docs",{"type":50,"tag":297,"props":324,"children":325},{},[326],{"type":55,"value":327},"Find pages related to a given topic. Useful for discovering adjacent content the skill should reference.",{"type":50,"tag":51,"props":329,"children":330},{},[331],{"type":50,"tag":154,"props":332,"children":333},{},[334],{"type":55,"value":335},"Document tools:",{"type":50,"tag":267,"props":337,"children":338},{},[339,353],{"type":50,"tag":271,"props":340,"children":341},{},[342],{"type":50,"tag":275,"props":343,"children":344},{},[345,349],{"type":50,"tag":279,"props":346,"children":347},{},[348],{"type":55,"value":283},{"type":50,"tag":279,"props":350,"children":351},{},[352],{"type":55,"value":288},{"type":50,"tag":290,"props":354,"children":355},{},[356,373],{"type":50,"tag":275,"props":357,"children":358},{},[359,368],{"type":50,"tag":297,"props":360,"children":361},{},[362],{"type":50,"tag":68,"props":363,"children":365},{"className":364},[],[366],{"type":55,"value":367},"get_document_by_url",{"type":50,"tag":297,"props":369,"children":370},{},[371],{"type":55,"value":372},"Retrieve a specific page by URL or path. Returns title, AI summaries, headings, navigation context, and optionally the full body.",{"type":50,"tag":275,"props":374,"children":375},{},[376,385],{"type":50,"tag":297,"props":377,"children":378},{},[379],{"type":50,"tag":68,"props":380,"children":382},{"className":381},[],[383],{"type":55,"value":384},"analyze_document_structure",{"type":50,"tag":297,"props":386,"children":387},{},[388],{"type":55,"value":389},"Analyze page structure: heading count, link count, parent pages, and AI enrichment status.",{"type":50,"tag":51,"props":391,"children":392},{},[393],{"type":50,"tag":154,"props":394,"children":395},{},[396],{"type":55,"value":397},"Coherence tools:",{"type":50,"tag":267,"props":399,"children":400},{},[401,415],{"type":50,"tag":271,"props":402,"children":403},{},[404],{"type":50,"tag":275,"props":405,"children":406},{},[407,411],{"type":50,"tag":279,"props":408,"children":409},{},[410],{"type":55,"value":283},{"type":50,"tag":279,"props":412,"children":413},{},[414],{"type":55,"value":288},{"type":50,"tag":290,"props":416,"children":417},{},[418,435],{"type":50,"tag":275,"props":419,"children":420},{},[421,430],{"type":50,"tag":297,"props":422,"children":423},{},[424],{"type":50,"tag":68,"props":425,"children":427},{"className":426},[],[428],{"type":55,"value":429},"check_docs_coherence",{"type":50,"tag":297,"props":431,"children":432},{},[433],{"type":55,"value":434},"Check how coherently a topic is covered across all Elastic docs. Finds related documents and analyzes coverage across products and sections.",{"type":50,"tag":275,"props":436,"children":437},{},[438,447],{"type":50,"tag":297,"props":439,"children":440},{},[441],{"type":50,"tag":68,"props":442,"children":444},{"className":443},[],[445],{"type":55,"value":446},"find_docs_inconsistencies",{"type":50,"tag":297,"props":448,"children":449},{},[450],{"type":55,"value":451},"Find potential inconsistencies across pages covering the same topic within a product area.",{"type":50,"tag":247,"props":453,"children":455},{"id":454},"how-to-use-them",[456],{"type":55,"value":457},"How to use them",{"type":50,"tag":147,"props":459,"children":460},{},[461,474,487,500],{"type":50,"tag":86,"props":462,"children":463},{},[464,472],{"type":50,"tag":154,"props":465,"children":466},{},[467],{"type":50,"tag":68,"props":468,"children":470},{"className":469},[],[471],{"type":55,"value":305},{"type":55,"value":473},": run 2–3 targeted searches covering the skill's scope. Use the product name and key feature terms as queries.",{"type":50,"tag":86,"props":475,"children":476},{},[477,485],{"type":50,"tag":154,"props":478,"children":479},{},[480],{"type":50,"tag":68,"props":481,"children":483},{"className":482},[],[484],{"type":55,"value":322},{"type":55,"value":486},": discover related pages that might cover adjacent steps the skill should mention.",{"type":50,"tag":86,"props":488,"children":489},{},[490,498],{"type":50,"tag":154,"props":491,"children":492},{},[493],{"type":50,"tag":68,"props":494,"children":496},{"className":495},[],[497],{"type":55,"value":367},{"type":55,"value":499},": fetch the full body of the 2–5 most relevant pages for detailed comparison. Request the body content, not just summaries.",{"type":50,"tag":86,"props":501,"children":502},{},[503,511],{"type":50,"tag":154,"props":504,"children":505},{},[506],{"type":50,"tag":68,"props":507,"children":509},{"className":508},[],[510],{"type":55,"value":446},{"type":55,"value":512},": if the skill covers a topic that spans multiple doc pages, check for inconsistencies across those pages.",{"type":50,"tag":51,"props":514,"children":515},{},[516,518,523],{"type":55,"value":517},"If the skill already contains doc URLs, fetch those pages with ",{"type":50,"tag":68,"props":519,"children":521},{"className":520},[],[522],{"type":55,"value":367},{"type":55,"value":524}," too — they are the skill author's own source claims and must be verified.",{"type":50,"tag":247,"props":526,"children":528},{"id":527},"pre-90-version-history-elasticcoguide",[529],{"type":55,"value":530},"Pre-9.0 version history: elastic.co\u002Fguide",{"type":50,"tag":51,"props":532,"children":533},{},[534,540,542,547,549,554],{"type":50,"tag":68,"props":535,"children":537},{"className":536},[],[538],{"type":55,"value":539},"https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002F",{"type":55,"value":541}," covers ",{"type":50,"tag":154,"props":543,"children":544},{},[545],{"type":55,"value":546},"9.0 and later only",{"type":55,"value":548},". If the skill makes claims about when a feature was introduced or changed ",{"type":50,"tag":154,"props":550,"children":551},{},[552],{"type":55,"value":553},"before 9.0",{"type":55,"value":555},", the current docs will not have that information — and may even contradict it.",{"type":50,"tag":51,"props":557,"children":558},{},[559,561,566,568,574],{"type":55,"value":560},"Use ",{"type":50,"tag":154,"props":562,"children":563},{},[564],{"type":55,"value":565},"WebFetch",{"type":55,"value":567}," on ",{"type":50,"tag":68,"props":569,"children":571},{"className":570},[],[572],{"type":55,"value":573},"https:\u002F\u002Fwww.elastic.co\u002Fguide\u002F",{"type":55,"value":575}," (which covers up to 8.19) when:",{"type":50,"tag":82,"props":577,"children":578},{},[579,584,589],{"type":50,"tag":86,"props":580,"children":581},{},[582],{"type":55,"value":583},"The skill states a feature was introduced or changed in a version earlier than 9.0 (e.g., \"Introduced 8.18\").",{"type":50,"tag":86,"props":585,"children":586},{},[587],{"type":55,"value":588},"The current docs show a different introduction version and you need to verify which is correct.",{"type":50,"tag":86,"props":590,"children":591},{},[592],{"type":55,"value":593},"The skill describes behavior that may have changed between the 8.x and 9.x releases.",{"type":50,"tag":51,"props":595,"children":596},{},[597,599,605],{"type":55,"value":598},"Example: if a skill says \"LOOKUP JOIN was introduced in 8.18\" but the 9.x docs say \"Preview in 9.0, GA since 9.1\", fetch the 8.18 release notes or the feature page from ",{"type":50,"tag":68,"props":600,"children":602},{"className":601},[],[603],{"type":55,"value":604},"\u002Fguide\u002F",{"type":55,"value":606}," to determine whether the 8.x claim is accurate or was a pre-release detail that never shipped.",{"type":50,"tag":51,"props":608,"children":609},{},[610,612,617],{"type":55,"value":611},"Do not flag a discrepancy between the skill and 9.x docs as an error if the skill is making a claim about 8.x history — verify against ",{"type":50,"tag":68,"props":613,"children":615},{"className":614},[],[616],{"type":55,"value":604},{"type":55,"value":618}," first.",{"type":50,"tag":247,"props":620,"children":622},{"id":621},"api-docs-requirement-mandatory-when-api-claims-exist",[623],{"type":55,"value":624},"API docs requirement (mandatory when API claims exist)",{"type":50,"tag":51,"props":626,"children":627},{},[628],{"type":55,"value":629},"If Phase 1 finds any API claim inventory items, you must explicitly attempt API operation-level verification, not only narrative docs.",{"type":50,"tag":147,"props":631,"children":632},{},[633,646,659,664],{"type":50,"tag":86,"props":634,"children":635},{},[636,638,644],{"type":55,"value":637},"Run at least one API-focused search query that includes the method\u002Fpath or operation name (for example, ",{"type":50,"tag":68,"props":639,"children":641},{"className":640},[],[642],{"type":55,"value":643},"PUT \u002F_index_template\u002F{name}",{"type":55,"value":645},").",{"type":50,"tag":86,"props":647,"children":648},{},[649,651,657],{"type":55,"value":650},"Fetch up to 3 operation-level pages under ",{"type":50,"tag":68,"props":652,"children":654},{"className":653},[],[655],{"type":55,"value":656},"\u002Fdocs\u002Fapi\u002Fdoc\u002F...\u002Foperation\u002F...",{"type":55,"value":658}," when available.",{"type":50,"tag":86,"props":660,"children":661},{},[662],{"type":55,"value":663},"Also fetch at least one narrative\u002Freference page for behavior context.",{"type":50,"tag":86,"props":665,"children":666},{},[667,669],{"type":55,"value":668},"If operation pages are not retrievable via MCP after reasonable attempts:\n",{"type":50,"tag":82,"props":670,"children":671},{},[672,690,702,707],{"type":50,"tag":86,"props":673,"children":674},{},[675,677,681,683,688],{"type":55,"value":676},"Attempt ",{"type":50,"tag":154,"props":678,"children":679},{},[680],{"type":55,"value":565},{"type":55,"value":682}," directly on the corresponding public API operation URL (for example under ",{"type":50,"tag":68,"props":684,"children":686},{"className":685},[],[687],{"type":55,"value":656},{"type":55,"value":689},") before recording a limitation.",{"type":50,"tag":86,"props":691,"children":692},{},[693,695,700],{"type":55,"value":694},"Record this as an ",{"type":50,"tag":154,"props":696,"children":697},{},[698],{"type":55,"value":699},"API evidence retrieval limitation",{"type":55,"value":701},".",{"type":50,"tag":86,"props":703,"children":704},{},[705],{"type":55,"value":706},"Do NOT mark a contradiction based only on missing retrievability.",{"type":50,"tag":86,"props":708,"children":709},{},[710],{"type":55,"value":711},"Continue with the best available narrative\u002Freference evidence and clearly state confidence limits.",{"type":50,"tag":247,"props":713,"children":715},{"id":714},"fallback-webfetch",[716],{"type":55,"value":717},"Fallback: WebFetch",{"type":50,"tag":51,"props":719,"children":720},{},[721],{"type":55,"value":722},"If the MCP is unavailable, or MCP cannot retrieve specific API operation pages, construct URLs manually:",{"type":50,"tag":147,"props":724,"children":725},{},[726,738],{"type":50,"tag":86,"props":727,"children":728},{},[729,731,736],{"type":55,"value":730},"Search ",{"type":50,"tag":68,"props":732,"children":734},{"className":733},[],[735],{"type":55,"value":539},{"type":55,"value":737}," for the product and feature.",{"type":50,"tag":86,"props":739,"children":740},{},[741,742,746],{"type":55,"value":560},{"type":50,"tag":154,"props":743,"children":744},{},[745],{"type":55,"value":565},{"type":55,"value":747}," to retrieve page content.",{"type":50,"tag":58,"props":749,"children":751},{"id":750},"phase-3-cross-reference-skill-against-docs",[752],{"type":55,"value":753},"Phase 3: Cross-reference skill against docs",{"type":50,"tag":51,"props":755,"children":756},{},[757],{"type":55,"value":758},"Compare the skill content against the fetched documentation across three dimensions.",{"type":50,"tag":247,"props":760,"children":762},{"id":761},"_3a-accuracy",[763],{"type":55,"value":764},"3a. Accuracy",{"type":50,"tag":51,"props":766,"children":767},{},[768],{"type":55,"value":769},"Does the skill contradict the docs?",{"type":50,"tag":51,"props":771,"children":772},{},[773],{"type":55,"value":774},"For each procedural claim and factual assertion from Phase 1, check whether the official docs agree:",{"type":50,"tag":82,"props":776,"children":777},{},[778,783,788,793,798],{"type":50,"tag":86,"props":779,"children":780},{},[781],{"type":55,"value":782},"API endpoints, parameters, and response formats.",{"type":50,"tag":86,"props":784,"children":785},{},[786],{"type":55,"value":787},"Configuration syntax and default values.",{"type":50,"tag":86,"props":789,"children":790},{},[791],{"type":55,"value":792},"Version-specific claims (feature introduced in X, deprecated in Y).",{"type":50,"tag":86,"props":794,"children":795},{},[796],{"type":55,"value":797},"Field names, index patterns, and environment variables.",{"type":50,"tag":86,"props":799,"children":800},{},[801,806],{"type":50,"tag":154,"props":802,"children":803},{},[804],{"type":55,"value":805},"Function, command, and feature existence",{"type":55,"value":807},": for every function, command, operator, or feature the skill references, actively search for it in the official docs. Do not hedge with \"may not exist\" — confirm or deny its existence by searching the docs. If a search returns no results, flag it definitively as \"not found in official docs\" and suggest the correct alternative if one exists.",{"type":50,"tag":51,"props":809,"children":810},{},[811],{"type":55,"value":812},"Flag contradictions with citations from both the skill and the docs.",{"type":50,"tag":51,"props":814,"children":815},{},[816],{"type":55,"value":817},"When API claim inventory exists, follow the API docs requirement above and treat operation-level and narrative evidence as complementary.",{"type":50,"tag":247,"props":819,"children":821},{"id":820},"_3b-completeness",[822],{"type":55,"value":823},"3b. Completeness",{"type":50,"tag":51,"props":825,"children":826},{},[827],{"type":55,"value":828},"Does the skill omit steps or information that the docs include and a user would need?",{"type":50,"tag":51,"props":830,"children":831},{},[832],{"type":55,"value":833},"Compare the skill's procedure against the docs' equivalent procedure. Look for:",{"type":50,"tag":82,"props":835,"children":836},{},[837,842,847,852],{"type":50,"tag":86,"props":838,"children":839},{},[840],{"type":55,"value":841},"Missing prerequisite steps (authentication, permissions, installation).",{"type":50,"tag":86,"props":843,"children":844},{},[845],{"type":55,"value":846},"Omitted configuration options that affect the outcome.",{"type":50,"tag":86,"props":848,"children":849},{},[850],{"type":55,"value":851},"Missing warnings or caveats documented in the official docs.",{"type":50,"tag":86,"props":853,"children":854},{},[855],{"type":55,"value":856},"Missing error handling for common failure modes.",{"type":50,"tag":51,"props":858,"children":859},{},[860,862,867],{"type":55,"value":861},"Flag missing content as ",{"type":50,"tag":154,"props":863,"children":864},{},[865],{"type":55,"value":866},"skill improvement opportunities",{"type":55,"value":701},{"type":50,"tag":247,"props":869,"children":871},{"id":870},"_3c-coverage-gaps",[872],{"type":55,"value":873},"3c. Coverage gaps",{"type":50,"tag":51,"props":875,"children":876},{},[877],{"type":55,"value":878},"Does the skill explain things not covered in the official docs?",{"type":50,"tag":51,"props":880,"children":881},{},[882],{"type":55,"value":883},"Look for:",{"type":50,"tag":82,"props":885,"children":886},{},[887,892,897],{"type":50,"tag":86,"props":888,"children":889},{},[890],{"type":55,"value":891},"Tribal knowledge encoded in the skill (workarounds, undocumented behaviors, practical tips).",{"type":50,"tag":86,"props":893,"children":894},{},[895],{"type":55,"value":896},"Procedures that span multiple doc pages and are not documented as an end-to-end workflow.",{"type":50,"tag":86,"props":898,"children":899},{},[900],{"type":55,"value":901},"Configuration patterns or query templates not present in the docs.",{"type":50,"tag":51,"props":903,"children":904},{},[905,907,912],{"type":55,"value":906},"Flag these as ",{"type":50,"tag":154,"props":908,"children":909},{},[910],{"type":55,"value":911},"docs improvement opportunities",{"type":55,"value":913},", not as errors. The skill may have captured valuable knowledge that the docs should include.",{"type":50,"tag":58,"props":915,"children":917},{"id":916},"phase-4-writing-and-structural-quality",[918],{"type":55,"value":919},"Phase 4: Writing and structural quality",{"type":50,"tag":51,"props":921,"children":922},{},[923],{"type":55,"value":924},"Review the prose content (SKILL.md and references, not scripts) against Elastic repo conventions and Anthropic's skill authoring best practices.",{"type":50,"tag":247,"props":926,"children":928},{"id":927},"frontmatter-checks",[929],{"type":55,"value":930},"Frontmatter checks",{"type":50,"tag":51,"props":932,"children":933},{},[934,936,942,943,949,951,957],{"type":55,"value":935},"Before checking frontmatter, look for a repo-level conventions file (",{"type":50,"tag":68,"props":937,"children":939},{"className":938},[],[940],{"type":55,"value":941},"AGENTS.md",{"type":55,"value":168},{"type":50,"tag":68,"props":944,"children":946},{"className":945},[],[947],{"type":55,"value":948},"CLAUDE.md",{"type":55,"value":950},", or ",{"type":50,"tag":68,"props":952,"children":954},{"className":953},[],[955],{"type":55,"value":956},"CONTRIBUTING.md",{"type":55,"value":958},") in the skill's repository root. If one exists, read it and apply its frontmatter rules. If none exists, fall back to Anthropic's standard skill requirements.",{"type":50,"tag":51,"props":960,"children":961},{},[962,967],{"type":50,"tag":154,"props":963,"children":964},{},[965],{"type":55,"value":966},"Repo-specific rules",{"type":55,"value":968}," (apply only if defined in the conventions file):",{"type":50,"tag":82,"props":970,"children":971},{},[972,984,989,1008],{"type":50,"tag":86,"props":973,"children":974},{},[975,977,983],{"type":55,"value":976},"Naming pattern (e.g., ",{"type":50,"tag":68,"props":978,"children":980},{"className":979},[],[981],{"type":55,"value":982},"\u003Cgroup>-\u003Cskill-folder>",{"type":55,"value":645},{"type":50,"tag":86,"props":985,"children":986},{},[987],{"type":55,"value":988},"Description length limit (e.g., 200 characters).",{"type":50,"tag":86,"props":990,"children":991},{},[992,994,1000,1001,1007],{"type":55,"value":993},"Required metadata fields (e.g., ",{"type":50,"tag":68,"props":995,"children":997},{"className":996},[],[998],{"type":55,"value":999},"metadata.author",{"type":55,"value":168},{"type":50,"tag":68,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":55,"value":1006},"metadata.version",{"type":55,"value":645},{"type":50,"tag":86,"props":1009,"children":1010},{},[1011],{"type":55,"value":1012},"Any other constraints the repo enforces.",{"type":50,"tag":51,"props":1014,"children":1015},{},[1016,1021],{"type":50,"tag":154,"props":1017,"children":1018},{},[1019],{"type":55,"value":1020},"Universal rules",{"type":55,"value":1022}," (always apply):",{"type":50,"tag":82,"props":1024,"children":1025},{},[1026,1036,1060,1070],{"type":50,"tag":86,"props":1027,"children":1028},{},[1029,1034],{"type":50,"tag":68,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":55,"value":166},{"type":55,"value":1035}," is present, kebab-case, and matches the skill's folder name.",{"type":50,"tag":86,"props":1037,"children":1038},{},[1039,1044,1046,1052,1054,1059],{"type":50,"tag":68,"props":1040,"children":1042},{"className":1041},[],[1043],{"type":55,"value":174},{"type":55,"value":1045}," is present and includes both ",{"type":50,"tag":1047,"props":1048,"children":1049},"em",{},[1050],{"type":55,"value":1051},"what the skill does",{"type":55,"value":1053}," and ",{"type":50,"tag":1047,"props":1055,"children":1056},{},[1057],{"type":55,"value":1058},"when to use it",{"type":55,"value":701},{"type":50,"tag":86,"props":1061,"children":1062},{},[1063,1068],{"type":50,"tag":68,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":55,"value":174},{"type":55,"value":1069}," is written in third person (\"Executes queries...\", not \"I help you execute queries\").",{"type":50,"tag":86,"props":1071,"children":1072},{},[1073,1079,1081,1086],{"type":50,"tag":68,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":55,"value":1078},"version",{"type":55,"value":1080}," or ",{"type":50,"tag":68,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":55,"value":1006},{"type":55,"value":1087}," is present and follows SemVer.",{"type":50,"tag":51,"props":1089,"children":1090},{},[1091],{"type":55,"value":1092},"Note the conventions file path in the report so reviewers can verify the rules are current.",{"type":50,"tag":247,"props":1094,"children":1096},{"id":1095},"instruction-quality",[1097],{"type":55,"value":1098},"Instruction quality",{"type":50,"tag":82,"props":1100,"children":1101},{},[1102,1112,1122,1132],{"type":50,"tag":86,"props":1103,"children":1104},{},[1105,1110],{"type":50,"tag":154,"props":1106,"children":1107},{},[1108],{"type":55,"value":1109},"Specific and actionable",{"type":55,"value":1111},": flag vague directives like \"validate things properly\" that lack concrete commands or expected output.",{"type":50,"tag":86,"props":1113,"children":1114},{},[1115,1120],{"type":50,"tag":154,"props":1116,"children":1117},{},[1118],{"type":55,"value":1119},"Error handling",{"type":55,"value":1121}," check whether the skill includes a troubleshooting section or documents common failure modes and how to recover.",{"type":50,"tag":86,"props":1123,"children":1124},{},[1125,1130],{"type":50,"tag":154,"props":1126,"children":1127},{},[1128],{"type":55,"value":1129},"Examples",{"type":55,"value":1131}," check for concrete usage examples. Input\u002Foutput pairs are preferred.",{"type":50,"tag":86,"props":1133,"children":1134},{},[1135,1140],{"type":50,"tag":154,"props":1136,"children":1137},{},[1138],{"type":55,"value":1139},"Feedback loops",{"type":55,"value":1141}," for quality-critical workflows, check for \"run validator, fix errors, repeat\" patterns.",{"type":50,"tag":247,"props":1143,"children":1145},{"id":1144},"conciseness",[1146],{"type":55,"value":1147},"Conciseness",{"type":50,"tag":82,"props":1149,"children":1150},{},[1151,1156,1161],{"type":50,"tag":86,"props":1152,"children":1153},{},[1154],{"type":55,"value":1155},"Flag over-explained concepts that Claude already knows. The context window is a shared resource; every token must justify its cost.",{"type":50,"tag":86,"props":1157,"children":1158},{},[1159],{"type":55,"value":1160},"Flag unnecessary verbosity where a concise version conveys the same meaning.",{"type":50,"tag":86,"props":1162,"children":1163},{},[1164],{"type":55,"value":1165},"Challenge explanatory paragraphs: \"Does Claude really need this explanation, or is it obvious from the code example?\"",{"type":50,"tag":247,"props":1167,"children":1169},{"id":1168},"progressive-disclosure",[1170],{"type":55,"value":1171},"Progressive disclosure",{"type":50,"tag":82,"props":1173,"children":1174},{},[1175,1187,1198,1203],{"type":50,"tag":86,"props":1176,"children":1177},{},[1178,1180,1186],{"type":55,"value":1179},"SKILL.md should contain core instructions. Detailed reference material belongs in ",{"type":50,"tag":68,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":55,"value":1185},"references\u002F",{"type":55,"value":701},{"type":50,"tag":86,"props":1188,"children":1189},{},[1190,1192,1197],{"type":55,"value":1191},"Flag skills that exceed 500 lines in SKILL.md without offloading detail to ",{"type":50,"tag":68,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":55,"value":1185},{"type":55,"value":701},{"type":50,"tag":86,"props":1199,"children":1200},{},[1201],{"type":55,"value":1202},"Check that references are one level deep from SKILL.md — no nested references where file A links to file B which links to file C.",{"type":50,"tag":86,"props":1204,"children":1205},{},[1206],{"type":55,"value":1207},"Flag reference files over 100 lines that lack a table of contents at the top.",{"type":50,"tag":247,"props":1209,"children":1211},{"id":1210},"voice-and-structure",[1212],{"type":55,"value":1213},"Voice and structure",{"type":50,"tag":82,"props":1215,"children":1216},{},[1217,1227,1237],{"type":50,"tag":86,"props":1218,"children":1219},{},[1220,1225],{"type":50,"tag":154,"props":1221,"children":1222},{},[1223],{"type":55,"value":1224},"Imperative voice",{"type":55,"value":1226},": instructions should use imperative mood (\"Query the API\"), not conditional (\"you might want to query\").",{"type":50,"tag":86,"props":1228,"children":1229},{},[1230,1235],{"type":50,"tag":154,"props":1231,"children":1232},{},[1233],{"type":55,"value":1234},"Numbered steps",{"type":55,"value":1236},": procedures should use numbered steps, not prose paragraphs.",{"type":50,"tag":86,"props":1238,"children":1239},{},[1240,1245],{"type":50,"tag":154,"props":1241,"children":1242},{},[1243],{"type":55,"value":1244},"Clear sections",{"type":55,"value":1246},": the skill should have identifiable sections for what it does, when to use it, and how to use it.",{"type":50,"tag":247,"props":1248,"children":1250},{"id":1249},"anti-patterns",[1251],{"type":55,"value":1252},"Anti-patterns",{"type":50,"tag":51,"props":1254,"children":1255},{},[1256],{"type":55,"value":1257},"Flag the following if found:",{"type":50,"tag":82,"props":1259,"children":1260},{},[1261,1271,1281,1291],{"type":50,"tag":86,"props":1262,"children":1263},{},[1264,1269],{"type":50,"tag":154,"props":1265,"children":1266},{},[1267],{"type":55,"value":1268},"Time-sensitive information",{"type":55,"value":1270},": hardcoded dates or version conditionals that will rot (e.g., \"before August 2025\", \"if you're on version 8.x\").",{"type":50,"tag":86,"props":1272,"children":1273},{},[1274,1279],{"type":50,"tag":154,"props":1275,"children":1276},{},[1277],{"type":55,"value":1278},"Inconsistent terminology",{"type":55,"value":1280},": mixing terms for the same concept within the skill.",{"type":50,"tag":86,"props":1282,"children":1283},{},[1284,1289],{"type":50,"tag":154,"props":1285,"children":1286},{},[1287],{"type":55,"value":1288},"Too many options",{"type":55,"value":1290},": presenting multiple approaches without a clear default and recommendation.",{"type":50,"tag":86,"props":1292,"children":1293},{},[1294,1299],{"type":50,"tag":154,"props":1295,"children":1296},{},[1297],{"type":55,"value":1298},"Windows-style paths",{"type":55,"value":1300},": backslashes in file paths.",{"type":50,"tag":58,"props":1302,"children":1304},{"id":1303},"phase-5-report",[1305],{"type":55,"value":1306},"Phase 5: Report",{"type":50,"tag":51,"props":1308,"children":1309},{},[1310],{"type":55,"value":1311},"Present all findings as a single structured report.",{"type":50,"tag":1313,"props":1314,"children":1319},"pre",{"className":1315,"code":1317,"language":55,"meta":1318},[1316],"language-text","## Skill review: \u003Cskill-name>\n\n### Skill summary\n- **Product**: \u003CElastic product or feature>\n- **Scope**: \u003Cone-sentence summary of what the skill does>\n- **Files reviewed**: SKILL.md, references\u002F... (list all)\n- **Docs pages consulted**: \u003Clist with URLs>\n- **API evidence coverage**: \u003Coperation-level API pages checked, or explicit MCP retrieval limitation>\n\n### Docs accuracy\n\u003CFor each issue: what the skill says, what the docs say, and a citation for each.>\n\u003CIf no issues: \"No contradictions found.\">\n\n### Completeness (skill improvement opportunities)\n\u003CSteps or information in the docs that the skill omits.>\n\u003CIf none: \"No missing steps identified.\">\n\n### Coverage gaps (docs improvement opportunities)\n\u003CKnowledge in the skill that is not in the official docs.>\n\u003CIf none: \"No coverage gaps identified.\">\n\n### Writing quality\n\u003CIssues grouped by category: frontmatter, instruction quality, conciseness,\nprogressive disclosure, voice\u002Fstructure, anti-patterns.>\n\u003CIf no issues: \"No writing quality issues found.\">\n\n### Recommendations\nPrioritized list of suggested actions, split into:\n- **Skill fixes** — things to change in the skill\n- **Docs opportunities** — things to add to official documentation\n","",[1320],{"type":50,"tag":68,"props":1321,"children":1322},{"__ignoreMap":1318},[1323],{"type":55,"value":1317},{"type":50,"tag":51,"props":1325,"children":1326},{},[1327],{"type":55,"value":1328},"If the skill has no issues in a section, say so explicitly rather than omitting the section. Every section must appear in the report.",{"type":50,"tag":58,"props":1330,"children":1332},{"id":1331},"guidelines",[1333],{"type":55,"value":1334},"Guidelines",{"type":50,"tag":82,"props":1336,"children":1337},{},[1338,1343,1353,1358,1363,1375,1380],{"type":50,"tag":86,"props":1339,"children":1340},{},[1341],{"type":55,"value":1342},"Treat the official Elastic documentation for version 9.x and higher as the ultimate source of truth for accuracy checks. Ignore pre-9.x docs.",{"type":50,"tag":86,"props":1344,"children":1345},{},[1346,1351],{"type":50,"tag":154,"props":1347,"children":1348},{},[1349],{"type":55,"value":1350},"Verify, don't hedge.",{"type":55,"value":1352}," When the skill references a function, command, or feature, search for it in the docs. Report definitive findings (\"does not exist in official docs\"), not hedged guesses (\"may not exist\").",{"type":50,"tag":86,"props":1354,"children":1355},{},[1356],{"type":55,"value":1357},"Do NOT treat coverage gaps as errors. Skills often capture useful knowledge that docs should adopt.",{"type":50,"tag":86,"props":1359,"children":1360},{},[1361],{"type":55,"value":1362},"Be specific in citations: include the doc URL and the relevant passage, not just \"the docs say otherwise.\"",{"type":50,"tag":86,"props":1364,"children":1365},{},[1366,1368,1373],{"type":55,"value":1367},"Review SKILL.md and ",{"type":50,"tag":68,"props":1369,"children":1371},{"className":1370},[],[1372],{"type":55,"value":1185},{"type":55,"value":1374}," files. Do not review scripts.",{"type":50,"tag":86,"props":1376,"children":1377},{},[1378],{"type":55,"value":1379},"Do not modify any files. This skill is read-only.",{"type":50,"tag":86,"props":1381,"children":1382},{},[1383],{"type":55,"value":1384},"If the MCP returns no relevant docs, say so and skip Phase 3. Do not fabricate doc references.",{"items":1386,"total":1463},[1387,1397,1410,1420,1429,1442,1452],{"slug":1388,"name":1388,"fn":1389,"description":1390,"org":1391,"tags":1392,"stars":23,"repoUrl":24,"updatedAt":1396},"docs-applies-to-tagging","validate applies_to tags in Elastic documentation","Validate and generate applies_to tags in Elastic documentation, including for cumulative docs across versions and deployment types. Use when writing new docs pages, reviewing existing pages for correct applies_to usage, deciding whether to preserve or replace existing version-scoped content, or when content changes lifecycle state (experimental, preview, beta, GA, deprecated, removed).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1393,1394,1395],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:50:42.801473",{"slug":1398,"name":1398,"fn":1399,"description":1400,"org":1401,"tags":1402,"stars":23,"repoUrl":24,"updatedAt":1409},"docs-check-style","check documentation for Elastic style compliance","Check documentation for Elastic style guide compliance using Vale linter output and style rules. Use when writing, editing, or reviewing docs to catch voice, tone, grammar, formatting, accessibility, and word choice issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1403,1406,1407,1408],{"name":1404,"slug":1405,"type":15},"Accessibility","accessibility",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:49:36.112751",{"slug":1411,"name":1411,"fn":1412,"description":1413,"org":1414,"tags":1415,"stars":23,"repoUrl":24,"updatedAt":1419},"docs-content-type-checker","check Elastic documentation content types","Check a docs-content page against Elastic content type guidelines (overview, how-to, tutorial, troubleshooting, changelog), or classify a proposed page idea against the content types before drafting. Use when the user asks to check content type compliance, validate page structure, review a doc against content type standards, or decide which content type a planned page should use.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1416,1417,1418],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:50:36.826563",{"slug":1421,"name":1421,"fn":1422,"description":1423,"org":1424,"tags":1425,"stars":23,"repoUrl":24,"updatedAt":1428},"docs-draft-workflow-docs","draft Elastic Workflows documentation","Draft or update Elastic Workflows documentation pages in explore-analyze\u002Fworkflows\u002F — step references, use cases, how-tos, concepts, and overviews. Use when writing Workflows docs, documenting a step type, turning workflow YAML into documentation, drafting from a doc issue in docs-content or docs-content-internal, or creating a new page under the Workflows docset.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1426,1427],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:48:02.16095",{"slug":1430,"name":1430,"fn":1431,"description":1432,"org":1433,"tags":1434,"stars":23,"repoUrl":24,"updatedAt":1441},"docs-fix-changelog","improve Elastic changelog YAML files","Suggest improved text for changelog YAML files against current Elastic standards. Mirrors the pattern catalog from docs-review-changelog to provide consistent fixes. Includes type-title alignment checking and technical content assessment to catch overly technical titles that need user-focused rewrites. Features repository-aware area validation and enhanced confidence scoring. Supports single files or directories. Fetches canonical guidance to stay in sync. Use after review identifies quality issues, or when drafting new changelogs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1435,1436,1437,1438],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":1439,"slug":1440,"type":15},"YAML","yaml","2026-07-12T07:48:58.570382",{"slug":1443,"name":1443,"fn":1444,"description":1445,"org":1446,"tags":1447,"stars":23,"repoUrl":24,"updatedAt":1451},"docs-flag-jargon-skill","flag Elastic jargon in documentation","Flag Elastic-internal jargon in documentation and suggest plain-language replacements. Use when reviewing, writing, or editing docs to catch terms that external readers would not understand.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1448,1449,1450],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:49:34.836748",{"slug":1453,"name":1453,"fn":1454,"description":1455,"org":1456,"tags":1457,"stars":23,"repoUrl":24,"updatedAt":1462},"docs-frontmatter-audit","audit Elastic documentation frontmatter","Audit Elastic documentation files for frontmatter completeness and correctness. Checks products, description, and navigation_title fields across a directory. Use when auditing docs metadata, checking frontmatter quality before publishing, or validating a batch of files.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1458,1459,1460,1461],{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:49:39.883351",18,{"items":1465,"total":1635},[1466,1485,1502,1517,1536,1548,1558,1573,1585,1598,1609,1622],{"slug":1467,"name":1467,"fn":1468,"description":1469,"org":1470,"tags":1471,"stars":1482,"repoUrl":1483,"updatedAt":1484},"accessing-benchmark-results","retrieve and analyze Rally benchmark results","Retrieve Rally benchmark results from an external Elasticsearch metrics store. Use to list past races, get a single race's overall (per-task) results, chart a metric's trend across multiple runs, compare two races, or check whether a run converged — e.g. \"show me recent geonames races\", \"what's the service_time trend for nyc_taxis over the last 30 days?\", \"compare these two race-ids\". Applies when datastore.type = elasticsearch is set in ~\u002F.rally\u002Frally.ini.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1472,1475,1478,1479],{"name":1473,"slug":1474,"type":15},"Analytics","analytics",{"name":1476,"slug":1477,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":1480,"slug":1481,"type":15},"Performance","performance",2027,"https:\u002F\u002Fgithub.com\u002Felastic\u002Frally","2026-07-12T07:46:38.54144",{"slug":1486,"name":1486,"fn":1487,"description":1488,"org":1489,"tags":1490,"stars":1482,"repoUrl":1483,"updatedAt":1501},"developing-rally","develop and debug Rally source code","Work on Rally's own codebase, not running benchmarks with it. Use when setting up the dev environment, running Rally's tests or linters, navigating its source, debugging Rally's own code, or making changes to Rally itself.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1491,1494,1495,1498],{"name":1492,"slug":1493,"type":15},"Debugging","debugging",{"name":9,"slug":8,"type":15},{"name":1496,"slug":1497,"type":15},"Engineering","engineering",{"name":1499,"slug":1500,"type":15},"Local Development","local-development","2026-07-12T07:46:35.976807",{"slug":1503,"name":1503,"fn":1504,"description":1505,"org":1506,"tags":1507,"stars":1482,"repoUrl":1483,"updatedAt":1516},"running-benchmarks","run Rally benchmarks against Elasticsearch","Run Rally benchmarks (races) against Elasticsearch — an existing\u002Fexternal cluster or a Rally-provisioned distribution — and read the summary report. Use when running a race (any pipeline, track, challenge, target-hosts, or auth) or when interpreting throughput, latency, and service_time results.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1508,1509,1512,1513],{"name":9,"slug":8,"type":15},{"name":1510,"slug":1511,"type":15},"Elasticsearch","elasticsearch",{"name":1480,"slug":1481,"type":15},{"name":1514,"slug":1515,"type":15},"Testing","testing","2026-07-12T07:46:37.277964",{"slug":1518,"name":1518,"fn":1519,"description":1520,"org":1521,"tags":1522,"stars":1533,"repoUrl":1534,"updatedAt":1535},"cloud-access-management","manage Elastic Cloud organization access","Manage Elastic Cloud organization access: invite users, assign roles to Serverless projects, and create or revoke Cloud API keys. Use when granting, modifying, or auditing user access.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1523,1526,1527,1530],{"name":1524,"slug":1525,"type":15},"Cloud","cloud",{"name":9,"slug":8,"type":15},{"name":1528,"slug":1529,"type":15},"Operations","operations",{"name":1531,"slug":1532,"type":15},"Permissions","permissions",531,"https:\u002F\u002Fgithub.com\u002Felastic\u002Fagent-skills","2026-07-12T07:46:44.946285",{"slug":1537,"name":1537,"fn":1538,"description":1539,"org":1540,"tags":1541,"stars":1533,"repoUrl":1534,"updatedAt":1547},"cloud-create-project","create Elastic Cloud Serverless projects","Creates Elastic Cloud Serverless projects (Elasticsearch, Observability, or Security) via the REST API, saves credentials to file, and bootstraps a scoped Elasticsearch API key. Use when creating a new serverless project, provisioning a search or observability environment, or spinning up a new Elastic Cloud project.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1542,1543,1546],{"name":1524,"slug":1525,"type":15},{"name":1544,"slug":1545,"type":15},"Deployment","deployment",{"name":1510,"slug":1511,"type":15},"2026-07-12T07:46:42.353362",{"slug":1549,"name":1549,"fn":1550,"description":1551,"org":1552,"tags":1553,"stars":1533,"repoUrl":1534,"updatedAt":1557},"cloud-manage-project","manage Elastic Cloud Serverless projects","Manages existing Elastic Cloud Serverless projects: list, get, update, delete, reset credentials, resume, and load saved credentials. Connects to existing projects by resolving endpoints and acquiring scoped Elasticsearch API keys. Use when performing day-2 operations on serverless projects, connecting to an existing project, loading or resetting project credentials, or looking up project details.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1554,1555,1556],{"name":1524,"slug":1525,"type":15},{"name":1510,"slug":1511,"type":15},{"name":1528,"slug":1529,"type":15},"2026-07-12T07:46:41.097412",{"slug":1559,"name":1559,"fn":1560,"description":1561,"org":1562,"tags":1563,"stars":1533,"repoUrl":1534,"updatedAt":1572},"cloud-network-security","manage Elastic Cloud network security","Manage Serverless network security (traffic filters): create, update, and delete IP filters and AWS PrivateLink VPC filters. Use when restricting network access or configuring private connectivity.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1564,1565,1566,1569],{"name":1524,"slug":1525,"type":15},{"name":1510,"slug":1511,"type":15},{"name":1567,"slug":1568,"type":15},"Networking","networking",{"name":1570,"slug":1571,"type":15},"Security","security","2026-07-12T07:46:43.675992",{"slug":1574,"name":1574,"fn":1575,"description":1576,"org":1577,"tags":1578,"stars":1533,"repoUrl":1534,"updatedAt":1584},"cloud-setup","configure Elastic Cloud authentication","Configures Elastic Cloud authentication and environment defaults. Use when setting up EC_API_KEY, configuring Cloud API access, or when another cloud skill requires credentials.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1579,1582,1583],{"name":1580,"slug":1581,"type":15},"Authentication","authentication",{"name":1524,"slug":1525,"type":15},{"name":1510,"slug":1511,"type":15},"2026-07-12T07:46:39.783105",{"slug":1586,"name":1586,"fn":1587,"description":1588,"org":1589,"tags":1590,"stars":1533,"repoUrl":1534,"updatedAt":1597},"elasticsearch-audit","configure Elasticsearch security audit logs","Enable, configure, and query Elasticsearch security audit logs. Use when the task involves audit logging setup, event filtering, or investigating security incidents like failed logins.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1591,1592,1593,1596],{"name":17,"slug":18,"type":15},{"name":1510,"slug":1511,"type":15},{"name":1594,"slug":1595,"type":15},"Logs","logs",{"name":1570,"slug":1571,"type":15},"2026-07-12T07:47:35.092599",{"slug":1599,"name":1599,"fn":1600,"description":1601,"org":1602,"tags":1603,"stars":1533,"repoUrl":1534,"updatedAt":1608},"elasticsearch-authn","configure Elasticsearch authentication realms","Authenticate to Elasticsearch using native, file-based, LDAP\u002FAD, SAML, OIDC, Kerberos, JWT, or certificate realms. Use when connecting with credentials, choosing a realm, or managing API keys. Assumes the target realms are already configured.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1604,1605,1606,1607],{"name":1580,"slug":1581,"type":15},{"name":9,"slug":8,"type":15},{"name":1510,"slug":1511,"type":15},{"name":1570,"slug":1571,"type":15},"2026-07-12T07:47:41.474547",{"slug":1610,"name":1610,"fn":1611,"description":1612,"org":1613,"tags":1614,"stars":1533,"repoUrl":1534,"updatedAt":1621},"elasticsearch-authz","manage Elasticsearch RBAC and security roles","Manage Elasticsearch RBAC: native users, roles, role mappings, document- and field-level security. Use when creating users or roles, assigning privileges, or mapping external realms like LDAP\u002FSAML.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1615,1616,1617,1620],{"name":9,"slug":8,"type":15},{"name":1510,"slug":1511,"type":15},{"name":1618,"slug":1619,"type":15},"RBAC","rbac",{"name":1570,"slug":1571,"type":15},"2026-07-12T07:47:36.394177",{"slug":1623,"name":1623,"fn":1624,"description":1625,"org":1626,"tags":1627,"stars":1533,"repoUrl":1534,"updatedAt":1634},"elasticsearch-esql","query Elasticsearch data with ES|QL","Execute ES|QL (Elasticsearch Query Language) queries, use when the user wants to query Elasticsearch data, analyze logs, aggregate metrics, explore data, or create charts and dashboards from ES|QL results.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1628,1629,1630,1631],{"name":1473,"slug":1474,"type":15},{"name":1476,"slug":1477,"type":15},{"name":1510,"slug":1511,"type":15},{"name":1632,"slug":1633,"type":15},"SQL","sql","2026-07-12T07:47:40.249533",86]