{
    "version" : "https://jsonfeed.org/version/1.1",
    "title" : "EONYX Blog",
    "description": "Field notes on EONYX — a terminal-first AI agent that runs operations over MCP.",
    "home_page_url" : "https://eonyx.tech/blog/",
    "feed_url" : "https://eonyx.tech/blog/index.feed",
    "icon" : "https://eonyx.tech/apple-touch-icon.png",
    "favicon" : "https://eonyx.tech/favicon.ico",
    "author" : {
        "name" : "EONYX",
        "avatar": "https://eonyx.tech/images/avatar-author.svg"
    },
    "items" : [
    {
        "title" : "Installing EONYX: build, run, and configure",
        "date_published" : "2026-07-03T00:00:00+03:00",
        "date_modified" : "2026-07-03T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-setup/",
        "url" : "https://eonyx.tech/blog/eonyx-setup/",
        "summary": "EONYX is a terminal AI agent for working with code, written in Go. It connects directly to any OpenAI-compatible API (OpenAI, OpenRouter, DeepSeek, Moonshot, local Ollama / llama.cpp / LM Studio) — no external services, no telemetry, no OAuth. One process, one binary, everything local. Here: installation, the first run, and the full configuration.\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eEONYX\u003c/strong\u003e is a terminal AI agent for working with code, written in \u003ca href=\"https://go.dev\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGo\u003c/a\u003e. It connects directly to any OpenAI-compatible API (\u003ca href=\"https://openai.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOpenAI\u003c/a\u003e, \u003ca href=\"https://openrouter.ai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOpenRouter\u003c/a\u003e, \u003ca href=\"https://www.deepseek.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eDeepSeek\u003c/a\u003e, \u003ca href=\"https://www.moonshot.ai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eMoonshot\u003c/a\u003e, local \u003ca href=\"https://ollama.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOllama\u003c/a\u003e / \u003ca href=\"https://github.com/ggml-org/llama.cpp\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ellama.cpp\u003c/a\u003e / \u003ca href=\"https://lmstudio.ai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eLM Studio\u003c/a\u003e) — no external services, no telemetry, no OAuth. One process, one binary, everything local. Here: installation, the first run, and the full configuration.\u003c/p\u003e\n\u003ch2 id=\"requirements-and-installation\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#requirements-and-installation\" class=\"header-mark\"\u003e\u003c/a\u003e7 Requirements and installation\u003c/h2\u003e\u003ch3 id=\"what-you-need\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#what-you-need\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 What you need\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://go.dev/dl/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGo 1.26+\u003c/a\u003e\u003c/strong\u003e — to build from source (prebuilt binaries don\u0026rsquo;t need it).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAn API key\u003c/strong\u003e for any OpenAI-compatible provider — or a local model server (Ollama, llama.cpp, LM Studio), in which case no key is needed.\u003c/li\u003e\n\u003cli\u003eA terminal: \u003ca href=\"https://aka.ms/terminal\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eWindows Terminal\u003c/a\u003e / \u003ca href=\"https://learn.microsoft.com/en-us/powershell/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ePowerShell\u003c/a\u003e, any Linux shell, macOS Terminal.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"installation-options\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#installation-options\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 Installation options\u003c/h3\u003e\u003ctab-container default-tab=\"0\" class=\"tw:block tw:my-5\" role=\"tablist\"\u003e\u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-27\"\u003eFrom source\u003c/button\u003e\r\n  \u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-28\"\u003ePrebuilt binary\u003c/button\u003e\r\n  \n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-27\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-28\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/avtotor/eonyx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e eonyx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emake build        \u003cspan class=\"c1\"\u003e# builds bin/eonyx with the version from the git tag\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eOr install into \u003ccode\u003e$GOPATH/bin\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-29\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emake install\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eThe version is baked into the binary at build time (\u003ccode\u003egit describe --tags\u003c/code\u003e) — there are no hardcoded versions in the code:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-30\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx --version\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\r\n    \r\n\u003c/div\u003e\r\n\n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-28\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        Releases are built by \u003ca href=\"https://goreleaser.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGoReleaser\u003c/a\u003e on every \u003ccode\u003ev*\u003c/code\u003e git tag — download the archive for your platform from the \u003ca href=\"https://github.com/avtotor/eonyx/releases/latest\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eReleases\u003c/a\u003e page and put the binary in your \u003ccode\u003ePATH\u003c/code\u003e. Linux, macOS, and Windows are supported.\r\n    \r\n\u003c/div\u003e\r\n\n\u003c/tab-container\u003e\r\n\n\u003ch3 id=\"first-run\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#first-run\" class=\"header-mark\"\u003e\u003c/a\u003e7.3 First run\u003c/h3\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-21\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e my-project\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eAn interactive TUI chat opens. If there is no configuration at any level yet, EONYX creates a working \u003ccode\u003eeonyx.json\u003c/code\u003e in the global directory itself — with two DeepSeek models and one local one (Ollama). All that\u0026rsquo;s left is to set the key:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-22\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eDEEPSEEK_API_KEY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003esk-...   \u003cspan class=\"c1\"\u003e# or your own provider, see below\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eHeadless mode for scripts and CI\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cp\u003eThe \u003ccode\u003erun\u003c/code\u003e subcommand executes a task without the TUI and then exits:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-29\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run \u003cspan class=\"s2\"\u003e\u0026#34;describe what this repository does\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run -m deepseek-v4-pro --yolo \u003cspan class=\"s2\"\u003e\u0026#34;fix the failing test\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eIt also works in a pipe. The argument takes priority over stdin, so when piping don\u0026rsquo;t duplicate the prompt as an argument — otherwise the content from stdin is ignored:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-30\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;explain the error:\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e cat error.log\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"o\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e eonyx run\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eThe response text is streamed to \u003cstrong\u003estdout\u003c/strong\u003e, while tool activity and token statistics go to \u003cstrong\u003estderr\u003c/strong\u003e, so you can safely redirect the output into a file or a pipe.\u003c/p\u003e\n\u003cp\u003eFlags:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--model/-m\u003c/code\u003e — the model\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--session/-s \u0026lt;id\u0026gt;\u003c/code\u003e — continue a specific session\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--continue/-c\u003c/code\u003e — continue the most recent one\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--yolo\u003c/code\u003e — disable tool confirmations\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--json\u003c/code\u003e — events as NDJSON instead of text\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--system-prompt\u003c/code\u003e — replace the system prompt\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eExit codes distinguish outcomes for CI:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e0\u003c/code\u003e — success\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e2\u003c/code\u003e — usage error\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e3\u003c/code\u003e — API error\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e4\u003c/code\u003e — the task finished, but a tool was blocked by the permission gate\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e5\u003c/code\u003e — hit the \u003ccode\u003emax_steps\u003c/code\u003e limit\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e130\u003c/code\u003e — interrupted with Ctrl+C\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"the-remaining-subcommands\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-remaining-subcommands\" class=\"header-mark\"\u003e\u003c/a\u003e7.4 The remaining subcommands\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eCommand\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003ePurpose\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eeonyx\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003einteractive TUI chat\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eeonyx run \u0026quot;…\u0026quot;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eheadless agent run\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eeonyx sessions\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003elist of saved sessions\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eeonyx info\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003econfiguration, data, and project paths\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eeonyx config\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe final (merged) configuration\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eeonyx clean\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eremove its own configuration files\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"keys-and-commands-in-the-tui\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#keys-and-commands-in-the-tui\" class=\"header-mark\"\u003e\u003c/a\u003e7.5 Keys and commands in the TUI\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eKey\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eAction\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esend the message\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+J\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eline break in the input field\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e↑ / ↓\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ehistory of your messages\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEsc\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003einterrupt the running turn\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ecommand palette (on empty input)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e@\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003efile path autocompletion (Tab inserts)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e?\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ehelp (on empty input)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ecommand palette\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+N\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eswitch model\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+S\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esession manager\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eskills and MCP servers (on/off)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+O\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eexpand/collapse tool output\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eexpand/collapse the model\u0026rsquo;s reasoning\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e! \u0026lt;cmd\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003erun a shell command\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+C\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003equit\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eSlash commands: \u003ccode\u003e/new\u003c/code\u003e, \u003ccode\u003e/clear\u003c/code\u003e, \u003ccode\u003e/add [path]\u003c/code\u003e, \u003ccode\u003e/rename \u0026lt;title\u0026gt;\u003c/code\u003e, \u003ccode\u003e/fork\u003c/code\u003e, \u003ccode\u003e/export\u003c/code\u003e, \u003ccode\u003e/yolo\u003c/code\u003e, \u003ccode\u003e/plan\u003c/code\u003e, \u003ccode\u003e/timestamps\u003c/code\u003e, \u003ccode\u003e/model\u003c/code\u003e, \u003ccode\u003e/sessions [query]\u003c/code\u003e, \u003ccode\u003e/help\u003c/code\u003e, \u003ccode\u003e/quit\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"details admonition note open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eThe \u0026#39;!\u0026#39; command\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eThe output of a shell command started via \u003ccode\u003e!\u003c/code\u003e is written into the conversation — the model sees what you ran and what changed (the current directory or environment variables, for example).\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"configuration\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#configuration\" class=\"header-mark\"\u003e\u003c/a\u003e8 Configuration\u003c/h2\u003e\u003cp\u003eEONYX reads \u003ccode\u003eeonyx.json\u003c/code\u003e from \u003cstrong\u003ethree levels\u003c/strong\u003e and merges them top down — each next level overrides the previous one:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlobal config\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eWindows — \u003ccode\u003e%LOCALAPPDATA%\\eonyx\\eonyx.json\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eLinux/macOS — \u003ccode\u003e$XDG_CONFIG_HOME/eonyx/eonyx.json\u003c/code\u003e (\u003ccode\u003e~/.config/…\u003c/code\u003e by default)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGlobal data\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eWindows — the same path\u003c/li\u003e\n\u003cli\u003eLinux/macOS — \u003ccode\u003e$XDG_DATA_HOME/eonyx/eonyx.json\u003c/code\u003e (\u003ccode\u003e~/.local/share/…\u003c/code\u003e by default)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eProject config\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eeonyx.json\u003c/code\u003e or \u003ccode\u003e.eonyx.json\u003c/code\u003e — searched for up the tree from the current directory\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe directory where the project config is found becomes the \u003cstrong\u003eproject root\u003c/strong\u003e: a service folder \u003ccode\u003e.eonyx\u003c/code\u003e (exports, logs) appears inside it. The paths can be overridden with the \u003ccode\u003eEONYX_GLOBAL_CONFIG\u003c/code\u003e, \u003ccode\u003eEONYX_GLOBAL_DATA\u003c/code\u003e, and \u003ccode\u003eEONYX_CACHE_DIR\u003c/code\u003e environment variables. To see what was loaded from where: \u003ccode\u003eeonyx info\u003c/code\u003e and \u003ccode\u003eeonyx config\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"details admonition warning open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"/\u003e\u003c/svg\u003e\u003c/span\u003eStrict schema\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eThe parser rejects unknown fields, wrong types, and malformed JSON — EONYX \u003cstrong\u003erefuses to start\u003c/strong\u003e rather than silently ignoring a typo. For an unknown field the message contains its name and line number; for a wrong type or malformed JSON — a generic error message.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"a-full-eonyxjson-example\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#a-full-eonyxjson-example\" class=\"header-mark\"\u003e\u003c/a\u003e8.1 A full eonyx.json example\u003c/h3\u003e\u003cp\u003eThis is the default config EONYX creates on the first run — it contains every supported top-level key:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-23\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;providers\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;deepseek\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://api.deepseek.com\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$DEEPSEEK_API_KEY\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;local\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;http://localhost:11434/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;models\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deepseek-v4-flash\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;provider\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deepseek\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;context_window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1000000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;input_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.14\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;output_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.28\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deepseek-v4-pro\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;provider\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deepseek\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;context_window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1000000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;input_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.435\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;output_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.87\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;qwen2.5-coder\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;provider\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;local\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;context_window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e32768\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;input_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;output_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;default_model\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deepseek-v4-flash\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;max_steps\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e50\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;permissions\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;allowed_tools\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;skills\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;mcp\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;hooks\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;report\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;database_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;system_prompt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;log_file\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;retry\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch3 id=\"providers-and-models\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#providers-and-models\" class=\"header-mark\"\u003e\u003c/a\u003e8.2 Providers and models\u003c/h3\u003e\u003cp\u003eA provider is a way to reach an API. There is only one type so far — \u003ccode\u003e\u0026quot;openai\u0026quot;\u003c/code\u003e — and it covers any OpenAI-compatible endpoint:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-24\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;providers\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;openrouter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://openrouter.ai/api/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$OPENROUTER_API_KEY\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eThe \u003ccode\u003eapi_key\u003c/code\u003e and \u003ccode\u003ebase_url\u003c/code\u003e fields can reference environment variables (\u003ccode\u003e$OPENAI_API_KEY\u003c/code\u003e) — they are expanded after the layers are merged, so secrets are not stored in the file.\u003c/p\u003e\n\u003cp\u003eA model binds an id to a provider:\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eField\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003ePurpose\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eid\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe model name as the API understands it\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eprovider\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ea key from the \u003ccode\u003eproviders\u003c/code\u003e block\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003econtext_window\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003econtext size in tokens — \u003cstrong\u003etriggers auto-summarization\u003c/strong\u003e of history\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einput_price\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eprice per 1M input tokens (USD), for the cost counter in the header\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eoutput_price\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eprice per 1M output tokens (USD)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003ccode\u003emax_steps\u003c/code\u003e limits the number of tool-call rounds within a single turn (50 by default).\u003c/p\u003e\n\u003ch3 id=\"permissions\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#permissions\" class=\"header-mark\"\u003e\u003c/a\u003e8.3 Permissions\u003c/h3\u003e\u003cp\u003eThe safe tools — \u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003egit_status\u003c/code\u003e, \u003ccode\u003egit_diff\u003c/code\u003e, \u003ccode\u003egit_log\u003c/code\u003e, \u003ccode\u003etodo_write\u003c/code\u003e — are always allowed. Everything else (writing, editing, bash, git commits, MCP tools…) requires permission:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-25\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;permissions\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;allowed_tools\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;bash\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;write\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;edit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;sandbox\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eallowed_tools\u003c/code\u003e\u003c/strong\u003e — the list of tools that run without asking.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003esandbox\u003c/code\u003e\u003c/strong\u003e — locks the file tools (\u003ccode\u003eread\u003c/code\u003e/\u003ccode\u003ewrite\u003c/code\u003e/\u003ccode\u003eedit\u003c/code\u003e/\u003ccode\u003emulti_edit\u003c/code\u003e/\u003ccode\u003els\u003c/code\u003e) inside the project root; off by default.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003e--yolo\u003c/code\u003e\u003c/strong\u003e (or \u003ccode\u003e/yolo\u003c/code\u003e in the TUI) — disables the gate entirely for the duration of the session.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIn the TUI an interactive layer works on top of the static policy: for a tool that isn\u0026rsquo;t in the allowlist, EONYX shows an \u003cstrong\u003eAllow once / Allow always (this session) / Deny\u003c/strong\u003e dialog. A denial doesn\u0026rsquo;t kill the turn — the model receives it as a tool error and adapts.\u003c/p\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003ePlanning mode\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003ccode\u003e/plan\u003c/code\u003e enables a stricter gate: only read tools are available, the agent explores the code and proposes a plan. Once the plan is ready, EONYX asks you: \u003cstrong\u003eimplement it\u003c/strong\u003e, \u003cstrong\u003eallow edits\u003c/strong\u003e, or \u003cstrong\u003ekeep planning\u003c/strong\u003e.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"hooks\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#hooks\" class=\"header-mark\"\u003e\u003c/a\u003e8.4 Hooks\u003c/h3\u003e\u003cp\u003eHooks are shell commands around tool calls. The format: tool name → \u003ccode\u003ebefore\u003c/code\u003e / \u003ccode\u003eafter\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-26\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hooks\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;write\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;before\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;echo \\\u0026#34;writing: $EONYX_INPUT\\\u0026#34; \u0026gt;\u0026gt; .eonyx/audit.log\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;gofmt -l .\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;bash\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;before\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[ \\\u0026#34;$EONYX_CWD\\\u0026#34; = \\\u0026#34;$HOME\\\u0026#34; ] \u0026amp;\u0026amp; exit 1 || exit 0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eRules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ebefore\u003c/code\u003e\u003c/strong\u003e runs before the tool; a non-zero exit code \u003cstrong\u003eblocks\u003c/strong\u003e the call.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eafter\u003c/code\u003e\u003c/strong\u003e runs after it; its output is appended to the tool result (the model sees it). Errors in \u003ccode\u003eafter\u003c/code\u003e don\u0026rsquo;t break the result.\u003c/li\u003e\n\u003cli\u003eContext is passed \u003cstrong\u003ethrough environment variables\u003c/strong\u003e rather than by substitution into the command text — injection via the input content is impossible:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eEONYX_TOOL\u003c/code\u003e — the tool name\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eEONYX_PHASE\u003c/code\u003e — \u003ccode\u003ebefore\u003c/code\u003e / \u003ccode\u003eafter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eEONYX_CWD\u003c/code\u003e — the working directory\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eEONYX_INPUT\u003c/code\u003e — the JSON input\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eEONYX_RESULT\u003c/code\u003e — the result, only in \u003ccode\u003eafter\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eEach hook gets \u003cstrong\u003e30 seconds\u003c/strong\u003e; hooks run in the same shell session as the \u003ccode\u003ebash\u003c/code\u003e tool.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"other-keys\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#other-keys\" class=\"header-mark\"\u003e\u003c/a\u003e8.5 Other keys\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eKey\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003ePurpose\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eskills\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eadditional skill directories (see the Skills article)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003emcp\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe list of MCP servers (see the MCP article)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ereport.database_url\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://www.postgresql.org\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ePostgreSQL\u003c/a\u003e for the read-only reporting tools\u003cbr\u003eempty — the tools are not registered\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003esystem_prompt\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ea full replacement for the generated system prompt\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003elog_file\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ea log path instead of the standard one; supports \u003ccode\u003e$ENV\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eretry\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003emax_retries\u003c/code\u003e — 3 by default\u003cbr\u003e\u003ccode\u003ebase_delay_ms\u003c/code\u003e — 500, doubles up to 30 s\u003cbr\u003e\u003ccode\u003eresponse_header_timeout_sec\u003c/code\u003e — 60\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eInstallation\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003emake build\u003c/code\u003e from source or a binary from GitHub Releases\u003c/li\u003e\n\u003cli\u003echeck: \u003ccode\u003eeonyx --version\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRunning\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eeonyx\u003c/code\u003e — interactive TUI\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eeonyx run \u0026quot;task\u0026quot;\u003c/code\u003e — headless, stdout/stderr separated\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConfiguration\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ethe \u003ccode\u003eeonyx.json\u003c/code\u003e cascade: global → data → project\u003c/li\u003e\n\u003cli\u003estrict schema, \u003ccode\u003e$ENV\u003c/code\u003e references for secrets\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eModels\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eany OpenAI-compatible API\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econtext_window\u003c/code\u003e triggers auto-summarization\u003c/li\u003e\n\u003cli\u003eprices — the cost counter in the header\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePermissions\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ereading is always allowed\u003c/li\u003e\n\u003cli\u003eeverything else — via \u003ccode\u003eallowed_tools\u003c/code\u003e, the TUI dialog, \u003ccode\u003e--yolo\u003c/code\u003e, or \u003ccode\u003e/plan\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHooks\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ebefore\u003c/code\u003e / \u003ccode\u003eafter\u003c/code\u003e around tools\u003c/li\u003e\n\u003cli\u003econtext through \u003ccode\u003eEONYX_*\u003c/code\u003e variables\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebefore\u003c/code\u003e can block\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX and MCP: connecting external tools",
        "date_published" : "2026-06-30T00:00:00+03:00",
        "date_modified" : "2026-06-30T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-mcp/",
        "url" : "https://eonyx.tech/blog/eonyx-mcp/",
        "summary": "Model Context Protocol (MCP) is an open standard through which an agent gains access to external systems: databases, APIs, issue trackers and any other services. EONYX has a built-in MCP client based on the official Go SDK (modelcontextprotocol/go-sdk) — servers are described right in eonyx.json and their tools show up for the model alongside the built-in ones.\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eModel Context Protocol (MCP)\u003c/strong\u003e is an open standard through which an agent gains access to external systems: databases, APIs, issue trackers and any other services. EONYX has a built-in MCP client based on the official Go SDK (\u003ccode\u003emodelcontextprotocol/go-sdk\u003c/code\u003e) — servers are described right in \u003ccode\u003eeonyx.json\u003c/code\u003e and their tools show up for the model alongside the built-in ones.\u003c/p\u003e\n\u003ch2 id=\"setup\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#setup\" class=\"header-mark\"\u003e\u003c/a\u003e7 Setup\u003c/h2\u003e\u003cp\u003eConnecting an MCP server takes two steps: describe it in the config and grant access to its tools. And for one common case MCP is not needed at all — we will cover that too.\u003c/p\u003e\n\u003ch3 id=\"configuration\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#configuration\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 Configuration\u003c/h3\u003e\u003cp\u003eMCP servers are described in the \u003ccode\u003emcp\u003c/code\u003e array of the config. There is no separate \u0026ldquo;type\u0026rdquo; field — the transport is inferred from the fields: if there is a \u003ccode\u003eurl\u003c/code\u003e it is HTTP, if there is a \u003ccode\u003ecommand\u003c/code\u003e it is stdio.\u003c/p\u003e\n\u003ctab-container default-tab=\"0\" class=\"tw:block tw:my-5\" role=\"tablist\"\u003e\u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-11\"\u003estdio server\u003c/button\u003e\r\n  \u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-12\"\u003eHTTP server\u003c/button\u003e\r\n  \n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-11\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cp\u003eA local process, communication over stdin/stdout:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-31\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;mcp\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;github\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;command\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;npx\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;args\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;-y\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;@modelcontextprotocol/server-github\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;env\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;GITHUB_TOKEN\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ghp_...\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003e\u003ccode\u003eenv\u003c/code\u003e is added to the environment of the spawned process on top of the current one.\u003c/p\u003e\n\r\n    \r\n\u003c/div\u003e\r\n\n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-12\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cp\u003eA remote server, HTTP/SSE transport:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-32\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;mcp\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;tracker\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://mcp.example.com/sse\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;headers\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;Authorization\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Bearer $TRACKER_TOKEN\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003e\u003ccode\u003eheaders\u003c/code\u003e are added to every request; values can reference environment variables (\u003ccode\u003e$TRACKER_TOKEN\u003c/code\u003e) — the token is not stored in the file.\u003c/p\u003e\n\r\n    \r\n\u003c/div\u003e\r\n\n\u003c/tab-container\u003e\r\n\n\u003cp\u003eServer fields:\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eField\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003ePurpose\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eserver name — becomes the prefix of all its tools\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ecommand\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eexecutable of the stdio server\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eargs\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ecommand arguments\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eenv\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eenvironment variables for the server process\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eurl\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eendpoint of the HTTP server (presence of url switches transport)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eheaders\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eheaders for every HTTP request, support \u003ccode\u003e$ENV\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdiv class=\"details admonition note open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eConnection is best-effort\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eOn startup EONYX tries to connect to all servers; \u003cstrong\u003ea failing server is skipped\u003c/strong\u003e rather than breaking the launch — a \u003ccode\u003ewarning: mcp: …\u003c/code\u003e goes to stderr. The client identifies itself to the server as \u003ccode\u003eeonyx\u003c/code\u003e with the build version.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"permissions\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#permissions\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 Permissions\u003c/h3\u003e\u003cp\u003eMCP tools are not on the always-allowed list — on the first call EONYX shows an \u003cstrong\u003eAllow once / Allow always / Deny\u003c/strong\u003e dialog, just like for any writing tool. So that a trusted tool does not ask every time:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-9\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;permissions\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;allowed_tools\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;github_search_issues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;tracker_get_task\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition warning open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"/\u003e\u003c/svg\u003e\u003c/span\u003eSecurity\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003eDo not keep tokens in the config text (the project config is committed to the repository). In the \u003ccode\u003eheaders\u003c/code\u003e of an HTTP server, values expand \u003ccode\u003e$ENV\u003c/code\u003e references. For a stdio server the \u003ccode\u003eenv\u003c/code\u003e values are substituted literally — but the process inherits your environment, so it is enough to keep the secret in an environment variable instead of the config.\u003c/li\u003e\n\u003cli\u003eAdd \u003cstrong\u003especific\u003c/strong\u003e tools to \u003ccode\u003eallowed_tools\u003c/code\u003e, not everything at once: an MCP server performs actions on your behalf.\u003c/li\u003e\n\u003cli\u003eRemember that descriptions and results of MCP tools end up in the model\u0026rsquo;s context — do not connect servers you do not trust.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"when-mcp-is-not-needed\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#when-mcp-is-not-needed\" class=\"header-mark\"\u003e\u003c/a\u003e7.3 When MCP is not needed\u003c/h3\u003e\u003cp\u003eFor one common case MCP is not required: EONYX has built-in read-only reporting tools for \u003ca href=\"https://www.postgresql.org\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ePostgreSQL\u003c/a\u003e. It is enough to set the connection string:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-10\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;report\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;database_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$DATABASE_URL\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eLeave it empty and the tools are not registered at all; that is the off switch.\u003c/p\u003e\n\u003ch2 id=\"what-the-model-gets\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#what-the-model-gets\" class=\"header-mark\"\u003e\u003c/a\u003e8 What the model gets\u003c/h2\u003e\u003cp\u003eOnce connected, the server\u0026rsquo;s tools line up alongside the built-in ones. Here is exactly what the model receives.\u003c/p\u003e\n\u003ch3 id=\"tools\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#tools\" class=\"header-mark\"\u003e\u003c/a\u003e8.1 Tools\u003c/h3\u003e\u003cp\u003eEvery tool of a server is registered under the name \u003cstrong\u003e\u003ccode\u003e\u0026lt;server\u0026gt;_\u0026lt;tool\u0026gt;\u003c/code\u003e\u003c/strong\u003e: on the \u003ccode\u003egithub\u003c/code\u003e server the \u003ccode\u003esearch_issues\u003c/code\u003e tool becomes \u003ccode\u003egithub_search_issues\u003c/code\u003e. The argument schema is taken from the server as is, and the result is returned to the model as text.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe path of a single call\u003c/strong\u003e\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003esequenceDiagram\n    participant M as Model\n    participant P as EONYX\n    participant S as MCP server\n    participant E as External system\n    M-\u003e\u003eP: github_search_issues call\n    P-\u003e\u003eS: request over stdio / HTTP\n    S-\u003e\u003eE: call to the API or database\n    E--\u003e\u003eS: data\n    S--\u003e\u003eP: result\n    P--\u003e\u003eM: result as text\r\n\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003eConnecting servers at startup\u003c/strong\u003e\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003esequenceDiagram\n    participant P as EONYX\n    participant A as github server\n    participant B as tracker server\n    P-\u003e\u003eA: connect at startup\n    A--\u003e\u003eP: tools registered\n    P-\u003e\u003eB: connect at startup\n    B--xP: server unavailable\n    Note over P,B: warning: mcp — skipped\n    Note over P: startup continues without it\r\n\u003c/pre\u003e\u003cp\u003eConnecting is best-effort: working servers register their tools, a failing one is cut off with a warning, and EONYX starts in any case.\u003c/p\u003e\n\u003ch3 id=\"resources-and-prompts\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#resources-and-prompts\" class=\"header-mark\"\u003e\u003c/a\u003e8.2 Resources and prompts\u003c/h3\u003e\u003cp\u003eIf the server declares the corresponding capabilities (EONYX checks this during registration), these appear as well:\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eTool\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003ePurpose\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;server\u0026gt;_list_resources\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003elist the server\u0026rsquo;s resources\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;server\u0026gt;_read_resource\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eread a resource by \u003ccode\u003euri\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;server\u0026gt;_list_prompts\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003elist the prompts\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;server\u0026gt;_get_prompt\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eget a prompt by \u003ccode\u003ename\u003c/code\u003e (+ \u003ccode\u003earguments\u003c/code\u003e)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eBinary resources are not dumped into the context: instead of the content the model sees the marker \u003ccode\u003e(binary resource \u0026lt;uri\u0026gt;, N bytes)\u003c/code\u003e.\u003c/p\u003e\n\u003ch3 id=\"managing-servers-on-the-fly\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#managing-servers-on-the-fly\" class=\"header-mark\"\u003e\u003c/a\u003e8.3 Managing servers on the fly\u003c/h3\u003e\u003cp\u003eActive servers are visible in the TUI header — the \u003ccode\u003e» mcp\u003c/code\u003e segment. \u003cstrong\u003eCtrl+K\u003c/strong\u003e opens the capabilities dialog (Skills / MCP tabs): any server can be turned off and on right in the session — its tools are hidden from the model and stop being called, with no restart and no config edits. The \u003ccode\u003e✓\u003c/code\u003e/\u003ccode\u003e✗\u003c/code\u003e marks show the state.\u003c/p\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eConfiguration\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ethe \u003ccode\u003emcp\u003c/code\u003e array in \u003ccode\u003eeonyx.json\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecommand\u003c/code\u003e+\u003ccode\u003eargs\u003c/code\u003e+\u003ccode\u003eenv\u003c/code\u003e for stdio, \u003ccode\u003eurl\u003c/code\u003e+\u003ccode\u003eheaders\u003c/code\u003e for HTTP\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNaming\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;server\u0026gt;_\u0026lt;tool\u0026gt;\u003c/code\u003e for every tool\u003c/li\u003e\n\u003cli\u003eplus resource and prompt tools if the server supports them\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFault tolerance\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ea failing server is skipped with a warning\u003c/li\u003e\n\u003cli\u003eEONYX always starts\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eManagement\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e turns servers on and off on the fly\u003c/li\u003e\n\u003cli\u003ethe header shows the active ones\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePermissions\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eMCP tools go through the common gate\u003c/li\u003e\n\u003cli\u003eadd trusted ones to \u003ccode\u003eallowed_tools\u003c/code\u003e by name\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    }
    {
        "title" : "Local models in EONYX: fully offline",
        "date_published" : "2026-06-24T00:00:00+03:00",
        "date_modified" : "2026-06-24T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-local-models/",
        "url" : "https://eonyx.tech/blog/eonyx-local-models/",
        "summary": "One of the key differences of EONYX is that it is not tied to the cloud. Since the agent talks to any OpenAI-compatible API, you can point it at a local model server and work fully offline: the code never leaves the machine, no key is needed, and neither is the internet.\n",
        "content_html" : "\u003cp\u003eOne of the key differences of EONYX is that it is not tied to the cloud. Since the agent talks to \u003cstrong\u003eany OpenAI-compatible API\u003c/strong\u003e, you can point it at a local model server and work \u003cstrong\u003efully offline\u003c/strong\u003e: the code never leaves the machine, no key is needed, and neither is the internet.\u003c/p\u003e\n\u003ch2 id=\"running-offline\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#running-offline\" class=\"header-mark\"\u003e\u003c/a\u003e1 Running offline\u003c/h2\u003e\u003cp\u003eEONYX sees a local model as an ordinary provider — the whole trick is the \u003ccode\u003ebase_url\u003c/code\u003e and an empty key.\u003c/p\u003e\n\u003ch3 id=\"the-idea\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-idea\" class=\"header-mark\"\u003e\u003c/a\u003e1.1 The idea\u003c/h3\u003e\u003cp\u003eLocal servers (Ollama, llama.cpp, LM Studio) expose an endpoint on your machine that is compatible with OpenAI Chat Completions. EONYX treats it as an ordinary provider — the only differences are \u003ccode\u003ebase_url\u003c/code\u003e and an empty \u003ccode\u003eapi_key\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eWhen you need this\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003eThe code must not leave the perimeter (NDA, closed network).\u003c/li\u003e\n\u003cli\u003eThere is no stable internet connection.\u003c/li\u003e\n\u003cli\u003eYou want zero cost and zero risk of leaks.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"local-server\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#local-server\" class=\"header-mark\"\u003e\u003c/a\u003e1.2 Local server\u003c/h3\u003e\u003ctab-container default-tab=\"0\" class=\"tw:block tw:my-5\" role=\"tablist\"\u003e\u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-2\"\u003eOllama\u003c/button\u003e\r\n  \u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-3\"\u003ellama.cpp\u003c/button\u003e\r\n  \u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-4\"\u003eLM Studio\u003c/button\u003e\r\n  \n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-2\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cp\u003eStart the model:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-9\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama pull qwen2.5-coder\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama serve   \u003cspan class=\"c1\"\u003e# endpoint at http://localhost:11434/v1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eIn \u003ccode\u003eeonyx.json\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-10\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;providers\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;local\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;http://localhost:11434/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;models\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;qwen2.5-coder\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;provider\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;local\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;context_window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e32768\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;default_model\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;qwen2.5-coder\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\r\n    \r\n\u003c/div\u003e\r\n\n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-3\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cp\u003e\u003ccode\u003ellama-server\u003c/code\u003e from llama.cpp serves an OpenAI-compatible API:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-11\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ellama-server -m model.gguf --port \u003cspan class=\"m\"\u003e8080\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-12\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;providers\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;local\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;http://localhost:8080/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n    \r\n\u003c/div\u003e\r\n\n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-4\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cp\u003eIn LM Studio, enable the local server (the Developer / Local Server tab); it comes up at \u003ccode\u003ehttp://localhost:1234/v1\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-13\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;providers\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;local\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;http://localhost:1234/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n    \r\n\u003c/div\u003e\r\n\n\u003c/tab-container\u003e\r\n\n\u003cp\u003eAfter that everything works as usual: \u003ccode\u003eeonyx\u003c/code\u003e (TUI) or \u003ccode\u003eeonyx run \u0026quot;task\u0026quot;\u003c/code\u003e. No key is required — the \u003ccode\u003eAuthorization\u003c/code\u003e header is not sent when \u003ccode\u003eapi_key\u003c/code\u003e is empty.\u003c/p\u003e\n\u003ch2 id=\"in-practice\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#in-practice\" class=\"header-mark\"\u003e\u003c/a\u003e2 In practice\u003c/h2\u003e\u003cp\u003eTwo things decide whether a local model will be useful: the right context window and a suitable model.\u003c/p\u003e\n\u003ch3 id=\"context-window\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#context-window\" class=\"header-mark\"\u003e\u003c/a\u003e2.1 Context window\u003c/h3\u003e\u003cp\u003eLocal models usually have a \u003cstrong\u003esmall context window\u003c/strong\u003e (often 8–32K versus a million for cloud models). Be sure to set the model\u0026rsquo;s real \u003ccode\u003econtext_window\u003c/code\u003e — this enables \u003cstrong\u003eauto-summarization\u003c/strong\u003e: at around 80% fill the older turns get compacted, so the conversation does not hit the limit.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-1\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;qwen2.5-coder\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;provider\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;local\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;context_window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e32768\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition warning open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"/\u003e\u003c/svg\u003e\u003c/span\u003eDo not overstate the window\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eIf you set \u003ccode\u003econtext_window\u003c/code\u003e larger than what the model actually holds, summarization kicks in too late and the request is rejected by the server. Use the value from the model\u0026rsquo;s documentation (or slightly less).\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"tips\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#tips\" class=\"header-mark\"\u003e\u003c/a\u003e2.2 Tips\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eA model built for code.\u003c/strong\u003e For agentic work take code-oriented models (\u003ccode\u003eqwen2.5-coder\u003c/code\u003e and similar) — they follow tools and call formats better.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003emax_steps\u003c/code\u003e for a weak model.\u003c/strong\u003e A local model can get stuck in a loop — keep \u003ccode\u003emax_steps\u003c/code\u003e reasonable (50 by default) so you do not burn time.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHybrid.\u003c/strong\u003e Nothing stops you from keeping both a local and a cloud model in the config and switching on the fly (\u003ccode\u003eCtrl+N\u003c/code\u003e): rough work locally, hard problems on a powerful cloud model.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVerification.\u003c/strong\u003e \u003ccode\u003eeonyx config\u003c/code\u003e shows which provider and \u003ccode\u003ebase_url\u003c/code\u003e were picked up; the token counter in the TUI header works for local models too (the cost will be \u003ccode\u003e$0\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e3 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLocal server\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eOllama / llama.cpp / LM Studio — OpenAI-compatible endpoint\u003c/li\u003e\n\u003cli\u003ein EONYX it is a provider with a \u003ccode\u003ebase_url\u003c/code\u003e and an empty \u003ccode\u003eapi_key\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eOffline\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ethe code never goes to the cloud\u003c/li\u003e\n\u003cli\u003eno key needed, no internet required\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eContext window\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eset the real \u003ccode\u003econtext_window\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eenables auto-summarization for small windows\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHybrid\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ekeep a local and a cloud model side by side\u003c/li\u003e\n\u003cli\u003eswitch with \u003ccode\u003eCtrl+N\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX memory: AGENTS.md, sessions and context compaction",
        "date_published" : "2026-06-17T00:00:00+03:00",
        "date_modified" : "2026-06-17T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-memory/",
        "url" : "https://eonyx.tech/blog/eonyx-memory/",
        "summary": "Every agent turn starts with the model receiving context. In EONYX it is built from three mechanisms: AGENTS.md — the project\u0026rsquo;s persistent instructions, sessions — the full conversation history on disk, and auto-summarization — compaction of older turns once the history approaches the limit of the context window.\n",
        "content_html" : "\u003cp\u003eEvery agent turn starts with the model receiving context. In EONYX it is built from three mechanisms: \u003cstrong\u003eAGENTS.md\u003c/strong\u003e — the project\u0026rsquo;s persistent instructions, \u003cstrong\u003esessions\u003c/strong\u003e — the full conversation history on disk, and \u003cstrong\u003eauto-summarization\u003c/strong\u003e — compaction of older turns once the history approaches the limit of the context window.\u003c/p\u003e\n\u003ch2 id=\"agentsmd-project-instructions\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#agentsmd-project-instructions\" class=\"header-mark\"\u003e\u003c/a\u003e7 AGENTS.md: project instructions\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eAGENTS.md\u003c/code\u003e is a file with the project\u0026rsquo;s rules and context. EONYX finds such files automatically while building the system prompt: it walks \u003cstrong\u003eup the directory tree\u003c/strong\u003e from the working directory and collects \u003ccode\u003eAGENTS.md\u003c/code\u003e at every level.\u003c/p\u003e\n\u003ch3 id=\"traversal-rules\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#traversal-rules\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 Traversal rules\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003eThe walk stops at the \u003cstrong\u003eproject root\u003c/strong\u003e (the directory with \u003ccode\u003eeonyx.json\u003c/code\u003e), at a directory with \u003ccode\u003e.git\u003c/code\u003e, or at the filesystem root.\u003c/li\u003e\n\u003cli\u003eFiles are attached from the outermost to the closest: \u003cstrong\u003ethe one nearest to the working directory comes last\u003c/strong\u003e, so local instructions refine the general ones.\u003c/li\u003e\n\u003cli\u003eEach file goes into the system prompt under the heading \u003ccode\u003e# Project context: \u0026lt;relative path\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eKeep the general rules at the repository root and subdirectory specifics next to the code:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-7\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emy-project/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── AGENTS.md            ← stack, conventions, prohibitions\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── services/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    └── billing/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        └── AGENTS.md    ← specifics of a particular service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch3 id=\"what-to-write\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#what-to-write\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 What to write\u003c/h3\u003e\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003emarkdown\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-8\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# Project: My App\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## Stack\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Go 1.26, PostgreSQL via pgx.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## Rules\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Run \u003cspan class=\"sb\"\u003e`go test ./...`\u003c/span\u003e and \u003cspan class=\"sb\"\u003e`go vet ./...`\u003c/span\u003e before committing.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Do not refactor what you were not asked to.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## Prohibited\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Do not edit .env directly.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- Never run migrations without confirmation.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition note open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eReplacing the prompt entirely\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eIf the generated system prompt does not suit you, it can be replaced wholesale: the \u003ccode\u003esystem_prompt\u003c/code\u003e field in \u003ccode\u003eeonyx.json\u003c/code\u003e or the \u003ccode\u003e--system-prompt\u003c/code\u003e flag of \u003ccode\u003eeonyx run\u003c/code\u003e (the flag beats the field, the field beats generation — in that case AGENTS.md files are not attached).\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"conversation-memory\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#conversation-memory\" class=\"header-mark\"\u003e\u003c/a\u003e8 Conversation memory\u003c/h2\u003e\u003cp\u003eEverything you discussed with the agent lives in sessions on disk, and once the history approaches the context limit it gets compacted by auto-summarization.\u003c/p\u003e\n\u003ch3 id=\"sessions-on-disk\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#sessions-on-disk\" class=\"header-mark\"\u003e\u003c/a\u003e8.1 Sessions on disk\u003c/h3\u003e\u003cp\u003eEvery conversation is a \u003cstrong\u003esession\u003c/strong\u003e, fully persisted to disk. The format is JSONL: one message (including tool calls and their results) per line.\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eFile\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eContents\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003esessions/\u0026lt;id\u0026gt;.jsonl\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003emessages of a single session\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003esessions.json\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eindex: id, title, message counter, dates\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eThe storage is shared across all projects and sits next to the global data: on Windows \u003ccode\u003e%LOCALAPPDATA%\\eonyx\\\u003c/code\u003e, on Linux/macOS \u003ccode\u003e$XDG_DATA_HOME/eonyx/\u003c/code\u003e (\u003ccode\u003e~/.local/share/eonyx/\u003c/code\u003e by default). The session id is sortable: \u003ccode\u003e20260705T091500-1a2b3c4d\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eWriting is the source of truth: if a message could not be saved, the turn is aborted rather than continuing \u0026ldquo;past the disk\u0026rdquo;. Empty sessions (those that never got beyond the system prompt) are cleaned up automatically.\u003c/p\u003e\n\u003ch3 id=\"working-in-the-tui\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#working-in-the-tui\" class=\"header-mark\"\u003e\u003c/a\u003e8.2 Working in the TUI\u003c/h3\u003e\u003cp\u003eOn startup EONYX \u003cstrong\u003eresumes the most recent session\u003c/strong\u003e. From there:\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eAction\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eHow\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSession manager\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+S\u003c/code\u003e or \u003ccode\u003e/sessions\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSearch across sessions\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e/sessions \u0026lt;query\u0026gt;\u003c/code\u003e — over titles and message text\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eNew session\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e/new\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eClear the context\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e/clear\u003c/code\u003e — wipes the history, keeping the id and title\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eRename\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e in the session list or \u003ccode\u003e/rename \u0026lt;title\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eFork\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ef\u003c/code\u003e in the session list or \u003ccode\u003e/fork\u003c/code\u003e — a conversation branch\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eDelete\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e in the session list\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eExport to markdown\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e/export\u003c/code\u003e → \u003ccode\u003e.eonyx/exports/eonyx-\u0026lt;id\u0026gt;.md\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eNew sessions get simple sequential titles — \u003ccode\u003e1\u003c/code\u003e, \u003ccode\u003e2\u003c/code\u003e, \u003ccode\u003e3\u003c/code\u003e… — until you rename them explicitly; the title never changes automatically.\u003c/p\u003e\n\u003ch3 id=\"working-from-the-console\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#working-from-the-console\" class=\"header-mark\"\u003e\u003c/a\u003e8.3 Working from the console\u003c/h3\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-9\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx sessions                  \u003cspan class=\"c1\"\u003e# list: id, date, message count, title\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx sessions --search parser  \u003cspan class=\"c1\"\u003e# search over titles and text\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx sessions delete \u0026lt;id\u0026gt;      \u003cspan class=\"c1\"\u003e# delete\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run -c \u003cspan class=\"s2\"\u003e\u0026#34;continue\u0026#34;\u003c/span\u003e         \u003cspan class=\"c1\"\u003e# continue the most recent session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run -s \u0026lt;id\u0026gt; \u003cspan class=\"s2\"\u003e\u0026#34;and now…\u0026#34;\u003c/span\u003e    \u003cspan class=\"c1\"\u003e# continue a specific one\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eA fork as a save point\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003ccode\u003eFork\u003c/code\u003e copies the message file into a new session — the original is left unchanged. Handy before a risky direction: fork the conversation, give it a try, and if it did not work out, go back to the original session.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"auto-summarization\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#auto-summarization\" class=\"header-mark\"\u003e\u003c/a\u003e8.4 Auto-summarization\u003c/h3\u003e\u003cp\u003eIf a model has \u003ccode\u003econtext_window\u003c/code\u003e set in the config, EONYX tracks the size of the history (estimating ~4 characters per token) and shows a \u003ccode\u003e{ctx N%}\u003c/code\u003e indicator in the header. At \u003cstrong\u003e80%\u003c/strong\u003e the indicator is highlighted — and summarization triggers at that same threshold.\u003c/p\u003e\n\u003cp\u003eHow it works:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe last \u003cstrong\u003e3 user turns\u003c/strong\u003e are kept verbatim; everything older is sent to the model with a request to compact it into a running summary (decisions, facts, changed files, open tasks).\u003c/li\u003e\n\u003cli\u003eThe summary is appended to the system prompt under the heading \u003ccode\u003e# Summary of earlier conversation\u003c/code\u003e; the next compaction takes the previous summary into account.\u003c/li\u003e\n\u003cli\u003eThe compaction boundary runs \u003cstrong\u003eonly along user messages\u003c/strong\u003e, so \u0026ldquo;tool call → result\u0026rdquo; pairs are never split.\u003c/li\u003e\n\u003cli\u003eAll of this happens \u003cstrong\u003ein memory only\u003c/strong\u003e: the JSONL on disk keeps the full history losslessly — an export or a reopened session sees the whole conversation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"details admonition warning open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"/\u003e\u003c/svg\u003e\u003c/span\u003eWithout context_window there is no summarization\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eA model\u0026rsquo;s \u003ccode\u003econtext_window\u003c/code\u003e field is the switch for this machinery. If you do not set it, the history grows until the API rejects it. Set the model\u0026rsquo;s real window size in \u003ccode\u003eeonyx.json\u003c/code\u003e.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAGENTS.md\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eproject rules; collected up the tree to the project root or \u003ccode\u003e.git\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ethe closest file comes last\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSessions\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eJSONL on disk, shared across all projects\u003c/li\u003e\n\u003cli\u003eresuming (\u003ccode\u003e-c\u003c/code\u003e/\u003ccode\u003e-s\u003c/code\u003e), search, fork (\u003ccode\u003ef\u003c/code\u003e), rename (\u003ccode\u003er\u003c/code\u003e), export (\u003ccode\u003e/export\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003etitles are sequential \u003ccode\u003e1\u003c/code\u003e, \u003ccode\u003e2\u003c/code\u003e, \u003ccode\u003e3\u003c/code\u003e; they change only via an explicit \u003ccode\u003e/rename\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSummarization\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eat 80% of \u003ccode\u003econtext_window\u003c/code\u003e: older turns are compacted into a summary in the system prompt\u003c/li\u003e\n\u003cli\u003ethe disk keeps everything; watch \u003ccode\u003e{ctx N%}\u003c/code\u003e in the header\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX vs Claude Code: an honest comparison",
        "date_published" : "2026-06-15T00:00:00+03:00",
        "date_modified" : "2026-06-15T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-vs-claude-code/",
        "url" : "https://eonyx.tech/blog/eonyx-vs-claude-code/",
        "summary": "EONYX and Claude Code are both terminal AI agents for working with code, and their workflow is similar: MCP, skills, hooks, subagents, plan mode, sessions. The difference is in the architecture and the freedom. Claude Code is tied to the cloud and to Anthropic models; EONYX is not. Here is what that gives you in practice.\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eEONYX\u003c/strong\u003e and \u003cstrong\u003e\u003ca href=\"https://www.anthropic.com/claude-code\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eClaude Code\u003c/a\u003e\u003c/strong\u003e are both terminal AI agents for working with code, and their workflow is similar: \u003ca href=\"https://modelcontextprotocol.io\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eMCP\u003c/a\u003e, skills, hooks, subagents, plan mode, sessions. The difference is in the architecture and the freedom. Claude Code is tied to the cloud and to \u003ca href=\"https://www.anthropic.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAnthropic\u003c/a\u003e models; EONYX is not. Here is what that gives you in practice.\u003c/p\u003e\n\u003ch2 id=\"how-eonyx-is-different\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#how-eonyx-is-different\" class=\"header-mark\"\u003e\u003c/a\u003e7 How EONYX is different\u003c/h2\u003e\u003cp\u003eFive practical differences — all of them follow from a single decision: not to be tied to a cloud or a vendor.\u003c/p\u003e\n\u003ch3 id=\"model-freedom\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#model-freedom\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 Model freedom\u003c/h3\u003e\u003cp\u003eClaude Code only works with Claude models (Anthropic). EONYX connects directly to \u003cstrong\u003eany OpenAI-compatible API\u003c/strong\u003e and is not tied to a single vendor:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://openai.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOpenAI\u003c/a\u003e, \u003ca href=\"https://openrouter.ai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOpenRouter\u003c/a\u003e, \u003ca href=\"https://www.deepseek.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eDeepSeek\u003c/a\u003e, \u003ca href=\"https://www.moonshot.ai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eMoonshot\u003c/a\u003e and other cloud providers;\u003c/li\u003e\n\u003cli\u003elocal model servers — \u003cstrong\u003e\u003ca href=\"https://ollama.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOllama\u003c/a\u003e, \u003ca href=\"https://github.com/ggml-org/llama.cpp\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ellama.cpp\u003c/a\u003e, \u003ca href=\"https://lmstudio.ai\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eLM Studio\u003c/a\u003e\u003c/strong\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eA model is just an entry in \u003ccode\u003eeonyx.json\u003c/code\u003e. You can keep a cheap fast model and a powerful expensive one side by side, switch on the fly (\u003ccode\u003eCtrl+N\u003c/code\u003e), and run the same project on different providers.\u003c/p\u003e\n\u003cp\u003eA new provider is a few lines of config, not a change of tool:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-9\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;providers\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;openrouter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://openrouter.ai/api/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$OPENROUTER_API_KEY\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003cspan class=\"err\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;models\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;qwen/qwen3-coder\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;provider\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openrouter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;context_window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e262144\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eSave the config, restart EONYX — and the new model is already in the \u003ccode\u003eCtrl+N\u003c/code\u003e list: the same agent, the same skills and hooks. \u003ccode\u003eCtrl+N\u003c/code\u003e switches between models that are already in the config; to pick up one you have just added, the TUI has to be restarted.\u003c/p\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eDon\u0026#39;t like the answer — change the model, not the tool\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eA new strong model showed up at another provider? Add a line to the config — and you work with it using the same agent, the same skills and hooks. In Claude Code you are tied to the Claude lineup.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"local-and-offline\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#local-and-offline\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 Local and offline\u003c/h3\u003e\u003cp\u003eSince Ollama / llama.cpp / LM Studio are supported, EONYX can run \u003cstrong\u003eentirely on a local model\u003c/strong\u003e — with no internet and without sending your code to someone else\u0026rsquo;s cloud. Claude Code cannot do that: it always goes to the Anthropic API.\u003c/p\u003e\n\u003cp\u003eThis matters when:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ethe code must not leave the perimeter (NDA, closed network, regulation);\u003c/li\u003e\n\u003cli\u003ethere is no stable internet connection;\u003c/li\u003e\n\u003cli\u003eyou need zero leak risk — the data does not leave the machine.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhere your code goes in each case.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eEONYX: your choice\u003c/strong\u003e\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003esequenceDiagram\n    participant U as Your code\n    participant P as EONYX Terminal\n    participant L as Local model\n    participant C as Cloud API\n    U-\u003e\u003eP: sources, configs, secrets\n    alt by default\n        P-\u003e\u003eL: processed in place\n        L--\u003e\u003eP: response\n        Note over P,L: data does not leave the machine\n    else only if you choose so\n        P-\u003e\u003eC: goes to the cloud\n        C--\u003e\u003eP: response\n    end\n    P--\u003e\u003eU: result\r\n\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003eClaude Code: always the cloud\u003c/strong\u003e\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003esequenceDiagram\n    participant U as Your code\n    participant CC as Claude Code\n    participant A as api.anthropic.com\n    U-\u003e\u003eCC: sources, configs, secrets\n    CC-\u003e\u003eA: always goes to the cloud\n    A--\u003e\u003eCC: response\n    CC--\u003e\u003eU: result\n    Note over CC,A: no choice\r\n\u003c/pre\u003e\u003ch3 id=\"a-single-binary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#a-single-binary\" class=\"header-mark\"\u003e\u003c/a\u003e7.3 A single binary\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eInstallation\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eEONYX — a single static binary (\u003ca href=\"https://go.dev\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGo\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClaude Code — \u003ca href=\"https://www.npmjs.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003enpm\u003c/a\u003e (\u003ca href=\"https://nodejs.org\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eNode.js\u003c/a\u003e 18+) or an installer\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAuthorization\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eEONYX — the provider\u0026rsquo;s API key, for local models — no key at all\u003c/li\u003e\n\u003cli\u003eClaude Code — OAuth (Claude Pro/Max) or \u003ccode\u003eANTHROPIC_API_KEY\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRuntime\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eEONYX — nothing extra, a single process\u003c/li\u003e\n\u003cli\u003eClaude Code — Node.js\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEONYX is \u003cstrong\u003eone process with no external services, no telemetry and no OAuth\u003c/strong\u003e. Download the binary, set a key (or point it at a local model) — and you are working. Nothing to log into, nothing that \u0026ldquo;phones home\u0026rdquo;.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFrom zero to the first prompt\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-10\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# EONYX\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 1. download the binary from the Releases page and put it in PATH\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eDEEPSEEK_API_KEY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003esk-...   \u003cspan class=\"c1\"\u003e# 2. a key — or a local model with no key\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx                             \u003cspan class=\"c1\"\u003e# 3. done, the TUI is open\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-11\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Claude Code\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 1. install Node.js 18+\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpm install -g @anthropic-ai/claude-code   \u003cspan class=\"c1\"\u003e# 2. install the package\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eclaude                                      \u003cspan class=\"c1\"\u003e# 3. OAuth login in the browser…\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 4. …a Pro/Max subscription or ANTHROPIC_API_KEY\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 5. only now — the first prompt\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eBottom line: \u003cstrong\u003e3 steps against 5\u003c/strong\u003e, and not one of the EONYX steps requires a browser, an account or a runtime.\u003c/p\u003e\n\u003ch3 id=\"shell-in-the-process\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#shell-in-the-process\" class=\"header-mark\"\u003e\u003c/a\u003e7.4 Shell in the process\u003c/h3\u003e\u003cp\u003eThe \u003ccode\u003ebash\u003c/code\u003e tool in EONYX works through the built-in \u003ca href=\"https://github.com/mvdan/sh\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003ccode\u003emvdan.cc/sh\u003c/code\u003e\u003c/a\u003e interpreter — \u003cstrong\u003ea system bash is not needed\u003c/strong\u003e. The same command runs identically on Linux, macOS and \u003cstrong\u003eWindows without WSL\u003c/strong\u003e. The working directory and environment variables are preserved between calls. A small list of dangerous commands (\u003ccode\u003eshutdown\u003c/code\u003e, \u003ccode\u003ereboot\u003c/code\u003e, \u003ccode\u003emkfs\u003c/code\u003e…) is blocked at the policy level.\u003c/p\u003e\n\u003ch3 id=\"control-over-cost\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#control-over-cost\" class=\"header-mark\"\u003e\u003c/a\u003e7.5 Control over cost\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eYour own key or free local models.\u003c/strong\u003e You can run DeepSeek for pennies, or a local model for free. No subscription to a particular product is required.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTransparent costs.\u003c/strong\u003e The TUI header shows the number of input/output tokens, cached tokens and a cost estimate in dollars right as the session goes.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eYour own limits.\u003c/strong\u003e \u003ccode\u003emax_steps\u003c/code\u003e, \u003ccode\u003econtext_window\u003c/code\u003e, \u003ccode\u003eretry\u003c/code\u003e — everything is tuned to your budget and your model.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat a month of work costs (the Claude Pro subscription is the public price; the API spend is an example and depends on the load):\u003c/p\u003e\n\u003cdiv class=\"echarts\" id=\"id-12\" data-option=\"{\u0026#34;color\u0026#34;:[\u0026#34;#c15933\u0026#34;],\u0026#34;series\u0026#34;:[{\u0026#34;barWidth\u0026#34;:\u0026#34;45%\u0026#34;,\u0026#34;data\u0026#34;:[0,3,20],\u0026#34;type\u0026#34;:\u0026#34;bar\u0026#34;}],\u0026#34;tooltip\u0026#34;:{},\u0026#34;xAxis\u0026#34;:{\u0026#34;axisLabel\u0026#34;:{\u0026#34;interval\u0026#34;:0},\u0026#34;data\u0026#34;:[\u0026#34;Local model\u0026#34;,\u0026#34;DeepSeek via API (example)\u0026#34;,\u0026#34;Claude Pro subscription\u0026#34;],\u0026#34;type\u0026#34;:\u0026#34;category\u0026#34;},\u0026#34;yAxis\u0026#34;:{\u0026#34;name\u0026#34;:\u0026#34;$ / month\u0026#34;,\u0026#34;type\u0026#34;:\u0026#34;value\u0026#34;}}\" style=\"width: 100%; height: 18rem;\"\u003e\u003c/div\u003e\n\u003ch2 id=\"the-honest-picture\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-honest-picture\" class=\"header-mark\"\u003e\u003c/a\u003e8 The honest picture\u003c/h2\u003e\u003cp\u003eWhat stays with you after the switch, and where Claude Code is still stronger.\u003c/p\u003e\n\u003ch3 id=\"what-you-do-not-lose\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#what-you-do-not-lose\" class=\"header-mark\"\u003e\u003c/a\u003e8.1 What you do not lose\u003c/h3\u003e\u003cp\u003eEONYX is not a \u0026ldquo;stripped-down clone\u0026rdquo;. The whole familiar agent toolset is there:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eMCP client\u003c/strong\u003e (stdio and HTTP) — external services, resources and prompts;\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAgent Skills\u003c/strong\u003e — skills in \u003ccode\u003eSKILL.md\u003c/code\u003e with progressive disclosure;\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHooks\u003c/strong\u003e around tools (\u003ccode\u003ebefore\u003c/code\u003e/\u003ccode\u003eafter\u003c/code\u003e, context via \u003ccode\u003eEONYX_*\u003c/code\u003e);\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSubagents\u003c/strong\u003e — the \u003ccode\u003etask\u003c/code\u003e tool with an isolated context;\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSessions\u003c/strong\u003e in JSONL with resume, fork and search;\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePermissions\u003c/strong\u003e and \u003cstrong\u003eplan mode\u003c/strong\u003e (\u003ccode\u003e/plan\u003c/code\u003e) — read-only until you approve the plan;\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAuto-summarization\u003c/strong\u003e of history when the context window fills up;\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAGENTS.md\u003c/strong\u003e — persistent project instructions across the directory tree.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIn other words, you get the same workflow, but \u003cstrong\u003eprovider-independent\u003c/strong\u003e.\u003c/p\u003e\n\u003ch3 id=\"where-claude-code-is-stronger\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#where-claude-code-is-stronger\" class=\"header-mark\"\u003e\u003c/a\u003e8.2 Where Claude Code is stronger\u003c/h3\u003e\u003cp\u003eTo keep the comparison honest:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eClaude models.\u003c/strong\u003e Opus/Sonnet are top-tier models for code; at Anthropic they come out of the box and are tuned for Claude Code.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEcosystem and polish.\u003c/strong\u003e An official product: desktop and IDE apps, a web version, background tasks, support.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eZero provider setup.\u003c/strong\u003e Log in with a subscription and everything works, no need to touch a config.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEONYX wins on other things: \u003cstrong\u003efreedom, locality and no lock-in\u003c/strong\u003e. If what you need is Claude models specifically and the smoothest possible official experience — Claude Code is the better fit. If you need a single local binary, any provider (including offline models) and full control over data and cost — EONYX.\u003c/p\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003ch3 id=\"comparison-table\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#comparison-table\" class=\"header-mark\"\u003e\u003c/a\u003e9.1 Comparison table\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eCapability\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eEONYX\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eClaude Code\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eModels\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cmark\u003eany OpenAI-compatible API\u003c/mark\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eClaude only\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eOffline run\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cmark\u003eyes: Ollama, llama.cpp, LM Studio\u003c/mark\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eno, cloud only\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eInstallation\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cmark\u003ea single binary (Go)\u003c/mark\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eNode.js 18+ / installer\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eAuthorization\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cmark\u003ea key, or no key at all\u003c/mark\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eOAuth / Anthropic key\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eTelemetry\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cmark\u003eno\u003c/mark\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eShell\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cmark\u003ebuilt-in (\u003ccode\u003emvdan/sh\u003c/code\u003e)\u003c/mark\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esystem\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eMCP\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSkills\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eHooks\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSubagents\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003ePlan mode\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSessions\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003ePermissions\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eCost\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cmark\u003eyour own key / local for free\u003c/mark\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esubscription / Anthropic API\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eModel freedom\u003c/strong\u003e — any OpenAI-compatible provider and local models.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLocal and offline\u003c/strong\u003e — the code does not leave the machine.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eA single binary\u003c/strong\u003e — Go, no Node, no OAuth, no telemetry and no external services.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eShell in the process\u003c/strong\u003e — \u003ccode\u003emvdan/sh\u003c/code\u003e, works on Windows without WSL.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCost control\u003c/strong\u003e — your own key or free local models, spend is visible in the header.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNothing lost\u003c/strong\u003e — MCP, skills, hooks, subagents, sessions, plan mode and permissions are all there.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX skills: how Agent Skills and SKILL.md work",
        "date_published" : "2026-06-11T00:00:00+03:00",
        "date_modified" : "2026-06-11T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-skills/",
        "url" : "https://eonyx.tech/blog/eonyx-skills/",
        "summary": "A skill is a folder with a SKILL.md file: an instruction the agent loads when a task matches it. Skills let you package repetitive procedures — a code review, a deploy checklist, the rules for formatting a report — so that they don\u0026rsquo;t take up context until they\u0026rsquo;re needed.\n",
        "content_html" : "\u003cp\u003eA \u003cstrong\u003eskill\u003c/strong\u003e is a folder with a \u003ccode\u003eSKILL.md\u003c/code\u003e file: an instruction the agent loads when a task matches it. Skills let you package repetitive procedures — a code review, a deploy checklist, the rules for formatting a report — so that they don\u0026rsquo;t take up context until they\u0026rsquo;re needed.\u003c/p\u003e\n\u003ch2 id=\"how-a-skill-works\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#how-a-skill-works\" class=\"header-mark\"\u003e\u003c/a\u003e7 How a skill works\u003c/h2\u003e\u003cp\u003eA skill is a folder with an instruction; let\u0026rsquo;s look at how the model loads it, what \u003ccode\u003eSKILL.md\u003c/code\u003e consists of, and what finished skills look like.\u003c/p\u003e\n\u003ch3 id=\"progressive-disclosure\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#progressive-disclosure\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 Progressive disclosure\u003c/h3\u003e\u003cp\u003eThe key idea: only the \u003cstrong\u003ename and description\u003c/strong\u003e of each skill make it into the system prompt — a short catalog under the \u003ccode\u003e## Available Skills\u003c/code\u003e heading. The model receives the full text of a skill only when it calls the \u003ccode\u003eload_skill\u003c/code\u003e tool itself:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-13\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Available Skills\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- **review**: Check the diff for bugs and style before committing\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- **deploy**: Production rollout checklist\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e→ the model decides the task is about a review\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e→ calls load_skill {\u0026#34;name\u0026#34;: \u0026#34;review\u0026#34;}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e→ receives the full text of SKILL.md\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eThat way a dozen skills cost a couple hundred tokens of context instead of tens of thousands. The model makes the \u0026ldquo;when to load\u0026rdquo; decision — which is why the quality of the \u003ccode\u003edescription\u003c/code\u003e field decides everything.\u003c/p\u003e\n\u003ch3 id=\"the-structure-of-a-skill\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-structure-of-a-skill\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 The structure of a skill\u003c/h3\u003e\u003cp\u003eA skill is a subdirectory with a \u003ccode\u003eSKILL.md\u003c/code\u003e file:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-14\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eskills/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── review/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    └── SKILL.md\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003e\u003ccode\u003eSKILL.md\u003c/code\u003e starts with frontmatter between \u003ccode\u003e---\u003c/code\u003e, followed by the body of the skill:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003emarkdown\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-15\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ename: review\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edescription: Check the diff for bugs, style, and tests before committing. Use it for phrases like \u0026#34;review\u0026#34;, \u0026#34;check my changes\u0026#34;, \u0026#34;before I commit\u0026#34;.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etags: [git, quality]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# Reviewing changes\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e Look at the diff: \u003cspan class=\"sb\"\u003e`git_diff`\u003c/span\u003e, with staged=true if needed.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e2.\u003c/span\u003e Go through every changed file: logic, mistakes, stray edits.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e3.\u003c/span\u003e Verify that the tests were run: \u003cspan class=\"sb\"\u003e`go test ./...`\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e4. Structure the answer like this: critical → nice to have → nitpicks.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eFrontmatter fields:\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eField\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eRequired\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003ePurpose\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eno\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe skill name; defaults to the directory name\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003edescription\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003edesirable\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe model uses it to decide whether to load the skill\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003etags\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eno\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ea list of labels, shown in the catalog\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eFrontmatter is written in YAML (\u003ccode\u003ekey: value\u003c/code\u003e); a JSON object is accepted as well. If \u003ccode\u003edescription\u003c/code\u003e is not set, the catalog gets a \u003ccode\u003eNo description provided\u003c/code\u003e placeholder — the model is unlikely to figure out that it should load such a skill.\u003c/p\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eHow to write a description\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eThe description is a trigger. Write both \u003cstrong\u003ewhat the skill does\u003c/strong\u003e and \u003cstrong\u003ewhen to apply it\u003c/strong\u003e, including the words you yourself use to phrase the task: \u0026ldquo;use it when asked to prepare a release, roll out, deploy\u0026rdquo;. A vague \u0026ldquo;useful deployment tips\u0026rdquo; won\u0026rsquo;t work.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"skill-examples\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#skill-examples\" class=\"header-mark\"\u003e\u003c/a\u003e7.3 Skill examples\u003c/h3\u003e\u003ctab-container default-tab=\"0\" class=\"tw:block tw:my-5\" role=\"tablist\"\u003e\u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-17\"\u003eDeploy checklist\u003c/button\u003e\r\n  \u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-18\"\u003eCommit style\u003c/button\u003e\r\n  \n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-17\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003emarkdown\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-33\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ename: deploy\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edescription: Production rollout checklist. Use it when asked to deploy, roll out, or prepare a release.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etags: [ops]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# Deploy\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e \u003cspan class=\"sb\"\u003e`git_status`\u003c/span\u003e — the working tree is clean, the branch is main.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e2.\u003c/span\u003e \u003cspan class=\"sb\"\u003e`go test ./...`\u003c/span\u003e and \u003cspan class=\"sb\"\u003e`go vet ./...`\u003c/span\u003e — green.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e3.\u003c/span\u003e Build the tag: the version from \u003cspan class=\"sb\"\u003e`git describe --tags`\u003c/span\u003e + an increment.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e4. NEVER push a tag without confirmation from the user.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\r\n    \r\n\u003c/div\u003e\r\n\n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-18\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003emarkdown\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-34\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ename: commits\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edescription: The rules for writing commit messages in this project. Use it before any git_commit.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etags: [git]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# Commits\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Subject: imperative mood, English, up to 60 characters.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e No mentions of tools or bots.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- A body only if the \u0026#34;why\u0026#34; isn\u0026#39;t obvious from the subject.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\r\n    \r\n\u003c/div\u003e\r\n\n\u003c/tab-container\u003e\r\n\n\u003cdiv class=\"details admonition note open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eSkills are data, not code\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003ccode\u003eSKILL.md\u003c/code\u003e is just text that the model receives. It is not executed. If a skill requires commands, the model runs them through the regular tools, with all the permission gates in place.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"discovery-and-management\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#discovery-and-management\" class=\"header-mark\"\u003e\u003c/a\u003e8 Discovery and management\u003c/h2\u003e\u003cp\u003eWhat\u0026rsquo;s left is understanding where EONYX takes skills from and how to turn them on right inside a session.\u003c/p\u003e\n\u003ch3 id=\"search-directories\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#search-directories\" class=\"header-mark\"\u003e\u003c/a\u003e8.1 Search directories\u003c/h3\u003e\u003cp\u003eDirectories are scanned in priority order — \u003cstrong\u003eon a name collision the first one found wins\u003c/strong\u003e:\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003ePriority\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eDirectory\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhat it is\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e1\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e\u0026lt;project\u0026gt;/.eonyx/skills\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eproject skills\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e2\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e~/.config/eonyx/skills\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003epersonal skills\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e3\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e~/.config/agents/skills\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe shared agent skills folder\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eSo a project-level \u003ccode\u003ereview\u003c/code\u003e overrides your global \u003ccode\u003ereview\u003c/code\u003e. In addition:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003eEONYX_SKILLS_DIR\u003c/code\u003e variable (a list of paths separated by the OS separator) \u003cstrong\u003ereplaces\u003c/strong\u003e the entire list of directories.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eskills\u003c/code\u003e array in \u003ccode\u003eeonyx.json\u003c/code\u003e \u003cstrong\u003eappends\u003c/strong\u003e directories after the standard ones:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-16\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;skills\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/opt/team-skills\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;../shared-skills\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eWhat was found is visible in \u003ccode\u003eeonyx config\u003c/code\u003e (the Skills section) and in the TUI header: the \u003ccode\u003e# skills\u003c/code\u003e segment lists the active skills.\u003c/p\u003e\n\u003ch3 id=\"managing-skills-in-a-session\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#managing-skills-in-a-session\" class=\"header-mark\"\u003e\u003c/a\u003e8.2 Managing skills in a session\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003eCtrl+K\u003c/strong\u003e opens the capabilities dialog, the \u003cstrong\u003eSkills\u003c/strong\u003e tab: any skill can be turned off or on on the fly (\u003ccode\u003e✓\u003c/code\u003e/\u003ccode\u003e✗\u003c/code\u003e). Toggling immediately rebuilds the catalog in the system prompt and rebinds \u003ccode\u003eload_skill\u003c/code\u003e to the active set — the model no longer sees a disabled skill and cannot load it.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eload_skill\u003c/code\u003e is a read-only tool by its nature, but formally it isn\u0026rsquo;t in the always-allowed list; in the TUI its call goes through the regular permission dialog, or you can add it to \u003ccode\u003eallowed_tools\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eA skill\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ea directory with a \u003ccode\u003eSKILL.md\u003c/code\u003e: frontmatter \u003ccode\u003ename\u003c/code\u003e/\u003ccode\u003edescription\u003c/code\u003e/\u003ccode\u003etags\u003c/code\u003e + the instruction body\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSKILL.md\u003c/code\u003e is not executed — it\u0026rsquo;s data for the model\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eProgressive disclosure\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ethe prompt holds only the catalog of names and descriptions\u003c/li\u003e\n\u003cli\u003ethe model gets the full text through \u003ccode\u003eload_skill\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDiscovery\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ethe project\u0026rsquo;s \u003ccode\u003e.eonyx/skills\u003c/code\u003e → \u003ccode\u003e~/.config/eonyx/skills\u003c/code\u003e → \u003ccode\u003e~/.config/agents/skills\u003c/code\u003e; the first match by name wins\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eEONYX_SKILLS_DIR\u003c/code\u003e replaces the list, the \u003ccode\u003eskills\u003c/code\u003e config key extends it\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eManagement\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e → the Skills tab: on/off on the fly\u003c/li\u003e\n\u003cli\u003eactive skills are visible in the header\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe key field\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003edescription\u003c/code\u003e: what the skill does and when to apply it, in the user\u0026rsquo;s own words\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "Configuring providers and models in EONYX",
        "date_published" : "2026-06-07T00:00:00+03:00",
        "date_modified" : "2026-06-07T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-providers/",
        "url" : "https://eonyx.tech/blog/eonyx-providers/",
        "summary": "EONYX talks to any OpenAI-compatible API. A provider is the way to reach a backend, a model binds an id to a provider. Here is how to connect cloud providers, hide secrets and configure price, context window and retries.\n",
        "content_html" : "\u003cp\u003eEONYX talks to \u003cstrong\u003eany OpenAI-compatible API\u003c/strong\u003e. A provider is the way to reach a backend, a model binds an id to a provider. Here is how to connect cloud providers, hide secrets and configure price, context window and retries.\u003c/p\u003e\n\u003ch2 id=\"providers-and-models\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#providers-and-models\" class=\"header-mark\"\u003e\u003c/a\u003e7 Providers and models\u003c/h2\u003e\u003cp\u003eBoth blocks are defined in \u003ccode\u003eeonyx.json\u003c/code\u003e: the provider describes API access, the model binds a specific id to a provider, and you can switch models right inside a session.\u003c/p\u003e\n\u003ch3 id=\"provider\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#provider\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 Provider\u003c/h3\u003e\u003cp\u003eThere is only one type so far — \u003ccode\u003e\u0026quot;openai\u0026quot;\u003c/code\u003e (it covers any OpenAI-compatible endpoint). \u003ccode\u003ebase_url\u003c/code\u003e is required:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-11\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;providers\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e     \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://api.openai.com/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e     \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$OPENAI_API_KEY\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;openrouter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://openrouter.ai/api/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$OPENROUTER_API_KEY\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;deepseek\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e   \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://api.deepseek.com\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e       \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$DEEPSEEK_API_KEY\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;moonshot\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e   \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;base_url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://api.moonshot.cn/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e     \u003cspan class=\"nt\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$MOONSHOT_API_KEY\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition warning open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"/\u003e\u003c/svg\u003e\u003c/span\u003eSecrets go through environment variables\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003ccode\u003eapi_key\u003c/code\u003e and \u003ccode\u003ebase_url\u003c/code\u003e can reference environment variables (\u003ccode\u003e$OPENAI_API_KEY\u003c/code\u003e) — they are expanded \u003cstrong\u003eafter\u003c/strong\u003e the config layers are merged. That way the key never ends up in a file committed to the repository. The same applies to \u003ccode\u003ereport.database_url\u003c/code\u003e and MCP headers.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"model\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#model\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 Model\u003c/h3\u003e\u003cp\u003eA model links an id (as the API understands it) to a provider:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-12\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;models\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gpt-5\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;provider\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;openai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e     \u003cspan class=\"nt\"\u003e\u0026#34;context_window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e400000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;input_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e1.25\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;output_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deepseek-v4-pro\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;provider\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deepseek\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e   \u003cspan class=\"nt\"\u003e\u0026#34;context_window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1000000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;input_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.435\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;output_price\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.87\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"err\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;default_model\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deepseek-v4-pro\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eField\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003ePurpose\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eid\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe model name at the provider\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eprovider\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ea key from the \u003ccode\u003eproviders\u003c/code\u003e block\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003econtext_window\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ewindow size in tokens — \u003cstrong\u003eenables history auto-summarization\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einput_price\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eprice per 1M input tokens (USD) — for the cost counter\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eoutput_price\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eprice per 1M output tokens (USD)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003ePrices are only needed for the cost indicator in the TUI header (\u003ccode\u003e$…\u003c/code\u003e); they do not affect behavior. \u003ccode\u003econtext_window\u003c/code\u003e matters more: without it auto-summarization does not work.\u003c/p\u003e\n\u003ch3 id=\"switching-the-model-on-the-fly\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#switching-the-model-on-the-fly\" class=\"header-mark\"\u003e\u003c/a\u003e7.3 Switching the model on the fly\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003eIn the TUI — \u003ccode\u003eCtrl+N\u003c/code\u003e or \u003ccode\u003e/model\u003c/code\u003e: a list of configured models, the current one is marked.\u003c/li\u003e\n\u003cli\u003eIn headless mode — the \u003ccode\u003e-m/--model\u003c/code\u003e flag:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-13\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run -m deepseek-v4-pro \u003cspan class=\"s2\"\u003e\u0026#34;fix the failing test\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eIt is convenient to keep several models in the config: a cheap fast one for rough work and a powerful one for hard tasks.\u003c/p\u003e\n\u003ch2 id=\"reliability-and-verification\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#reliability-and-verification\" class=\"header-mark\"\u003e\u003c/a\u003e8 Reliability and verification\u003c/h2\u003e\u003cp\u003eHow EONYX retries transient failures and how to make sure the config was read without errors.\u003c/p\u003e\n\u003ch3 id=\"retries-and-timeouts\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#retries-and-timeouts\" class=\"header-mark\"\u003e\u003c/a\u003e8.1 Retries and timeouts\u003c/h3\u003e\u003cp\u003eThe \u003ccode\u003eretry\u003c/code\u003e block configures how the provider retries transient failures and how long it waits for the first response:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-14\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;retry\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;max_retries\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;base_delay_ms\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e500\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;response_header_timeout_sec\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e60\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eField\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eDefault\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eMeaning\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003emax_retries\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e3\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eextra attempts on 429/5xx and transport errors (0 disables them)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ebase_delay_ms\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e500\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe first backoff step; it doubles, capped at 30s; honors \u003ccode\u003eRetry-After\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eresponse_header_timeout_sec\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e60\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ehow long to wait for the first response header before streaming starts\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eThere is deliberately no global \u003ccode\u003eClient.Timeout\u003c/code\u003e — long token streams must not be cut off by a timeout.\u003c/p\u003e\n\u003ch3 id=\"checking-the-configuration\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#checking-the-configuration\" class=\"header-mark\"\u003e\u003c/a\u003e8.2 Checking the configuration\u003c/h3\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-15\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx config   \u003cspan class=\"c1\"\u003e# providers (keys hidden), models, default, limits\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx info     \u003cspan class=\"c1\"\u003e# where the config, data, cache and project root live\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition note open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eStrict schema\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eThe config is parsed strictly: an unknown field, a wrong type or broken JSON is a \u003cstrong\u003efatal\u003c/strong\u003e error at startup (for an unknown field — with its name and line number). EONYX would rather not start than silently ignore a typo.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eProvider\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003etype: \u0026quot;openai\u0026quot;\u003c/code\u003e + \u003ccode\u003ebase_url\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ecovers OpenAI, OpenRouter, DeepSeek, Moonshot and local servers\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSecrets\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003evia \u003ccode\u003e$ENV\u003c/code\u003e references in \u003ccode\u003eapi_key\u003c/code\u003e/\u003ccode\u003ebase_url\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eexpanded after merging\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eModel\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eid\u003c/code\u003e + \u003ccode\u003eprovider\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econtext_window\u003c/code\u003e enables summarization, prices drive the cost counter\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSwitching\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+N\u003c/code\u003e / \u003ccode\u003e/model\u003c/code\u003e in the TUI or \u003ccode\u003e-m\u003c/code\u003e in headless mode\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eretry\u003c/code\u003e\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003emax_retries\u003c/code\u003e (3), \u003ccode\u003ebase_delay_ms\u003c/code\u003e (500), \u003ccode\u003eresponse_header_timeout_sec\u003c/code\u003e (60)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "How EONYX Works: The Agent Architecture from the Inside",
        "date_published" : "2026-06-06T00:00:00+03:00",
        "date_modified" : "2026-06-06T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-architecture/",
        "url" : "https://eonyx.tech/blog/eonyx-architecture/",
        "summary": "EONYX is written in Go and builds into a single static binary. Inside is a tidy set of packages built around one central abstraction. Let\u0026rsquo;s walk through how it is put together — useful both for contributors and for understanding the agent\u0026rsquo;s behaviour.\n",
        "content_html" : "\u003cp\u003eEONYX is written in Go and builds into a single static binary. Inside is a tidy set of packages built around one central abstraction. Let\u0026rsquo;s walk through how it is put together — useful both for contributors and for understanding the agent\u0026rsquo;s behaviour.\u003c/p\u003e\n\u003ch2 id=\"the-agent-core\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-agent-core\" class=\"header-mark\"\u003e\u003c/a\u003e7 The agent core\u003c/h2\u003e\u003cp\u003eAt the heart of it there is a single interface and a loop around it; let\u0026rsquo;s look at how the packages, the provider and the agent itself are connected.\u003c/p\u003e\n\u003ch3 id=\"dependency-flow\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#dependency-flow\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 Dependency flow\u003c/h3\u003e\u003cp\u003eAt a high level: \u003ccode\u003ecmd\u003c/code\u003e → (\u003ccode\u003etui\u003c/code\u003e | \u003ccode\u003eagent\u003c/code\u003e) → (\u003ccode\u003eprovider\u003c/code\u003e → \u003ccode\u003ellm\u003c/code\u003e) + \u003ccode\u003etools\u003c/code\u003e + \u003ccode\u003esession\u003c/code\u003e + \u003ccode\u003epermission\u003c/code\u003e + \u003ccode\u003eprompt\u003c/code\u003e. The default command brings up \u003ccode\u003etui\u003c/code\u003e; the \u003ccode\u003erun\u003c/code\u003e subcommand drives the same \u003ccode\u003eagent\u003c/code\u003e headless. Everything below the \u003ccode\u003ellm.Provider\u003c/code\u003e interface is hidden behind it.\u003c/p\u003e\n\u003ch3 id=\"one-abstraction-llmprovider\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#one-abstraction-llmprovider\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 One abstraction: llm.Provider\u003c/h3\u003e\u003cp\u003eThe core is the \u003ccode\u003einternal/llm\u003c/code\u003e package, with no concrete backends. A provider has \u003cstrong\u003eone method\u003c/strong\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ego\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-3\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eStream\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003ectx\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[]\u003c/span\u003e\u003cspan class=\"nx\"\u003eMessage\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[]\u003c/span\u003e\u003cspan class=\"nx\"\u003eTool\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003cspan class=\"kd\"\u003echan\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kt\"\u003eerror\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003e\u003ccode\u003eEvent\u003c/code\u003e is a closed sum type: \u003ccode\u003eEventTextDelta\u003c/code\u003e, \u003ccode\u003eEventReasoningDelta\u003c/code\u003e, \u003ccode\u003eEventToolCall\u003c/code\u003e, \u003ccode\u003eEventUsage\u003c/code\u003e, \u003ccode\u003eEventDone\u003c/code\u003e, \u003ccode\u003eEventError\u003c/code\u003e. All communication with the model is reduced to a stream of events. Because of that, adding a backend means implementing a single interface.\u003c/p\u003e\n\u003cp\u003eThe only concrete implementation is \u003ccode\u003einternal/llm/openai\u003c/code\u003e: an OpenAI-compatible client on top of \u003ccode\u003enet/http\u003c/code\u003e + SSE, with no vendor SDKs. \u003ccode\u003einternal/provider.For(...)\u003c/code\u003e is the single place where a model is mapped to a concrete provider.\u003c/p\u003e\n\u003ch3 id=\"the-agent-loop\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-agent-loop\" class=\"header-mark\"\u003e\u003c/a\u003e7.3 The agent loop\u003c/h3\u003e\u003cp\u003e\u003ccode\u003einternal/agent\u003c/code\u003e is the loop itself. \u003ccode\u003eSend\u003c/code\u003e records the user message, then repeats: stream the response, execute tool calls, feed the results back, and stop when the model no longer calls tools (the limit is \u003ccode\u003emaxSteps\u003c/code\u003e, 50 by default).\u003c/p\u003e\n\u003cp\u003eIt is configured through \u003ccode\u003eOptions\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eHistory\u003c/code\u003e — seed/resume;\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ePersist\u003c/code\u003e — write every message (an error \u003cstrong\u003eaborts\u003c/strong\u003e the turn — the store is the source of truth);\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAuthorize\u003c/code\u003e — the permission gate (a denial becomes an error result, it does not kill the turn);\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eEvents\u003c/code\u003e — streaming callbacks;\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eContextTokens\u003c/code\u003e — enables auto-summarization.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eConsecutive read-only calls (\u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, git statuses) run \u003cstrong\u003ein parallel\u003c/strong\u003e; results are always returned in the original order.\u003c/p\u003e\n\u003ch2 id=\"tools-and-the-build\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#tools-and-the-build\" class=\"header-mark\"\u003e\u003c/a\u003e8 Tools and the build\u003c/h2\u003e\u003cp\u003eAround the core sit the tool registry, the built-in shell, the remaining packages and, finally, the build into a single binary.\u003c/p\u003e\n\u003ch3 id=\"tools\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#tools\" class=\"header-mark\"\u003e\u003c/a\u003e8.1 Tools\u003c/h3\u003e\u003cp\u003e\u003ccode\u003einternal/tools\u003c/code\u003e is the registry of executable tools plus \u003ccode\u003eDefaultSet(...)\u003c/code\u003e, which registers the 15 standard ones (read, write, edit, multi_edit, ls, picker, glob, grep, bash, fetch, git_status, git_diff, git_log, git_commit, todo_write). A tool\u0026rsquo;s declaration (what the model sees) is separate from its \u003ccode\u003eHandler\u003c/code\u003e (what actually runs). When the sandbox is enabled, file tools are wrapped in \u003ccode\u003esandboxed(...)\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003einternal/shell\u003c/code\u003e runs bash-like scripts \u003cstrong\u003ein-process\u003c/strong\u003e via \u003ccode\u003emvdan.cc/sh/v3\u003c/code\u003e — which is why \u003ccode\u003ebash\u003c/code\u003e works cross-platform without a system shell.\u003c/p\u003e\n\u003ch3 id=\"the-remaining-packages\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-remaining-packages\" class=\"header-mark\"\u003e\u003c/a\u003e8.2 The remaining packages\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003ePackage\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eRole\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/session\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eStore\u003c/code\u003e with a JSONL implementation (\u003ccode\u003esessions/\u0026lt;id\u0026gt;.jsonl\u003c/code\u003e + index)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/prompt\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esystem prompt assembly and \u003ccode\u003eAGENTS.md\u003c/code\u003e lookup up the tree\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/agent/summarize.go\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esummarization once ~0.8·\u003ccode\u003econtext_window\u003c/code\u003e is filled (in memory)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/permission\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003estatic permission policy\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/tui\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003einteractive chat on Bubble Tea / Bubbles / Lipgloss\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/subagent\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe \u003ccode\u003etask\u003c/code\u003e tool — a child agent with a read-only tool set\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/skills\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003elocal Agent Skills (\u003ccode\u003eSKILL.md\u003c/code\u003e, progressive disclosure)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/mcp\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eMCP client (stdio + http) on the official Go SDK\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/hooks\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eshell hooks around tools\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003einternal/version\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esingle source of the build version\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"build-and-version\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#build-and-version\" class=\"header-mark\"\u003e\u003c/a\u003e8.3 Build and version\u003c/h3\u003e\u003cp\u003eThe version is a git tag, hardcoded nowhere: \u003ccode\u003emake build\u003c/code\u003e bakes \u003ccode\u003egit describe --tags --always --dirty\u003c/code\u003e into the binary, and \u003ccode\u003eeonyx --version\u003c/code\u003e prints it. A release is a \u003ccode\u003ev*\u003c/code\u003e tag push; from there GoReleaser in GitHub Actions builds binaries for Linux, macOS and Windows.\u003c/p\u003e\n\u003cdiv class=\"details admonition note open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eDependencies are deliberately modest\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eModule \u003ccode\u003eeonyx\u003c/code\u003e, Go 1.26. Dependencies are pure Go and free of vendor LLM SDKs: cobra, doublestar, \u003ccode\u003emvdan/sh\u003c/code\u003e, \u003ccode\u003egolang.org/x/net\u003c/code\u003e, the official \u003ccode\u003emodelcontextprotocol/go-sdk\u003c/code\u003e, \u003ccode\u003ealecthomas/chroma\u003c/code\u003e (code highlighting in the TUI) and the Charm libraries (bubbletea/bubbles/lipgloss) purely as a UI toolkit.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eOne abstraction\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ellm.Provider.Stream(...)\u003c/code\u003e → a stream of \u003ccode\u003eEvent\u003c/code\u003e; a backend = one implementation\u003c/li\u003e\n\u003cli\u003ethe only provider is an OpenAI-compatible client on \u003ccode\u003enet/http\u003c/code\u003e + SSE, no vendor SDKs\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe agent loop\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003estream → tools → results, up to \u003ccode\u003emaxSteps\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003econsecutive read-only calls run in parallel\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTools\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e15 standard ones via \u003ccode\u003eDefaultSet\u003c/code\u003e, sandbox for file tools\u003c/li\u003e\n\u003cli\u003ein-process shell via \u003ccode\u003emvdan/sh\u003c/code\u003e, no system bash\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBuild\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ea single binary, Go 1.26\u003c/li\u003e\n\u003cli\u003eversion from a git tag, releases via GoReleaser\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX Hooks: Automation Around Tool Calls",
        "date_published" : "2026-06-03T00:00:00+03:00",
        "date_modified" : "2026-06-03T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-hooks/",
        "url" : "https://eonyx.tech/blog/eonyx-hooks/",
        "summary": "Hooks are shell commands that EONYX runs around tool calls: before (before) and after (after). They are a convenient way to bolt on auto-formatting, auditing, checks and guardrails without touching the agent\u0026rsquo;s code.\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eHooks\u003c/strong\u003e are shell commands that EONYX runs \u003cstrong\u003earound tool calls\u003c/strong\u003e: before (\u003ccode\u003ebefore\u003c/code\u003e) and after (\u003ccode\u003eafter\u003c/code\u003e). They are a convenient way to bolt on auto-formatting, auditing, checks and guardrails without touching the agent\u0026rsquo;s code.\u003c/p\u003e\n\u003ch2 id=\"how-hooks-work\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#how-hooks-work\" class=\"header-mark\"\u003e\u003c/a\u003e7 How hooks work\u003c/h2\u003e\u003cp\u003eA hook is declared in the config and fires around a tool call — below are the record format, the \u003ccode\u003ebefore\u003c/code\u003e/\u003ccode\u003eafter\u003c/code\u003e phases and how to pass context into a hook.\u003c/p\u003e\n\u003ch3 id=\"format\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#format\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 Format\u003c/h3\u003e\u003cp\u003eHooks are set in \u003ccode\u003eeonyx.json\u003c/code\u003e as an object where the key is the \u003cstrong\u003etool name\u003c/strong\u003e and the value is \u003ccode\u003ebefore\u003c/code\u003e and/or \u003ccode\u003eafter\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-9\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hooks\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;write\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;before\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;echo \\\u0026#34;writing: $EONYX_INPUT\\\u0026#34; \u0026gt;\u0026gt; .eonyx/audit.log\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;gofmt -l .\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;edit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gofmt -l .\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eNo \u0026ldquo;events\u0026rdquo; and no \u0026ldquo;matchers\u0026rdquo; — everything is tied to the tool name (\u003ccode\u003ewrite\u003c/code\u003e, \u003ccode\u003eedit\u003c/code\u003e, \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003egit_commit\u003c/code\u003e, MCP tools and so on).\u003c/p\u003e\n\u003ch3 id=\"the-before-and-after-phases\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-before-and-after-phases\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 The before and after phases\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003ePhase\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhen\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eEffect\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ebefore\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ebefore the tool\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ea non-zero exit code \u003cstrong\u003eblocks\u003c/strong\u003e the tool; the error goes to the model\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eafter\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eafter a successful call\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe output (stdout and stderr) is \u003cstrong\u003eappended\u003c/strong\u003e to the tool result (the model sees it)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cul\u003e\n\u003cli\u003eAn empty/missing hook is a no-op.\u003c/li\u003e\n\u003cli\u003eAn error in an \u003ccode\u003eafter\u003c/code\u003e hook does not break the result: it is kept with a \u003ccode\u003e(hook after \u0026lt;tool\u0026gt; failed: …)\u003c/code\u003e note.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eafter\u003c/code\u003e does not run if the tool itself failed.\u003c/li\u003e\n\u003cli\u003eEvery hook runs in the shared shell session with a \u003cstrong\u003e30 second\u003c/strong\u003e timeout.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003ebefore can forbid things\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eSince a non-zero exit blocks the tool, a \u003ccode\u003ebefore\u003c/code\u003e hook is a guardrail. For example, forbid \u003ccode\u003egit_commit\u003c/code\u003e when tests have not been run, or \u003ccode\u003ebash\u003c/code\u003e in a dangerous directory.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"context-through-variables\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#context-through-variables\" class=\"header-mark\"\u003e\u003c/a\u003e7.3 Context through variables\u003c/h3\u003e\u003cp\u003eData is passed to the hook \u003cstrong\u003ethrough environment variables\u003c/strong\u003e, not by substitution into the command text — so the contents of the input/result cannot \u0026ldquo;break\u0026rdquo; your command (injection is impossible):\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eVariable\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhat it holds\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEONYX_TOOL\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003etool name\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEONYX_PHASE\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ebefore\u003c/code\u003e or \u003ccode\u003eafter\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEONYX_CWD\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe shell\u0026rsquo;s current working directory\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEONYX_INPUT\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe tool\u0026rsquo;s raw JSON input\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEONYX_RESULT\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe tool result (only in \u003ccode\u003eafter\u003c/code\u003e)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"recipes\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#recipes\" class=\"header-mark\"\u003e\u003c/a\u003e8 Recipes\u003c/h2\u003e\u003cp\u003eA few ready-made scenarios — auto-formatting, an audit log and blocking commits without green tests.\u003c/p\u003e\n\u003ctab-container default-tab=\"0\" class=\"tw:block tw:my-5\" role=\"tablist\"\u003e\u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-10\"\u003eAuto-format\u003c/button\u003e\r\n  \u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-11\"\u003eAudit log\u003c/button\u003e\r\n  \u003cbutton class=\"tab-button tw:cursor-pointer tw:transition tw:ease-in-out tw:duration-200 tw:rounded-lg tw:bg-transparent tw:px-4 tw:py-2 tw:mr-1.5 tw:mb-1.5 tw:text-sm tw:font-medium tw:text-fgColor-secondary tw:hover:text-fgColor-default tw:hover:bg-bgColor-secondary tw:aria-selected:bg-bgColor-accent-muted tw:aria-selected:text-fgColor-link tw:aria-selected:font-semibold\" type=\"button\" role=\"tab\" id=\"tab-id-12\"\u003eGuardrail\u003c/button\u003e\r\n  \n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-10\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cp\u003eFormat the code after every edit:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-35\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hooks\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;write\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gofmt -w .\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;edit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gofmt -w .\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;multi_edit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gofmt -w .\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n    \r\n\u003c/div\u003e\r\n\n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-11\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cp\u003eLog every shell command:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-36\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hooks\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;bash\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;before\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;echo \\\u0026#34;[$(date -Is)] $EONYX_INPUT\\\u0026#34; \u0026gt;\u0026gt; .eonyx/bash-audit.log\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n    \r\n\u003c/div\u003e\r\n\n\r\n\r\n\r\n\r\n\u003cdiv\r\n    role=\"tabpanel\"\r\n    aria-labelledby=\"tab-id-12\"\r\n    class=\"\r\n    tw:mt-2\r\n    tw:p-5\r\n    tw:rounded-xl\r\n    tw:border\r\n    tw:border-borderColor-default\r\n    tw:leading-relaxed\r\n    \"\u003e\r\n    \r\n        \u003cp\u003eDo not allow commits until the tests are green:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-37\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hooks\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;git_commit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;before\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;go test ./... \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 || { echo \u0026#39;tests failing\u0026#39;; exit 1; }\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eA non-zero exit will block the commit, and the message will go to the model.\u003c/p\u003e\n\r\n    \r\n\u003c/div\u003e\r\n\n\u003c/tab-container\u003e\r\n\n\u003cdiv class=\"details admonition warning open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"/\u003e\u003c/svg\u003e\u003c/span\u003eHooks are your code\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eHooks run in the shared shell session (the same one as the \u003ccode\u003ebash\u003c/code\u003e tool), with your privileges. Write them as carefully as any other script: keep them fast (30s limit) and idempotent.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFormat\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ethe key is the tool name, the value is \u003ccode\u003ebefore\u003c/code\u003e/\u003ccode\u003eafter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eno events and no matchers\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePhases\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ebefore\u003c/code\u003e blocks the tool with a non-zero exit code\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eafter\u003c/code\u003e appends its output to the result\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eContext\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003epassed through \u003ccode\u003eEONYX_*\u003c/code\u003e variables\u003c/li\u003e\n\u003cli\u003eno substitution into the text — injection is impossible\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLimits\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e30s timeout, shared shell session\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eafter\u003c/code\u003e errors do not break the result\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRecipes\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eauto-format, audit log, blocking commits without tests\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX permissions and security: control over every action",
        "date_published" : "2026-05-26T00:00:00+03:00",
        "date_modified" : "2026-05-26T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-security/",
        "url" : "https://eonyx.tech/blog/eonyx-security/",
        "summary": "An agent that reads and edits code and runs commands must operate within explicit permissions. In EONYX security is several layers: a static gateway, a file sandbox, plan mode and a coarse block on dangerous commands. Let\u0026rsquo;s go through each of them.\n",
        "content_html" : "\u003cp\u003eAn agent that reads and edits code and runs commands must operate \u003cstrong\u003ewithin explicit permissions\u003c/strong\u003e. In EONYX security is several layers: a static gateway, a file sandbox, plan mode and a coarse block on dangerous commands. Let\u0026rsquo;s go through each of them.\u003c/p\u003e\n\u003ch2 id=\"the-permission-gateway\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-permission-gateway\" class=\"header-mark\"\u003e\u003c/a\u003e1 The permission gateway\u003c/h2\u003e\u003cp\u003eThe first layer is who decides whether a tool may run and how: the static policy, the interactive dialog in the TUI and plan mode on top.\u003c/p\u003e\n\u003ch3 id=\"static-policy\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#static-policy\" class=\"header-mark\"\u003e\u003c/a\u003e1.1 Static policy\u003c/h3\u003e\u003cp\u003eTools are split into \u003cstrong\u003ealways allowed\u003c/strong\u003e (read-only) and \u003cstrong\u003erequiring permission\u003c/strong\u003e (writes, commands, commits, MCP tools).\u003c/p\u003e\n\u003cp\u003eAlways allowed with no questions asked: \u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003egit_status\u003c/code\u003e, \u003ccode\u003egit_diff\u003c/code\u003e, \u003ccode\u003egit_log\u003c/code\u003e, \u003ccode\u003etodo_write\u003c/code\u003e. Everything else goes through the gateway:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-1\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;permissions\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;allowed_tools\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;bash\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;write\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;edit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;sandbox\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eallowed_tools\u003c/code\u003e\u003c/strong\u003e — the list of tools that run without confirmation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003esandbox\u003c/code\u003e\u003c/strong\u003e — locks the file tools inside the project root (see below).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003e--yolo\u003c/code\u003e\u003c/strong\u003e (or \u003ccode\u003e/yolo\u003c/code\u003e in the TUI) — allows everything for the duration of the session.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf a tool is not allowed and \u003ccode\u003e--yolo\u003c/code\u003e is off, the static policy returns a denial like \u003cem\u003e\u0026ldquo;permission denied for tool …: re-run with \u0026ndash;yolo or add … to permissions.allowed_tools\u0026rdquo;\u003c/em\u003e.\u003c/p\u003e\n\u003cdiv class=\"details admonition note open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eA denial does not break the flow\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eA blocked tool is returned to the model as an \u003cstrong\u003eerror result\u003c/strong\u003e, not as a crash. The model sees the denial and adapts — for example, it proposes another route. The conversation stays consistent.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"the-interactive-layer-in-the-tui\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-interactive-layer-in-the-tui\" class=\"header-mark\"\u003e\u003c/a\u003e1.2 The interactive layer in the TUI\u003c/h3\u003e\u003cp\u003eIn interactive mode a dialog works on top of the static policy: for a tool the policy did not let through, EONYX asks:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAllow once\u003c/strong\u003e — allow it a single time;\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAllow always (this session)\u003c/strong\u003e — allow it until the end of the session;\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDeny\u003c/strong\u003e — reject it (Esc = deny).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u0026ldquo;Allow always\u0026rdquo; remembers the tool for the current session so you are not asked again.\u003c/p\u003e\n\u003ch3 id=\"plan-mode\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#plan-mode\" class=\"header-mark\"\u003e\u003c/a\u003e1.3 Plan mode\u003c/h3\u003e\u003cp\u003e\u003ccode\u003e/plan\u003c/code\u003e is a stricter \u0026ldquo;think first\u0026rdquo; gateway. While it is on, only read-only tools are available (\u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003epicker\u003c/code\u003e, \u003ccode\u003egit_status\u003c/code\u003e, \u003ccode\u003egit_diff\u003c/code\u003e, \u003ccode\u003egit_log\u003c/code\u003e, \u003ccode\u003efetch\u003c/code\u003e, \u003ccode\u003etask\u003c/code\u003e, \u003ccode\u003etodo_write\u003c/code\u003e); anything that writes or executes is blocked — \u003cstrong\u003eregardless\u003c/strong\u003e of \u003ccode\u003eallowed_tools\u003c/code\u003e and \u003ccode\u003e--yolo\u003c/code\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\r\n  \u003cp\u003eplan mode is on: \u0026ldquo;…\u0026rdquo; is blocked until you approve the plan — run /plan to exit plan mode and enable edits\u003c/p\u003e\n\r\n\u003c/blockquote\u003e\u003cp\u003eWhen the plan is ready, EONYX shows a dialog: \u003cstrong\u003eimplement\u003c/strong\u003e, \u003cstrong\u003eallow edits\u003c/strong\u003e or \u003cstrong\u003ekeep planning\u003c/strong\u003e. It is handy for having the agent explore the code and propose a plan first, so you approve it before it changes anything.\u003c/p\u003e\n\u003ch2 id=\"boundaries-and-guardrails\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#boundaries-and-guardrails\" class=\"header-mark\"\u003e\u003c/a\u003e2 Boundaries and guardrails\u003c/h2\u003e\u003cp\u003eOn top of the gateway there are hard boundaries that limit the damage: the file sandbox, the coarse block on dangerous commands and hooks.\u003c/p\u003e\n\u003ch3 id=\"the-file-sandbox\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-file-sandbox\" class=\"header-mark\"\u003e\u003c/a\u003e2.1 The file sandbox\u003c/h3\u003e\u003cp\u003e\u003ccode\u003epermissions.sandbox: true\u003c/code\u003e locks the file tools (\u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003ewrite\u003c/code\u003e, \u003ccode\u003eedit\u003c/code\u003e, \u003ccode\u003emulti_edit\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e) inside the \u003cstrong\u003eproject root\u003c/strong\u003e (the directory containing \u003ccode\u003eeonyx.json\u003c/code\u003e; if there is none — the working directory). A path outside the root is rejected:\u003c/p\u003e\n\u003cblockquote\u003e\r\n  \u003cp\u003epath \u0026ldquo;…\u0026rdquo; is outside the project sandbox (…); set permissions.sandbox to false to allow paths outside the project\u003c/p\u003e\n\r\n\u003c/blockquote\u003e\u003cp\u003eBy default the sandbox is \u003cstrong\u003eoff\u003c/strong\u003e — turn it on when you work on an untrusted task or want a guarantee that the agent will not touch anything outside the project. Tools without a path (\u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003efetch\u003c/code\u003e, the git tools) are not restricted by the sandbox.\u003c/p\u003e\n\u003ch3 id=\"blocking-dangerous-commands\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#blocking-dangerous-commands\" class=\"header-mark\"\u003e\u003c/a\u003e2.2 Blocking dangerous commands\u003c/h3\u003e\u003cp\u003eBelow the permission gateway there is one more, coarse layer: the built-in shell (\u003ccode\u003emvdan/sh\u003c/code\u003e) hard-blocks a small set of commands at the policy level — they cannot be allowed even with \u003ccode\u003e--yolo\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-2\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eshutdown · reboot · halt · poweroff · mkfs · init\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eAn attempt returns the error \u003cem\u003e\u0026ldquo;command \u0026ldquo;…\u0026rdquo; is blocked by shell policy\u0026rdquo;\u003c/em\u003e. This is insurance against catastrophic actions, not full isolation.\u003c/p\u003e\n\u003ch3 id=\"hooks\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#hooks\" class=\"header-mark\"\u003e\u003c/a\u003e2.3 Hooks\u003c/h3\u003e\u003cp\u003eAdditional control comes from \u003cstrong\u003epre-hooks\u003c/strong\u003e: a \u003ccode\u003ebefore\u003c/code\u003e hook with a non-zero exit code \u003cstrong\u003eblocks\u003c/strong\u003e the tool. For example, forbid \u003ccode\u003ebash\u003c/code\u003e when the working directory is the home directory:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-3\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hooks\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;bash\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;before\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[ \\\u0026#34;$EONYX_CWD\\\u0026#34; = \\\u0026#34;$HOME\\\u0026#34; ] \u0026amp;\u0026amp; exit 1 || exit 0\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eMore on this in the article about hooks.\u003c/p\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e3 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePermission gateway\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003ereading is always allowed (\u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, the git status tools, \u003ccode\u003etodo_write\u003c/code\u003e); everything else goes through the gateway\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eallowed_tools\u003c/code\u003e allows without questions, \u003ccode\u003e--yolo\u003c/code\u003e removes the gateway for the session\u003c/li\u003e\n\u003cli\u003ethe TUI asks allow once / always / deny; a denial does not break the flow\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePlan mode\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/plan\u003c/code\u003e — read-only until you approve the plan\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBoundaries and guardrails\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esandbox\u003c/code\u003e locks the file tools inside the project root\u003c/li\u003e\n\u003cli\u003ethe coarse shell block: \u003ccode\u003eshutdown\u003c/code\u003e/\u003ccode\u003ereboot\u003c/code\u003e/\u003ccode\u003emkfs\u003c/code\u003e… not even with \u003ccode\u003e--yolo\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003epre-hooks can block a tool with their exit code\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "A Complete Guide to the EONYX Interactive TUI",
        "date_published" : "2026-05-24T00:00:00+03:00",
        "date_modified" : "2026-05-24T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-tui/",
        "url" : "https://eonyx.tech/blog/eonyx-tui/",
        "summary": "The main way to work with EONYX is the interactive terminal interface (TUI): response streaming, the command palette, pickers and dialogs. Here is everything worth knowing to work fast.\n",
        "content_html" : "\u003cp\u003eThe main way to work with EONYX is the interactive terminal interface (TUI): response streaming, the command palette, pickers and dialogs. Here is everything worth knowing to work fast.\u003c/p\u003e\n\u003ch2 id=\"keyboard-and-commands\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#keyboard-and-commands\" class=\"header-mark\"\u003e\u003c/a\u003e9 Keyboard and commands\u003c/h2\u003e\u003cp\u003eAlmost everything in EONYX is done from the keyboard — here are the main keys, the palette and the pickers.\u003c/p\u003e\n\u003ch3 id=\"hotkeys\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#hotkeys\" class=\"header-mark\"\u003e\u003c/a\u003e9.1 Hotkeys\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eKey\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eAction\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esend message\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+J\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eline break in the input field\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e↑ / ↓\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ehistory of your messages\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eEsc\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003einterrupt the running turn\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ecommand palette (on empty input)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e@\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003efile path completion (Tab inserts)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e?\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ehelp (on empty input)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ecommand palette\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+N\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eswitch model\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+S\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esession manager\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eskills and MCP servers (on/off)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+O\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eexpand/collapse tool output\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eexpand/collapse model reasoning\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eCtrl+C\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003equit\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e! \u0026lt;cmd\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003erun a shell command\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"command-palette\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#command-palette\" class=\"header-mark\"\u003e\u003c/a\u003e9.2 Command palette\u003c/h3\u003e\u003cp\u003e\u003ccode\u003e/\u003c/code\u003e (on empty input) or \u003ccode\u003eCtrl+P\u003c/code\u003e opens the palette with two tabs (switch with \u003ccode\u003eTab\u003c/code\u003e): system commands (new session, clear context, yolo, plan, timestamps, switch model, sessions, capabilities, quit) and working ones (attach, check, IP, export). Arrows wrap around, \u003ccode\u003eEnter\u003c/code\u003e runs.\u003c/p\u003e\n\u003cp\u003eSlash commands can also be typed by hand: \u003ccode\u003e/new\u003c/code\u003e, \u003ccode\u003e/clear\u003c/code\u003e, \u003ccode\u003e/add [path]\u003c/code\u003e, \u003ccode\u003e/rename \u0026lt;title\u0026gt;\u003c/code\u003e, \u003ccode\u003e/fork\u003c/code\u003e, \u003ccode\u003e/export\u003c/code\u003e, \u003ccode\u003e/yolo\u003c/code\u003e, \u003ccode\u003e/plan\u003c/code\u003e, \u003ccode\u003e/timestamps\u003c/code\u003e, \u003ccode\u003e/model\u003c/code\u003e, \u003ccode\u003e/sessions [query]\u003c/code\u003e, \u003ccode\u003e/help\u003c/code\u003e, \u003ccode\u003e/quit\u003c/code\u003e.\u003c/p\u003e\n\u003ch3 id=\"pickers-and-completion\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#pickers-and-completion\" class=\"header-mark\"\u003e\u003c/a\u003e9.3 Pickers and completion\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eModel\u003c/strong\u003e — \u003ccode\u003eCtrl+N\u003c/code\u003e or \u003ccode\u003e/model\u003c/code\u003e: the list of configured models, the current one is marked.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSessions\u003c/strong\u003e — \u003ccode\u003eCtrl+S\u003c/code\u003e or \u003ccode\u003e/sessions\u003c/code\u003e: the list; \u003ccode\u003er\u003c/code\u003e rename, \u003ccode\u003ef\u003c/code\u003e fork, \u003ccode\u003ed\u003c/code\u003e delete; \u003ccode\u003e/sessions \u0026lt;query\u0026gt;\u003c/code\u003e searches titles and text.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFiles\u003c/strong\u003e — type \u003ccode\u003e@\u003c/code\u003e and start typing a path: a candidate menu appears (directories first), \u003ccode\u003eTab\u003c/code\u003e inserts. A convenient way to \u0026ldquo;attach\u0026rdquo; files to a message.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"what-is-on-screen\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#what-is-on-screen\" class=\"header-mark\"\u003e\u003c/a\u003e10 What is on screen\u003c/h2\u003e\u003cp\u003eThe header shows the state, and a couple of toggles control what is visible in the transcript.\u003c/p\u003e\n\u003ch3 id=\"header\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#header\" class=\"header-mark\"\u003e\u003c/a\u003e10.1 Header\u003c/h3\u003e\u003cp\u003eThe header shows the working directory, the git branch, the session number/title, the mode (\u003ccode\u003eSAFE\u003c/code\u003e / \u003ccode\u003eYOLO\u003c/code\u003e, \u003ccode\u003ePLAN\u003c/code\u003e), the model and the counters: \u003ccode\u003einput↑ output↓\u003c/code\u003e, cached tokens, session time, cost \u003ccode\u003e$…\u003c/code\u003e and the \u003cstrong\u003econtext indicator\u003c/strong\u003e \u003ccode\u003e{ctx N%}\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eWatch {ctx N%}\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eThe \u003ccode\u003e{ctx N%}\u003c/code\u003e indicator is how full the context window is. At \u003cstrong\u003e80%\u003c/strong\u003e it gets highlighted — and at that same threshold auto-summarization of old turns kicks in. If you see a high percentage, that is fine: EONYX will compact the history itself.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"skills-and-mcp\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#skills-and-mcp\" class=\"header-mark\"\u003e\u003c/a\u003e10.2 Skills and MCP\u003c/h3\u003e\u003cp\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e opens the capabilities dialog with the \u003cstrong\u003eSkills\u003c/strong\u003e and \u003cstrong\u003eMCP\u003c/strong\u003e tabs. Any skill or MCP server can be turned off/on on the fly (\u003ccode\u003e✓\u003c/code\u003e/\u003ccode\u003e✗\u003c/code\u003e): for skills this rebuilds the catalog in the system prompt, for MCP it hides the server\u0026rsquo;s tools from the model. Active skills and servers are visible in the header (\u003ccode\u003e# skills\u003c/code\u003e, \u003ccode\u003e» mcp\u003c/code\u003e).\u003c/p\u003e\n\u003ch3 id=\"output-and-reasoning\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#output-and-reasoning\" class=\"header-mark\"\u003e\u003c/a\u003e10.3 Output and reasoning\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCtrl+O\u003c/code\u003e\u003c/strong\u003e — toggles tool output between a short summary and the full text. By default long listings and files are collapsed so they do not clutter the transcript.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/strong\u003e — expands/collapses the model\u0026rsquo;s \u0026ldquo;thinking\u0026rdquo; block (for reasoning models). Collapsed to a single line by default.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"actions-from-the-chat\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#actions-from-the-chat\" class=\"header-mark\"\u003e\u003c/a\u003e11 Actions from the chat\u003c/h2\u003e\u003cp\u003eFrom the chat you can run shell commands and manage the session itself.\u003c/p\u003e\n\u003ch3 id=\"shell-in-the-chat\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#shell-in-the-chat\" class=\"header-mark\"\u003e\u003c/a\u003e11.1 Shell in the chat\u003c/h3\u003e\u003cp\u003e\u003ccode\u003e!\u0026lt;command\u0026gt;\u003c/code\u003e runs it in the agent\u0026rsquo;s shared shell session, and \u003cstrong\u003ewrites the command and its output into the conversation\u003c/strong\u003e — so the model sees what you did and how the state changed (directory, variables):\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-3\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e! go test ./...\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch3 id=\"export-and-fork\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#export-and-fork\" class=\"header-mark\"\u003e\u003c/a\u003e11.2 Export and fork\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003e/export\u003c/code\u003e\u003c/strong\u003e — saves the conversation to markdown: \u003ccode\u003e\u0026lt;project\u0026gt;/.eonyx/exports/eonyx-\u0026lt;id\u0026gt;.md\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003e/fork\u003c/code\u003e\u003c/strong\u003e (or \u003ccode\u003ef\u003c/code\u003e in the session list) — branches the conversation into a new session, the original is left unchanged. Handy as a \u0026ldquo;save point\u0026rdquo; before a risky direction.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e12 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNavigation\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003epalette \u003ccode\u003e/\u003c/code\u003e or \u003ccode\u003eCtrl+P\u003c/code\u003e; pickers for model (\u003ccode\u003eCtrl+N\u003c/code\u003e), sessions (\u003ccode\u003eCtrl+S\u003c/code\u003e), capabilities (\u003ccode\u003eCtrl+K\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@\u003c/code\u003e — completion and attaching files, \u003ccode\u003eTab\u003c/code\u003e inserts\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eScreen\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eheader: path, branch, mode, model, tokens, cost, \u003ccode\u003e{ctx N%}\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+O\u003c/code\u003e / \u003ccode\u003eCtrl+R\u003c/code\u003e — expand tool output / reasoning\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eActions from the chat\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e!\u0026lt;cmd\u0026gt;\u003c/code\u003e — shell in the chat, recorded into the history\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e/export\u003c/code\u003e, \u003ccode\u003e/fork\u003c/code\u003e — export and branching\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX subagents: delegating work to the task tool",
        "date_published" : "2026-05-23T00:00:00+03:00",
        "date_modified" : "2026-05-23T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-subagents/",
        "url" : "https://eonyx.tech/blog/eonyx-subagents/",
        "summary": "A subagent is a separate instance of the agent that EONYX hands part of the work to. It performs the task in its own context window, with a reduced set of tools, and returns only the result into the main conversation. This keeps the main context clean: the details of the research don\u0026rsquo;t clutter the dialog. This article covers the task tool, the full list of built-in tools, and how the agent loop works.\n",
        "content_html" : "\u003cp\u003eA \u003cstrong\u003esubagent\u003c/strong\u003e is a separate instance of the agent that EONYX hands part of the work to. It performs the task in its own context window, with a reduced set of tools, and returns only the result into the main conversation. This keeps the main context clean: the details of the research don\u0026rsquo;t clutter the dialog. This article covers the \u003ccode\u003etask\u003c/code\u003e tool, the full list of built-in tools, and how the agent loop works.\u003c/p\u003e\n\u003ch2 id=\"the-task-tool\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-task-tool\" class=\"header-mark\"\u003e\u003c/a\u003e9 The task tool\u003c/h2\u003e\u003cp\u003eDelegation in EONYX is a single tool, \u003ccode\u003etask\u003c/code\u003e. The model calls it when something has to be researched in the codebase without bloating the main conversation:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-3\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e● task  find every place the Store interface is used\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ⎿ 12 call sites in 4 packages: session/jsonl.go, agent/agent.go, …\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eThere is one argument — \u003ccode\u003edescription\u003c/code\u003e: a self-contained statement of the task with all the context it needs. The subagent \u003cstrong\u003ecannot ask clarifying questions\u003c/strong\u003e — it works autonomously and returns a finished answer.\u003c/p\u003e\n\u003ch3 id=\"what-a-subagent-can-and-cant-do\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#what-a-subagent-can-and-cant-do\" class=\"header-mark\"\u003e\u003c/a\u003e9.1 What a subagent can and can\u0026rsquo;t do\u003c/h3\u003e\u003cp\u003eThe child agent gets only the \u003cstrong\u003eread tools\u003c/strong\u003e: \u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003efetch\u003c/code\u003e. It cannot write files, run commands, or delegate any further:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eContext isolation.\u003c/strong\u003e The subagent will read dozens of files and return a short summary into the main conversation — the main context doesn\u0026rsquo;t get filled up.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSafety.\u003c/strong\u003e Read-only: a delegated task will not change the project.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNo recursion.\u003c/strong\u003e The subagent\u0026rsquo;s tool set has no \u003ccode\u003etask\u003c/code\u003e tool, so subagents don\u0026rsquo;t spawn subagents.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe child agent inherits the same model and step limit (\u003ccode\u003emax_steps\u003c/code\u003e) as the main one, and works with the same system prompt plus a note about its role: \u0026ldquo;you are a subagent, you work autonomously with read-only tools, at the end give a concise self-contained answer\u0026rdquo;.\u003c/p\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eWhen this is useful\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eParallel research\u003c/strong\u003e — you hand \u0026ldquo;figure out how authorization works\u0026rdquo; to \u003ccode\u003etask\u003c/code\u003e while you keep going on the main line yourself.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBroad searches\u003c/strong\u003e — \u0026ldquo;find every call of the deprecated API\u0026rdquo; returns a list instead of hundreds of lines in the context.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eReconnaissance before an edit\u003c/strong\u003e — the subagent collects the facts, the main agent makes the changes based on them.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"built-in-tools\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#built-in-tools\" class=\"header-mark\"\u003e\u003c/a\u003e10 Built-in tools\u003c/h2\u003e\u003cp\u003eBesides \u003ccode\u003etask\u003c/code\u003e, \u003ccode\u003eload_skill\u003c/code\u003e, and the MCP tools, EONYX registers \u003cstrong\u003e15 standard tools\u003c/strong\u003e. The registration order is the order in which they are offered to the model.\u003c/p\u003e\n\u003ch3 id=\"files\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#files\" class=\"header-mark\"\u003e\u003c/a\u003e10.1 Files\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eTool\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhat it does\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eread\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ereads a text file; optionally with a line offset and a limit\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ewrite\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ewrites a file, creating directories and overwriting; \u003ccode\u003edry_run\u003c/code\u003e shows a diff\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eedit\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ereplaces an exact substring; \u003ccode\u003ereplace_all\u003c/code\u003e — every occurrence, \u003ccode\u003edry_run\u003c/code\u003e — a preview\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003emulti_edit\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eseveral replacements in one file atomically: either all of them, or the file is untouched\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003els\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003elists the contents of a directory (directories with a \u003ccode\u003e/\u003c/code\u003e)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003epicker\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003enavigation through the project tree — browse and pick paths\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"search\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#search\" class=\"header-mark\"\u003e\u003c/a\u003e10.2 Search\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eTool\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhat it does\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eglob\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003efinds files by a glob pattern (\u003ccode\u003e**\u003c/code\u003e — recursive)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003egrep\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esearches contents with a regex, \u003ccode\u003epath:line:text\u003c/code\u003e; skips binaries and \u003ccode\u003e.git\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"execution-and-network\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#execution-and-network\" class=\"header-mark\"\u003e\u003c/a\u003e10.3 Execution and network\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eTool\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhat it does\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003ebash\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ea command in a persistent shell session; the output is stdout+stderr, the exit code is in the text\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003efetch\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003edownloads a web page: HTML → markdown, other text as is, binaries are rejected\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"git\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#git\" class=\"header-mark\"\u003e\u003c/a\u003e10.4 Git\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eTool\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhat it does\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003egit_status\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe working tree status (\u003ccode\u003egit status --short --branch\u003c/code\u003e)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003egit_diff\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ethe diff of uncommitted changes (or \u003ccode\u003estaged=true\u003c/code\u003e)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003egit_log\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003erecent commits, one per line (\u003ccode\u003egit log --oneline\u003c/code\u003e)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003egit_commit\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ea commit with a message; \u003ccode\u003eall=true\u003c/code\u003e stages tracked files first\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"organizing-the-work\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#organizing-the-work\" class=\"header-mark\"\u003e\u003c/a\u003e10.5 Organizing the work\u003c/h3\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eTool\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhat it does\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003etodo_write\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ekeeps a task list for multi-step work; the whole list is passed at once\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdiv class=\"details admonition note open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eTool errors are data\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eA tool error is returned to the model as a result with an error flag, not as a fatal failure. That way the model sees what went wrong and adapts — fixing the path and retrying, for example.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"an-in-process-shell\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#an-in-process-shell\" class=\"header-mark\"\u003e\u003c/a\u003e10.6 An in-process shell\u003c/h3\u003e\u003cp\u003eThe \u003ccode\u003ebash\u003c/code\u003e tool (and the hooks) work through the embedded \u003ccode\u003emvdan.cc/sh\u003c/code\u003e interpreter — \u003cstrong\u003ea system bash is not needed\u003c/strong\u003e, everything is cross-platform, Windows included. A single shell session \u003cstrong\u003ekeeps the working directory and the exported variables\u003c/strong\u003e between calls: \u003ccode\u003ecd\u003c/code\u003e and \u003ccode\u003eexport\u003c/code\u003e persist. A small set of dangerous commands is blocked at the policy level: \u003ccode\u003eshutdown\u003c/code\u003e, \u003ccode\u003ereboot\u003c/code\u003e, \u003ccode\u003ehalt\u003c/code\u003e, \u003ccode\u003epoweroff\u003c/code\u003e, \u003ccode\u003emkfs\u003c/code\u003e, \u003ccode\u003einit\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"how-the-agent-loop-works\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#how-the-agent-loop-works\" class=\"header-mark\"\u003e\u003c/a\u003e11 How the agent loop works\u003c/h2\u003e\u003cp\u003eA single agent turn (\u003ccode\u003eSend\u003c/code\u003e) is a loop of up to \u003ccode\u003emax_steps\u003c/code\u003e iterations (50 by default):\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eThe user message is recorded.\u003c/li\u003e\n\u003cli\u003eThe model\u0026rsquo;s response is streamed (text + tool calls).\u003c/li\u003e\n\u003cli\u003eIf there are no tool calls — this is the final answer, the turn is over.\u003c/li\u003e\n\u003cli\u003eOtherwise the tools are executed, the results are returned to the model, and the loop repeats.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eA couple of optimizations and guarantees:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eParallel reads.\u003c/strong\u003e Consecutive read-only calls (\u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003egit_status\u003c/code\u003e, \u003ccode\u003egit_diff\u003c/code\u003e, \u003ccode\u003egit_log\u003c/code\u003e) are executed in parallel; everything else runs sequentially. Results are always returned in the original order.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe write is the source of truth.\u003c/strong\u003e Every new message is saved into the session; a save error aborts the turn.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eA denial doesn\u0026rsquo;t break the conversation.\u003c/strong\u003e A tool blocked by the gate is returned to the model as an error, not as a crash.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe step limit.\u003c/strong\u003e If \u003ccode\u003emax_steps\u003c/code\u003e is hit without a final answer, EONYX says so honestly and offers to raise the limit (in headless mode this is exit code \u003ccode\u003e5\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e12 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etask\u003c/strong\u003e — delegates a research task to a subagent with read-only tools (\u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003els\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e, \u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003efetch\u003c/code\u003e); returns a condensed result without cluttering the context.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNo recursion\u003c/strong\u003e — the subagent has no \u003ccode\u003etask\u003c/code\u003e, so there will be no nesting; it inherits the parent\u0026rsquo;s model and \u003ccode\u003emax_steps\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e15 tools\u003c/strong\u003e — files (read/write/edit/multi_edit/ls/picker), search (glob/grep), execution (bash/fetch), git (status/diff/log/commit), tasks (todo_write).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAn in-process shell\u003c/strong\u003e — \u003ccode\u003emvdan/sh\u003c/code\u003e, no system bash; keeps cwd/env; blocks shutdown/reboot/mkfs and the like.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe loop\u003c/strong\u003e — up to \u003ccode\u003emax_steps\u003c/code\u003e rounds; parallel reads, the write as the source of truth, errors as data.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX Headless Mode: Running the Agent Without the TUI",
        "date_published" : "2026-05-19T00:00:00+03:00",
        "date_modified" : "2026-05-19T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-headless/",
        "url" : "https://eonyx.tech/blog/eonyx-headless/",
        "summary": "Besides the interactive TUI, EONYX can run headless — perform a task and exit. That is what you need for scripts, pipes and CI: predictable output, JSON events and meaningful exit codes.\n",
        "content_html" : "\u003cp\u003eBesides the interactive TUI, EONYX can run \u003cstrong\u003eheadless\u003c/strong\u003e — perform a task and exit. That is what you need for scripts, pipes and CI: predictable output, JSON events and meaningful exit codes.\u003c/p\u003e\n\u003ch2 id=\"running-it\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#running-it\" class=\"header-mark\"\u003e\u003c/a\u003e7 Running it\u003c/h2\u003e\u003cp\u003eEONYX runs without the TUI through a single \u003ccode\u003erun\u003c/code\u003e subcommand — with separated streams and saved sessions, so the conversation can be continued.\u003c/p\u003e\n\u003ch3 id=\"the-run-subcommand\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#the-run-subcommand\" class=\"header-mark\"\u003e\u003c/a\u003e7.1 The run subcommand\u003c/h3\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-15\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run \u003cspan class=\"s2\"\u003e\u0026#34;describe what this repository does\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run -m deepseek-v4-pro --yolo \u003cspan class=\"s2\"\u003e\u0026#34;fix the failing test\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eThe prompt comes from the arguments \u003cstrong\u003eor\u003c/strong\u003e from stdin. The argument wins: if it is given, stdin is not read — which is why, when piping, you do not duplicate the prompt as an argument:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-16\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run \u003cspan class=\"s2\"\u003e\u0026#34;explain the error in the log\u0026#34;\u003c/span\u003e                  \u003cspan class=\"c1\"\u003e# prompt from the argument\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;explain the error:\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e cat error.log\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"o\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e eonyx run \u003cspan class=\"c1\"\u003e# prompt from stdin\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eFlags: \u003ccode\u003e-m/--model\u003c/code\u003e, \u003ccode\u003e-s/--session \u0026lt;id\u0026gt;\u003c/code\u003e (continue a specific session), \u003ccode\u003e-c/--continue\u003c/code\u003e (continue the most recent one), \u003ccode\u003e--yolo\u003c/code\u003e (drop the permission gate), \u003ccode\u003e--json\u003c/code\u003e (events as NDJSON), \u003ccode\u003e--system-prompt\u003c/code\u003e (replace the system prompt).\u003c/p\u003e\n\u003ch3 id=\"stdout-versus-stderr\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#stdout-versus-stderr\" class=\"header-mark\"\u003e\u003c/a\u003e7.2 stdout versus stderr\u003c/h3\u003e\u003cp\u003eIn normal (text) mode the streams are separated — this makes the output convenient for pipes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003estdout\u003c/strong\u003e — only the final response text from the model (streamed).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estderr\u003c/strong\u003e — reasoning, tool activity (\u003ccode\u003e→ name\u003c/code\u003e, \u003ccode\u003e← result\u003c/code\u003e) and the summary line \u003ccode\u003e\\n[tokens: N in, M out] [session: \u0026lt;id\u0026gt;]\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSo you can safely redirect the result:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-17\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run \u003cspan class=\"s2\"\u003e\u0026#34;generate a README from the code\u0026#34;\u003c/span\u003e \u0026gt; README.draft.md\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch3 id=\"sessions\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#sessions\" class=\"header-mark\"\u003e\u003c/a\u003e7.3 Sessions\u003c/h3\u003e\u003cp\u003eHeadless runs are saved as sessions too, so the conversation can be continued:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-18\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run \u003cspan class=\"s2\"\u003e\u0026#34;start refactoring the parser\u0026#34;\u003c/span\u003e   \u003cspan class=\"c1\"\u003e# creates a session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run -c \u003cspan class=\"s2\"\u003e\u0026#34;now add tests\u0026#34;\u003c/span\u003e               \u003cspan class=\"c1\"\u003e# continues the most recent one\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx sessions                             \u003cspan class=\"c1\"\u003e# list: id, date, message count\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch2 id=\"for-ci-and-scripts\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#for-ci-and-scripts\" class=\"header-mark\"\u003e\u003c/a\u003e8 For CI and scripts\u003c/h2\u003e\u003cp\u003eFor automation EONYX gives you machine-readable output and meaningful exit codes.\u003c/p\u003e\n\u003ch3 id=\"json-mode\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#json-mode\" class=\"header-mark\"\u003e\u003c/a\u003e8.1 \u0026ndash;json mode\u003c/h3\u003e\u003cp\u003e\u003ccode\u003e--json\u003c/code\u003e prints \u003cstrong\u003eNDJSON\u003c/strong\u003e (one JSON record per line) to stdout — convenient to parse in a pipeline:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-19\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run --json \u003cspan class=\"s2\"\u003e\u0026#34;fix the test\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e jq -c \u003cspan class=\"s1\"\u003e\u0026#39;select(.type==\u0026#34;tool_end\u0026#34;)\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eEvent types: \u003ccode\u003etext\u003c/code\u003e, \u003ccode\u003ereasoning\u003c/code\u003e, \u003ccode\u003etool_start\u003c/code\u003e (\u003ccode\u003ename\u003c/code\u003e, \u003ccode\u003einput\u003c/code\u003e), \u003ccode\u003etool_end\u003c/code\u003e (\u003ccode\u003ename\u003c/code\u003e, \u003ccode\u003eresult\u003c/code\u003e, \u003ccode\u003eis_error\u003c/code\u003e) and the final \u003ccode\u003eresult\u003c/code\u003e (\u003ccode\u003etext\u003c/code\u003e, \u003ccode\u003einput_tokens\u003c/code\u003e, \u003ccode\u003eoutput_tokens\u003c/code\u003e, \u003ccode\u003ecached_tokens\u003c/code\u003e, \u003ccode\u003esession\u003c/code\u003e).\u003c/p\u003e\n\u003ch3 id=\"exit-codes\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#exit-codes\" class=\"header-mark\"\u003e\u003c/a\u003e8.2 Exit codes\u003c/h3\u003e\u003cp\u003eFor CI it matters to tell outcomes apart — EONYX returns meaningful codes:\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eCode\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eMeaning\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e0\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003esuccess\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e1\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003egeneral error (config, provider, persistence)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e2\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eusage error (invalid arguments)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e3\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eAPI/model error during streaming\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e4\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003etask finished, but a tool was \u003cstrong\u003eblocked\u003c/strong\u003e by the gate\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e5\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ehit the \u003ccode\u003emax_steps\u003c/code\u003e limit without a final answer\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e130\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003einterrupted (Ctrl-C)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-20\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run --yolo \u003cspan class=\"s2\"\u003e\u0026#34;run the linter and fix the findings\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;exit \u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCodes 4 and 5 are not “just an error”\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eCode \u003ccode\u003e4\u003c/code\u003e means the agent wanted to perform an action but had no permission — add the tool to \u003ccode\u003eallowed_tools\u003c/code\u003e or run with \u003ccode\u003e--yolo\u003c/code\u003e. Code \u003ccode\u003e5\u003c/code\u003e means the task did not fit into \u003ccode\u003emax_steps\u003c/code\u003e; raise the limit in the config.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"a-ci-example\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#a-ci-example\" class=\"header-mark\"\u003e\u003c/a\u003e8.3 A CI example\u003c/h3\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-21\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/usr/bin/env bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e -euo pipefail\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eDEEPSEEK_API_KEY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$CI_LLM_KEY\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run --yolo --json \u003cspan class=\"s2\"\u003e\u0026#34;run go test ./... and fix the failing tests\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e|\u003c/span\u003e tee agent.log \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e|\u003c/span\u003e jq -r \u003cspan class=\"s1\"\u003e\u0026#39;select(.type==\u0026#34;result\u0026#34;) | .text\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e9 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRunning it\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eeonyx run \u0026quot;…\u0026quot;\u003c/code\u003e — prompt from the arguments or stdin (pipe)\u003c/li\u003e\n\u003cli\u003eflags \u003ccode\u003e-m\u003c/code\u003e, \u003ccode\u003e--yolo\u003c/code\u003e, \u003ccode\u003e--system-prompt\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003estdout — only the model\u0026rsquo;s final answer\u003c/li\u003e\n\u003cli\u003estderr — tool activity and token stats\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003e--json\u003c/code\u003e\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eNDJSON events: \u003ccode\u003etext\u003c/code\u003e/\u003ccode\u003ereasoning\u003c/code\u003e/\u003ccode\u003etool_start\u003c/code\u003e/\u003ccode\u003etool_end\u003c/code\u003e/\u003ccode\u003eresult\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003econvenient to parse with \u003ccode\u003ejq\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eExit codes\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003edistinguish success from an API error (3)\u003c/li\u003e\n\u003cli\u003epermission block (4), \u003ccode\u003emax_steps\u003c/code\u003e limit (5)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSessions\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eheadless runs are saved\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-c\u003c/code\u003e continues the most recent one, \u003ccode\u003e-s \u0026lt;id\u0026gt;\u003c/code\u003e a specific one\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    {
        "title" : "EONYX recipes: practical workflows",
        "date_published" : "2026-05-18T00:00:00+03:00",
        "date_modified" : "2026-05-18T00:00:00+03:00",
        "id" : "https://eonyx.tech/blog/eonyx-recipes/",
        "url" : "https://eonyx.tech/blog/eonyx-recipes/",
        "summary": "Features are nice, but it is more interesting to see them at work. A few practical scenarios: how to phrase the task and which EONYX techniques to turn on. The prompts are deliberately plain.\n",
        "content_html" : "\u003cp\u003eFeatures are nice, but it is more interesting to see them at work. A few practical scenarios: how to phrase the task and which EONYX techniques to turn on. The prompts are deliberately plain.\u003c/p\u003e\n\u003ch2 id=\"working-with-code\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#working-with-code\" class=\"header-mark\"\u003e\u003c/a\u003e1 Working with code\u003c/h2\u003e\u003cp\u003eThree common tasks in interactive mode: understand someone else\u0026rsquo;s code, fix a test and carefully rewrite a module.\u003c/p\u003e\n\u003ch3 id=\"understand-unfamiliar-code\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#understand-unfamiliar-code\" class=\"header-mark\"\u003e\u003c/a\u003e1.1 Understand unfamiliar code\u003c/h3\u003e\u003cp\u003eStart with a plan so the agent explores first instead of jumping into edits:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-1\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/plan\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efigure out how authorization works in this repository,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eand put together a short map: where the entry point is, where sessions are stored\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eIn plan mode only reading is available, so the agent walks over the code safely (\u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003eread\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e) and proposes a plan or a summary. Heavy exploration can be delegated to a subagent so it does not clutter the context:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-2\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evia task: find every place where the Store interface is called and return a list\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cdiv class=\"details admonition tip open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eKeep an AGENTS.md\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003eIf you add an \u003ccode\u003eAGENTS.md\u003c/code\u003e with the project stack and rules, the agent will take them into account from the very first message — less to explain every time.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch3 id=\"fix-a-failing-test\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#fix-a-failing-test\" class=\"header-mark\"\u003e\u003c/a\u003e1.2 Fix a failing test\u003c/h3\u003e\u003cp\u003eLet the agent run commands and make edits — the simplest way is headless with \u003ccode\u003e--yolo\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-3\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run --yolo \u003cspan class=\"s2\"\u003e\u0026#34;run go test ./... , find the cause of the failure and fix it without touching the public API\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eOr in the TUI: allow the tools you need and ask. It helps to show the output first:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-4\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e! go test ./...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efix the failure above with a minimal change\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eA command run via \u003ccode\u003e!\u003c/code\u003e is recorded into the conversation, so the model sees the real test output.\u003c/p\u003e\n\u003ch3 id=\"refactor-a-module\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#refactor-a-module\" class=\"header-mark\"\u003e\u003c/a\u003e1.3 Refactor a module\u003c/h3\u003e\u003cp\u003eFork the session as a save point, then drive the edits iteratively:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003etext\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-5\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/fork\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emove config parsing out of main.go into a separate config package,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epreserve the behavior, update the imports and run go build ./...\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eIf something goes wrong, you can return to the original session from the list (\u003ccode\u003eCtrl+S\u003c/code\u003e). Auto-formatting can be attached as a hook so you do not have to ask every time:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ejson\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-6\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hooks\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;edit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gofmt -w .\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;write\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gofmt -w .\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch2 id=\"automating-routine-work\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#automating-routine-work\" class=\"header-mark\"\u003e\u003c/a\u003e2 Automating routine work\u003c/h2\u003e\u003cp\u003eRepeated operations are worth setting up once — as a skill, a hook or a pipe in a script.\u003c/p\u003e\n\u003ch3 id=\"prepare-a-release\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#prepare-a-release\" class=\"header-mark\"\u003e\u003c/a\u003e2.1 Prepare a release\u003c/h3\u003e\u003cp\u003eCollect the checklist as a skill so you do not have to repeat it:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003emarkdown\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-7\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ename: release\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edescription: Release checklist. Use when asked to prepare a release, ship it, or cut a tag.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e git_status — the tree is clean, the branch is main.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e2.\u003c/span\u003e go test ./... and go vet ./... — green.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3. Propose the next tag from git describe --tags; do NOT push without confirmation.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eAfter that \u0026ldquo;prepare a release\u0026rdquo; is enough — the agent loads the skill and follows the steps. The ban on pushing without confirmation can be duplicated with a guardrail hook on the \u003ccode\u003ebash\u003c/code\u003e tool — that is how the agent invokes \u003ccode\u003egit push\u003c/code\u003e (the \u003ccode\u003egit_commit\u003c/code\u003e tool only commits).\u003c/p\u003e\n\u003ch3 id=\"a-one-off-task-in-a-script\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#a-one-off-task-in-a-script\" class=\"header-mark\"\u003e\u003c/a\u003e2.2 A one-off task in a script\u003c/h3\u003e\u003cp\u003eEONYX is easy to embed in a pipe: the result goes to stdout, everything auxiliary to stderr.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-8\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# generate a draft README from the code\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run \u003cspan class=\"s2\"\u003e\u0026#34;write a README for this repository, short and to the point\u0026#34;\u003c/span\u003e \u0026gt; README.draft.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# explain an error from the log (the argument takes priority over stdin,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# so the prompt and the log are fed to stdin as a single stream)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;explain the cause of the error and suggest a fix:\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e cat error.log\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"o\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e eonyx run\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eFor machine parsing — \u003ccode\u003e--json\u003c/code\u003e and \u003ccode\u003ejq\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw:group tw:my-2\"\u003e\r\n  \u003cdiv class=\"\r\n    \r\n    tw:flex \r\n    tw:flex-row\r\n    tw:flex-1 \r\n    tw:justify-between \r\n    tw:w-full tw:bg-[var(--code-background-color-code-header)]\r\n    \"\u003e      \r\n    \u003cbutton \r\n      class=\"\r\n        code-block-button\r\n        tw:mx-2 \r\n        tw:flex\r\n        tw:flex-row\r\n        tw:flex-1\"\r\n      aria-hidden=\"true\"\u003e\r\n          \u003cspan class=\"tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"tw:select-none tw:my-1! tw:block\"\u003ebash\u003c/span\u003e\r\n      \u003c/button\u003e\r\n\r\n   \u003cdiv class=\"tw:flex\"\u003e\r\n      \u003cbutton \r\n        class=\"\r\n          line-number-button\r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.show-line-numbers]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n      \u003cbutton \r\n        class=\"\r\n          wrap-code-button\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:hidden \r\n          tw:group-[.is-open]:block \r\n          tw:group-[.is-wrap]:text-fgColor-link \r\n          tw:print:hidden!\" \r\n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n      \r\n      \u003cbutton \r\n        class=\"\r\n          copy-code-button\r\n          tw:select-none\r\n          tw:mx-2 \r\n          tw:hidden\r\n          tw:group-[.is-open]:block\r\n          tw:hover:text-fgColor-link \r\n          tw:print:hidden!\"\r\n        title=\"Copy code\"\u003e\r\n          \u003cspan class=\"copy-icon tw:block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n          \u003cspan class=\"check-icon tw:hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n      \u003c/button\u003e\r\n        \r\n      \u003cbutton \r\n        class=\"\r\n          tw:select-none \r\n          tw:mx-2 \r\n          tw:block \r\n          tw:group-[.is-open]:hidden \r\n          tw:print:hidden!\" \r\n        disabled\r\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n    \u003c/div\u003e\r\n  \u003c/div\u003e\r\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw:block tw:m-0 tw:p-0\"\u003e\u003ccode \r\n    id=\"codeblock-id-9\" \r\n    class=\"\r\n      chroma \r\n      tw:block! \r\n      tw:p-0\r\n      tw:m-0\r\n      tw:transition-[max-height] \r\n      tw:duration-500 \r\n      tw:ease-in-out \r\n      tw:group-[.is-closed]:max-h-0! \r\n      tw:group-[.is-wrap]:text-wrap\r\n      tw:overflow-y-hidden\r\n      tw:overflow-x-auto\r\n      tw:scrollbar-thin\r\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeonyx run --yolo --json \u003cspan class=\"s2\"\u003e\u0026#34;run the linter and fix the warnings\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e jq -r \u003cspan class=\"s1\"\u003e\u0026#39;select(.type==\u0026#34;result\u0026#34;).text\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\r\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003e3 Summary\u003c/h2\u003e\u003cdiv class=\"details admonition abstract open\"\u003e\r\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\r\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eCheat sheet\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n    \u003c/div\u003e\r\n    \u003cdiv class=\"details-content\"\u003e\r\n        \u003cdiv class=\"admonition-content\"\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eExploration\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/plan\u003c/code\u003e — read-only, a safe walk over the code\u003c/li\u003e\n\u003cli\u003edelegate via \u003ccode\u003etask\u003c/code\u003e, keep an \u003ccode\u003eAGENTS.md\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixing\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--yolo\u003c/code\u003e in headless mode or a \u003ccode\u003e!\u003c/code\u003e command in the TUI\u003c/li\u003e\n\u003cli\u003ethe model sees the real test output\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRefactoring\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/fork\u003c/code\u003e as a save point\u003c/li\u003e\n\u003cli\u003eauto-formatting via an \u003ccode\u003eafter\u003c/code\u003e hook\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRelease\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eput the checklist into a skill\u003c/li\u003e\n\u003cli\u003ethe ban on pushing — a hook on \u003ccode\u003ebash\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eScripts\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003estdout = result, stderr = auxiliary output\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--json\u003c/code\u003e + \u003ccode\u003ejq\u003c/code\u003e for machine parsing\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e",
        "language": "en"
    },
    ]
}
