<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Krypton Runtime</title><link>https://www.kryptonhq.com/</link><description>Recent content on Krypton Runtime</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.kryptonhq.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent CRD</title><link>https://www.kryptonhq.com/docs/reference/agent-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/reference/agent-crd/</guid><description>&lt;p&gt;&lt;code&gt;apiVersion: krypton.ai/v1alpha1&lt;/code&gt;, &lt;code&gt;kind: Agent&lt;/code&gt;, namespaced
(short name &lt;code&gt;ag&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="minimal-example"&gt;Minimal example&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;apiVersion&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton.ai/v1alpha1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;kind&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Agent&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;metadata&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;travel&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;namespace&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;agents&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;spec&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;image&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;ghcr.io/org/travel-agent:latest&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s the smallest valid Agent. Everything else has a default.&lt;/p&gt;
&lt;h2 id="full-example"&gt;Full example&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;apiVersion&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton.ai/v1alpha1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;kind&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Agent&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;metadata&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;travel&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;namespace&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;agents&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;spec&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Container&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;image&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;ghcr.io/org/travel-agent:latest&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;imagePullPolicy&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;IfNotPresent&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;imagePullSecrets&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;ghcr-secret&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Metadata (informational — surfaced in UI + metrics)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;runtime&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;python&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;framework&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;langgraph&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Wire protocol the agent speaks&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;protocol&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;a2a &lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# a2a | mcp | http&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Mode&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;mode&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;always-on &lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# always-on (default); scale-from-zero is on the roadmap&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Scaling&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;minReplicas&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;maxReplicas&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;10&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;concurrency&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;8&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# in-flight requests per pod&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Networking&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;port&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;8080&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;invocationPath&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;/a2a&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Pod&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;resources&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;requests&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;{&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;cpu: 100m, memory&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;256Mi }&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;limits&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;{&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;cpu: 1000m, memory&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;1Gi }&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;env&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- {&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name: LOG_LEVEL, value&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;info }&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;envFrom&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;secretRef&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;{&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;travel-secrets }&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;serviceAccountName&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# blank = auto-create&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# Lifecycle&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;timeout&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;60s &lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# per-invocation&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;startupTimeout&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;30s &lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# cold-start grace&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="spec-reference"&gt;Spec reference&lt;/h2&gt;
&lt;h3 id="container"&gt;Container&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Default&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string (required)&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;Container image, including registry + tag&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;imagePullPolicy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;IfNotPresent&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Standard K8s pull policy&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;imagePullSecrets&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[]corev1.LocalObjectReference&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;Same shape as a pod&amp;rsquo;s &lt;code&gt;imagePullSecrets&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="metadata"&gt;Metadata&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Default&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;runtime&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;Informational (&lt;code&gt;python&lt;/code&gt;, &lt;code&gt;node&lt;/code&gt;, &lt;code&gt;go&lt;/code&gt;, &amp;hellip;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;framework&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;Informational (&lt;code&gt;langgraph&lt;/code&gt;, &lt;code&gt;crewai&lt;/code&gt;, &amp;hellip;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;protocol&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;a2a&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;One of &lt;code&gt;a2a&lt;/code&gt;, &lt;code&gt;mcp&lt;/code&gt;, &lt;code&gt;http&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="mode--scaling"&gt;Mode + scaling&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Default&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;always-on&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Currently &lt;code&gt;always-on&lt;/code&gt; only; scale-from-zero is on the &lt;a href="https://www.kryptonhq.com/docs/roadmap/"&gt;roadmap&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;minReplicas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int32 (≥ 1)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Always-on floor&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;maxReplicas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int32 (≥ 1)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Must be ≥ &lt;code&gt;minReplicas&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;concurrency&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int32 (≥ 1)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;In-flight requests per pod cap (enforced by sidecar)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="networking"&gt;Networking&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Default&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int32 (1–65535)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;User container&amp;rsquo;s listen port&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;invocationPath&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Path the gateway forwards invocations to (prefix-stripped)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="pod"&gt;Pod&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Default&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;resources&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;corev1.ResourceRequirements&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;Same as a pod&amp;rsquo;s &lt;code&gt;resources&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;env&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[]corev1.EnvVar&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;Passed to user container&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;envFrom&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[]corev1.EnvFromSource&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;Same&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;serviceAccountName&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Empty = auto-created SA with minimal permissions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="lifecycle"&gt;Lifecycle&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Default&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;timeout&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;duration&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;60s&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bounds a single invocation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;startupTimeout&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;duration&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;30s&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Activator&amp;rsquo;s cold-start grace; gateway returns 504 if exceeded&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="status-read-only"&gt;Status (read-only)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Written by&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;phase&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;enum&lt;/td&gt;
 &lt;td&gt;Manager&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;replicas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int32&lt;/td&gt;
 &lt;td&gt;Manager&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;readyReplicas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int32&lt;/td&gt;
 &lt;td&gt;Manager&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;desiredReplicas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int32&lt;/td&gt;
 &lt;td&gt;Scaler + activator&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;Manager&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lastInvocationAt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;time&lt;/td&gt;
 &lt;td&gt;Gateway&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;observedGeneration&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int64&lt;/td&gt;
 &lt;td&gt;Manager&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;conditions&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[]Cond.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Manager&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phases"&gt;Phases&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Phase&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Pending&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;At least one desired replica, none ready yet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ready&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;At least one replica ready, OR scaled to zero&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Scaling&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;(reserved; not currently emitted)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Failed&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Persistent reconcile errors (e.g. crashloop)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="validation"&gt;Validation&lt;/h2&gt;
&lt;p&gt;Beyond OpenAPI defaults, the (optional) validating webhook enforces:&lt;/p&gt;</description></item><item><title>Architecture</title><link>https://www.kryptonhq.com/docs/concepts/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/concepts/architecture/</guid><description>&lt;p&gt;Krypton is composed of four binaries:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Manager&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Kubernetes operator. Reconciles &lt;code&gt;Agent&lt;/code&gt; CRs → Deployments + Services + ServiceAccounts. Runs the scaling decider.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Control plane&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Read-only HTTP API + the operator UI. Optionally mirrors agents into Postgres for offline querying.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Gateway&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Public ingress. Reverse-proxies invocations to the agent&amp;rsquo;s in-cluster Service.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Sidecar&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Per-pod &lt;code&gt;krypton-proxy&lt;/code&gt;. Enforces concurrency, surfaces in-flight count, exposes Prometheus metrics.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="high-level-diagram"&gt;High-level diagram&lt;/h2&gt;
&lt;pre class="mermaid"&gt;%%{init: {&amp;#34;theme&amp;#34;: &amp;#34;base&amp;#34;, &amp;#34;flowchart&amp;#34;: {&amp;#34;nodeSpacing&amp;#34;: 70, &amp;#34;rankSpacing&amp;#34;: 80, &amp;#34;diagramPadding&amp;#34;: 24}, &amp;#34;themeVariables&amp;#34;: {&amp;#34;fontFamily&amp;#34;: &amp;#34;Inter, ui-sans-serif, system-ui, sans-serif&amp;#34;, &amp;#34;primaryColor&amp;#34;: &amp;#34;#eef2ff&amp;#34;, &amp;#34;primaryTextColor&amp;#34;: &amp;#34;#1f2937&amp;#34;, &amp;#34;primaryBorderColor&amp;#34;: &amp;#34;#6366f1&amp;#34;, &amp;#34;lineColor&amp;#34;: &amp;#34;#64748b&amp;#34;, &amp;#34;secondaryColor&amp;#34;: &amp;#34;#ecfeff&amp;#34;, &amp;#34;tertiaryColor&amp;#34;: &amp;#34;#f8fafc&amp;#34;}}}%%
flowchart TB
 client[&amp;#34;Client&amp;#34;]
 ui[&amp;#34;Krypton UI&amp;lt;br/&amp;gt;Operator console&amp;#34;]
 cp[&amp;#34;Control plane&amp;lt;br/&amp;gt;REST API and cache&amp;#34;]
 gw[&amp;#34;Gateway&amp;lt;br/&amp;gt;Ingress and activator&amp;#34;]
 mgr[&amp;#34;Manager&amp;lt;br/&amp;gt;Controller&amp;#34;]
 scaler[&amp;#34;Scaler&amp;lt;br/&amp;gt;Replica decisions&amp;#34;]

 subgraph pod[&amp;#34;Agent pod&amp;#34;]
 proxy[&amp;#34;krypton-proxy&amp;lt;br/&amp;gt;Concurrency and metrics&amp;#34;]
 app[&amp;#34;User agent container&amp;#34;]
 proxy --&amp;gt;|&amp;#34;proxy&amp;#34;| app
 end

 ui --&amp;gt;|&amp;#34;REST&amp;#34;| cp
 client --&amp;gt;|&amp;#34;invoke&amp;#34;| gw
 gw --&amp;gt;|&amp;#34;proxy request&amp;#34;| proxy
 cp --&amp;gt;|&amp;#34;watch&amp;#34;| mgr
 mgr --&amp;gt;|&amp;#34;owns&amp;#34;| pod
 scaler --&amp;gt;|&amp;#34;scale&amp;#34;| pod
 scaler -. &amp;#34;in-flight&amp;#34; .-&amp;gt; proxy

 classDef external fill:#f8fafc,stroke:#94a3b8,color:#0f172a;
 classDef control fill:#eef2ff,stroke:#6366f1,color:#312e81;
 classDef traffic fill:#ecfeff,stroke:#0891b2,color:#164e63;
 classDef runtime fill:#f0fdf4,stroke:#16a34a,color:#14532d;
 classDef podbox fill:#ffffff,stroke:#cbd5e1,color:#0f172a;
 class client external;
 class ui,cp,mgr,scaler control;
 class gw,proxy traffic;
 class app runtime;
 class pod podbox;&lt;/pre&gt;
&lt;h2 id="where-state-lives"&gt;Where state lives&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;State&lt;/th&gt;
 &lt;th&gt;Source of truth&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Agent desired spec&lt;/td&gt;
 &lt;td&gt;The &lt;code&gt;Agent&lt;/code&gt; CR (Kubernetes etcd)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;status.phase&lt;/code&gt;, &lt;code&gt;replicas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Manager writes; readers consume&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;status.desiredReplicas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Scaler (in manager)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;status.lastInvocationAt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Gateway writes after each invocation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;In-flight count&lt;/td&gt;
 &lt;td&gt;Sidecar&amp;rsquo;s &lt;code&gt;/_krypton/inflight&lt;/code&gt; endpoint&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Invocation history (later)&lt;/td&gt;
 &lt;td&gt;Postgres&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;CRDs are the source of truth.&lt;/strong&gt; Postgres is a write-through mirror —
the API serves directly from the informer cache (fresher, no DB hop).&lt;/p&gt;</description></item><item><title>Bring your own ingress</title><link>https://www.kryptonhq.com/docs/operations/ingress/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/operations/ingress/</guid><description>&lt;p&gt;The &lt;code&gt;krypton-gateway&lt;/code&gt; Service exposes plain HTTP on port &lt;code&gt;8080&lt;/code&gt;.
Production installs put their own L7 ingress in front for TLS
termination, auth, and rate limiting. The path prefix you route is
always &lt;code&gt;/v1/agents&lt;/code&gt; — the gateway handles everything under it (see
&lt;a href="../../tutorials/first-agent/#ports--endpoints--the-two-minute-mental-model"&gt;Ports &amp;amp; endpoints&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Whichever ingress you pick, two settings are non-negotiable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disable response buffering&lt;/strong&gt; — SSE / chunked HTTP need to flush
as the agent emits, not at EOF.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bump the read timeout&lt;/strong&gt; above your agents&amp;rsquo; worst-case response
time (default 60s on most ingresses is too low for an LLM-backed
agent).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="gateway-api"&gt;Gateway API&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;apiVersion&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;kind&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;HTTPRoute&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;metadata&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton-public&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;namespace&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton-system&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;spec&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;parentRefs&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;my-gateway&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;hostnames&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;agents.example.com&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;]&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;rules&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;matches&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;path&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;{&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;type: PathPrefix, value&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;/v1/agents }&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;backendRefs&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton-gateway&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;port&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;8080&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="nginx-ingress"&gt;Nginx Ingress&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;apiVersion&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;networking.k8s.io/v1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;kind&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Ingress&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;metadata&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton-public&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;namespace&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton-system&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;annotations&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;nginx.ingress.kubernetes.io/proxy-buffering&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;off&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;nginx.ingress.kubernetes.io/proxy-read-timeout&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;300&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;spec&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;ingressClassName&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;nginx&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;rules&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;host&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;agents.example.com&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;http&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;paths&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;path&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;/v1/agents&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;pathType&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Prefix&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;backend&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;service&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton-gateway&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;port&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;{&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;number&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;8080&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;}&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="webhooks-optional"&gt;Webhooks (optional)&lt;/h2&gt;
&lt;p&gt;Validating + defaulting webhooks are off by default because they
require TLS plumbing (cert-manager or hand-minted certs). The CRD&amp;rsquo;s
OpenAPI validation catches most spec mistakes either way.&lt;/p&gt;</description></item><item><title>Deploying your first Agent</title><link>https://www.kryptonhq.com/docs/tutorials/first-agent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/tutorials/first-agent/</guid><description>&lt;p&gt;This guide deploys a custom agent into a running Krypton cluster,
verifies the gateway route, and shows where scaling signals come from.
Krypton treats your container as a black box that speaks A2A, MCP, or
plain HTTP.&lt;/p&gt;
&lt;h2 id="ports--endpoints--the-two-minute-mental-model"&gt;Ports &amp;amp; endpoints — the two-minute mental model&lt;/h2&gt;
&lt;p&gt;Krypton exposes &lt;strong&gt;two&lt;/strong&gt; HTTP services. Talk to the right one:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: right"&gt;Port&lt;/th&gt;
 &lt;th&gt;Service&lt;/th&gt;
 &lt;th&gt;What lives here&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;&lt;strong&gt;8080&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Gateway&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;All agent traffic. Anything under &lt;code&gt;/v1/agents/{ns}/{name}/*&lt;/code&gt; is reverse-proxied to your pod — the protocol RPC at &lt;code&gt;/&lt;/code&gt;, the A2A card at &lt;code&gt;/.well-known/agent-card.json&lt;/code&gt;, OAuth callbacks at &lt;code&gt;/oauth/...&lt;/code&gt;, MCP SSE streams, anything. The gateway strips the &lt;code&gt;/v1/agents/{ns}/{name}&lt;/code&gt; prefix; your container sees the original sub-path.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;&lt;strong&gt;8090&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Control plane&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Web UI and introspection APIs (&lt;code&gt;/v1/agents&lt;/code&gt;, &lt;code&gt;/v1/agents/{ns}/{name}/mcp/tools&lt;/code&gt;, &lt;code&gt;/v1/agents/{ns}/{name}/status&lt;/code&gt;). Operator tooling only — &lt;strong&gt;never&lt;/strong&gt; the path your clients use to invoke an agent.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Rule of thumb: if it&amp;rsquo;s a normal A2A / MCP / HTTP client, point it at
&lt;code&gt;:8080&lt;/code&gt;. If it&amp;rsquo;s a browser or &lt;code&gt;kubectl&lt;/code&gt;-adjacent tool, &lt;code&gt;:8090&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>HTTP server</title><link>https://www.kryptonhq.com/docs/tutorials/first-mcp/http/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/tutorials/first-mcp/http/</guid><description>&lt;p&gt;If your MCP server speaks MCP&amp;rsquo;s streamable-HTTP transport natively
(JSON-RPC 2.0 over HTTP POST), Krypton treats it like any other Agent.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ports refresher: client traffic to &lt;code&gt;:8080&lt;/code&gt; (gateway), introspection /
UI on &lt;code&gt;:8090&lt;/code&gt; (control plane). See &lt;a href="../../first-agent/#ports--endpoints--the-two-minute-mental-model"&gt;Ports &amp;amp; endpoints&lt;/a&gt;
for the full breakdown.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="container-contract"&gt;Container contract&lt;/h2&gt;
&lt;p&gt;Your container needs to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Listen on &lt;code&gt;spec.port&lt;/code&gt; (default &lt;code&gt;8080&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Accept &lt;code&gt;POST&lt;/code&gt; at &lt;code&gt;spec.invocationPath&lt;/code&gt; (default &lt;code&gt;/&lt;/code&gt;) with JSON-RPC 2.0 bodies&lt;/li&gt;
&lt;li&gt;Implement &lt;code&gt;initialize&lt;/code&gt;, &lt;code&gt;notifications/initialized&lt;/code&gt;, &lt;code&gt;tools/list&lt;/code&gt;, &lt;code&gt;tools/call&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Honor &lt;code&gt;Accept: text/event-stream&lt;/code&gt; if you want strict MCP clients
(Postman MCP, MCP Inspector) — return SSE frames when requested,
plain JSON otherwise&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="deploy"&gt;Deploy&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;apiVersion&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton.ai/v1alpha1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;kind&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Agent&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;metadata&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;my-mcp&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;namespace&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;agents&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;spec&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;image&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;my-registry/my-mcp-server:v1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;imagePullPolicy&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;IfNotPresent&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;protocol&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;mcp&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;port&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;8080&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;invocationPath&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;/&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;mode&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;always-on&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;minReplicas&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;maxReplicas&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f my-mcp.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The pod starts, the Service exposes it inside the cluster, the
operator UI surfaces its tools.&lt;/p&gt;</description></item><item><title>Installation</title><link>https://www.kryptonhq.com/docs/getting-started/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/getting-started/installation/</guid><description>&lt;p&gt;Krypton ships as a single Helm chart with four components: &lt;strong&gt;manager&lt;/strong&gt;
(controller + scaler), &lt;strong&gt;control plane&lt;/strong&gt; (REST API + UI), &lt;strong&gt;gateway&lt;/strong&gt;
(public ingress + activator), and a &lt;strong&gt;per-pod proxy sidecar&lt;/strong&gt; the
manager injects into agent pods.&lt;/p&gt;
&lt;p&gt;If you just want to kick the tyres on a laptop, jump to
&lt;a href="../local-testing/"&gt;Local testing&lt;/a&gt; — that wraps everything below in
&lt;code&gt;make deploy-dev&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="1-install-the-chart"&gt;1. Install the chart&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm install krypton oci://ghcr.io/kryptonhq/charts/krypton &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --namespace krypton-system &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --create-namespace &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set controlPlane.databaseUrl&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;postgres://user:pass@host:5432/db&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This installs the most recent chart; its &lt;code&gt;appVersion&lt;/code&gt; pins the
matching image tags. To pin a specific release, pass
&lt;code&gt;--version 0.0.4&lt;/code&gt; (latest stable is &lt;strong&gt;v0.0.4&lt;/strong&gt;).&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://www.kryptonhq.com/docs/operations/observability/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/operations/observability/metrics/</guid><description>&lt;p&gt;Every Krypton component emits Prometheus metrics. The chart ships
&lt;code&gt;ServiceMonitor&lt;/code&gt; + &lt;code&gt;PodMonitor&lt;/code&gt; resources gated behind opt-in flags so
the integration is one &lt;code&gt;--set&lt;/code&gt; away.&lt;/p&gt;
&lt;h2 id="quick-setup-with-kube-prometheus-stack"&gt;Quick setup with kube-prometheus-stack&lt;/h2&gt;
&lt;p&gt;If you don&amp;rsquo;t already have Prometheus Operator on the cluster:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm install prom prometheus-community/kube-prometheus-stack &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --namespace monitoring --create-namespace
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then enable Krypton&amp;rsquo;s monitors:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade --install krypton oci://ghcr.io/kryptonhq/charts/krypton &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --namespace krypton-system --create-namespace &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set serviceMonitor.enabled&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#204a87"&gt;true&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set podMonitor.enabled&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#204a87"&gt;true&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set serviceMonitor.labels.release&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;prom &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set podMonitor.labels.release&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;prom
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;labels.release=prom&lt;/code&gt; matches &lt;code&gt;kube-prometheus-stack&lt;/code&gt;&amp;rsquo;s default
&lt;code&gt;serviceMonitorSelector&lt;/code&gt; (replace &lt;code&gt;prom&lt;/code&gt; with your stack&amp;rsquo;s release
name). Without it, the operator&amp;rsquo;s Prometheus instance ignores the new
monitors.&lt;/p&gt;</description></item><item><title>Components</title><link>https://www.kryptonhq.com/docs/concepts/components/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/concepts/components/</guid><description>&lt;h2 id="manager"&gt;Manager&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/kryptonhq/runtime/tree/main/cmd/manager"&gt;&lt;code&gt;cmd/manager&lt;/code&gt;&lt;/a&gt; +
&lt;a href="https://github.com/kryptonhq/runtime/tree/main/internal/controller"&gt;&lt;code&gt;internal/controller&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Standard controller-runtime operator. Reconciles &lt;code&gt;Agent&lt;/code&gt; CRs by owning
three child resources per agent: a &lt;code&gt;Deployment&lt;/code&gt;, a &lt;code&gt;Service&lt;/code&gt;, and a
&lt;code&gt;ServiceAccount&lt;/code&gt;. The Deployment is injected with the &lt;code&gt;krypton-proxy&lt;/code&gt;
sidecar at template-render time.&lt;/p&gt;
&lt;p&gt;Also runs the &lt;a href="#scaler"&gt;scaling decider&lt;/a&gt; as a &lt;code&gt;manager.Runnable&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Key behavior:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CreateOrUpdate&lt;/code&gt; semantics&lt;/strong&gt;: each child resource uses
&lt;code&gt;controllerutil.CreateOrUpdate&lt;/code&gt; wrapped in &lt;code&gt;retry.RetryOnConflict&lt;/code&gt; so
spec drift converges without hot-looping when the apps controller
concurrently updates Deployment status.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Status writes use &lt;code&gt;Patch&lt;/code&gt; with &lt;code&gt;MergeFrom&lt;/code&gt;&lt;/strong&gt;, not &lt;code&gt;Update&lt;/code&gt;, so they
don&amp;rsquo;t conflict with the scaler/gateway&amp;rsquo;s concurrent writes to other
status fields.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finalizer&lt;/strong&gt; &lt;code&gt;krypton.ai/cleanup&lt;/code&gt; blocks deletion until child
resources have drained.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="control-plane"&gt;Control plane&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/kryptonhq/runtime/tree/main/cmd/control-plane"&gt;&lt;code&gt;cmd/control-plane&lt;/code&gt;&lt;/a&gt; +
&lt;a href="https://github.com/kryptonhq/runtime/tree/main/internal/controlplane"&gt;&lt;code&gt;internal/controlplane&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Deploy Your First LLM</title><link>https://www.kryptonhq.com/docs/tutorials/first-llm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/tutorials/first-llm/</guid><description>&lt;p&gt;Krypton lets you serve an LLM the same way you manage the rest of your
cluster: declare a resource, let the controller create the workload, and
send traffic through the gateway.&lt;/p&gt;
&lt;p&gt;Krypton serves Hugging Face GGUF models with &lt;a href="https://github.com/ggerganov/llama.cpp"&gt;llama.cpp&lt;/a&gt;. A
&lt;code&gt;Model&lt;/code&gt; resource points at a repo and file, the controller creates a
Deployment and Service, and Krypton exposes the model through
OpenAI-compatible endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /v1/models&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /v1/chat/completions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /v1/completions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /v1/embeddings&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Any OpenAI SDK can use the gateway as its &lt;code&gt;base_url&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Model CRD</title><link>https://www.kryptonhq.com/docs/reference/model-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/reference/model-crd/</guid><description>&lt;p&gt;&lt;code&gt;apiVersion: krypton.ai/v1alpha1&lt;/code&gt;, &lt;code&gt;kind: Model&lt;/code&gt;, namespaced
(short name &lt;code&gt;mdl&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Model&lt;/code&gt; CRD declares &amp;ldquo;host this Hugging Face GGUF as an OpenAI-compatible
model named &lt;em&gt;X&lt;/em&gt;&amp;rdquo;. The controller turns it into a Deployment running
&lt;a href="https://github.com/ggerganov/llama.cpp"&gt;llama.cpp&lt;/a&gt;&amp;rsquo;s HTTP server, plus a Service. The gateway
aggregates every &lt;code&gt;Model&lt;/code&gt; in the cluster at &lt;code&gt;/v1/models&lt;/code&gt; and routes
incoming &lt;code&gt;/v1/chat/completions&lt;/code&gt; (etc.) requests by the &lt;code&gt;model&lt;/code&gt; field
in the body.&lt;/p&gt;
&lt;h2 id="minimal-example"&gt;Minimal example&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;apiVersion&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;krypton.ai/v1alpha1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;kind&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Model&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;metadata&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;qwen2-0-5b&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;namespace&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;models&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;spec&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;source&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;huggingface&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Qwen/Qwen2.5-0.5B-Instruct-GGUF&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;file&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;qwen2.5-0.5b-instruct-q4_k_m.gguf&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s the smallest valid &lt;code&gt;Model&lt;/code&gt; — every other field has a default.&lt;/p&gt;</description></item><item><title>STDIO server</title><link>https://www.kryptonhq.com/docs/tutorials/first-mcp/stdio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/tutorials/first-mcp/stdio/</guid><description>&lt;p&gt;Most published MCP servers (the official &lt;code&gt;@modelcontextprotocol/server-*&lt;/code&gt;
packages, plenty of community ones) only speak stdio. Krypton can host
them via &lt;code&gt;mcp-stdio-bridge&lt;/code&gt; — a tiny HTTP-in-front-of-stdio shim that
runs alongside your server inside the same container.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;pre class="mermaid"&gt;%%{init: {&amp;#34;theme&amp;#34;: &amp;#34;base&amp;#34;, &amp;#34;flowchart&amp;#34;: {&amp;#34;nodeSpacing&amp;#34;: 60, &amp;#34;rankSpacing&amp;#34;: 70, &amp;#34;diagramPadding&amp;#34;: 24}, &amp;#34;themeVariables&amp;#34;: {&amp;#34;fontFamily&amp;#34;: &amp;#34;Inter, ui-sans-serif, system-ui, sans-serif&amp;#34;, &amp;#34;primaryColor&amp;#34;: &amp;#34;#eef2ff&amp;#34;, &amp;#34;primaryTextColor&amp;#34;: &amp;#34;#1f2937&amp;#34;, &amp;#34;primaryBorderColor&amp;#34;: &amp;#34;#6366f1&amp;#34;, &amp;#34;lineColor&amp;#34;: &amp;#34;#64748b&amp;#34;, &amp;#34;secondaryColor&amp;#34;: &amp;#34;#ecfeff&amp;#34;, &amp;#34;tertiaryColor&amp;#34;: &amp;#34;#f8fafc&amp;#34;}}}%%
flowchart LR
 request[&amp;#34;HTTP POST /&amp;lt;br/&amp;gt;JSON-RPC&amp;#34;] --&amp;gt; bridge[&amp;#34;mcp-stdio-bridge&amp;#34;]
 bridge --&amp;gt; stdin[&amp;#34;Child stdin&amp;#34;]
 stdout[&amp;#34;Child stdout&amp;#34;] --&amp;gt; bridge
 bridge --&amp;gt; response[&amp;#34;HTTP response&amp;lt;br/&amp;gt;id-routed&amp;#34;]

 subgraph child[&amp;#34;Long-lived MCP process&amp;#34;]
 stdin --&amp;gt; process[&amp;#34;Server command&amp;#34;]
 process --&amp;gt; stdout
 end

 classDef traffic fill:#ecfeff,stroke:#0891b2,color:#164e63;
 classDef bridgeNode fill:#eef2ff,stroke:#6366f1,color:#312e81;
 classDef processNode fill:#f0fdf4,stroke:#16a34a,color:#14532d;
 class request,response traffic;
 class bridge bridgeNode;
 class stdin,stdout,process processNode;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;The bridge forks &lt;code&gt;$MCP_COMMAND&lt;/code&gt; &lt;strong&gt;once&lt;/strong&gt; at container startup.&lt;/li&gt;
&lt;li&gt;HTTP requests are serialized to the child&amp;rsquo;s stdin.&lt;/li&gt;
&lt;li&gt;Responses are demultiplexed by JSON-RPC &lt;code&gt;id&lt;/code&gt;, so concurrent HTTP
requests don&amp;rsquo;t cross-talk.&lt;/li&gt;
&lt;li&gt;Notifications (no &lt;code&gt;id&lt;/code&gt;) are fire-and-forget.&lt;/li&gt;
&lt;li&gt;One-shot stdio servers (process-per-call) aren&amp;rsquo;t supported — the
child must be long-lived.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="deploy"&gt;Deploy&lt;/h2&gt;
&lt;p&gt;The published bridge image is a pure-Go binary on &lt;code&gt;distroless/static&lt;/code&gt;.
That&amp;rsquo;s enough for stdio binaries that are themselves statically linked.
For runtime-dependent servers (Node, Python), layer the runtime onto a
derived image first.&lt;/p&gt;</description></item><item><title>CLI flags</title><link>https://www.kryptonhq.com/docs/reference/cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/reference/cli/</guid><description>&lt;p&gt;Every binary uses Go&amp;rsquo;s standard &lt;code&gt;flag&lt;/code&gt; package. &lt;code&gt;--help&lt;/code&gt; on any of them
prints the full list.&lt;/p&gt;
&lt;h2 id="manager-cmdmanager"&gt;Manager (&lt;code&gt;cmd/manager&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;The controller + scaler.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Flag&lt;/th&gt;
 &lt;th&gt;Default&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--metrics-bind-address&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;:8080&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Prometheus scrape target&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--health-probe-bind-address&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;:8081&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/healthz&lt;/code&gt;, &lt;code&gt;/readyz&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--leader-elect&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Required when running multiple replicas&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--enable-webhooks&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Set false to skip webhook server (Helm chart does)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--proxy-image&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ghcr.io/kryptonhq/krypton-proxy:latest&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Sidecar image injected into agent pods&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--enable-scaler&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Disable to run controller only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--scaler-interval-ms&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;1000&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Tick interval for the scaling decider&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--scaler-stable-window-ms&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;60000&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Hysteresis: refuse scale-down within this window&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--sidecar-port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;8888&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Where the scaler probes &lt;code&gt;/_krypton/inflight&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="control-plane-cmdcontrol-plane"&gt;Control plane (&lt;code&gt;cmd/control-plane&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;REST API + UI.&lt;/p&gt;</description></item><item><title>Request lifecycle</title><link>https://www.kryptonhq.com/docs/concepts/request-lifecycle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/concepts/request-lifecycle/</guid><description>&lt;p&gt;This page walks through what happens between &lt;code&gt;curl POST .../invocations&lt;/code&gt;
and the JSON coming back.&lt;/p&gt;
&lt;h2 id="hot-path-pod-already-running"&gt;Hot path (pod already running)&lt;/h2&gt;
&lt;pre class="mermaid"&gt;%%{init: {&amp;#34;theme&amp;#34;: &amp;#34;base&amp;#34;, &amp;#34;themeVariables&amp;#34;: {&amp;#34;fontFamily&amp;#34;: &amp;#34;Inter, ui-sans-serif, system-ui, sans-serif&amp;#34;, &amp;#34;primaryColor&amp;#34;: &amp;#34;#eef2ff&amp;#34;, &amp;#34;primaryTextColor&amp;#34;: &amp;#34;#1f2937&amp;#34;, &amp;#34;primaryBorderColor&amp;#34;: &amp;#34;#6366f1&amp;#34;, &amp;#34;lineColor&amp;#34;: &amp;#34;#64748b&amp;#34;, &amp;#34;secondaryColor&amp;#34;: &amp;#34;#ecfeff&amp;#34;, &amp;#34;tertiaryColor&amp;#34;: &amp;#34;#f8fafc&amp;#34;}}}%%
sequenceDiagram
 autonumber
 participant Client
 participant Gateway
 participant Cache as Informer cache
 participant KubeProxy as kube-proxy
 participant Sidecar as krypton-proxy
 participant Agent as User container
 participant Status as Agent status

 Client-&amp;gt;&amp;gt;Gateway: POST /v1/agents/agents/echo/foo
 Gateway-&amp;gt;&amp;gt;Cache: Resolve Agent and ready Endpoints
 Cache--&amp;gt;&amp;gt;Gateway: echo.agents.svc:8080
 Gateway-&amp;gt;&amp;gt;Gateway: Strip prefix, preserve traceparent, enable streaming flush
 Gateway-&amp;gt;&amp;gt;KubeProxy: Proxy /foo
 KubeProxy-&amp;gt;&amp;gt;Sidecar: Route to ready Endpoint
 Sidecar-&amp;gt;&amp;gt;Sidecar: Check shutdown and acquire concurrency slot
 alt capacity available
 Sidecar-&amp;gt;&amp;gt;Agent: Reverse proxy to 127.0.0.1:&amp;lt;spec.port&amp;gt;
 Agent--&amp;gt;&amp;gt;Sidecar: Streaming response
 Sidecar--&amp;gt;&amp;gt;Gateway: Release slot and forward response
 Gateway--&amp;gt;&amp;gt;Client: Response stream
 Gateway-&amp;gt;&amp;gt;Status: Patch lastInvocationAt asynchronously
 else concurrency cap reached
 Sidecar--&amp;gt;&amp;gt;Gateway: 503 with Retry-After
 Gateway--&amp;gt;&amp;gt;Client: 503 with Retry-After
 end&lt;/pre&gt;
&lt;p&gt;Typical latency: P50 ~50ms, P95 ~200ms for a 100ms user-handler.&lt;/p&gt;</description></item><item><title>Troubleshooting &amp; FAQ</title><link>https://www.kryptonhq.com/docs/operations/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/operations/troubleshooting/</guid><description>&lt;h2 id="troubleshooting"&gt;Troubleshooting&lt;/h2&gt;
&lt;h3 id="pods-cant-pull-images-imagepullbackoff"&gt;Pods can&amp;rsquo;t pull images (&lt;code&gt;ImagePullBackOff&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;In kind, confirm the image was loaded:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kind load docker-image --name krypton-dev &amp;lt;image&amp;gt;:&amp;lt;tag&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Image policy must allow local images:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;imagePullPolicy&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;IfNotPresent &lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# or Never for strict local-only&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="cold-start-times-out-504"&gt;Cold start times out (504)&lt;/h3&gt;
&lt;p&gt;The gateway timed out waiting for an Endpoint to become ready. Common
causes:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Cause&lt;/th&gt;
 &lt;th&gt;What to check&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Image pull is slow (uncached)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;kubectl describe pod -n &amp;lt;ns&amp;gt; &amp;lt;pod&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Agent container fails readiness&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;kubectl logs -n &amp;lt;ns&amp;gt; &amp;lt;pod&amp;gt; -c agent&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Sidecar &lt;code&gt;/readyz&lt;/code&gt; failing&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;kubectl logs -n &amp;lt;ns&amp;gt; &amp;lt;pod&amp;gt; -c krypton-proxy&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Wrong &lt;code&gt;spec.port&lt;/code&gt; (agent listens elsewhere)&lt;/td&gt;
 &lt;td&gt;Look for &amp;ldquo;connect: connection refused&amp;rdquo; in sidecar logs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Bump the timeout if your agent is slow to start:&lt;/p&gt;</description></item><item><title>Helm values</title><link>https://www.kryptonhq.com/docs/reference/helm-values/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/reference/helm-values/</guid><description>&lt;p&gt;Chart source: &lt;a href="https://github.com/kryptonhq/runtime/tree/main/deploy/helm/krypton"&gt;&lt;code&gt;deploy/helm/krypton&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="common-overrides"&gt;Common overrides&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# values.yaml&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;image&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;registry&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;ghcr.io/kryptonhq&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;tag&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;v0.0.4&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;controlPlane&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;databaseUrl&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;postgres://user:pass@host:5432/db&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;manager&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;enableWebhooks&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;enableScaler&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;gateway&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;service&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;ClusterIP &lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# operators add their own ingress in front&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="full-reference"&gt;Full reference&lt;/h2&gt;
&lt;h3 id="image"&gt;&lt;code&gt;image&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Default image base for all components. Per-component overrides under
&lt;code&gt;images.*&lt;/code&gt; take precedence.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;image&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;registry&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;ghcr.io/kryptonhq&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;tag&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# empty → falls back to .Chart.AppVersion&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;pullPolicy&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;IfNotPresent&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Leaving &lt;code&gt;tag&lt;/code&gt; empty makes the chart pin images at the same version as
the chart release (the helper falls back to &lt;code&gt;.Chart.AppVersion&lt;/code&gt;), so
&lt;code&gt;helm install&lt;/code&gt; Just Works without explicit &lt;code&gt;--set image.tag=...&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Local testing with kind</title><link>https://www.kryptonhq.com/docs/getting-started/local-testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/getting-started/local-testing/</guid><description>&lt;p&gt;End-to-end loop for running Krypton on your laptop. Tested on macOS
(OrbStack and Docker Desktop) and Linux.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Docker (or OrbStack)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kind.sigs.k8s.io/"&gt;kind&lt;/a&gt; ≥ 0.24 — &lt;code&gt;brew install kind&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://helm.sh"&gt;Helm&lt;/a&gt; ≥ 3.14 — &lt;code&gt;brew install helm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/tasks/tools/"&gt;kubectl&lt;/a&gt; — &lt;code&gt;brew install kubectl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Node 22 + pnpm 10 (for the UI build)&lt;/li&gt;
&lt;li&gt;Go 1.25 (only required for unit tests)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One-liner on macOS:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install kind helm kubectl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="one-shot-install"&gt;One-shot install&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make deploy-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What that runs (&lt;a href="https://github.com/kryptonhq/runtime/blob/main/hack/local-up.sh"&gt;&lt;code&gt;hack/local-up.sh&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt;</description></item><item><title>Roadmap</title><link>https://www.kryptonhq.com/docs/roadmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kryptonhq.com/docs/roadmap/</guid><description>&lt;p&gt;A forward-looking view of where Krypton is headed. Order within each
bucket suggests rough priority; nothing is a commitment and dates
aren&amp;rsquo;t promises.&lt;/p&gt;
&lt;h2 id="recently-shipped"&gt;Recently shipped&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Built-in model hosting (&lt;code&gt;Model&lt;/code&gt; CRD)&lt;/td&gt;
 &lt;td&gt;Host LLMs by Hugging Face name via &lt;a href="https://github.com/ggerganov/llama.cpp"&gt;llama.cpp&lt;/a&gt;, aggregated behind one OpenAI-compatible endpoint. See &lt;a href="https://www.kryptonhq.com/docs/tutorials/first-llm/"&gt;first LLM&lt;/a&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="high-priority"&gt;High priority&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;GPU-aware scheduling&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;spec.gpu&lt;/code&gt; on &lt;code&gt;Model&lt;/code&gt; / &lt;code&gt;Agent&lt;/code&gt;; multi-GPU and MIG slicing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;More inference runtimes&lt;/td&gt;
 &lt;td&gt;vLLM and TGI behind the same &lt;code&gt;Model&lt;/code&gt; CRD&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Model autoscaling&lt;/td&gt;
 &lt;td&gt;Concurrency-aware scaling for &lt;code&gt;Model&lt;/code&gt; pods (today they&amp;rsquo;re always-on)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Secure sandbox runtime&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Sandbox&lt;/code&gt; CRD with gVisor / Kata runtime classes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AI-native observability&lt;/td&gt;
 &lt;td&gt;OTEL GenAI conventions; token-usage roll-ups&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;OpenTelemetry tracing&lt;/td&gt;
 &lt;td&gt;OTLP exporter; &lt;code&gt;traceparent&lt;/code&gt; propagation across hops&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="medium-priority"&gt;Medium priority&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Serverless mode (GA)&lt;/td&gt;
 &lt;td&gt;Cold-start activator path, off by default today&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Invocation history (Postgres)&lt;/td&gt;
 &lt;td&gt;Queryable history, surfaced in UI&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Schema-driven MCP tool forms&lt;/td&gt;
 &lt;td&gt;Auto-generated inputs per tool from its JSON schema&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MCP resources + prompts&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;resources/*&lt;/code&gt; and &lt;code&gt;prompts/*&lt;/code&gt; method support&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Per-agent network policies&lt;/td&gt;
 &lt;td&gt;Egress / ingress rules generated from spec&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;TCP-dial readiness check&lt;/td&gt;
 &lt;td&gt;Closes the kube-proxy race on first cold-start&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="exploring"&gt;Exploring&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Multi-cluster federation&lt;/td&gt;
 &lt;td&gt;Federated control plane; cross-cluster routing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authentication &amp;amp; multi-tenancy&lt;/td&gt;
 &lt;td&gt;OIDC-backed UI/API; per-tenant namespaces&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="out-of-scope"&gt;Out of scope&lt;/h2&gt;
&lt;p&gt;Things people ask about that we deliberately won&amp;rsquo;t build:&lt;/p&gt;</description></item></channel></rss>