[{"data":1,"prerenderedAt":477},["ShallowReactive",2],{"navigation_docs":3,"-quayel-gateway-ai-installation":91,"-quayel-gateway-ai-installation-surround":472},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":90},"Quayel Gateway","i-lucide-network","\u002Fquayel-gateway","quayel-gateway",[10,29,68],{"title":11,"icon":12,"path":13,"stem":14,"children":15},"Getting Started","i-lucide-rocket","\u002Fquayel-gateway\u002Fgetting-started","quayel-gateway\u002F01.getting-started\u002Findex",[16,19,24],{"title":17,"path":13,"stem":14,"icon":18},"Introduction","i-lucide-book-open",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fquayel-gateway\u002Fgetting-started\u002Finstallation","quayel-gateway\u002F01.getting-started\u002F1.installation","i-lucide-container",{"title":25,"path":26,"stem":27,"icon":28},"Project Structure","\u002Fquayel-gateway\u002Fgetting-started\u002Fproject-structure","quayel-gateway\u002F01.getting-started\u002F2.project-structure","i-lucide-folder-tree",{"title":30,"icon":31,"path":32,"stem":33,"children":34},"Plugins","i-lucide-puzzle","\u002Fquayel-gateway\u002Fplugins","quayel-gateway\u002F02.plugins\u002Findex",[35,38,43,48,53,58,63],{"title":36,"path":32,"stem":33,"icon":37},"Overview","i-lucide-workflow",{"title":39,"path":40,"stem":41,"icon":42},"IP Intelligence","\u002Fquayel-gateway\u002Fplugins\u002Fip-intel","quayel-gateway\u002F02.plugins\u002F1.ip-intel","i-lucide-radar",{"title":44,"path":45,"stem":46,"icon":47},"Firewall","\u002Fquayel-gateway\u002Fplugins\u002Ffirewall","quayel-gateway\u002F02.plugins\u002F2.firewall","i-lucide-shield",{"title":49,"path":50,"stem":51,"icon":52},"Rate Limiting","\u002Fquayel-gateway\u002Fplugins\u002Frate-limiting","quayel-gateway\u002F02.plugins\u002F3.rate-limiting","i-lucide-gauge",{"title":54,"path":55,"stem":56,"icon":57},"Cache","\u002Fquayel-gateway\u002Fplugins\u002Fcache","quayel-gateway\u002F02.plugins\u002F4.cache","i-lucide-database",{"title":59,"path":60,"stem":61,"icon":62},"Load Balancer","\u002Fquayel-gateway\u002Fplugins\u002Fload-balancer","quayel-gateway\u002F02.plugins\u002F5.load-balancer","i-lucide-scale",{"title":64,"path":65,"stem":66,"icon":67},"Auto-SSL","\u002Fquayel-gateway\u002Fplugins\u002Fauto-ssl","quayel-gateway\u002F02.plugins\u002F6.auto-ssl","i-lucide-lock",{"title":69,"icon":70,"path":71,"stem":72,"children":73},"AI","i-lucide-bot","\u002Fquayel-gateway\u002Fai","quayel-gateway\u002F03.ai\u002Findex",[74,75,80,85],{"title":36,"path":71,"stem":72,"icon":70},{"title":76,"path":77,"stem":78,"icon":79},"The Quayel Gateway Skill","\u002Fquayel-gateway\u002Fai\u002Fskill","quayel-gateway\u002F03.ai\u002F1.skill","i-lucide-wand-sparkles",{"title":81,"path":82,"stem":83,"icon":84},"Installing the Skill","\u002Fquayel-gateway\u002Fai\u002Finstallation","quayel-gateway\u002F03.ai\u002F2.installation","i-lucide-download",{"title":86,"path":87,"stem":88,"icon":89},"AI Agent Guide","\u002Fquayel-gateway\u002Fai\u002Fagent-guide","quayel-gateway\u002F03.ai\u002F3.agent-guide","i-lucide-braces",false,{"id":92,"title":81,"body":93,"description":465,"extension":466,"links":467,"meta":468,"navigation":469,"path":82,"seo":470,"stem":83,"__hash__":471},"docs\u002Fquayel-gateway\u002F03.ai\u002F2.installation.md",{"type":94,"value":95,"toc":454},"minimark",[96,100,127,132,139,210,216,252,255,259,273,295,315,335,339,406,410,440,444,450],[97,98,81],"h1",{"id":99},"installing-the-skill",[101,102,103,104,108,109,112,113,120,121,126],"p",{},"The skill is one folder — ",[105,106,107],"code",{},"skills\u002Fquayel-gateway\u002F"," containing a single ",[105,110,111],{},"SKILL.md"," — from the ",[114,115,119],"a",{"href":116,"rel":117},"https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway",[118],"nofollow","Quayel-Gateway"," repository. Any tool that supports the ",[114,122,125],{"href":123,"rel":124},"https:\u002F\u002Fagentskills.io",[118],"Agent Skills"," format can use it.",[128,129,131],"h2",{"id":130},"claude-code","Claude Code",[101,133,134,138],{},[135,136,137],"strong",{},"Project scope"," — shared with your team through git (recommended for a gateway config repo):",[140,141,146],"pre",{"className":142,"code":143,"language":144,"meta":145,"style":145},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone --depth 1 https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway.git\nmkdir -p .claude\u002Fskills\ncp -r Quayel-Gateway\u002Fskills\u002Fquayel-gateway .claude\u002Fskills\u002F\nrm -rf Quayel-Gateway\n","bash","",[105,147,148,171,183,198],{"__ignoreMap":145},[149,150,153,157,161,164,168],"span",{"class":151,"line":152},"line",1,[149,154,156],{"class":155},"sBMFI","git",[149,158,160],{"class":159},"sfazB"," clone",[149,162,163],{"class":159}," --depth",[149,165,167],{"class":166},"sbssI"," 1",[149,169,170],{"class":159}," https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway.git\n",[149,172,174,177,180],{"class":151,"line":173},2,[149,175,176],{"class":155},"mkdir",[149,178,179],{"class":159}," -p",[149,181,182],{"class":159}," .claude\u002Fskills\n",[149,184,186,189,192,195],{"class":151,"line":185},3,[149,187,188],{"class":155},"cp",[149,190,191],{"class":159}," -r",[149,193,194],{"class":159}," Quayel-Gateway\u002Fskills\u002Fquayel-gateway",[149,196,197],{"class":159}," .claude\u002Fskills\u002F\n",[149,199,201,204,207],{"class":151,"line":200},4,[149,202,203],{"class":155},"rm",[149,205,206],{"class":159}," -rf",[149,208,209],{"class":159}," Quayel-Gateway\n",[101,211,212,215],{},[135,213,214],{},"User scope"," — available in all your projects:",[140,217,219],{"className":142,"code":218,"language":144,"meta":145,"style":145},"git clone --depth 1 https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway.git\ncp -r Quayel-Gateway\u002Fskills\u002Fquayel-gateway ~\u002F.claude\u002Fskills\u002F\nrm -rf Quayel-Gateway\n",[105,220,221,233,244],{"__ignoreMap":145},[149,222,223,225,227,229,231],{"class":151,"line":152},[149,224,156],{"class":155},[149,226,160],{"class":159},[149,228,163],{"class":159},[149,230,167],{"class":166},[149,232,170],{"class":159},[149,234,235,237,239,241],{"class":151,"line":173},[149,236,188],{"class":155},[149,238,191],{"class":159},[149,240,194],{"class":159},[149,242,243],{"class":159}," ~\u002F.claude\u002Fskills\u002F\n",[149,245,246,248,250],{"class":151,"line":185},[149,247,203],{"class":155},[149,249,206],{"class":159},[149,251,209],{"class":159},[101,253,254],{},"Claude Code discovers skills in these directories automatically — no other configuration is needed. Start a new session and the skill activates whenever you ask for gateway configuration work.",[128,256,258],{"id":257},"other-agents-and-tools","Other agents and tools",[101,260,261,262,264,265,268,269,272],{},"The package follows the Agent Skills standard (a folder with ",[105,263,111],{}," and YAML ",[105,266,267],{},"name","\u002F",[105,270,271],{},"description"," frontmatter), so any compatible tool works:",[140,274,276],{"className":142,"code":275,"language":144,"meta":145,"style":145},"# e.g. a tool that reads skills from .agents\u002Fskills\u002F\ncp -r Quayel-Gateway\u002Fskills\u002Fquayel-gateway .agents\u002Fskills\u002F\n",[105,277,278,284],{"__ignoreMap":145},[149,279,280],{"class":151,"line":152},[149,281,283],{"class":282},"sHwdD","# e.g. a tool that reads skills from .agents\u002Fskills\u002F\n",[149,285,286,288,290,292],{"class":151,"line":173},[149,287,188],{"class":155},[149,289,191],{"class":159},[149,291,194],{"class":159},[149,293,294],{"class":159}," .agents\u002Fskills\u002F\n",[101,296,297,298,300,301,304,305,308,309,311,312,314],{},"Copy ",[105,299,107],{}," into whatever skills directory your tool documents (",[105,302,303],{},".agents\u002Fskills\u002F",", ",[105,306,307],{},"~\u002F.agents\u002Fskills\u002F",", or a configured skills path). The skill's ",[105,310,267],{}," is ",[105,313,8],{},".",[101,316,317,320,321,327,328,330,331,334],{},[135,318,319],{},"Tools without skills support:"," paste ",[114,322,325],{"href":323,"rel":324},"https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway\u002Fblob\u002Fmain\u002Fskills\u002Fquayel-gateway\u002FSKILL.md",[118],[105,326,111],{}," into the conversation, or point the agent at the ",[114,329,86],{"href":87}," — it contains the same contract in full. Working inside the repository? ",[105,332,333],{},"AGENTS.md"," already directs agents to the right files.",[128,336,338],{"id":337},"verify-the-install","Verify the install",[340,341,342,347,355,359,388,392],"steps",{},[343,344,346],"h3",{"id":345},"_1-ask-for-a-config","1. Ask for a config",[140,348,353],{"className":349,"code":351,"language":352,"meta":145},[350],"language-text","Create a quayel gateway config that proxies api.example.com to 127.0.0.1:3000\n","text",[105,354,351],{"__ignoreMap":145},[343,356,358],{"id":357},"_2-check-the-response","2. Check the response",[101,360,361,362,365,366,304,369,304,372,304,375,304,378,304,381,384,385,314],{},"The agent should produce a complete ",[105,363,364],{},"config.json"," with all required top-level fields (",[105,367,368],{},"gateway_id",[105,370,371],{},"gateway_name",[105,373,374],{},"server_name",[105,376,377],{},"config_version",[105,379,380],{},"listen",[105,382,383],{},"plugins",") and exact snake_case enums — no invented values like ",[105,386,387],{},"\"health_check\": {\"mode\": \"http\"}",[343,389,391],{"id":390},"_3-check-the-validation-loop","3. Check the validation loop",[101,393,394,395,398,399,402,403,405],{},"A well-behaved run validates before declaring success: JSON syntax → ",[105,396,397],{},"config.schema.json"," → the gateway's own parser (",[105,400,401],{},"timeout -k 2 3 .\u002Ftarget\u002Frelease\u002Fquayel-gateway config.json",") → smoke test. See the ",[114,404,86],{"href":87}," for the loop.",[128,407,409],{"id":408},"example-prompts","Example prompts",[411,412,413,420,425,430,435],"ul",{},[414,415,416],"li",{},[417,418,419],"em",{},"\"Add a rate limit: 100 requests per minute per IP on \u002Fapi\u002F only.\"",[414,421,422],{},[417,423,424],{},"\"Block Tor, VPN, and datacenter IPs from \u002Fadmin, but allow my office IP.\"",[414,426,427],{},[417,428,429],{},"\"Cache static assets for 1 hour at the edge and 5 minutes in the browser.\"",[414,431,432],{},[417,433,434],{},"\"Why isn't my cache rule firing? Here is the config and a log line…\"",[414,436,437],{},[417,438,439],{},"\"Convert this nginx location block into a quayel config.\"",[128,441,443],{"id":442},"keeping-the-skill-current","Keeping the skill current",[101,445,446,447,449],{},"The skill ships with the gateway repository and is versioned alongside the binary. When you upgrade Quayel Gateway, re-copy ",[105,448,107],{}," from the matching release so new fields and enum values are covered.",[451,452,453],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":145,"searchDepth":173,"depth":173,"links":455},[456,457,458,463,464],{"id":130,"depth":173,"text":131},{"id":257,"depth":173,"text":258},{"id":337,"depth":173,"text":338,"children":459},[460,461,462],{"id":345,"depth":185,"text":346},{"id":357,"depth":185,"text":358},{"id":390,"depth":185,"text":391},{"id":408,"depth":173,"text":409},{"id":442,"depth":173,"text":443},"Add the Quayel Gateway skill to Claude Code or any Agent Skills compatible tool — project-scoped or user-wide.","md",null,{},{"icon":84},{"title":81,"description":465},"fzFbnOlFt5haMImGtoldFsNOE4KVj19sr8OfbnlBq9g",[473,475],{"title":76,"path":77,"stem":78,"description":474,"icon":79,"children":-1},"A portable Agent Skills package (SKILL.md) that teaches any AI tool to generate, validate, and troubleshoot Quayel Gateway configs.",{"title":86,"path":87,"stem":88,"description":476,"icon":89,"children":-1},"Machine-oriented contract for generating, validating, and operating Quayel Gateway configs.",1791649767383]