<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on Kubemoot</title><link>https://kubemoot.org/docs/reference/</link><description>Recent content in Reference on Kubemoot</description><generator>Hugo</generator><language>en</language><atom:link href="https://kubemoot.org/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent CRD</title><link>https://kubemoot.org/docs/reference/agent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/agent/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;The Agent CRD declares an LLM-powered agent as a thin, capability-only resource and deploys it as a Kubernetes-native service. The Agent spec carries no model name, no provider, and no GPU hint. Agents declare &lt;em&gt;what they can do&lt;/em&gt;; the scheduler matches them to a &lt;code&gt;(model, provider, endpoint)&lt;/code&gt; via &lt;code&gt;CrewSchedulingPolicy&lt;/code&gt; rules over labeled &lt;code&gt;Model&lt;/code&gt; CRs.&lt;/p&gt;
&lt;p&gt;Agents orchestrate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Models&lt;/strong&gt;: LLM inference resolved by the scheduler from &lt;code&gt;spec.capabilities&lt;/code&gt; + &lt;code&gt;CrewSchedulingPolicy&lt;/code&gt; (see &lt;a href="https://kubemoot.org/docs/architecture/scheduler/"&gt;scheduler.md&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knowledge&lt;/strong&gt;: RAG retrieval via &lt;code&gt;spec.ragSources&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools&lt;/strong&gt;: MCP tool execution via the MCPGateway, filtered by &lt;code&gt;spec.enabledTools&lt;/code&gt; / &lt;code&gt;spec.disabledTools&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collaboration&lt;/strong&gt;: Multi-agent discussions via NATS JetStream, configured by &lt;code&gt;spec.discussRole&lt;/code&gt; / &lt;code&gt;spec.discussChannels&lt;/code&gt; / &lt;code&gt;spec.discussKeywords&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompts&lt;/strong&gt;: System prompts composed from &lt;code&gt;PromptModule&lt;/code&gt; CRs referenced by &lt;code&gt;spec.promptRefs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="supported-types"&gt;Supported Types&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chat&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Conversational agent with HTTP API&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;task&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Task-oriented agent (planned)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;workflow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Multi-step workflow orchestration (planned)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="spec-fields"&gt;Spec Fields&lt;/h2&gt;
&lt;h3 id="spectype"&gt;&lt;code&gt;spec.type&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Agent type. Default: &lt;code&gt;chat&lt;/code&gt;. Only &lt;code&gt;chat&lt;/code&gt; is implemented today.&lt;/p&gt;</description></item><item><title>Crew CRD</title><link>https://kubemoot.org/docs/reference/crew/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/crew/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;Crew&lt;/code&gt; groups a set of &lt;code&gt;Agent&lt;/code&gt;s (joined by the &lt;code&gt;kubemoot.ai/crew&lt;/code&gt; label) into one collaborating team, and configures crew-wide concerns: the discussion gateway and the crew&amp;rsquo;s &lt;strong&gt;working memory&lt;/strong&gt;. Agents are the workers; the Crew is the team-level context they share.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubemoot.ai/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Crew&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;homelab-pilot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;crew-homelab-pilot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Homelab infrastructure crew&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;discussion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxFacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ttlDays&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;365&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;injectLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;verifyOnAdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The namespace separates names. The same crew name can run in many namespaces side by
side: the discussion, request, artifact, and memory subjects and keys a crew uses carry its
namespace and crew name after a fixed prefix (some operator subjects carry no namespace), so two crews named
&lt;code&gt;homelab-pilot&lt;/code&gt; in two different namespaces do not collide. This is naming separation,
not a security boundary: NATS has no authentication in this release, and a client that
can reach it can read any subject. See
&lt;a href="https://github.com/kubemoot/kubemoot/blob/main/SECURITY.md#security-model-and-known-limitations"&gt;Security model and known limitations&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Models in Kubemoot</title><link>https://kubemoot.org/docs/reference/models/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/models/</guid><description>&lt;p&gt;This document covers the model layer end to end: the CRDs (ModelProvider, Model, EmbeddingModel), how Agents reach a &lt;code&gt;(model, provider)&lt;/code&gt; binding via the scheduler, the load-on-demand principle, the model catalog, and GPU compatibility for a reference deployment.&lt;/p&gt;
&lt;p&gt;For the framework behind these choices - why tool-calling fidelity outranks coding benchmarks, how to budget VRAM, and how to match model size to discussion role - see &lt;a href="../../concepts/choosing-a-model/"&gt;Choosing a Model&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="crd-hierarchy"&gt;CRD Hierarchy&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ModelProvider (where - a model server endpoint)
 │
 ├── Model (what - labeled inference model on a provider)
 │
 └── EmbeddingModel (what - embedding model for RAGSource indexing)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Agents declare &lt;strong&gt;capabilities&lt;/strong&gt;; the scheduler matches them to a &lt;code&gt;Model&lt;/code&gt; whose labels satisfy a &lt;code&gt;CrewSchedulingPolicy&lt;/code&gt;&amp;rsquo;s &lt;code&gt;require&lt;/code&gt; / &lt;code&gt;prefer&lt;/code&gt; selectors. See &lt;a href="../../architecture/scheduler/"&gt;Scheduler&lt;/a&gt; for the full algorithm.&lt;/p&gt;</description></item><item><title>RAGSource Guide</title><link>https://kubemoot.org/docs/reference/ragsource-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/ragsource-guide/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;RAGSource is a Kubemoot CRD that manages the complete lifecycle of Retrieval-Augmented Generation knowledge sources. It automates: cloning source documents, chunking, embedding via Ollama, storing vectors in pgvector, deploying a query service, and continuously verifying data integrity.&lt;/p&gt;
&lt;p&gt;The operator follows the Kubernetes reconciler contract: compare desired state (the RAGSource spec) against observed state (what&amp;rsquo;s actually in the vector store), and reconcile the difference.&lt;/p&gt;
&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;RAGSource CR
 │
 ├─── Indexer Job (Java/Spring Boot)
 │ ├── Clone git repo / fetch documents
 │ ├── Chunk documents (TokenTextSplitter)
 │ ├── Generate embeddings (Ollama nomic-embed)
 │ └── Store vectors in pgvector (Spring AI schema: data_{collection})
 │
 ├─── Query Service (Python/FastAPI)
 │ ├── Deployment + Service (auto-deployed)
 │ ├── POST /query - semantic search
 │ └── GET /info - collection stats (used by verification)
 │
 └─── Docling Serve Sidecar (for document source type)
 └── Converts PDF/DOCX/PPTX/HTML/images → markdown
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="component-images"&gt;Component Images&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Image&lt;/th&gt;
 &lt;th&gt;Language&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Indexer&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;registry.example.com/kubemoot/indexer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Java (Spring Boot)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Query Service&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;registry.example.com/kubemoot/query-service&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Python (FastAPI)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Docling Serve&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;quay.io/docling-project/docling-serve-cpu&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Python&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;All image versions are managed centrally via the KubemootConfig singleton - never hardcode image tags.&lt;/p&gt;</description></item><item><title>KubemootConfig Guide</title><link>https://kubemoot.org/docs/reference/kubemootconfig-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/kubemootconfig-guide/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;KubemootConfig is a &lt;strong&gt;cluster-scoped singleton&lt;/strong&gt; CRD that centralizes default images and configuration for all Kubemoot components. It eliminates hardcoded image versions in the operator source code and enables GitOps-friendly version management.&lt;/p&gt;
&lt;p&gt;Every Kubemoot controller reads from KubemootConfig via the ConfigCache - a thread-safe in-memory cache that the KubemootConfigReconciler populates on startup and updates on every change.&lt;/p&gt;
&lt;h3 id="why-a-singleton"&gt;Why a singleton&lt;/h3&gt;
&lt;p&gt;Image references and operator defaults live in one cluster-scoped resource instead of the
operator source, operator environment variables, or every custom resource. An image bump
is a patch to one resource: no recompile, no operator restart, no Helm upgrade, and no
chance of two namespaces running different runtime images. The scope is cluster-wide on
purpose; a per-namespace config would bring the drift back. New cluster-wide defaults
(scheduler strategy, retention windows) become new fields on the same resource rather
than new CRDs. If &lt;code&gt;default&lt;/code&gt; is missing, controllers fail their first reconcile until it
exists, which is why the operator chart installs it.&lt;/p&gt;</description></item><item><title>MCPServer Guide</title><link>https://kubemoot.org/docs/reference/mcpserver-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/mcpserver-guide/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;MCPServer is a Kubemoot CRD that deploys and manages Model Context Protocol servers in Kubernetes. Each MCPServer provides tools that agents can invoke through an MCPGateway.&lt;/p&gt;
&lt;p&gt;The operator handles the complete lifecycle: deploying the container, injecting the mcp-bridge sidecar for stdio transport, configuring health probes, and registering with gateways.&lt;/p&gt;
&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;MCPServer CR
 │
 ├─── Deployment (operator-managed)
 │ ├── MCP Server Container (your image)
 │ └── MCP Bridge Sidecar (auto-injected for stdio)
 │
 ├─── Service (ClusterIP)
 │ └── Exposes the bridge HTTP/SSE endpoint
 │
 └─── Gateway Registration
 └── Registers tools with matching MCPGateways
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="tool-chain"&gt;Tool Chain&lt;/h3&gt;
&lt;p&gt;Agents never connect to MCPServers directly. The full chain is:&lt;/p&gt;</description></item><item><title>MCPGateway Guide</title><link>https://kubemoot.org/docs/reference/mcpgateway-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/mcpgateway-guide/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;MCPGateway is a Kubemoot CRD that deploys an MCP gateway - the central hub that routes agent tool calls to MCPServers. Agents connect to the gateway (not individual MCPServers), and the gateway discovers and manages connections to all matching MCPServers.&lt;/p&gt;
&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Agent Runtime
 │
 │ KUBEMOOT_GATEWAY_ENDPOINT
 ▼
MCPGateway (Deployment + Service)
 │
 ├── MCPServer: kubernetes-mcp (via label selector)
 ├── MCPServer: nats-mcp (via label selector)
 ├── MCPServer: github-mcp (via label selector)
 └── MCPServer: fetch-mcp (via label selector)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The gateway:&lt;/p&gt;</description></item><item><title>CrewFitnessSuite CRD</title><link>https://kubemoot.org/docs/reference/crewfitnesssuite/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/crewfitnesssuite/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;CrewFitnessSuite&lt;/code&gt; runs a set of fitness scripts against a crew many times, collects the result of every iteration, and writes an XLSX report to the NATS Object Store bucket &lt;code&gt;kubemoot_fitness_artifacts&lt;/code&gt;. The operator creates one &lt;code&gt;CrewFitness&lt;/code&gt; per script and iteration, serially by default, and owns each one through an owner reference.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubemoot.ai/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;CrewFitnessSuite&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;homelab-baseline&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;crew-homelab-pilot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;crewRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;homelab-pilot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;READ-query baseline across the homelab layers&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;iterations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;concurrency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scripts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;testRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-utilization-live&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configMapRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;homelab-pilot-fitness-tests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;testRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;node-count&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configMapRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;homelab-pilot-fitness-tests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="spec"&gt;Spec&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;Default&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;crewRef&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;required&lt;/td&gt;
 &lt;td&gt;Crew in the same namespace that the suite runs against.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Purpose of the suite. Shown on the dashboard and in the XLSX Overview tab.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;iterations&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int&lt;/td&gt;
 &lt;td&gt;required, at least 1&lt;/td&gt;
 &lt;td&gt;How many times each script runs. The suite creates &lt;code&gt;len(scripts) x iterations&lt;/code&gt; runs.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;scripts&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;list&lt;/td&gt;
 &lt;td&gt;required, at least 1&lt;/td&gt;
 &lt;td&gt;The scripts to run, in order. Each entry has a &lt;code&gt;testRef&lt;/code&gt; and exactly one of &lt;code&gt;testContent&lt;/code&gt; (inline script) or &lt;code&gt;configMapRef&lt;/code&gt; (ConfigMap holding &lt;code&gt;&amp;lt;testRef&amp;gt;.adl&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;int&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Maximum runs in flight at once. Keep it at 1 for baselines: parallel runs share the crew and its model providers, so they measure contention.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;perIterationTimeout&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;duration&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;10m&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Wall-clock cap for one iteration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;artifactRetention&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;duration&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;168h&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Object Store TTL for the XLSX.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;purgeMemory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;bool&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Clear the crew&amp;rsquo;s working memory once before the first iteration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;suspend&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;bool&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Pause between iterations. See &lt;a href="https://kubemoot.org/docs/reference/crewfitnesssuite/#pause-resume-and-stop"&gt;Pause, resume and stop&lt;/a&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cancel&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;bool&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stop the suite. See &lt;a href="https://kubemoot.org/docs/reference/crewfitnesssuite/#pause-resume-and-stop"&gt;Pause, resume and stop&lt;/a&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;rejudge&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;object&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Set at creation, immutable. Judge an earlier run&amp;rsquo;s saved answers against this suite&amp;rsquo;s scripts instead of running iterations. &lt;code&gt;suite&lt;/code&gt; names the source &lt;code&gt;CrewFitnessSuite&lt;/code&gt; in the same namespace and &lt;code&gt;runId&lt;/code&gt; its run. See &lt;a href="https://kubemoot.org/docs/reference/crewfitnesssuite/#re-judge-an-earlier-run"&gt;Re-judge an earlier run&lt;/a&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="status"&gt;Status&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&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;&lt;code&gt;Pending&lt;/code&gt;, &lt;code&gt;Running&lt;/code&gt;, &lt;code&gt;Paused&lt;/code&gt;, &lt;code&gt;Completed&lt;/code&gt;, &lt;code&gt;Cancelled&lt;/code&gt;, &lt;code&gt;Failed&lt;/code&gt;, or &lt;code&gt;Error&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;runId&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Identifies this execution. Used in iteration names and in the artifact key.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;startedAt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;When scheduling began.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;completedAt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;When the last iteration finished, or when the suite was cancelled.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;iterationsTotal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;len(scripts) x iterations&lt;/code&gt;. It keeps the planned total after a cancel, so &lt;code&gt;iterationsCompleted &amp;lt; iterationsTotal&lt;/code&gt; marks a partial run.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;iterationsCompleted&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Iterations that reached a terminal phase, whatever the outcome.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;passed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;, &lt;code&gt;errored&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;iterationsCompleted&lt;/code&gt; broken down by outcome.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;artifactRef&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bucket, object key (&lt;code&gt;&amp;lt;namespace&amp;gt;/&amp;lt;suite&amp;gt;/&amp;lt;runId&amp;gt;.xlsx&lt;/code&gt;), and size of the XLSX, set once it is written.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;error&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Why the suite itself failed to execute (phase &lt;code&gt;Error&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;rejudge&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;On a re-judge suite: the &lt;code&gt;source&lt;/code&gt; run, how many &lt;code&gt;transcripts&lt;/code&gt; were copied, and &lt;code&gt;notInSource&lt;/code&gt;, the scenarios of this suite the source run has no answer for.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;scenarios&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Per-scenario rollup of the finished iterations, in spec order. See &lt;a href="https://kubemoot.org/docs/reference/crewfitnesssuite/#results-in-status"&gt;Results in status&lt;/a&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;judge&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Progress and scores of the deferred judge pass. See &lt;a href="https://kubemoot.org/docs/reference/crewfitnesssuite/#results-in-status"&gt;Results in status&lt;/a&gt;.&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;On a re-judge suite, &lt;code&gt;RejudgeSourceReady&lt;/code&gt; reports whether the source could be used. See &lt;a href="https://kubemoot.org/docs/reference/crewfitnesssuite/#re-judge-an-earlier-run"&gt;Re-judge an earlier run&lt;/a&gt;.&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;Terminal&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;no&lt;/td&gt;
 &lt;td&gt;Created, not yet started.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Running&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;no&lt;/td&gt;
 &lt;td&gt;Iterations are being scheduled or are in flight.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Paused&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;no&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;spec.suspend&lt;/code&gt; is true and no iteration is in flight. Nothing runs against the crew.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Completed&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;yes&lt;/td&gt;
 &lt;td&gt;Every iteration reached a terminal phase. Failed or errored iterations are outcomes in the counts, not a suite failure.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Cancelled&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;yes&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;spec.cancel&lt;/code&gt; stopped the suite. Completed iterations are kept and the XLSX is marked partial.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Failed&lt;/code&gt;, &lt;code&gt;Error&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;yes&lt;/td&gt;
 &lt;td&gt;The suite itself could not execute, such as an invalid spec.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="results-in-status"&gt;Results in status&lt;/h2&gt;
&lt;p&gt;The operator writes a run&amp;rsquo;s results to the suite&amp;rsquo;s status, so any client with read access to &lt;code&gt;crewfitnesssuites&lt;/code&gt; gets them through the Kubernetes API: &lt;code&gt;kubectl&lt;/code&gt;, &lt;code&gt;kmctl&lt;/code&gt;, CrewForge, or a script. The status outlives the per-iteration &lt;code&gt;CrewFitness&lt;/code&gt; objects, which the operator removes after the run, and the object store retention of the transcripts and judge checkpoint.&lt;/p&gt;</description></item><item><title>MootArchetype CRD</title><link>https://kubemoot.org/docs/reference/mootarchetype/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/mootarchetype/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;MootArchetype&lt;/code&gt; declares the shape of a consensus archetype: the phases it passes
through, the signals agents may emit, and the legal transitions between phases. The
operator installs one, &lt;code&gt;consent-3&lt;/code&gt;, and validates the resource and the scheduling
policies that reference it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Maturity.&lt;/strong&gt; &lt;code&gt;MootArchetype&lt;/code&gt; is a newer feature and is not fully vetted. The API is
&lt;code&gt;kubemoot.ai/v1alpha1&lt;/code&gt;: expect the fields to change. Read
&lt;a href="https://kubemoot.org/docs/reference/mootarchetype/#what-it-does-today"&gt;What it does today&lt;/a&gt; and
&lt;a href="https://kubemoot.org/docs/reference/mootarchetype/#what-it-does-not-do-yet"&gt;What it does not do yet&lt;/a&gt; before building on it.&lt;/p&gt;</description></item><item><title>ADL Reference</title><link>https://kubemoot.org/docs/reference/adl-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/adl-reference/</guid><description>&lt;p&gt;ADL has two dialects that share a style. The &lt;strong&gt;prompt&lt;/strong&gt; dialect composes an agent&amp;rsquo;s
behavior; the &lt;strong&gt;fitness&lt;/strong&gt; dialect specifies executable checks against a live crew. This
page is the complete vocabulary for both; see
&lt;a href="https://kubemoot.org/docs/concepts/agent-definition-language/"&gt;ADL, the Architecture Definition Language, for agents&lt;/a&gt;
for where the notation comes from and how Kubemoot applies it. For how to write and run
it, see &lt;a href="https://kubemoot.org/docs/user-guides/write-agents-and-adl/"&gt;Write Agents &amp;amp; ADL&lt;/a&gt; and
&lt;a href="https://kubemoot.org/docs/fitness/kubemoot-crew-fitness-functions/"&gt;Kubemoot Crew Fitness Functions&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="prompt-adl"&gt;Prompt ADL&lt;/h2&gt;
&lt;p&gt;Prompt ADL is stored in the &lt;code&gt;content&lt;/code&gt; of a &lt;code&gt;PromptModule&lt;/code&gt; CR. Modules are concatenated
by &lt;code&gt;order&lt;/code&gt; to form an agent&amp;rsquo;s system prompt.&lt;/p&gt;</description></item><item><title>kmctl Reference</title><link>https://kubemoot.org/docs/reference/kmctl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kubemoot.org/docs/reference/kmctl/</guid><description>&lt;p&gt;&lt;code&gt;kmctl&lt;/code&gt; is the command-line tool for Kubemoot. It is a convenience layer over
Kubemoot&amp;rsquo;s Kubernetes resources, consistent in flag and output style with &lt;code&gt;kubectl&lt;/code&gt;,
&lt;code&gt;istioctl&lt;/code&gt;, and &lt;code&gt;helm&lt;/code&gt;. The command layout (noun-first resource commands + global
manifest verbs) is a deliberate design choice; see
&lt;a href="../../user-guides/kmctl/#command-structure"&gt;Command structure&lt;/a&gt; in the user guide.&lt;/p&gt;
&lt;p&gt;This reference covers the shipped command surface. Commands marked &lt;strong&gt;planned&lt;/strong&gt; are
designed but not yet implemented; all others work today. Check your installed version
with &lt;code&gt;kmctl version&lt;/code&gt;. Every command has runnable &lt;code&gt;--help&lt;/code&gt; examples, and &lt;code&gt;get&lt;/code&gt; commands
offer shell completion of resource names. Run &lt;code&gt;kmctl &amp;lt;command&amp;gt; --help&lt;/code&gt; for the same
information inline.&lt;/p&gt;</description></item></channel></rss>