{
  "doc": {
    "id": "api/commands/get",
    "title": "cy.get()",
    "description": "Get one or more DOM elements by selector or alias in Cypress.",
    "section": "api",
    "source_path": "/llm/markdown/api/commands/get.md",
    "version": "f97f06d85653c51afe39a9bd3cefda946807f150",
    "updated_at": "2026-10-05T21:01:45.863Z",
    "headings": [
      {
        "id": "api/commands/get#get",
        "text": "get",
        "level": 1
      },
      {
        "id": "api/commands/get#syntax",
        "text": "Syntax",
        "level": 2
      },
      {
        "id": "api/commands/get#usage",
        "text": "Usage",
        "level": 3
      },
      {
        "id": "api/commands/get#arguments",
        "text": "Arguments",
        "level": 3
      },
      {
        "id": "api/commands/get#yields",
        "text": "Yields",
        "level": 3
      },
      {
        "id": "api/commands/get#examples",
        "text": "Examples",
        "level": 2
      },
      {
        "id": "api/commands/get#selector",
        "text": "Selector",
        "level": 3
      },
      {
        "id": "api/commands/get#get-the-input-element",
        "text": "Get the input element",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-first-li-descendant-within-a-ul",
        "text": "Find the first li descendant within a ul",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-first-li-in-every-ul",
        "text": "Find the first li in every ul",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-dropdown-menu-and-click-it",
        "text": "Find the dropdown-menu and click it",
        "level": 4
      },
      {
        "id": "api/commands/get#find-5-elements-with-the-given-data-attribute",
        "text": "Find 5 elements with the given data attribute",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-first-or-nth-element-with-first-and-eq",
        "text": "Find the first or nth element with .first() and .eq()",
        "level": 4
      },
      {
        "id": "api/commands/get#find-elements-matching-any-of-several-selectors",
        "text": "Find elements matching any of several selectors",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-link-with-an-href-attribute-containing-the-word-questions-and-click-it",
        "text": "Find the link with an href attribute containing the word \"questions\" and click it",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-element-with-id-that-starts-with-local",
        "text": "Find the element with id that starts with \"local-\"",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-element-with-id-that-ends-with-remote",
        "text": "Find the element with id that ends with \"-remote\"",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-element-with-id-that-starts-with-local-and-ends-with-remote",
        "text": "Find the element with id that starts with \"local-\" and ends with \"-remote\"",
        "level": 4
      },
      {
        "id": "api/commands/get#find-the-element-with-id-that-has-characters-used-in-css-like",
        "text": "Find the element with id that has characters used in CSS like \".\", \":\"",
        "level": 4
      },
      {
        "id": "api/commands/get#find-an-element-by-an-id-built-at-runtime",
        "text": "Find an element by an ID built at runtime",
        "level": 4
      },
      {
        "id": "api/commands/get#cy-get-in-the-within-command",
        "text": "cy.get() in the .within() command",
        "level": 3
      },
      {
        "id": "api/commands/get#get-vs-find",
        "text": "Get vs Find",
        "level": 3
      },
      {
        "id": "api/commands/get#waiting-for-elements",
        "text": "Waiting for elements",
        "level": 3
      },
      {
        "id": "api/commands/get#wait-for-a-list-to-finish-loading",
        "text": "Wait for a list to finish loading",
        "level": 4
      },
      {
        "id": "api/commands/get#assert-an-element-doesnt-exist",
        "text": "Assert an element doesn't exist",
        "level": 4
      },
      {
        "id": "api/commands/get#options",
        "text": "Options",
        "level": 3
      },
      {
        "id": "api/commands/get#wait-longer-for-a-slow-element-with-timeout",
        "text": "Wait longer for a slow element with timeout",
        "level": 4
      },
      {
        "id": "api/commands/get#find-elements-inside-shadow-dom-with-includeshadowdom",
        "text": "Find elements inside shadow DOM with includeShadowDom",
        "level": 4
      },
      {
        "id": "api/commands/get#hide-a-query-from-the-command-log-with-log",
        "text": "Hide a query from the Command Log with log",
        "level": 4
      },
      {
        "id": "api/commands/get#alias",
        "text": "Alias",
        "level": 3
      },
      {
        "id": "api/commands/get#get-the-aliased-todos-elements",
        "text": "Get the aliased 'todos' elements",
        "level": 4
      },
      {
        "id": "api/commands/get#get-the-aliased-submitbtn-element",
        "text": "Get the aliased 'submitBtn' element",
        "level": 4
      },
      {
        "id": "api/commands/get#get-the-aliased-users-fixture",
        "text": "Get the aliased 'users' fixture",
        "level": 4
      },
      {
        "id": "api/commands/get#re-run-an-alias-or-capture-a-static-value",
        "text": "Re-run an alias or capture a static value",
        "level": 4
      },
      {
        "id": "api/commands/get#assert-an-aliased-element-no-longer-exists",
        "text": "Assert an aliased element no longer exists",
        "level": 4
      },
      {
        "id": "api/commands/get#get-an-aliased-spy-or-stub",
        "text": "Get an aliased spy or stub",
        "level": 4
      },
      {
        "id": "api/commands/get#get-all-aliased-intercepts",
        "text": "Get all aliased intercepts",
        "level": 4
      },
      {
        "id": "api/commands/get#typescript",
        "text": "TypeScript",
        "level": 3
      },
      {
        "id": "api/commands/get#type-the-yielded-element-or-an-aliased-value",
        "text": "Type the yielded element or an aliased value",
        "level": 4
      },
      {
        "id": "api/commands/get#notes",
        "text": "Notes",
        "level": 2
      },
      {
        "id": "api/commands/get#what-a-cy-get-timeout-error-looks-like",
        "text": "What a cy.get() timeout error looks like",
        "level": 3
      },
      {
        "id": "api/commands/get#cy-get-doesnt-search-inside-iframes",
        "text": "cy.get() doesn't search inside iframes",
        "level": 3
      },
      {
        "id": "api/commands/get#rules",
        "text": "Rules",
        "level": 2
      },
      {
        "id": "api/commands/get#requirements",
        "text": "Requirements",
        "level": 3
      },
      {
        "id": "api/commands/get#assertions",
        "text": "Assertions",
        "level": 3
      },
      {
        "id": "api/commands/get#timeouts",
        "text": "Timeouts",
        "level": 3
      },
      {
        "id": "api/commands/get#command-log",
        "text": "Command Log",
        "level": 2
      },
      {
        "id": "api/commands/get#history",
        "text": "History",
        "level": 2
      },
      {
        "id": "api/commands/get#see-also",
        "text": "See also",
        "level": 2
      }
    ]
  },
  "chunks": [
    {
      "id": "api/commands/get#syntax",
      "doc_id": "api/commands/get",
      "heading": "Syntax",
      "heading_level": 2,
      "content_markdown": "## Syntax\n\n```\ncy.get(selector)\ncy.get(alias)\ncy.get(selector, options)\ncy.get(alias, options)\n```\n\n### Usage\n\n**Correct Usage**\n\n```\ncy.get('.list > li') // Yield the <li>'s in .list\n```\n\n### Arguments\n\n**selector _(String selector)_**\n\nA selector used to filter matching DOM elements.\n\n**alias _(String)_**\n\nAn alias as defined using the [`.as()`](/llm/markdown/api/commands/as.md) command and referenced with the `@` character and the name of the alias.\n\nYou can use `cy.get()` for aliases of DOM elements, primitives, objects, intercepts, spies, and stubs.\n\nBy default, an alias re-runs the queries leading up to it each time you request it, so an aliased DOM element reflects the current state of the page. An alias created with `{ type: 'static' }` yields the value captured when the alias was created. See [`.as()`](/llm/markdown/api/commands/as.md) for details.\n\n**Core Concept**\n\n[You can read more about aliasing objects and elements in our Core Concept Guide](/llm/markdown/app/core-concepts/variables-and-aliases.md#Aliases).\n\n**options _(Object)_**\n\nPass in an options object to change the default behavior of `cy.get()`.\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `log` | `true` | Displays the command in the [Command log](/llm/markdown/app/core-concepts/open-mode.md#Command-Log) |\n| `timeout` | [`defaultCommandTimeout`](/llm/markdown/app/references/configuration.md#Timeouts) | Time, in milliseconds, to wait for `cy.get()` to resolve before [timing out](#Timeouts). Must be a number. |\n| `withinSubject` | the [`.within()`](/llm/markdown/api/commands/within.md) subject, otherwise the document | Element to search within. Pass `null` to search from the document. |\n| `includeShadowDom` | [`includeShadowDom` config option value](/llm/markdown/app/references/configuration.md#Global) | Whether to traverse shadow DOM boundaries and include elements within the shadow DOM in the yielded results. |\n\n### Yields\n\n*   `cy.get()` yields the DOM element(s) it found, or the results of the alias lookup.\n*   For an intercept alias, `cy.get()` yields the most recent interception, or `null` if no request has matched yet.\n*   `cy.get()` is a query, and it is _safe_ to chain further commands.\n",
      "section": "api",
      "anchors": [
        "syntax"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 400
    },
    {
      "id": "api/commands/get#arguments",
      "doc_id": "api/commands/get",
      "heading": "Arguments",
      "heading_level": 3,
      "content_markdown": "### Arguments\n\n**selector _(String selector)_**\n\nA selector used to filter matching DOM elements.\n\n**alias _(String)_**\n\nAn alias as defined using the [`.as()`](/llm/markdown/api/commands/as.md) command and referenced with the `@` character and the name of the alias.\n\nYou can use `cy.get()` for aliases of DOM elements, primitives, objects, intercepts, spies, and stubs.\n\nBy default, an alias re-runs the queries leading up to it each time you request it, so an aliased DOM element reflects the current state of the page. An alias created with `{ type: 'static' }` yields the value captured when the alias was created. See [`.as()`](/llm/markdown/api/commands/as.md) for details.\n\n**Core Concept**\n\n[You can read more about aliasing objects and elements in our Core Concept Guide](/llm/markdown/app/core-concepts/variables-and-aliases.md#Aliases).\n\n**options _(Object)_**\n\nPass in an options object to change the default behavior of `cy.get()`.\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `log` | `true` | Displays the command in the [Command log](/llm/markdown/app/core-concepts/open-mode.md#Command-Log) |\n| `timeout` | [`defaultCommandTimeout`](/llm/markdown/app/references/configuration.md#Timeouts) | Time, in milliseconds, to wait for `cy.get()` to resolve before [timing out](#Timeouts). Must be a number. |\n| `withinSubject` | the [`.within()`](/llm/markdown/api/commands/within.md) subject, otherwise the document | Element to search within. Pass `null` to search from the document. |\n| `includeShadowDom` | [`includeShadowDom` config option value](/llm/markdown/app/references/configuration.md#Global) | Whether to traverse shadow DOM boundaries and include elements within the shadow DOM in the yielded results. |\n",
      "section": "api",
      "anchors": [
        "arguments"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 301
    },
    {
      "id": "api/commands/get#yields",
      "doc_id": "api/commands/get",
      "heading": "Yields",
      "heading_level": 3,
      "content_markdown": "### Yields\n\n*   `cy.get()` yields the DOM element(s) it found, or the results of the alias lookup.\n*   For an intercept alias, `cy.get()` yields the most recent interception, or `null` if no request has matched yet.\n*   `cy.get()` is a query, and it is _safe_ to chain further commands.\n",
      "section": "api",
      "anchors": [
        "yields"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 65
    },
    {
      "id": "api/commands/get#examples",
      "doc_id": "api/commands/get",
      "heading": "Examples",
      "heading_level": 2,
      "content_markdown": "## Examples\n\n### Selector\n\n#### Get the input element\n\n```\ncy.get('input').should('be.disabled')\n```\n\n#### Find the first `li` descendant within a `ul`\n\n```\ncy.get('ul li:first').should('have.class', 'active')\n```\n\n#### Find the first `li` in every `ul`\n\n`:first` is a jQuery extension that yields only the first matching element on the whole page. To get the first `li` in each list, use the CSS `:first-child` selector instead.\n\n```\n<ul class=\"fruits\">\n  <li>Apple</li>\n  <li>Banana</li>\n</ul>\n<ul class=\"vegetables\">\n  <li>Carrot</li>\n  <li>Pea</li>\n</ul>\n```\n\n```\ncy.get('ul li:first').should('have.length', 1) // Apple only\ncy.get('ul li:first-child').should('have.length', 2) // Apple and Carrot\n```\n\n#### Find the dropdown-menu and click it\n\n```\ncy.get('.dropdown-menu').click()\n```\n\n#### Find 5 elements with the given data attribute\n\nDedicated `data-*` attributes such as `data-cy` keep selectors stable when your styles or text change. See [best practices for selecting elements](/llm/markdown/app/core-concepts/best-practices.md#Selecting-Elements).\n\n```\ncy.get('[data-cy=todo-item]').should('have.length', 5)\n```\n\n#### Find the first or nth element with `.first()` and `.eq()`\n\nChaining [`.first()`](/llm/markdown/api/commands/first.md) or [`.eq()`](/llm/markdown/api/commands/eq.md) onto `cy.get()` reads more clearly than a `:first` or `:eq()` selector.\n\n```\ncy.get('[data-cy=todo-item]').first().should('contain', 'Buy milk')\ncy.get('[data-cy=todo-item]').eq(1).should('contain', 'Walk dog')\n```\n\n#### Find elements matching any of several selectors\n\nSeparate selectors with commas to yield every element that matches any of them.\n\n```\ncy.get('input, textarea, select').should('have.length', 3)\n```\n\n#### Find the link with an href attribute containing the word \"questions\" and click it\n\n```\ncy.get('a[href*=\"questions\"]').click()\n```\n\n#### Find the element with id that starts with \"local-\"\n\n```\ncy.get('[id^=local-]')\n```\n\n#### Find the element with id that ends with \"-remote\"\n\n```\ncy.get('[id$=-remote]')\n```\n\n#### Find the element with id that starts with \"local-\" and ends with \"-remote\"\n\n```\ncy.get('[id^=local-][id$=-remote]')\n```\n\n#### Find the element with id that has characters used in CSS like \".\", \":\"\n\n```\ncy.get('#id\\\\.\\\\.\\\\.1234') // escape the character with \\\\\n```\n\n#### Find an element by an ID built at runtime\n\nWhen the ID comes from a variable, escape it with [`CSS.escape()`](https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape_static) instead of adding backslashes by hand.\n\n```\nconst userId = 'user:42'\n\ncy.get(`#${CSS.escape(userId)}`).should('have.text', 'Jane')\n```\n\n### `cy.get()` in the [`.within()`](/llm/markdown/api/commands/within.md) command\n\nSince `cy.get()` is chained off of `cy`, it always looks for the selector within the entire `document`. The only exception is when used inside a [.within()](/llm/markdown/api/commands/within.md) command.\n\n```\ncy.get('form').within(() => {\n  cy.get('input').type('Pamela') // Only yield inputs within form\n  cy.get('textarea').type('is a developer') // Only yield textareas within form\n})\n```\n\n### Get vs Find\n\nThe `cy.get` command always starts its search from the [cy.root](/llm/markdown/api/commands/root.md) element. In most cases, it is the `document` element, unless used inside the [.within()](/llm/markdown/api/commands/within.md) command. The [.find](/llm/markdown/api/commands/find.md) command starts its search from the current subject.\n\n```\n<div class=\"test-title\">cy.get vs .find</div>\n<section id=\"comparison\">\n  <div class=\"feature\">Both are querying commands</div>\n</section>\n```\n\n```\ncy.get('#comparison')\n  .get('div')\n  // finds the div.test-title outside the #comparison\n  // and the div.feature inside\n  .should('have.class', 'test-title')\n  .and('have.class', 'feature')\ncy.get('#comparison')\n  .find('div')\n  // the search is limited to the tree at #comparison element\n  // so it finds div.feature only\n  .should('have.length', 1)\n  .and('have.class', 'feature')\n```\n\n### Waiting for elements\n\n#### Wait for a list to finish loading\n\n`cy.get()` retries until the assertion chained to it passes, so it waits for all three items to appear.\n\n```\ncy.get('[data-cy=todo-item]').should('have.length', 3)\n```\n\nAn assertion inside [`.then()`](/llm/markdown/api/commands/then.md) runs only once. `cy.get()` waits only until at least one item exists, so this fails if the list is still filling in:\n\n```\n// Runs once: fails if the list is still loading\ncy.get('[data-cy=todo-item]').then(($items) => {\n  expect($items).to.have.length(3)\n})\n```\n\n#### Assert an element doesn't exist\n\n`cy.get()` retries a negative assertion too, until the element is gone.\n\n```\ncy.get('[data-cy=loading-spinner]').should('not.exist')\n```\n\n### Options\n\n#### Wait longer for a slow element with `timeout`\n\n```\ncy.get('[data-cy=search-results]', { timeout: 10000 }).should('be.visible')\n```\n\n#### Find elements inside shadow DOM with `includeShadowDom`\n\n```\ncy.get('.shadow-button', { includeShadowDom: true }).click()\n```\n\nTo search shadow DOM in every query, set the [`includeShadowDom` configuration option](/llm/markdown/app/references/configuration.md#Global) instead.\n\n#### Hide a query from the Command Log with `log`\n\nThe `get` row is hidden, but the assertion still appears in the Command Log.\n\n```\ncy.get('[data-cy=toast]', { log: false }).should('be.visible')\n```\n\n### Alias\n\nFor a detailed explanation of aliasing, [read more about aliasing here](/llm/markdown/app/core-concepts/variables-and-aliases.md#Aliases).\n\n#### Get the aliased 'todos' elements\n\n```\ncy.get('ul#todos').as('todos')\n\n//...hack hack hack...\n\n//later retrieve the todos\ncy.get('@todos')\n```\n\n#### Get the aliased 'submitBtn' element\n\n```\nbeforeEach(() => {\n  cy.get('button[type=submit]').as('submitBtn')\n})\n\nit('disables on click', () => {\n  cy.get('@submitBtn').click()\n  cy.get('@submitBtn').should('be.disabled')\n})\n```\n\n#### Get the aliased 'users' fixture\n\n```\nbeforeEach(() => {\n  cy.fixture('users.json').as('users')\n})\n\nit('shows the first user in the header', () => {\n  // access the array of users\n  cy.get('@users').then((users) => {\n    // get the first user\n    const user = users[0]\n\n    cy.get('header').contains(user.name)\n  })\n})\n```\n\n#### Re-run an alias or capture a static value\n\nBy default, an alias re-runs its queries each time you request it. Pass `{ type: 'static' }` to [`.as()`](/llm/markdown/api/commands/as.md) to keep the value from the moment you created the alias.\n\n```\ncy.get('[data-cy=total]').invoke('text').as('liveTotal')\ncy.get('[data-cy=total]').invoke('text').as('startTotal', { type: 'static' })\n\ncy.get('[data-cy=add-item]').click()\n\ncy.get('@liveTotal').should('eq', '$5.00') // re-runs the queries\ncy.get('@startTotal').should('eq', '$0.00') // value captured earlier\n```\n\nIn the Command Log, the static alias is labeled `(static)` where it's created:\n\n#### Assert an aliased element no longer exists\n\nBecause the alias re-runs its query, you can assert that the element is gone.\n\n```\ncy.get('[data-cy=toast]').as('toast')\ncy.get('[data-cy=dismiss]').click()\ncy.get('@toast').should('not.exist')\n```\n\n#### Get an aliased spy or stub\n\n```\ncy.window().then((win) => {\n  cy.spy(win.console, 'error').as('consoleError')\n})\n\ncy.get('[data-cy=save]').click()\ncy.get('@consoleError').should('not.have.been.called')\n```\n\n#### Get all aliased intercepts\n\nWhen using [`cy.intercept()`](/llm/markdown/api/commands/intercept.md) with an alias, you can retrieve **all** intercepted requests for that alias by appending `.all` to the alias name. This returns an array of [interception objects](/llm/markdown/api/commands/intercept.md#Using-the-yielded-object).\n\n```\ncy.intercept('GET', '/users').as('getUsers')\n\n// trigger multiple requests\ncy.visit('/users')\ncy.visit('/users')\n\n// yields an array of all interceptions for this alias\ncy.get('@getUsers.all').then((interceptions) => {\n  expect(interceptions).to.have.length(2)\n})\n```\n\nYou can also retrieve a specific intercept by its 1-based numeric index. Without any suffix, `cy.get('@alias')` returns the most recent intercepted request.\n\n```\ncy.intercept('GET', '/users').as('getUsers')\n\ncy.visit('/users')\ncy.visit('/users')\n\n// yields the first intercepted request\ncy.get('@getUsers.1').its('response.statusCode').should('eq', 200)\n\n// yields the second intercepted request\ncy.get('@getUsers.2').its('response.statusCode').should('eq', 200)\n```\n\nIndex `0` is not valid — indices start at `1`. These suffixes are **not** supported by [`cy.wait()`](/llm/markdown/api/commands/wait.md). Use `cy.get('@alias.all')` instead of `cy.wait('@alias.all')`.\n\n### TypeScript\n\n#### Type the yielded element or an aliased value\n\nPass a type argument to type what `cy.get()` yields. For a selector, it's the element type. For an alias, it's the type of the aliased value.\n\n```\ncy.get<HTMLInputElement>('[data-cy=email]').then(($input) => {\n  // $input is typed as JQuery<HTMLInputElement>\n  expect($input[0].value).to.eq('jane@example.com')\n})\n\ncy.wrap({ name: 'Jane' }).as('user')\ncy.get<{ name: string }>('@user').its('name').should('eq', 'Jane')\n```\n",
      "section": "api",
      "anchors": [
        "examples"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 1384
    },
    {
      "id": "api/commands/get#selector",
      "doc_id": "api/commands/get",
      "heading": "Selector",
      "heading_level": 3,
      "content_markdown": "### Selector\n\n#### Get the input element\n\n```\ncy.get('input').should('be.disabled')\n```\n\n#### Find the first `li` descendant within a `ul`\n\n```\ncy.get('ul li:first').should('have.class', 'active')\n```\n\n#### Find the first `li` in every `ul`\n\n`:first` is a jQuery extension that yields only the first matching element on the whole page. To get the first `li` in each list, use the CSS `:first-child` selector instead.\n\n```\n<ul class=\"fruits\">\n  <li>Apple</li>\n  <li>Banana</li>\n</ul>\n<ul class=\"vegetables\">\n  <li>Carrot</li>\n  <li>Pea</li>\n</ul>\n```\n\n```\ncy.get('ul li:first').should('have.length', 1) // Apple only\ncy.get('ul li:first-child').should('have.length', 2) // Apple and Carrot\n```\n\n#### Find the dropdown-menu and click it\n\n```\ncy.get('.dropdown-menu').click()\n```\n\n#### Find 5 elements with the given data attribute\n\nDedicated `data-*` attributes such as `data-cy` keep selectors stable when your styles or text change. See [best practices for selecting elements](/llm/markdown/app/core-concepts/best-practices.md#Selecting-Elements).\n\n```\ncy.get('[data-cy=todo-item]').should('have.length', 5)\n```\n\n#### Find the first or nth element with `.first()` and `.eq()`\n\nChaining [`.first()`](/llm/markdown/api/commands/first.md) or [`.eq()`](/llm/markdown/api/commands/eq.md) onto `cy.get()` reads more clearly than a `:first` or `:eq()` selector.\n\n```\ncy.get('[data-cy=todo-item]').first().should('contain', 'Buy milk')\ncy.get('[data-cy=todo-item]').eq(1).should('contain', 'Walk dog')\n```\n\n#### Find elements matching any of several selectors\n\nSeparate selectors with commas to yield every element that matches any of them.\n\n```\ncy.get('input, textarea, select').should('have.length', 3)\n```\n\n#### Find the link with an href attribute containing the word \"questions\" and click it\n\n```\ncy.get('a[href*=\"questions\"]').click()\n```\n\n#### Find the element with id that starts with \"local-\"\n\n```\ncy.get('[id^=local-]')\n```\n\n#### Find the element with id that ends with \"-remote\"\n\n```\ncy.get('[id$=-remote]')\n```\n\n#### Find the element with id that starts with \"local-\" and ends with \"-remote\"\n\n```\ncy.get('[id^=local-][id$=-remote]')\n```\n\n#### Find the element with id that has characters used in CSS like \".\", \":\"\n\n```\ncy.get('#id\\\\.\\\\.\\\\.1234') // escape the character with \\\\\n```\n\n#### Find an element by an ID built at runtime\n\nWhen the ID comes from a variable, escape it with [`CSS.escape()`](https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape_static) instead of adding backslashes by hand.\n\n```\nconst userId = 'user:42'\n\ncy.get(`#${CSS.escape(userId)}`).should('have.text', 'Jane')\n```\n",
      "section": "api",
      "anchors": [
        "selector"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 419
    },
    {
      "id": "api/commands/get#find-the-first-li-in-every-ul",
      "doc_id": "api/commands/get",
      "heading": "Find the first li in every ul",
      "heading_level": 4,
      "content_markdown": "#### Find the first `li` in every `ul`\n\n`:first` is a jQuery extension that yields only the first matching element on the whole page. To get the first `li` in each list, use the CSS `:first-child` selector instead.\n\n```\n<ul class=\"fruits\">\n  <li>Apple</li>\n  <li>Banana</li>\n</ul>\n<ul class=\"vegetables\">\n  <li>Carrot</li>\n  <li>Pea</li>\n</ul>\n```\n\n```\ncy.get('ul li:first').should('have.length', 1) // Apple only\ncy.get('ul li:first-child').should('have.length', 2) // Apple and Carrot\n```\n",
      "section": "api",
      "anchors": [
        "find-the-first-li-in-every-ul"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 87
    },
    {
      "id": "api/commands/get#find-5-elements-with-the-given-data-attribute",
      "doc_id": "api/commands/get",
      "heading": "Find 5 elements with the given data attribute",
      "heading_level": 4,
      "content_markdown": "#### Find 5 elements with the given data attribute\n\nDedicated `data-*` attributes such as `data-cy` keep selectors stable when your styles or text change. See [best practices for selecting elements](/llm/markdown/app/core-concepts/best-practices.md#Selecting-Elements).\n\n```\ncy.get('[data-cy=todo-item]').should('have.length', 5)\n```\n",
      "section": "api",
      "anchors": [
        "find-5-elements-with-the-given-data-attribute"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 45
    },
    {
      "id": "api/commands/get#find-the-first-or-nth-element-with-first-and-eq",
      "doc_id": "api/commands/get",
      "heading": "Find the first or nth element with .first() and .eq()",
      "heading_level": 4,
      "content_markdown": "#### Find the first or nth element with `.first()` and `.eq()`\n\nChaining [`.first()`](/llm/markdown/api/commands/first.md) or [`.eq()`](/llm/markdown/api/commands/eq.md) onto `cy.get()` reads more clearly than a `:first` or `:eq()` selector.\n\n```\ncy.get('[data-cy=todo-item]').first().should('contain', 'Buy milk')\ncy.get('[data-cy=todo-item]').eq(1).should('contain', 'Walk dog')\n```\n",
      "section": "api",
      "anchors": [
        "find-the-first-or-nth-element-with-first-and-eq"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 45
    },
    {
      "id": "api/commands/get#find-an-element-by-an-id-built-at-runtime",
      "doc_id": "api/commands/get",
      "heading": "Find an element by an ID built at runtime",
      "heading_level": 4,
      "content_markdown": "#### Find an element by an ID built at runtime\n\nWhen the ID comes from a variable, escape it with [`CSS.escape()`](https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape_static) instead of adding backslashes by hand.\n\n```\nconst userId = 'user:42'\n\ncy.get(`#${CSS.escape(userId)}`).should('have.text', 'Jane')\n```\n",
      "section": "api",
      "anchors": [
        "find-an-element-by-an-id-built-at-runtime"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 47
    },
    {
      "id": "api/commands/get#cy-get-in-the-within-command",
      "doc_id": "api/commands/get",
      "heading": "cy.get() in the .within() command",
      "heading_level": 3,
      "content_markdown": "### `cy.get()` in the [`.within()`](/llm/markdown/api/commands/within.md) command\n\nSince `cy.get()` is chained off of `cy`, it always looks for the selector within the entire `document`. The only exception is when used inside a [.within()](/llm/markdown/api/commands/within.md) command.\n\n```\ncy.get('form').within(() => {\n  cy.get('input').type('Pamela') // Only yield inputs within form\n  cy.get('textarea').type('is a developer') // Only yield textareas within form\n})\n```\n",
      "section": "api",
      "anchors": [
        "cy-get-in-the-within-command"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 73
    },
    {
      "id": "api/commands/get#get-vs-find",
      "doc_id": "api/commands/get",
      "heading": "Get vs Find",
      "heading_level": 3,
      "content_markdown": "### Get vs Find\n\nThe `cy.get` command always starts its search from the [cy.root](/llm/markdown/api/commands/root.md) element. In most cases, it is the `document` element, unless used inside the [.within()](/llm/markdown/api/commands/within.md) command. The [.find](/llm/markdown/api/commands/find.md) command starts its search from the current subject.\n\n```\n<div class=\"test-title\">cy.get vs .find</div>\n<section id=\"comparison\">\n  <div class=\"feature\">Both are querying commands</div>\n</section>\n```\n\n```\ncy.get('#comparison')\n  .get('div')\n  // finds the div.test-title outside the #comparison\n  // and the div.feature inside\n  .should('have.class', 'test-title')\n  .and('have.class', 'feature')\ncy.get('#comparison')\n  .find('div')\n  // the search is limited to the tree at #comparison element\n  // so it finds div.feature only\n  .should('have.length', 1)\n  .and('have.class', 'feature')\n```\n",
      "section": "api",
      "anchors": [
        "get-vs-find"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 128
    },
    {
      "id": "api/commands/get#waiting-for-elements",
      "doc_id": "api/commands/get",
      "heading": "Waiting for elements",
      "heading_level": 3,
      "content_markdown": "### Waiting for elements\n\n#### Wait for a list to finish loading\n\n`cy.get()` retries until the assertion chained to it passes, so it waits for all three items to appear.\n\n```\ncy.get('[data-cy=todo-item]').should('have.length', 3)\n```\n\nAn assertion inside [`.then()`](/llm/markdown/api/commands/then.md) runs only once. `cy.get()` waits only until at least one item exists, so this fails if the list is still filling in:\n\n```\n// Runs once: fails if the list is still loading\ncy.get('[data-cy=todo-item]').then(($items) => {\n  expect($items).to.have.length(3)\n})\n```\n\n#### Assert an element doesn't exist\n\n`cy.get()` retries a negative assertion too, until the element is gone.\n\n```\ncy.get('[data-cy=loading-spinner]').should('not.exist')\n```\n",
      "section": "api",
      "anchors": [
        "waiting-for-elements"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 129
    },
    {
      "id": "api/commands/get#wait-for-a-list-to-finish-loading",
      "doc_id": "api/commands/get",
      "heading": "Wait for a list to finish loading",
      "heading_level": 4,
      "content_markdown": "#### Wait for a list to finish loading\n\n`cy.get()` retries until the assertion chained to it passes, so it waits for all three items to appear.\n\n```\ncy.get('[data-cy=todo-item]').should('have.length', 3)\n```\n\nAn assertion inside [`.then()`](/llm/markdown/api/commands/then.md) runs only once. `cy.get()` waits only until at least one item exists, so this fails if the list is still filling in:\n\n```\n// Runs once: fails if the list is still loading\ncy.get('[data-cy=todo-item]').then(($items) => {\n  expect($items).to.have.length(3)\n})\n```\n",
      "section": "api",
      "anchors": [
        "wait-for-a-list-to-finish-loading"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 97
    },
    {
      "id": "api/commands/get#options",
      "doc_id": "api/commands/get",
      "heading": "Options",
      "heading_level": 3,
      "content_markdown": "### Options\n\n#### Wait longer for a slow element with `timeout`\n\n```\ncy.get('[data-cy=search-results]', { timeout: 10000 }).should('be.visible')\n```\n\n#### Find elements inside shadow DOM with `includeShadowDom`\n\n```\ncy.get('.shadow-button', { includeShadowDom: true }).click()\n```\n\nTo search shadow DOM in every query, set the [`includeShadowDom` configuration option](/llm/markdown/app/references/configuration.md#Global) instead.\n\n#### Hide a query from the Command Log with `log`\n\nThe `get` row is hidden, but the assertion still appears in the Command Log.\n\n```\ncy.get('[data-cy=toast]', { log: false }).should('be.visible')\n```\n",
      "section": "api",
      "anchors": [
        "options"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 103
    },
    {
      "id": "api/commands/get#hide-a-query-from-the-command-log-with-log",
      "doc_id": "api/commands/get",
      "heading": "Hide a query from the Command Log with log",
      "heading_level": 4,
      "content_markdown": "#### Hide a query from the Command Log with `log`\n\nThe `get` row is hidden, but the assertion still appears in the Command Log.\n\n```\ncy.get('[data-cy=toast]', { log: false }).should('be.visible')\n```\n",
      "section": "api",
      "anchors": [
        "hide-a-query-from-the-command-log-with-log"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 41
    },
    {
      "id": "api/commands/get#alias",
      "doc_id": "api/commands/get",
      "heading": "Alias",
      "heading_level": 3,
      "content_markdown": "### Alias\n\nFor a detailed explanation of aliasing, [read more about aliasing here](/llm/markdown/app/core-concepts/variables-and-aliases.md#Aliases).\n\n#### Get the aliased 'todos' elements\n\n```\ncy.get('ul#todos').as('todos')\n\n//...hack hack hack...\n\n//later retrieve the todos\ncy.get('@todos')\n```\n\n#### Get the aliased 'submitBtn' element\n\n```\nbeforeEach(() => {\n  cy.get('button[type=submit]').as('submitBtn')\n})\n\nit('disables on click', () => {\n  cy.get('@submitBtn').click()\n  cy.get('@submitBtn').should('be.disabled')\n})\n```\n\n#### Get the aliased 'users' fixture\n\n```\nbeforeEach(() => {\n  cy.fixture('users.json').as('users')\n})\n\nit('shows the first user in the header', () => {\n  // access the array of users\n  cy.get('@users').then((users) => {\n    // get the first user\n    const user = users[0]\n\n    cy.get('header').contains(user.name)\n  })\n})\n```\n\n#### Re-run an alias or capture a static value\n\nBy default, an alias re-runs its queries each time you request it. Pass `{ type: 'static' }` to [`.as()`](/llm/markdown/api/commands/as.md) to keep the value from the moment you created the alias.\n\n```\ncy.get('[data-cy=total]').invoke('text').as('liveTotal')\ncy.get('[data-cy=total]').invoke('text').as('startTotal', { type: 'static' })\n\ncy.get('[data-cy=add-item]').click()\n\ncy.get('@liveTotal').should('eq', '$5.00') // re-runs the queries\ncy.get('@startTotal').should('eq', '$0.00') // value captured earlier\n```\n\nIn the Command Log, the static alias is labeled `(static)` where it's created:\n\n#### Assert an aliased element no longer exists\n\nBecause the alias re-runs its query, you can assert that the element is gone.\n\n```\ncy.get('[data-cy=toast]').as('toast')\ncy.get('[data-cy=dismiss]').click()\ncy.get('@toast').should('not.exist')\n```\n\n#### Get an aliased spy or stub\n\n```\ncy.window().then((win) => {\n  cy.spy(win.console, 'error').as('consoleError')\n})\n\ncy.get('[data-cy=save]').click()\ncy.get('@consoleError').should('not.have.been.called')\n```\n\n#### Get all aliased intercepts\n\nWhen using [`cy.intercept()`](/llm/markdown/api/commands/intercept.md) with an alias, you can retrieve **all** intercepted requests for that alias by appending `.all` to the alias name. This returns an array of [interception objects](/llm/markdown/api/commands/intercept.md#Using-the-yielded-object).\n\n```\ncy.intercept('GET', '/users').as('getUsers')\n\n// trigger multiple requests\ncy.visit('/users')\ncy.visit('/users')\n\n// yields an array of all interceptions for this alias\ncy.get('@getUsers.all').then((interceptions) => {\n  expect(interceptions).to.have.length(2)\n})\n```\n\nYou can also retrieve a specific intercept by its 1-based numeric index. Without any suffix, `cy.get('@alias')` returns the most recent intercepted request.\n\n```\ncy.intercept('GET', '/users').as('getUsers')\n\ncy.visit('/users')\ncy.visit('/users')\n\n// yields the first intercepted request\ncy.get('@getUsers.1').its('response.statusCode').should('eq', 200)\n\n// yields the second intercepted request\ncy.get('@getUsers.2').its('response.statusCode').should('eq', 200)\n```\n\nIndex `0` is not valid — indices start at `1`. These suffixes are **not** supported by [`cy.wait()`](/llm/markdown/api/commands/wait.md). Use `cy.get('@alias.all')` instead of `cy.wait('@alias.all')`.\n",
      "section": "api",
      "anchors": [
        "alias"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 451
    },
    {
      "id": "api/commands/get#get-the-aliased-users-fixture",
      "doc_id": "api/commands/get",
      "heading": "Get the aliased 'users' fixture",
      "heading_level": 4,
      "content_markdown": "#### Get the aliased 'users' fixture\n\n```\nbeforeEach(() => {\n  cy.fixture('users.json').as('users')\n})\n\nit('shows the first user in the header', () => {\n  // access the array of users\n  cy.get('@users').then((users) => {\n    // get the first user\n    const user = users[0]\n\n    cy.get('header').contains(user.name)\n  })\n})\n```\n",
      "section": "api",
      "anchors": [
        "get-the-aliased-users-fixture"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 59
    },
    {
      "id": "api/commands/get#re-run-an-alias-or-capture-a-static-value",
      "doc_id": "api/commands/get",
      "heading": "Re-run an alias or capture a static value",
      "heading_level": 4,
      "content_markdown": "#### Re-run an alias or capture a static value\n\nBy default, an alias re-runs its queries each time you request it. Pass `{ type: 'static' }` to [`.as()`](/llm/markdown/api/commands/as.md) to keep the value from the moment you created the alias.\n\n```\ncy.get('[data-cy=total]').invoke('text').as('liveTotal')\ncy.get('[data-cy=total]').invoke('text').as('startTotal', { type: 'static' })\n\ncy.get('[data-cy=add-item]').click()\n\ncy.get('@liveTotal').should('eq', '$5.00') // re-runs the queries\ncy.get('@startTotal').should('eq', '$0.00') // value captured earlier\n```\n\nIn the Command Log, the static alias is labeled `(static)` where it's created:\n",
      "section": "api",
      "anchors": [
        "re-run-an-alias-or-capture-a-static-value"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 97
    },
    {
      "id": "api/commands/get#get-all-aliased-intercepts",
      "doc_id": "api/commands/get",
      "heading": "Get all aliased intercepts",
      "heading_level": 4,
      "content_markdown": "#### Get all aliased intercepts\n\nWhen using [`cy.intercept()`](/llm/markdown/api/commands/intercept.md) with an alias, you can retrieve **all** intercepted requests for that alias by appending `.all` to the alias name. This returns an array of [interception objects](/llm/markdown/api/commands/intercept.md#Using-the-yielded-object).\n\n```\ncy.intercept('GET', '/users').as('getUsers')\n\n// trigger multiple requests\ncy.visit('/users')\ncy.visit('/users')\n\n// yields an array of all interceptions for this alias\ncy.get('@getUsers.all').then((interceptions) => {\n  expect(interceptions).to.have.length(2)\n})\n```\n\nYou can also retrieve a specific intercept by its 1-based numeric index. Without any suffix, `cy.get('@alias')` returns the most recent intercepted request.\n\n```\ncy.intercept('GET', '/users').as('getUsers')\n\ncy.visit('/users')\ncy.visit('/users')\n\n// yields the first intercepted request\ncy.get('@getUsers.1').its('response.statusCode').should('eq', 200)\n\n// yields the second intercepted request\ncy.get('@getUsers.2').its('response.statusCode').should('eq', 200)\n```\n\nIndex `0` is not valid — indices start at `1`. These suffixes are **not** supported by [`cy.wait()`](/llm/markdown/api/commands/wait.md). Use `cy.get('@alias.all')` instead of `cy.wait('@alias.all')`.\n",
      "section": "api",
      "anchors": [
        "get-all-aliased-intercepts"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 167
    },
    {
      "id": "api/commands/get#typescript",
      "doc_id": "api/commands/get",
      "heading": "TypeScript",
      "heading_level": 3,
      "content_markdown": "### TypeScript\n\n#### Type the yielded element or an aliased value\n\nPass a type argument to type what `cy.get()` yields. For a selector, it's the element type. For an alias, it's the type of the aliased value.\n\n```\ncy.get<HTMLInputElement>('[data-cy=email]').then(($input) => {\n  // $input is typed as JQuery<HTMLInputElement>\n  expect($input[0].value).to.eq('jane@example.com')\n})\n\ncy.wrap({ name: 'Jane' }).as('user')\ncy.get<{ name: string }>('@user').its('name').should('eq', 'Jane')\n```\n",
      "section": "api",
      "anchors": [
        "typescript"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 79
    },
    {
      "id": "api/commands/get#type-the-yielded-element-or-an-aliased-value",
      "doc_id": "api/commands/get",
      "heading": "Type the yielded element or an aliased value",
      "heading_level": 4,
      "content_markdown": "#### Type the yielded element or an aliased value\n\nPass a type argument to type what `cy.get()` yields. For a selector, it's the element type. For an alias, it's the type of the aliased value.\n\n```\ncy.get<HTMLInputElement>('[data-cy=email]').then(($input) => {\n  // $input is typed as JQuery<HTMLInputElement>\n  expect($input[0].value).to.eq('jane@example.com')\n})\n\ncy.wrap({ name: 'Jane' }).as('user')\ncy.get<{ name: string }>('@user').its('name').should('eq', 'Jane')\n```\n",
      "section": "api",
      "anchors": [
        "type-the-yielded-element-or-an-aliased-value"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 76
    },
    {
      "id": "api/commands/get#notes",
      "doc_id": "api/commands/get",
      "heading": "Notes",
      "heading_level": 2,
      "content_markdown": "## Notes\n\n### What a `cy.get()` timeout error looks like\n\nWhen no element matches before the timeout, `cy.get()` fails with an error like this one. The time in the message is the command's timeout: [`defaultCommandTimeout`](/llm/markdown/app/references/configuration.md#Timeouts), or the `timeout` option when you pass one.\n\n```\nTimed out retrying after 4000ms: Expected to find element: `[data-cy=todo-item]`, but never found it.\n```\n\n### `cy.get()` doesn't search inside iframes\n\n`cy.get()` searches the document of the application under test and doesn't descend into `<iframe>` elements. To query inside a same-origin iframe, see [How do I test elements inside an iframe?](/llm/markdown/app/faq.md#How-do-I-test-elements-inside-an-iframe).\n",
      "section": "api",
      "anchors": [
        "notes"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 127
    },
    {
      "id": "api/commands/get#what-a-cy-get-timeout-error-looks-like",
      "doc_id": "api/commands/get",
      "heading": "What a cy.get() timeout error looks like",
      "heading_level": 3,
      "content_markdown": "### What a `cy.get()` timeout error looks like\n\nWhen no element matches before the timeout, `cy.get()` fails with an error like this one. The time in the message is the command's timeout: [`defaultCommandTimeout`](/llm/markdown/app/references/configuration.md#Timeouts), or the `timeout` option when you pass one.\n\n```\nTimed out retrying after 4000ms: Expected to find element: `[data-cy=todo-item]`, but never found it.\n```\n",
      "section": "api",
      "anchors": [
        "what-a-cy-get-timeout-error-looks-like"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 76
    },
    {
      "id": "api/commands/get#cy-get-doesnt-search-inside-iframes",
      "doc_id": "api/commands/get",
      "heading": "cy.get() doesn't search inside iframes",
      "heading_level": 3,
      "content_markdown": "### `cy.get()` doesn't search inside iframes\n\n`cy.get()` searches the document of the application under test and doesn't descend into `<iframe>` elements. To query inside a same-origin iframe, see [How do I test elements inside an iframe?](/llm/markdown/app/faq.md#How-do-I-test-elements-inside-an-iframe).\n",
      "section": "api",
      "anchors": [
        "cy-get-doesnt-search-inside-iframes"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 48
    },
    {
      "id": "api/commands/get#rules",
      "doc_id": "api/commands/get",
      "heading": "Rules",
      "heading_level": 2,
      "content_markdown": "## Rules\n\n### Requirements\n\n*   `cy.get()` is chained off of `cy`. When chained off another command, it ignores that command's subject.\n\n### Assertions\n\n*   `cy.get()` automatically [retries](/llm/markdown/app/core-concepts/retry-ability.md) until the element(s) [exist in the DOM](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Implicit-Assertions).\n*   `cy.get()` automatically [retries](/llm/markdown/app/core-concepts/retry-ability.md) until all chained assertions have passed.\n\n### Timeouts\n\n*   `cy.get()` can time out waiting for the element(s) to [exist in the DOM](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Implicit-Assertions).\n*   `cy.get()` can time out waiting for assertions you've added to pass.\n",
      "section": "api",
      "anchors": [
        "rules"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 96
    },
    {
      "id": "api/commands/get#command-log",
      "doc_id": "api/commands/get",
      "heading": "Command Log",
      "heading_level": 2,
      "content_markdown": "## Command Log\n\n**_Get an input and assert on the value_**\n\n```\ncy.get('input[name=\"firstName\"]').should('have.value', 'Homer')\n```\n\nThe commands above will display in the Command Log as:\n\nWhen clicking on the `get` command within the command log, the console outputs the following:\n",
      "section": "api",
      "anchors": [
        "command-log"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 53
    },
    {
      "id": "api/commands/get#history",
      "doc_id": "api/commands/get",
      "heading": "History",
      "heading_level": 2,
      "content_markdown": "## History\n\n| Version | Changes |\n| --- | --- |\n| [15.17.0](/llm/markdown/app/references/changelog.md#15-17-0) | `@`\\-prefixed aliases are typed as `Chainable<S>` instead of `Chainable<JQuery<HTMLElement>>` |\n| [12.0.0](/llm/markdown/app/references/changelog.md#12-0-0) | Aliases re-run the queries leading up to them by default |\n| [5.2.0](/llm/markdown/app/references/changelog.md#5-2-0) | Added `includeShadowDom` option |\n",
      "section": "api",
      "anchors": [
        "history"
      ],
      "path": "/llm/json/chunked/api/commands/get.json",
      "token_estimate": 61
    }
  ]
}