[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-elastic-code-citations":3,"mdc--hlxxc3-key":29,"related-org-elastic-code-citations":890,"related-repo-elastic-code-citations":1064},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":19,"repoUrl":20,"updatedAt":21,"license":22,"forks":19,"topics":23,"repo":24,"sourceUrl":27,"mdContent":28},"code-citations","cite code symbols and repository claims","Use whenever an answer names a code symbol, class, function, config key, endpoint, file, directory, or file extension - or makes any checkable claim about repository behavior (a default value, a version, a recall\u002Flatency figure, a behavioral guarantee). This is nearly every substantive answer this agent produces, so treat it as the default path, not an edge case reserved for explicit \"cite your sources\" requests.",{"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],{"name":13,"slug":14,"type":15},"Documentation","documentation","tag",{"name":17,"slug":18,"type":15},"Code Analysis","code-analysis",2,"https:\u002F\u002Fgithub.com\u002Felastic\u002Fsourcerer","2026-08-07T05:03:32.676248",null,[],{"repoUrl":20,"stars":19,"forks":19,"topics":25,"description":26},[],"Sourcerer answers questions about your software from the source.","https:\u002F\u002Fgithub.com\u002Felastic\u002Fsourcerer\u002Ftree\u002FHEAD\u002Fsrc\u002Fsourcerer\u002Fskills\u002Fcode-citations","---\nname: \"code-citations\"\ndescription: \"Use whenever an answer names a code symbol, class, function, config key, endpoint, file, directory, or file extension - or makes any checkable claim about repository behavior (a default value, a version, a recall\u002Flatency figure, a behavioral guarantee). This is nearly every substantive answer this agent produces, so treat it as the default path, not an edge case reserved for explicit \\\"cite your sources\\\" requests.\"\n---\n\n## When this applies\nTrigger this on any answer where you:\n- name a class, function, method, variable, constant, config key, endpoint, file path, directory, or file extension, or\n- state a default, version, guarantee, or other checkable fact about repository behavior.\n\nIn practice that's almost every response from this agent - assume it applies unless you're doing pure chit-chat with no claims about the codebase.\n\n## Source hierarchy\nPrefer sources in this order when a claim could be supported by more than one:\n1. **Source code** - the primary source of truth for behavior. Any claim about actual behavior ultimately resolves here.\n2. **Repository documentation** - secondary. Good for intent, rationale, and cross-cutting architecture that no single line of code expresses, but subordinate to code on behavior questions, and it can lag the code.\n3. **Your own general knowledge** - weakest, and not citable. Use only to frame or explain; never as the basis for a factual claim about this specific software.\n\nWhen sources conflict, the code wins - state the discrepancy rather than smoothing it over.\n\n## What to cite\n- Cite the first mention of each notable symbol, file, or directory: classes, functions, methods, variables, constants, config keys, endpoints, file paths, directories, file extensions. No need to repeat the citation on later mentions of the same one.\n- Cite claims, not only symbols. Any concrete, checkable assertion - a default value, a recall\u002Flatency figure, a version or license-availability statement, a behavioral guarantee - needs a citation to the line(s) that establish it, even with no backticked identifier in the sentence.\n- Citing a class or file doesn't cover its members. If you go on to name specific fields, constants, methods, or defaults belonging to it, each needs its own first-mention citation.\n\n## Finding sources\n- Use the `code-search` skill recursively to find sources if you don't have enough information to properly cite them\n\n## How to format\n- Every citation is an inline Markdown link with the linked text in backticks, at the point of first mention - not a trailing \"Source:\" note. Example: `` [`AuthService`](url) ``.\n- If you put a term in backticks - including inside tables, bullet lists, or parameter\u002Fdefault-value listings - it needs a citation, unless it's a generic language keyword, built-in type, or standard-library term not defined in the source under discussion.\n- The URL anchor must encode the full span you're citing: a single line is `#L{n}`, a multi-line span is `#L{start}-L{end}` (note the hyphen and the second line number). If your sentence or link text refers to more than one line, the href MUST be the range form - a bare `#L{start}` for a multi-line claim is wrong. See \"Choosing the citation extent\" for picking the span.\n\n## Where to point\n- Prefer the most precise URL you can construct: a specific line or line range where a symbol is declared or a claim is established, rather than the containing file.\n- Cite where a symbol is *defined*, not merely referenced, imported, or instantiated - unless your point is specifically about that usage site.\n- If a symbol's definition lives outside the indexed repos (e.g. a third-party dependency), cite the nearest resolvable reference (its import or declaration) and note that the definition is external.\n- Line and range citations are only as reliable as the tool output they came from. Follow each sourcerer tool's own description for how to turn its output into an accurate citation:\n  - `code.grep` \u002F `code.search` return one row per line, each with an authoritative `line.number` - cite single lines and don't merge separate rows into a range.\n  - The content tools (`files.cat` \u002F `files.head` \u002F `files.tail` \u002F `files.read_lines`) prefix every returned line with its authoritative 1-indexed line number (grep -n style, `\u003Cline>:\u003Ccontent>`) unless called with `show_line_numbers=false` - read the number directly off the line you're citing, and off the first and last lines of a block to cite a range.\n  - Never derive a line position by counting lines inside returned file content - read it from the per-line prefix (or a per-row `line.number`) (see Integrity below).\n\n## Choosing the citation extent\nMatch the cited span to the scope of the claim - no broader, no narrower. A range and a single line are each precise when they fit the claim; the failure mode is a mismatch, not a wrong choice of shape.\n- **Defining a symbol** (function, class, method) → cite from the first line of its leading doc\u002Fcomment block (and any decorators or annotations) through its closing line, so the citation captures both intent and implementation.\n- **A specific value, default, config key, or single statement** → cite the one line that establishes it. Don't widen to the enclosing function - a reader verifying \"the default is 3\" should land on that line, not hunt through a block.\n- **A behavioral claim about a block** (a loop, a guard clause, a sequence of steps) → cite exactly the lines of that block.\n- **A large definition** → for \"where it's defined,\" cite the signature (plus any docstring); for a claim about one part of the body, cite that tighter sub-range. Never cite a whole multi-page body to support a narrow point.\n- **Verify both endpoints.** A range asserts its start *and* its end, and the closing line is far easier to guess wrong than the declaration. Read both boundaries from tool output - the numbered content tools, or `code.grep` for a closing pattern - never estimate them. A range is legitimate only when you've read the contiguous block and confirmed its endpoints; stitching a range out of separate `code.grep`\u002F`code.search` match rows is not (see the anti-pattern under Examples).\n- **Put the chosen extent in the URL.** The link's anchor must match the span you're citing - a range uses the `#L{start}-L{end}` fragment, a single line uses `#L{line}`. Never state or link a range in the visible text (e.g. `lines 939-977`) while pointing the href at only its first line: a bare `#L{start}` silently narrows the citation to one line and contradicts what you wrote.\n\n## URL templates (host-specific)\n- The URL scheme for a citation depends on the git host the code lives on. Every `sourcerer.code.*` and `sourcerer.files.*` tool returns a `git.host` field on each row alongside `git.org`, `git.repo`, and `git.commit`.\n- Read `git.host` from the tool output, then look up the matching host section in this skill's referenced content (named `sourcerer-code-citations-\u003Cgit.host>`, for example `sourcerer-code-citations-github` for `git.host = \"github\"`). That section holds the exact directory \u002F file \u002F single-line \u002F line-range URL templates for that host.\n- Fill the template's tokens (`{git.org}`, `{git.repo}`, `{git.commit}`, `{file.path}`, `{file.directory}`, `{line.number}`, `{line.number_start}`, `{line.number_end}`) from the tool output. `git.org` already includes any provider-specific extra segment (e.g. a project or region) as an `org+extra` value, so substitute it verbatim.\n- If you have not yet loaded the referenced content for a result's `git.host`, load it before formatting that citation. Do not guess a host's URL scheme.\n\n## Integrity\n- Cite only locations you've verified with a tool call and can construct from the host-specific URL template for that result's `git.host` (see \"URL templates\" above). Never cite external web pages (blog posts, doc sites, third-party references) - they can't be verified with your tools. If external material genuinely adds value, mention it as external background in prose, not as a citation.\n- If you can't confirm where something is defined, say so rather than guessing. Reading a line number off a tool's per-line prefix or per-row `line.number` is verification; counting or estimating a position from unnumbered text is not.\n- Before finalizing, re-scan every citation: any whose claim or link text covers more than one line must have a `#L{start}-L{end}` href (it contains `-L`). A multi-line claim pointing at a bare `#L{start}` is the single most common citation error here - fix it before answering.\n\n## Examples\n\n**Correct (range for a definition - the common case):**\nScores are combined by conflation of probability distributions ([`calculateCompositeScore`](https:\u002F\u002Fgithub.com\u002Facme\u002Fsearch-svc\u002Fblob\u002Fv2.4.1\u002Fsrc\u002Fresolution\u002FJob.java#L622-L650)) - the claim is about the whole method, so the href carries the full range `#L622-L650`, not just `#L622`. Both endpoints were read off numbered tool output, not stitched together from separate `code.grep` match rows.\n\n**Correct (single line for a specific value):**\nThe retry limit defaults to 3 ([`MAX_RETRIES`](https:\u002F\u002Fgithub.com\u002Facme\u002Fsearch-svc\u002Fblob\u002Fv2.4.1\u002Fsrc\u002Fconfig.py#L42)) - a one-line fact, so a single-line `#L42` anchor is exactly right.\n\n**Incorrect (missing citation on a checkable claim):**\nThe retry limit defaults to 3.\n\n**Incorrect (merging separate per-line rows into a range):**\nCiting lines 10-14 as one block when the tool returned five independent single-line rows for 10, 11, 12, 13, 14.\n\n**Incorrect (range in the text, single line in the URL):**\nLink text of `lines 939-977` whose href is `…\u002FJob.java#L939` - the anchor drops the end of the range and highlights only line 939. It must be `…\u002FJob.java#L939-L977`.\n\n**Correct (documentation-only claim, no code citation manufactured):**\nThe project favors per-ref index isolation for operational simplicity, per the architecture notes in [`docs\u002Fdesign.md`](https:\u002F\u002Fgithub.com\u002Facme\u002Fsearch-svc\u002Fblob\u002Fv2.4.1\u002Fdocs\u002Fdesign.md) - this is a design-intent claim, not a line-level behavior, so the doc stands alone as the citation.\n",{"data":30,"body":31},{"name":4,"description":6},{"type":32,"children":33},"root",[34,43,49,64,69,75,80,115,120,126,144,150,167,173,223,229,352,358,363,484,490,670,676,730,736,784,815,825,835,867],{"type":35,"tag":36,"props":37,"children":39},"element","h2",{"id":38},"when-this-applies",[40],{"type":41,"value":42},"text","When this applies",{"type":35,"tag":44,"props":45,"children":46},"p",{},[47],{"type":41,"value":48},"Trigger this on any answer where you:",{"type":35,"tag":50,"props":51,"children":52},"ul",{},[53,59],{"type":35,"tag":54,"props":55,"children":56},"li",{},[57],{"type":41,"value":58},"name a class, function, method, variable, constant, config key, endpoint, file path, directory, or file extension, or",{"type":35,"tag":54,"props":60,"children":61},{},[62],{"type":41,"value":63},"state a default, version, guarantee, or other checkable fact about repository behavior.",{"type":35,"tag":44,"props":65,"children":66},{},[67],{"type":41,"value":68},"In practice that's almost every response from this agent - assume it applies unless you're doing pure chit-chat with no claims about the codebase.",{"type":35,"tag":36,"props":70,"children":72},{"id":71},"source-hierarchy",[73],{"type":41,"value":74},"Source hierarchy",{"type":35,"tag":44,"props":76,"children":77},{},[78],{"type":41,"value":79},"Prefer sources in this order when a claim could be supported by more than one:",{"type":35,"tag":81,"props":82,"children":83},"ol",{},[84,95,105],{"type":35,"tag":54,"props":85,"children":86},{},[87,93],{"type":35,"tag":88,"props":89,"children":90},"strong",{},[91],{"type":41,"value":92},"Source code",{"type":41,"value":94}," - the primary source of truth for behavior. Any claim about actual behavior ultimately resolves here.",{"type":35,"tag":54,"props":96,"children":97},{},[98,103],{"type":35,"tag":88,"props":99,"children":100},{},[101],{"type":41,"value":102},"Repository documentation",{"type":41,"value":104}," - secondary. Good for intent, rationale, and cross-cutting architecture that no single line of code expresses, but subordinate to code on behavior questions, and it can lag the code.",{"type":35,"tag":54,"props":106,"children":107},{},[108,113],{"type":35,"tag":88,"props":109,"children":110},{},[111],{"type":41,"value":112},"Your own general knowledge",{"type":41,"value":114}," - weakest, and not citable. Use only to frame or explain; never as the basis for a factual claim about this specific software.",{"type":35,"tag":44,"props":116,"children":117},{},[118],{"type":41,"value":119},"When sources conflict, the code wins - state the discrepancy rather than smoothing it over.",{"type":35,"tag":36,"props":121,"children":123},{"id":122},"what-to-cite",[124],{"type":41,"value":125},"What to cite",{"type":35,"tag":50,"props":127,"children":128},{},[129,134,139],{"type":35,"tag":54,"props":130,"children":131},{},[132],{"type":41,"value":133},"Cite the first mention of each notable symbol, file, or directory: classes, functions, methods, variables, constants, config keys, endpoints, file paths, directories, file extensions. No need to repeat the citation on later mentions of the same one.",{"type":35,"tag":54,"props":135,"children":136},{},[137],{"type":41,"value":138},"Cite claims, not only symbols. Any concrete, checkable assertion - a default value, a recall\u002Flatency figure, a version or license-availability statement, a behavioral guarantee - needs a citation to the line(s) that establish it, even with no backticked identifier in the sentence.",{"type":35,"tag":54,"props":140,"children":141},{},[142],{"type":41,"value":143},"Citing a class or file doesn't cover its members. If you go on to name specific fields, constants, methods, or defaults belonging to it, each needs its own first-mention citation.",{"type":35,"tag":36,"props":145,"children":147},{"id":146},"finding-sources",[148],{"type":41,"value":149},"Finding sources",{"type":35,"tag":50,"props":151,"children":152},{},[153],{"type":35,"tag":54,"props":154,"children":155},{},[156,158,165],{"type":41,"value":157},"Use the ",{"type":35,"tag":159,"props":160,"children":162},"code",{"className":161},[],[163],{"type":41,"value":164},"code-search",{"type":41,"value":166}," skill recursively to find sources if you don't have enough information to properly cite them",{"type":35,"tag":36,"props":168,"children":170},{"id":169},"how-to-format",[171],{"type":41,"value":172},"How to format",{"type":35,"tag":50,"props":174,"children":175},{},[176,189,194],{"type":35,"tag":54,"props":177,"children":178},{},[179,181,187],{"type":41,"value":180},"Every citation is an inline Markdown link with the linked text in backticks, at the point of first mention - not a trailing \"Source:\" note. Example: ",{"type":35,"tag":159,"props":182,"children":184},{"className":183},[],[185],{"type":41,"value":186},"[`AuthService`](url)",{"type":41,"value":188},".",{"type":35,"tag":54,"props":190,"children":191},{},[192],{"type":41,"value":193},"If you put a term in backticks - including inside tables, bullet lists, or parameter\u002Fdefault-value listings - it needs a citation, unless it's a generic language keyword, built-in type, or standard-library term not defined in the source under discussion.",{"type":35,"tag":54,"props":195,"children":196},{},[197,199,205,207,213,215,221],{"type":41,"value":198},"The URL anchor must encode the full span you're citing: a single line is ",{"type":35,"tag":159,"props":200,"children":202},{"className":201},[],[203],{"type":41,"value":204},"#L{n}",{"type":41,"value":206},", a multi-line span is ",{"type":35,"tag":159,"props":208,"children":210},{"className":209},[],[211],{"type":41,"value":212},"#L{start}-L{end}",{"type":41,"value":214}," (note the hyphen and the second line number). If your sentence or link text refers to more than one line, the href MUST be the range form - a bare ",{"type":35,"tag":159,"props":216,"children":218},{"className":217},[],[219],{"type":41,"value":220},"#L{start}",{"type":41,"value":222}," for a multi-line claim is wrong. See \"Choosing the citation extent\" for picking the span.",{"type":35,"tag":36,"props":224,"children":226},{"id":225},"where-to-point",[227],{"type":41,"value":228},"Where to point",{"type":35,"tag":50,"props":230,"children":231},{},[232,237,250,255],{"type":35,"tag":54,"props":233,"children":234},{},[235],{"type":41,"value":236},"Prefer the most precise URL you can construct: a specific line or line range where a symbol is declared or a claim is established, rather than the containing file.",{"type":35,"tag":54,"props":238,"children":239},{},[240,242,248],{"type":41,"value":241},"Cite where a symbol is ",{"type":35,"tag":243,"props":244,"children":245},"em",{},[246],{"type":41,"value":247},"defined",{"type":41,"value":249},", not merely referenced, imported, or instantiated - unless your point is specifically about that usage site.",{"type":35,"tag":54,"props":251,"children":252},{},[253],{"type":41,"value":254},"If a symbol's definition lives outside the indexed repos (e.g. a third-party dependency), cite the nearest resolvable reference (its import or declaration) and note that the definition is external.",{"type":35,"tag":54,"props":256,"children":257},{},[258,260],{"type":41,"value":259},"Line and range citations are only as reliable as the tool output they came from. Follow each sourcerer tool's own description for how to turn its output into an accurate citation:\n",{"type":35,"tag":50,"props":261,"children":262},{},[263,290,340],{"type":35,"tag":54,"props":264,"children":265},{},[266,272,274,280,282,288],{"type":35,"tag":159,"props":267,"children":269},{"className":268},[],[270],{"type":41,"value":271},"code.grep",{"type":41,"value":273}," \u002F ",{"type":35,"tag":159,"props":275,"children":277},{"className":276},[],[278],{"type":41,"value":279},"code.search",{"type":41,"value":281}," return one row per line, each with an authoritative ",{"type":35,"tag":159,"props":283,"children":285},{"className":284},[],[286],{"type":41,"value":287},"line.number",{"type":41,"value":289}," - cite single lines and don't merge separate rows into a range.",{"type":35,"tag":54,"props":291,"children":292},{},[293,295,301,302,308,309,315,316,322,324,330,332,338],{"type":41,"value":294},"The content tools (",{"type":35,"tag":159,"props":296,"children":298},{"className":297},[],[299],{"type":41,"value":300},"files.cat",{"type":41,"value":273},{"type":35,"tag":159,"props":303,"children":305},{"className":304},[],[306],{"type":41,"value":307},"files.head",{"type":41,"value":273},{"type":35,"tag":159,"props":310,"children":312},{"className":311},[],[313],{"type":41,"value":314},"files.tail",{"type":41,"value":273},{"type":35,"tag":159,"props":317,"children":319},{"className":318},[],[320],{"type":41,"value":321},"files.read_lines",{"type":41,"value":323},") prefix every returned line with its authoritative 1-indexed line number (grep -n style, ",{"type":35,"tag":159,"props":325,"children":327},{"className":326},[],[328],{"type":41,"value":329},"\u003Cline>:\u003Ccontent>",{"type":41,"value":331},") unless called with ",{"type":35,"tag":159,"props":333,"children":335},{"className":334},[],[336],{"type":41,"value":337},"show_line_numbers=false",{"type":41,"value":339}," - read the number directly off the line you're citing, and off the first and last lines of a block to cite a range.",{"type":35,"tag":54,"props":341,"children":342},{},[343,345,350],{"type":41,"value":344},"Never derive a line position by counting lines inside returned file content - read it from the per-line prefix (or a per-row ",{"type":35,"tag":159,"props":346,"children":348},{"className":347},[],[349],{"type":41,"value":287},{"type":41,"value":351},") (see Integrity below).",{"type":35,"tag":36,"props":353,"children":355},{"id":354},"choosing-the-citation-extent",[356],{"type":41,"value":357},"Choosing the citation extent",{"type":35,"tag":44,"props":359,"children":360},{},[361],{"type":41,"value":362},"Match the cited span to the scope of the claim - no broader, no narrower. A range and a single line are each precise when they fit the claim; the failure mode is a mismatch, not a wrong choice of shape.",{"type":35,"tag":50,"props":364,"children":365},{},[366,376,386,396,406,444],{"type":35,"tag":54,"props":367,"children":368},{},[369,374],{"type":35,"tag":88,"props":370,"children":371},{},[372],{"type":41,"value":373},"Defining a symbol",{"type":41,"value":375}," (function, class, method) → cite from the first line of its leading doc\u002Fcomment block (and any decorators or annotations) through its closing line, so the citation captures both intent and implementation.",{"type":35,"tag":54,"props":377,"children":378},{},[379,384],{"type":35,"tag":88,"props":380,"children":381},{},[382],{"type":41,"value":383},"A specific value, default, config key, or single statement",{"type":41,"value":385}," → cite the one line that establishes it. Don't widen to the enclosing function - a reader verifying \"the default is 3\" should land on that line, not hunt through a block.",{"type":35,"tag":54,"props":387,"children":388},{},[389,394],{"type":35,"tag":88,"props":390,"children":391},{},[392],{"type":41,"value":393},"A behavioral claim about a block",{"type":41,"value":395}," (a loop, a guard clause, a sequence of steps) → cite exactly the lines of that block.",{"type":35,"tag":54,"props":397,"children":398},{},[399,404],{"type":35,"tag":88,"props":400,"children":401},{},[402],{"type":41,"value":403},"A large definition",{"type":41,"value":405}," → for \"where it's defined,\" cite the signature (plus any docstring); for a claim about one part of the body, cite that tighter sub-range. Never cite a whole multi-page body to support a narrow point.",{"type":35,"tag":54,"props":407,"children":408},{},[409,414,416,421,423,428,430,435,437,442],{"type":35,"tag":88,"props":410,"children":411},{},[412],{"type":41,"value":413},"Verify both endpoints.",{"type":41,"value":415}," A range asserts its start ",{"type":35,"tag":243,"props":417,"children":418},{},[419],{"type":41,"value":420},"and",{"type":41,"value":422}," its end, and the closing line is far easier to guess wrong than the declaration. Read both boundaries from tool output - the numbered content tools, or ",{"type":35,"tag":159,"props":424,"children":426},{"className":425},[],[427],{"type":41,"value":271},{"type":41,"value":429}," for a closing pattern - never estimate them. A range is legitimate only when you've read the contiguous block and confirmed its endpoints; stitching a range out of separate ",{"type":35,"tag":159,"props":431,"children":433},{"className":432},[],[434],{"type":41,"value":271},{"type":41,"value":436},"\u002F",{"type":35,"tag":159,"props":438,"children":440},{"className":439},[],[441],{"type":41,"value":279},{"type":41,"value":443}," match rows is not (see the anti-pattern under Examples).",{"type":35,"tag":54,"props":445,"children":446},{},[447,452,454,459,461,467,469,475,477,482],{"type":35,"tag":88,"props":448,"children":449},{},[450],{"type":41,"value":451},"Put the chosen extent in the URL.",{"type":41,"value":453}," The link's anchor must match the span you're citing - a range uses the ",{"type":35,"tag":159,"props":455,"children":457},{"className":456},[],[458],{"type":41,"value":212},{"type":41,"value":460}," fragment, a single line uses ",{"type":35,"tag":159,"props":462,"children":464},{"className":463},[],[465],{"type":41,"value":466},"#L{line}",{"type":41,"value":468},". Never state or link a range in the visible text (e.g. ",{"type":35,"tag":159,"props":470,"children":472},{"className":471},[],[473],{"type":41,"value":474},"lines 939-977",{"type":41,"value":476},") while pointing the href at only its first line: a bare ",{"type":35,"tag":159,"props":478,"children":480},{"className":479},[],[481],{"type":41,"value":220},{"type":41,"value":483}," silently narrows the citation to one line and contradicts what you wrote.",{"type":35,"tag":36,"props":485,"children":487},{"id":486},"url-templates-host-specific",[488],{"type":41,"value":489},"URL templates (host-specific)",{"type":35,"tag":50,"props":491,"children":492},{},[493,545,581,658],{"type":35,"tag":54,"props":494,"children":495},{},[496,498,504,506,512,514,520,522,528,530,536,538,544],{"type":41,"value":497},"The URL scheme for a citation depends on the git host the code lives on. Every ",{"type":35,"tag":159,"props":499,"children":501},{"className":500},[],[502],{"type":41,"value":503},"sourcerer.code.*",{"type":41,"value":505}," and ",{"type":35,"tag":159,"props":507,"children":509},{"className":508},[],[510],{"type":41,"value":511},"sourcerer.files.*",{"type":41,"value":513}," tool returns a ",{"type":35,"tag":159,"props":515,"children":517},{"className":516},[],[518],{"type":41,"value":519},"git.host",{"type":41,"value":521}," field on each row alongside ",{"type":35,"tag":159,"props":523,"children":525},{"className":524},[],[526],{"type":41,"value":527},"git.org",{"type":41,"value":529},", ",{"type":35,"tag":159,"props":531,"children":533},{"className":532},[],[534],{"type":41,"value":535},"git.repo",{"type":41,"value":537},", and ",{"type":35,"tag":159,"props":539,"children":541},{"className":540},[],[542],{"type":41,"value":543},"git.commit",{"type":41,"value":188},{"type":35,"tag":54,"props":546,"children":547},{},[548,550,555,557,563,565,571,573,579],{"type":41,"value":549},"Read ",{"type":35,"tag":159,"props":551,"children":553},{"className":552},[],[554],{"type":41,"value":519},{"type":41,"value":556}," from the tool output, then look up the matching host section in this skill's referenced content (named ",{"type":35,"tag":159,"props":558,"children":560},{"className":559},[],[561],{"type":41,"value":562},"sourcerer-code-citations-\u003Cgit.host>",{"type":41,"value":564},", for example ",{"type":35,"tag":159,"props":566,"children":568},{"className":567},[],[569],{"type":41,"value":570},"sourcerer-code-citations-github",{"type":41,"value":572}," for ",{"type":35,"tag":159,"props":574,"children":576},{"className":575},[],[577],{"type":41,"value":578},"git.host = \"github\"",{"type":41,"value":580},"). That section holds the exact directory \u002F file \u002F single-line \u002F line-range URL templates for that host.",{"type":35,"tag":54,"props":582,"children":583},{},[584,586,592,593,599,600,606,607,613,614,620,621,627,628,634,635,641,643,648,650,656],{"type":41,"value":585},"Fill the template's tokens (",{"type":35,"tag":159,"props":587,"children":589},{"className":588},[],[590],{"type":41,"value":591},"{git.org}",{"type":41,"value":529},{"type":35,"tag":159,"props":594,"children":596},{"className":595},[],[597],{"type":41,"value":598},"{git.repo}",{"type":41,"value":529},{"type":35,"tag":159,"props":601,"children":603},{"className":602},[],[604],{"type":41,"value":605},"{git.commit}",{"type":41,"value":529},{"type":35,"tag":159,"props":608,"children":610},{"className":609},[],[611],{"type":41,"value":612},"{file.path}",{"type":41,"value":529},{"type":35,"tag":159,"props":615,"children":617},{"className":616},[],[618],{"type":41,"value":619},"{file.directory}",{"type":41,"value":529},{"type":35,"tag":159,"props":622,"children":624},{"className":623},[],[625],{"type":41,"value":626},"{line.number}",{"type":41,"value":529},{"type":35,"tag":159,"props":629,"children":631},{"className":630},[],[632],{"type":41,"value":633},"{line.number_start}",{"type":41,"value":529},{"type":35,"tag":159,"props":636,"children":638},{"className":637},[],[639],{"type":41,"value":640},"{line.number_end}",{"type":41,"value":642},") from the tool output. ",{"type":35,"tag":159,"props":644,"children":646},{"className":645},[],[647],{"type":41,"value":527},{"type":41,"value":649}," already includes any provider-specific extra segment (e.g. a project or region) as an ",{"type":35,"tag":159,"props":651,"children":653},{"className":652},[],[654],{"type":41,"value":655},"org+extra",{"type":41,"value":657}," value, so substitute it verbatim.",{"type":35,"tag":54,"props":659,"children":660},{},[661,663,668],{"type":41,"value":662},"If you have not yet loaded the referenced content for a result's ",{"type":35,"tag":159,"props":664,"children":666},{"className":665},[],[667],{"type":41,"value":519},{"type":41,"value":669},", load it before formatting that citation. Do not guess a host's URL scheme.",{"type":35,"tag":36,"props":671,"children":673},{"id":672},"integrity",[674],{"type":41,"value":675},"Integrity",{"type":35,"tag":50,"props":677,"children":678},{},[679,691,703],{"type":35,"tag":54,"props":680,"children":681},{},[682,684,689],{"type":41,"value":683},"Cite only locations you've verified with a tool call and can construct from the host-specific URL template for that result's ",{"type":35,"tag":159,"props":685,"children":687},{"className":686},[],[688],{"type":41,"value":519},{"type":41,"value":690}," (see \"URL templates\" above). Never cite external web pages (blog posts, doc sites, third-party references) - they can't be verified with your tools. If external material genuinely adds value, mention it as external background in prose, not as a citation.",{"type":35,"tag":54,"props":692,"children":693},{},[694,696,701],{"type":41,"value":695},"If you can't confirm where something is defined, say so rather than guessing. Reading a line number off a tool's per-line prefix or per-row ",{"type":35,"tag":159,"props":697,"children":699},{"className":698},[],[700],{"type":41,"value":287},{"type":41,"value":702}," is verification; counting or estimating a position from unnumbered text is not.",{"type":35,"tag":54,"props":704,"children":705},{},[706,708,713,715,721,723,728],{"type":41,"value":707},"Before finalizing, re-scan every citation: any whose claim or link text covers more than one line must have a ",{"type":35,"tag":159,"props":709,"children":711},{"className":710},[],[712],{"type":41,"value":212},{"type":41,"value":714}," href (it contains ",{"type":35,"tag":159,"props":716,"children":718},{"className":717},[],[719],{"type":41,"value":720},"-L",{"type":41,"value":722},"). A multi-line claim pointing at a bare ",{"type":35,"tag":159,"props":724,"children":726},{"className":725},[],[727],{"type":41,"value":220},{"type":41,"value":729}," is the single most common citation error here - fix it before answering.",{"type":35,"tag":36,"props":731,"children":733},{"id":732},"examples",[734],{"type":41,"value":735},"Examples",{"type":35,"tag":44,"props":737,"children":738},{},[739,744,746,759,761,767,769,775,777,782],{"type":35,"tag":88,"props":740,"children":741},{},[742],{"type":41,"value":743},"Correct (range for a definition - the common case):",{"type":41,"value":745},"\nScores are combined by conflation of probability distributions (",{"type":35,"tag":747,"props":748,"children":752},"a",{"href":749,"rel":750},"https:\u002F\u002Fgithub.com\u002Facme\u002Fsearch-svc\u002Fblob\u002Fv2.4.1\u002Fsrc\u002Fresolution\u002FJob.java#L622-L650",[751],"nofollow",[753],{"type":35,"tag":159,"props":754,"children":756},{"className":755},[],[757],{"type":41,"value":758},"calculateCompositeScore",{"type":41,"value":760},") - the claim is about the whole method, so the href carries the full range ",{"type":35,"tag":159,"props":762,"children":764},{"className":763},[],[765],{"type":41,"value":766},"#L622-L650",{"type":41,"value":768},", not just ",{"type":35,"tag":159,"props":770,"children":772},{"className":771},[],[773],{"type":41,"value":774},"#L622",{"type":41,"value":776},". Both endpoints were read off numbered tool output, not stitched together from separate ",{"type":35,"tag":159,"props":778,"children":780},{"className":779},[],[781],{"type":41,"value":271},{"type":41,"value":783}," match rows.",{"type":35,"tag":44,"props":785,"children":786},{},[787,792,794,805,807,813],{"type":35,"tag":88,"props":788,"children":789},{},[790],{"type":41,"value":791},"Correct (single line for a specific value):",{"type":41,"value":793},"\nThe retry limit defaults to 3 (",{"type":35,"tag":747,"props":795,"children":798},{"href":796,"rel":797},"https:\u002F\u002Fgithub.com\u002Facme\u002Fsearch-svc\u002Fblob\u002Fv2.4.1\u002Fsrc\u002Fconfig.py#L42",[751],[799],{"type":35,"tag":159,"props":800,"children":802},{"className":801},[],[803],{"type":41,"value":804},"MAX_RETRIES",{"type":41,"value":806},") - a one-line fact, so a single-line ",{"type":35,"tag":159,"props":808,"children":810},{"className":809},[],[811],{"type":41,"value":812},"#L42",{"type":41,"value":814}," anchor is exactly right.",{"type":35,"tag":44,"props":816,"children":817},{},[818,823],{"type":35,"tag":88,"props":819,"children":820},{},[821],{"type":41,"value":822},"Incorrect (missing citation on a checkable claim):",{"type":41,"value":824},"\nThe retry limit defaults to 3.",{"type":35,"tag":44,"props":826,"children":827},{},[828,833],{"type":35,"tag":88,"props":829,"children":830},{},[831],{"type":41,"value":832},"Incorrect (merging separate per-line rows into a range):",{"type":41,"value":834},"\nCiting lines 10-14 as one block when the tool returned five independent single-line rows for 10, 11, 12, 13, 14.",{"type":35,"tag":44,"props":836,"children":837},{},[838,843,845,850,852,858,860,866],{"type":35,"tag":88,"props":839,"children":840},{},[841],{"type":41,"value":842},"Incorrect (range in the text, single line in the URL):",{"type":41,"value":844},"\nLink text of ",{"type":35,"tag":159,"props":846,"children":848},{"className":847},[],[849],{"type":41,"value":474},{"type":41,"value":851}," whose href is ",{"type":35,"tag":159,"props":853,"children":855},{"className":854},[],[856],{"type":41,"value":857},"…\u002FJob.java#L939",{"type":41,"value":859}," - the anchor drops the end of the range and highlights only line 939. It must be ",{"type":35,"tag":159,"props":861,"children":863},{"className":862},[],[864],{"type":41,"value":865},"…\u002FJob.java#L939-L977",{"type":41,"value":188},{"type":35,"tag":44,"props":868,"children":869},{},[870,875,877,888],{"type":35,"tag":88,"props":871,"children":872},{},[873],{"type":41,"value":874},"Correct (documentation-only claim, no code citation manufactured):",{"type":41,"value":876},"\nThe project favors per-ref index isolation for operational simplicity, per the architecture notes in ",{"type":35,"tag":747,"props":878,"children":881},{"href":879,"rel":880},"https:\u002F\u002Fgithub.com\u002Facme\u002Fsearch-svc\u002Fblob\u002Fv2.4.1\u002Fdocs\u002Fdesign.md",[751],[882],{"type":35,"tag":159,"props":883,"children":885},{"className":884},[],[886],{"type":41,"value":887},"docs\u002Fdesign.md",{"type":41,"value":889}," - this is a design-intent claim, not a line-level behavior, so the doc stands alone as the citation.",{"items":891,"total":1063},[892,911,928,943,962,974,984,999,1011,1026,1037,1050],{"slug":893,"name":893,"fn":894,"description":895,"org":896,"tags":897,"stars":908,"repoUrl":909,"updatedAt":910},"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},[898,901,904,905],{"name":899,"slug":900,"type":15},"Analytics","analytics",{"name":902,"slug":903,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":906,"slug":907,"type":15},"Performance","performance",2027,"https:\u002F\u002Fgithub.com\u002Felastic\u002Frally","2026-07-12T07:46:38.54144",{"slug":912,"name":912,"fn":913,"description":914,"org":915,"tags":916,"stars":908,"repoUrl":909,"updatedAt":927},"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},[917,920,921,924],{"name":918,"slug":919,"type":15},"Debugging","debugging",{"name":9,"slug":8,"type":15},{"name":922,"slug":923,"type":15},"Engineering","engineering",{"name":925,"slug":926,"type":15},"Local Development","local-development","2026-07-12T07:46:35.976807",{"slug":929,"name":929,"fn":930,"description":931,"org":932,"tags":933,"stars":908,"repoUrl":909,"updatedAt":942},"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},[934,935,938,939],{"name":9,"slug":8,"type":15},{"name":936,"slug":937,"type":15},"Elasticsearch","elasticsearch",{"name":906,"slug":907,"type":15},{"name":940,"slug":941,"type":15},"Testing","testing","2026-07-12T07:46:37.277964",{"slug":944,"name":944,"fn":945,"description":946,"org":947,"tags":948,"stars":959,"repoUrl":960,"updatedAt":961},"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},[949,952,953,956],{"name":950,"slug":951,"type":15},"Cloud","cloud",{"name":9,"slug":8,"type":15},{"name":954,"slug":955,"type":15},"Operations","operations",{"name":957,"slug":958,"type":15},"Permissions","permissions",531,"https:\u002F\u002Fgithub.com\u002Felastic\u002Fagent-skills","2026-07-12T07:46:44.946285",{"slug":963,"name":963,"fn":964,"description":965,"org":966,"tags":967,"stars":959,"repoUrl":960,"updatedAt":973},"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},[968,969,972],{"name":950,"slug":951,"type":15},{"name":970,"slug":971,"type":15},"Deployment","deployment",{"name":936,"slug":937,"type":15},"2026-07-12T07:46:42.353362",{"slug":975,"name":975,"fn":976,"description":977,"org":978,"tags":979,"stars":959,"repoUrl":960,"updatedAt":983},"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},[980,981,982],{"name":950,"slug":951,"type":15},{"name":936,"slug":937,"type":15},{"name":954,"slug":955,"type":15},"2026-07-12T07:46:41.097412",{"slug":985,"name":985,"fn":986,"description":987,"org":988,"tags":989,"stars":959,"repoUrl":960,"updatedAt":998},"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},[990,991,992,995],{"name":950,"slug":951,"type":15},{"name":936,"slug":937,"type":15},{"name":993,"slug":994,"type":15},"Networking","networking",{"name":996,"slug":997,"type":15},"Security","security","2026-07-12T07:46:43.675992",{"slug":1000,"name":1000,"fn":1001,"description":1002,"org":1003,"tags":1004,"stars":959,"repoUrl":960,"updatedAt":1010},"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},[1005,1008,1009],{"name":1006,"slug":1007,"type":15},"Authentication","authentication",{"name":950,"slug":951,"type":15},{"name":936,"slug":937,"type":15},"2026-07-12T07:46:39.783105",{"slug":1012,"name":1012,"fn":1013,"description":1014,"org":1015,"tags":1016,"stars":959,"repoUrl":960,"updatedAt":1025},"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},[1017,1020,1021,1024],{"name":1018,"slug":1019,"type":15},"Audit","audit",{"name":936,"slug":937,"type":15},{"name":1022,"slug":1023,"type":15},"Logs","logs",{"name":996,"slug":997,"type":15},"2026-07-12T07:47:35.092599",{"slug":1027,"name":1027,"fn":1028,"description":1029,"org":1030,"tags":1031,"stars":959,"repoUrl":960,"updatedAt":1036},"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},[1032,1033,1034,1035],{"name":1006,"slug":1007,"type":15},{"name":9,"slug":8,"type":15},{"name":936,"slug":937,"type":15},{"name":996,"slug":997,"type":15},"2026-07-12T07:47:41.474547",{"slug":1038,"name":1038,"fn":1039,"description":1040,"org":1041,"tags":1042,"stars":959,"repoUrl":960,"updatedAt":1049},"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},[1043,1044,1045,1048],{"name":9,"slug":8,"type":15},{"name":936,"slug":937,"type":15},{"name":1046,"slug":1047,"type":15},"RBAC","rbac",{"name":996,"slug":997,"type":15},"2026-07-12T07:47:36.394177",{"slug":1051,"name":1051,"fn":1052,"description":1053,"org":1054,"tags":1055,"stars":959,"repoUrl":960,"updatedAt":1062},"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},[1056,1057,1058,1059],{"name":899,"slug":900,"type":15},{"name":902,"slug":903,"type":15},{"name":936,"slug":937,"type":15},{"name":1060,"slug":1061,"type":15},"SQL","sql","2026-07-12T07:47:40.249533",90,{"items":1065,"total":1101},[1066,1071,1081,1092],{"slug":4,"name":4,"fn":5,"description":6,"org":1067,"tags":1068,"stars":19,"repoUrl":20,"updatedAt":21},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1069,1070],{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":164,"name":164,"fn":1072,"description":1073,"org":1074,"tags":1075,"stars":19,"repoUrl":20,"updatedAt":1080},"search and explore repository code","Use when you need to find where something is defined, understand how a feature is implemented, or explore an unfamiliar repo. Guides which tools to use and in what order.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1076,1077],{"name":17,"slug":18,"type":15},{"name":1078,"slug":1079,"type":15},"Search","search","2026-08-07T05:03:33.027185",{"slug":1082,"name":1082,"fn":1083,"description":1084,"org":1085,"tags":1086,"stars":19,"repoUrl":20,"updatedAt":1091},"ref-resolution","resolve ambiguous repository references","Use any time a branch, tag, or version in the user's question is ambiguous or unspecified - whether at the start of a question or mid-conversation (e.g. when comparing behavior across versions).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1087,1088],{"name":17,"slug":18,"type":15},{"name":1089,"slug":1090,"type":15},"Git","git","2026-08-07T05:03:35.874346",{"slug":1093,"name":1093,"fn":1094,"description":1095,"org":1096,"tags":1097,"stars":19,"repoUrl":20,"updatedAt":1100},"repo-discovery","discover indexed repositories","Use at the start of most questions to identify which repos are indexed before querying content. Also use mid-conversation when an answer may require expanding into a related or upstream repo (e.g. tracing from an application repo into a lower-level dependency).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1098,1099],{"name":17,"slug":18,"type":15},{"name":1089,"slug":1090,"type":15},"2026-08-07T05:03:32.314134",4]