<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Documentation on simian-agent</title><link>https://go-steer.github.io/simian-agent/docs/</link><description>Recent content in Documentation on simian-agent</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://go-steer.github.io/simian-agent/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting started</title><link>https://go-steer.github.io/simian-agent/docs/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/getting-started/</guid><description>&lt;p&gt;This walks from a fresh clone through your first directed-chaos fault, then through your first autonomous-mode plan. Assumes you have a Kubernetes cluster with &lt;a href="https://chaos-mesh.org/"&gt;Chaos Mesh&lt;/a&gt; installed and your kubeconfig points at it (cluster-admin or equivalent).&lt;/p&gt;
&lt;h2 id="build"&gt;Build&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Produces &lt;code&gt;bin/simian&lt;/code&gt;. The binary holds every subcommand (&lt;code&gt;arena&lt;/code&gt;, &lt;code&gt;sut&lt;/code&gt;, &lt;code&gt;serve&lt;/code&gt;, &lt;code&gt;chaos&lt;/code&gt;, &lt;code&gt;plan&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="provision-an-arena-and-deploy-a-sut"&gt;Provision an arena and deploy a SUT&lt;/h2&gt;
&lt;p&gt;An &lt;em&gt;arena&lt;/em&gt; is a namespace annotated &lt;code&gt;simian.chaos/eligible=&amp;quot;true&amp;quot;&lt;/code&gt; plus the RBAC needed for the controller&amp;rsquo;s chaos service account. A &lt;em&gt;SUT&lt;/em&gt; is a System Under Test deployed into that arena (Online Boutique is the built-in default).&lt;/p&gt;</description></item><item><title>Design</title><link>https://go-steer.github.io/simian-agent/docs/design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/design/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Draft, v1 scope.
&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href="https://go-steer.github.io/simian-agent/docs/requirements/"&gt;&lt;code&gt;requirements.md&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://go-steer.github.io/simian-agent/docs/roadmap/"&gt;&lt;code&gt;roadmap.md&lt;/code&gt;&lt;/a&gt;.
Supersedes the design portion of &lt;code&gt;simian-agent.md&lt;/code&gt;.
Requirement IDs (&lt;code&gt;R-FOO-NN&lt;/code&gt;) reference &lt;code&gt;requirements.md&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="1-architectural-overview"&gt;1. Architectural Overview&lt;/h2&gt;
&lt;p&gt;Simian is a single Go binary that ships as two Kubernetes workloads sharing one image. All fault sources — autonomous-mode plans and directed-mode MCP calls alike — funnel through one Fault Executor before any chaos resource is applied.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; +---------------------------+
 | LLM Provider |
 | (pluggable; Gemini v1) |
 +-------------+-------------+
 ^
 structured output | read-only context
 |
 +------------------------+ +-------------+-------------+ +-------------------------+
 | Topology Discoverer |---&amp;gt;| Plan Generator | | MCP Server (directed) |
 | (read-only K8s + mesh)| | (autonomous mode loop) | | - submit_fault |
 +------------------------+ +-------------+-------------+ | - clear_fault |
 | | - list_fault_catalog |
 | AttackPlan | - list_active_faults |
 v +-----------+-------------+
 +-------+--------+ |
 | | | FaultManifest
 | v v
 | +-----------------------------------+
 | | FAULT EXECUTOR |
 | | (1) schema validate |
 | | (2) safety validate |
 | | (3) audit pre-apply |
 | | (4) apply via driver |
 | | (5) lease + lifecycle |
 | | (6) audit post-apply |
 | +----------------+------------------+
 | |
 | +-------------+-------------+
 | v v
 | +---------------+ +---------------+
 | | Chaos Mesh | | Litmus driver |
 | | driver | | (workflows + |
 | | (dynamic CRD) | | probes) |
 | +-------+-------+ +-------+-------+
 | | |
 v v v
 +---------------------------------------------------------+
 | Eligible Target Namespaces |
 | (annotated; chaos SA RBAC-bound; SUT may be Simian- |
 | provisioned per provisioned posture) |
 +---------------------------------------------------------+
 |
 | observable effects, probe results
 v
 +---------------+---------------+
 | Scenario Exporter |
 | + Red Phone (incident pages) |
 +---------------+---------------+
 |
 v
 +---------------------------------------------+
 | External SRE agent / evaluation harness |
 +---------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="11-component-inventory"&gt;1.1 Component inventory&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Responsibility&lt;/th&gt;
 &lt;th&gt;Mode(s)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;LLM Provider&lt;/td&gt;
 &lt;td&gt;Stateless completion API behind a pluggable interface; Gemini default&lt;/td&gt;
 &lt;td&gt;Both&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Topology Discoverer&lt;/td&gt;
 &lt;td&gt;Read-only inspection of eligible namespaces&lt;/td&gt;
 &lt;td&gt;Autonomous&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Plan Generator&lt;/td&gt;
 &lt;td&gt;LLM-driven &lt;code&gt;AttackPlan&lt;/code&gt; synthesis; orchestrates the autonomous cycle&lt;/td&gt;
 &lt;td&gt;Autonomous&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MCP Server&lt;/td&gt;
 &lt;td&gt;Directed-mode tool surface and read-only context tools used by the LLM&lt;/td&gt;
 &lt;td&gt;Both (caller-facing)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Fault Executor&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Single chokepoint: validate → audit → apply → lease → audit. No bypass.&lt;/td&gt;
 &lt;td&gt;Both&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Chaos Mesh driver&lt;/td&gt;
 &lt;td&gt;Dynamic-CRD apply for the full &lt;code&gt;chaos-mesh.org/v1alpha1&lt;/code&gt; catalog&lt;/td&gt;
 &lt;td&gt;Both&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Litmus driver&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ChaosEngine&lt;/code&gt; / workflow apply; probe attachment; ChaosHub-sourced experiments&lt;/td&gt;
 &lt;td&gt;Both&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Provisioner&lt;/td&gt;
 &lt;td&gt;Cluster-scoped: creates eligible namespaces, deploys SUT, manages chaos SA RoleBindings&lt;/td&gt;
 &lt;td&gt;Provisioned posture&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Red Phone&lt;/td&gt;
 &lt;td&gt;Best-effort outbound natural-language incident pages&lt;/td&gt;
 &lt;td&gt;Both, optional&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Scenario Exporter&lt;/td&gt;
 &lt;td&gt;Stable structured records of inputs/outputs per cycle, for external evaluation&lt;/td&gt;
 &lt;td&gt;Both&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Lease Reaper&lt;/td&gt;
 &lt;td&gt;Background sweeper that clears any fault whose lease is stale or duration is exceeded&lt;/td&gt;
 &lt;td&gt;Both&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="2-operating-modes"&gt;2. Operating Modes&lt;/h2&gt;
&lt;h3 id="21-directed-mode"&gt;2.1 Directed mode&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;External caller (human, agent, CI)
 |
 | MCP: submit_fault(intent, targets, options)
 v
 MCP Server ──→ LLM.TranslateIntent(intent, catalog) ──→ FaultManifest
 | |
 | &amp;lt;───── FaultManifest ─────────┘
 v
 Fault Executor (validate → audit → apply → lease)
 |
 v
 returns {planID, faultUIDs[], status}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The caller can poll/stream status via &lt;code&gt;get_fault_status(planID)&lt;/code&gt; or watch the Red Phone webhook for any pages emitted during the fault window. Directed mode is the integration path for upstream agents (Claude Code, ADK agents, internal tooling) and CI jobs.&lt;/p&gt;</description></item><item><title>Requirements</title><link>https://go-steer.github.io/simian-agent/docs/requirements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/requirements/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Draft, v1 scope.
&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href="https://go-steer.github.io/simian-agent/docs/design/"&gt;&lt;code&gt;design.md&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://go-steer.github.io/simian-agent/docs/roadmap/"&gt;&lt;code&gt;roadmap.md&lt;/code&gt;&lt;/a&gt;.
Supersedes the requirements portion of &lt;code&gt;simian-agent.md&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="1-objective--scope"&gt;1. Objective &amp;amp; Scope&lt;/h2&gt;
&lt;h3 id="11-what-simian-agent-is"&gt;1.1 What Simian Agent is&lt;/h3&gt;
&lt;p&gt;Simian Agent is an open-source, AI-native chaos engineering orchestrator — a &amp;ldquo;Chaos Monkey for AI.&amp;rdquo; It exists to inject controlled, structurally meaningful failures into Kubernetes workloads so that downstream automated SRE agents can be exercised, evaluated, and improved.&lt;/p&gt;
&lt;p&gt;It is &lt;strong&gt;not&lt;/strong&gt; a generic chaos framework. Its differentiator is the dual operating model: it can be driven directly by an upstream caller through a standardized tool interface, and it can also operate fully autonomously — discovering topology, drafting an attack plan, and executing it under bounded safety constraints.&lt;/p&gt;</description></item><item><title>Roadmap</title><link>https://go-steer.github.io/simian-agent/docs/roadmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/roadmap/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Draft, v1 plan. M1 shipped 2026-05-12 (PR #1). M2 shipped 2026-05-12/14 (PRs #2, #5). M3 shipped 2026-05-14 (PRs #7, #8).
&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href="https://go-steer.github.io/simian-agent/docs/requirements/"&gt;&lt;code&gt;requirements.md&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://go-steer.github.io/simian-agent/docs/design/"&gt;&lt;code&gt;design.md&lt;/code&gt;&lt;/a&gt;.
Supersedes the roadmap portion of &lt;code&gt;simian-agent.md&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This roadmap lays out v1 in six milestones. Each milestone has a focused deliverable, a small set of public Go entrypoints, and a concrete acceptance demo. Milestones are sequenced as a vertical slice first (Milestone 1) then breadth and depth — every milestone produces a demoable system on top of the previous one. Cross-cutting work (observability, Helm chart) is interleaved — see the closing section.&lt;/p&gt;</description></item><item><title>DPv2-compatible chaos engines</title><link>https://go-steer.github.io/simian-agent/docs/dpv2-chaos-engines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/dpv2-chaos-engines/</guid><description>&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;GKE Dataplane V2 (eBPF/Cilium) bypasses Chaos Mesh&amp;rsquo;s NetworkChaos because chaos-daemon installs tc/netem qdiscs that the eBPF datapath never traverses (refs: chaos-mesh#3302, cilium#19975 — both open since 2022, no fix in sight). All netem-family actions plus &lt;code&gt;partition&lt;/code&gt; are silently no-ops on DPv2 nodes. This means our M3 acceptance bullet &amp;ldquo;autonomous loop generates and applies a NetworkChaos delay&amp;rdquo; can succeed at the API level but produce zero real network impact — the LLM and the audit log say &amp;ldquo;applied&amp;rdquo;, but the SUT&amp;rsquo;s metrics never twitch.&lt;/p&gt;</description></item><item><title>Deploying with Helm</title><link>https://go-steer.github.io/simian-agent/docs/deploy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/deploy/</guid><description>&lt;p&gt;The Helm chart in &lt;code&gt;deploy/helm/simian/&lt;/code&gt; runs the controller in-cluster. It pulls the image from &lt;code&gt;ghcr.io/go-steer/simian-agent&lt;/code&gt;, published automatically by &lt;code&gt;.github/workflows/release.yml&lt;/code&gt; on each &lt;code&gt;v*&lt;/code&gt; tag push.&lt;/p&gt;
&lt;h2 id="install-patterns"&gt;Install patterns&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Default install (uses Chart.AppVersion as the image tag).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm upgrade --install simian deploy/helm/simian -n simian-system --create-namespace
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Pin a specific published tag.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm upgrade --install simian deploy/helm/simian -n simian-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set image.tag&lt;span class="o"&gt;=&lt;/span&gt;v0.1.3-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enable the M3 in-controller SUT path (required for `simian sut deploy --use-controller`).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm upgrade --install simian deploy/helm/simian -n simian-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set sutInController.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Recommended starting point: layer the &amp;#34;fully-baked-defaults&amp;#34; overlay&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on top of the chart defaults. Pins a known-verified image tag, tightens&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# the executor safety policy, leaves experimental features off. See&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# examples/values-baked-defaults.yaml for what each value is doing and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# the maintenance contract.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm upgrade --install simian deploy/helm/simian -n simian-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --create-namespace &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -f examples/values-baked-defaults.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ad-hoc-dev-images"&gt;Ad-hoc dev images&lt;/h2&gt;
&lt;p&gt;For dev builds without cutting a release tag, push your own image:&lt;/p&gt;</description></item><item><title>Using the chaos engines</title><link>https://go-steer.github.io/simian-agent/docs/chaos-engines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/chaos-engines/</guid><description>&lt;p&gt;Simian ships three chaos engines. Each is a &lt;code&gt;simian.ChaosDriver&lt;/code&gt; registered with the executor; the LLM sees all of them via the catalog mechanism and can pick whichever fits the plan.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Engine&lt;/th&gt;
 &lt;th&gt;What it does&lt;/th&gt;
 &lt;th&gt;When to use it&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chaos-mesh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The full Chaos Mesh CRD catalog: PodChaos, StressChaos, IOChaos, TimeChaos, NetworkChaos, etc.&lt;/td&gt;
 &lt;td&gt;Default for non-network chaos. NetworkChaos is silently bypassed on GKE Dataplane V2 — see &lt;a href="https://go-steer.github.io/simian-agent/docs/known-limitations/"&gt;Known limitations&lt;/a&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;network-policy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Standard &lt;code&gt;networking.k8s.io/v1&lt;/code&gt; NetworkPolicy partitions (deny ingress / egress / both).&lt;/td&gt;
 &lt;td&gt;Network partition chaos on GKE DPv2 (or any cluster where NetworkChaos isn&amp;rsquo;t reliable). Partition only — no delay / loss / jitter.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;envoy-fault&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;HTTP-layer delay + abort via an injected Envoy sidecar. Two kinds: &lt;code&gt;EnvoyHttpDelay&lt;/code&gt;, &lt;code&gt;EnvoyHttpAbort&lt;/code&gt;.&lt;/td&gt;
 &lt;td&gt;HTTP/gRPC delay or error injection on DPv2. Requires the SUT to be deployed with &lt;code&gt;--no-envoy-faults=false&lt;/code&gt; (off by default — see &lt;a href="https://go-steer.github.io/simian-agent/docs/known-limitations/#envoy-injection-breaks-grpc-kubelet-probes"&gt;Known limitations&lt;/a&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="directed-control-patterns"&gt;Directed-control patterns&lt;/h2&gt;
&lt;p&gt;All three engines accept the same &lt;code&gt;simian chaos --engine ... --kind ... --spec '&amp;lt;inline JSON&amp;gt;'&lt;/code&gt; shape:&lt;/p&gt;</description></item><item><title>CLI reference</title><link>https://go-steer.github.io/simian-agent/docs/cli-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/cli-reference/</guid><description>&lt;p&gt;&lt;code&gt;simian&lt;/code&gt; is a single binary with cobra subcommands. This page is generated from &lt;code&gt;simian &amp;lt;cmd&amp;gt; --help&lt;/code&gt; output.&lt;/p&gt;
&lt;p&gt;To get the most up-to-date reference for any single command, run it with &lt;code&gt;--help&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;simian --help
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;simian serve --help
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;simian chaos --help
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;simian sut deploy --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="subcommand-index"&gt;Subcommand index&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Subcommand&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;simian arena&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Manage chaos arena namespaces (create/destroy/describe). The arena is the namespace+RBAC unit of isolation for chaos.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;simian sut&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Manage Systems Under Test (deploy/destroy/list). Built-in SUT: Online Boutique.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;simian serve&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Run the controller: Fault Executor + MCP server + autonomous loop.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;simian chaos&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Submit a fault either as plain-text intent (LLM-translated) or as a hand-built FaultManifest (deterministic-control). Also list/clear active faults.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;simian plan&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generate an &lt;code&gt;AttackPlan&lt;/code&gt; against a real arena and emit it as JSON. Default &lt;code&gt;--dry-run=true&lt;/code&gt; does not apply.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;simian evaluate&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stub until M5 (scenario data export).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="common-flag-patterns"&gt;Common flag patterns&lt;/h2&gt;
&lt;h3 id="eligibility"&gt;Eligibility&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;--eligible-namespace &amp;lt;ns&amp;gt;&lt;/code&gt; (repeatable, &lt;code&gt;simian serve&lt;/code&gt;) overrides the default annotation-based lookup. Without it, the controller treats any namespace with &lt;code&gt;simian.chaos/eligible=&amp;quot;true&amp;quot;&lt;/code&gt; as eligible.&lt;/p&gt;</description></item><item><title>Helm values reference</title><link>https://go-steer.github.io/simian-agent/docs/helm-values/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/helm-values/</guid><description>&lt;p&gt;The chart is at &lt;code&gt;deploy/helm/simian/&lt;/code&gt;. Reference for every value lives in the chart&amp;rsquo;s &lt;a href="https://github.com/go-steer/simian-agent/blob/main/deploy/helm/simian/values.yaml"&gt;&lt;code&gt;values.yaml&lt;/code&gt;&lt;/a&gt; — that file has long inline comments explaining each setting and is the canonical source. This page summarizes by category.&lt;/p&gt;
&lt;p&gt;For installs that want a known-good starting point rather than the chart defaults, layer the &lt;a href="https://github.com/go-steer/simian-agent/blob/main/examples/values-baked-defaults.yaml"&gt;recommended overlay&lt;/a&gt; on top.&lt;/p&gt;
&lt;h2 id="image"&gt;Image&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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.repository&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ghcr.io/go-steer/simian-agent&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Published by the release workflow on every &lt;code&gt;v*&lt;/code&gt; tag.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;image.tag&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt; (falls back to &lt;code&gt;Chart.AppVersion&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Pin explicitly for production so chart upgrades don&amp;rsquo;t silently change the running binary.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;image.pullPolicy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;IfNotPresent&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="eligibility"&gt;Eligibility&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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;eligibleNamespaces&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Static allowlist. When empty, the controller falls back to annotation-based lookup (&lt;code&gt;simian.chaos/eligible=&amp;quot;true&amp;quot;&lt;/code&gt;), which is the preferred mode for installations using &lt;code&gt;simian arena create&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="provisioner-subsystem-m2-part-a"&gt;Provisioner subsystem (M2 Part A)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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;provisioner.enabled&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ships the &lt;code&gt;simian-provisioner&lt;/code&gt; SA + ClusterRole + ValidatingAdmissionPolicy backstop. Disable for installs where arenas are managed by an operator using their kubeconfig (no in-cluster provisioner).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="llm-provider"&gt;LLM provider&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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;llm.provider&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;gemini&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;gemini&lt;/code&gt; or &lt;code&gt;stub&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;llm.model&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt; (default &lt;code&gt;gemini-2.5-pro&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;llm.vertex.enabled&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Vertex via Workload Identity (production-recommended).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;llm.vertex.project&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;gke-demos-345619&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Replace for your install.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;llm.vertex.location&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;us-central1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;llm.apiKey.enabled&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Alternative to Vertex; mounts a Kubernetes Secret.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;llm.apiKey.secretRef&lt;/code&gt; / &lt;code&gt;secretKey&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;simian-llm&lt;/code&gt; / &lt;code&gt;geminiApiKey&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="executor-safety-policy"&gt;Executor safety policy&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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;executor.durationCeiling&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;15m&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Hard cap per fault. Recommended overlay: &lt;code&gt;5m&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;executor.permittedTiers&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[namespace, node]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Blast-radius tiers permitted. Recommended overlay: &lt;code&gt;[namespace]&lt;/code&gt; (opt-in to node tier per install).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;executor.maxConcurrentFaults&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;0&lt;/code&gt; (no cap)&lt;/td&gt;
 &lt;td&gt;Total leased faults across namespaces. Recommended overlay: &lt;code&gt;1&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;executor.minCooldown&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;0s&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Per-namespace cooldown. Recommended overlay: &lt;code&gt;60s&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;executor.recentFaultsCapacity&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bounded ring backing the &lt;code&gt;get_recent_faults&lt;/code&gt; MCP tool.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="topology--sut"&gt;Topology + SUT&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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;topology.resync&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;30s&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Informer resync interval. Recommended overlay: &lt;code&gt;60s&lt;/code&gt; for prod (lower API server load).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sutInController.enabled&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Required for &lt;code&gt;simian sut deploy --use-controller&lt;/code&gt; (the in-controller SUT path). Recommended overlay: &lt;code&gt;true&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sutInjection.envoyFaults&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Whether to inject the Envoy fault sidecar into SUT Deployments. &lt;strong&gt;Off by default&lt;/strong&gt; because the iptables interception breaks gRPC kubelet probes — see &lt;a href="https://go-steer.github.io/simian-agent/docs/known-limitations/"&gt;Known limitations&lt;/a&gt;. Only enable for SUTs whose probes are HTTP-only or TCP-only.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="autonomous-mode"&gt;Autonomous mode&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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;autonomous.enabled&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;When true, the controller runs the autonomous planning loop.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;autonomous.namespaces&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Required when &lt;code&gt;enabled: true&lt;/code&gt;. Arena namespaces the loop targets.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;autonomous.cycleInterval&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;5m&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Recommended overlay: &lt;code&gt;10m&lt;/code&gt; (slower; more time to observe).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;autonomous.maxFaultsPerCycle&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Recommended overlay: &lt;code&gt;1&lt;/code&gt; (one fault per cycle to start).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;autonomous.maxSeverityPerCycle&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;namespace&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Highest blast tier the loop will apply.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;autonomous.hypothesisHint&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Optional soft preference passed to the LLM. Use this to bias toward newer engines (network-policy, envoy-fault).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="mcp-server"&gt;MCP server&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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;mcp.port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;8081&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mcp.serviceType&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ClusterIP&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="resources--security"&gt;Resources + security&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Value&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.requests.cpu&lt;/code&gt; / &lt;code&gt;.memory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;100m&lt;/code&gt; / &lt;code&gt;128Mi&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Recommended overlay: &lt;code&gt;200m&lt;/code&gt; / &lt;code&gt;256Mi&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;resources.limits.cpu&lt;/code&gt; / &lt;code&gt;.memory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;500m&lt;/code&gt; / &lt;code&gt;512Mi&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Recommended overlay: &lt;code&gt;1000m&lt;/code&gt; / &lt;code&gt;1Gi&lt;/code&gt; (prevents OOM during LLM bursts).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;podSecurityContext&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;restricted-PSS-compatible&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;runAsNonRoot: true&lt;/code&gt;, &lt;code&gt;runAsUser: 65532&lt;/code&gt;, &lt;code&gt;seccompProfile.type: RuntimeDefault&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Known limitations</title><link>https://go-steer.github.io/simian-agent/docs/known-limitations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/known-limitations/</guid><description>&lt;p&gt;This page is the canonical place to land if a fault &amp;ldquo;applied successfully&amp;rdquo; but didn&amp;rsquo;t appear to do anything, or if a SUT pod refuses to come up after enabling Envoy injection.&lt;/p&gt;
&lt;h2 id="gke-dataplane-v2-silently-breaks-chaos-meshs-networkchaos"&gt;GKE Dataplane V2 silently breaks Chaos Mesh&amp;rsquo;s NetworkChaos&lt;/h2&gt;
&lt;p&gt;Chaos Mesh installs a &lt;code&gt;netem&lt;/code&gt; qdisc on the pod&amp;rsquo;s &lt;code&gt;eth0&lt;/code&gt;, which we verified is present at the kernel level. But Dataplane V2 routes pod-to-pod traffic through eBPF maps that bypass the tc qdisc layer, so the latency / loss never gets applied. The &lt;code&gt;Sent ... pkt&lt;/code&gt; counter on the qdisc stays flat. This is a Chaos Mesh + Cilium incompatibility, not a Simian bug.&lt;/p&gt;</description></item><item><title>Contributing</title><link>https://go-steer.github.io/simian-agent/docs/contributing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/simian-agent/docs/contributing/</guid><description>&lt;p&gt;The canonical contributor guide lives at &lt;a href="https://github.com/go-steer/simian-agent/blob/main/CONTRIBUTING.md"&gt;&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;&lt;/a&gt; in the repo root. It covers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reporting bugs and requesting features.&lt;/li&gt;
&lt;li&gt;The PR workflow: branch from &lt;code&gt;main&lt;/code&gt;, conventional-commits messages, DCO sign-off.&lt;/li&gt;
&lt;li&gt;License headers (Apache 2.0; auto-checked by &lt;code&gt;dev/tools/lint-go&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Test discipline — unit tests live next to the code (&lt;code&gt;*_test.go&lt;/code&gt;); integration tests are gated by build tags; end-to-end acceptance plans live at the repo root as &lt;code&gt;acceptance-mN.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The maintenance contract for &lt;a href="https://github.com/go-steer/simian-agent/blob/main/examples/values-baked-defaults.yaml"&gt;&lt;code&gt;examples/values-baked-defaults.yaml&lt;/code&gt;&lt;/a&gt; — every PR that adds a chart value, hardens an experimental feature, or surfaces a footgun MUST update that overlay in the same PR.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="project-layout-high-level"&gt;Project layout (high-level)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Directory&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cmd/simian/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;CLI binary. Cobra subcommands: &lt;code&gt;arena&lt;/code&gt;, &lt;code&gt;sut&lt;/code&gt;, &lt;code&gt;serve&lt;/code&gt;, &lt;code&gt;chaos&lt;/code&gt;, &lt;code&gt;plan&lt;/code&gt;, &lt;code&gt;evaluate&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pkg/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Library packages: &lt;code&gt;arena/&lt;/code&gt;, &lt;code&gt;audit/&lt;/code&gt;, &lt;code&gt;catalog/&lt;/code&gt;, &lt;code&gt;driver/{chaosmesh,networkpolicy,envoyfault}&lt;/code&gt;, &lt;code&gt;executor/&lt;/code&gt;, &lt;code&gt;lease/&lt;/code&gt;, &lt;code&gt;llm/&lt;/code&gt;, &lt;code&gt;loop/&lt;/code&gt;, &lt;code&gt;mcp/&lt;/code&gt;, &lt;code&gt;planner/&lt;/code&gt;, &lt;code&gt;simian/&lt;/code&gt;, &lt;code&gt;sut/&lt;/code&gt;, &lt;code&gt;topology/&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;api/v1alpha1/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Typed CRDs / shared API structs.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;internal/testutil/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Fakes and fixtures shared across test packages.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;deploy/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kubernetes manifests + Helm chart (&lt;code&gt;deploy/helm/simian/&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;examples/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Manifest fragments + the recommended Helm values overlay.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dev/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Local + CI tooling (run from here, don&amp;rsquo;t reinvent).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;docs/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;This site&amp;rsquo;s source (&lt;code&gt;docs/site/&lt;/code&gt;) plus design / planning markdown.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.github/workflows/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Thin delegators to &lt;code&gt;dev/ci/presubmits/&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="getting-set-up"&gt;Getting set up&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/go-steer/simian-agent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; simian-agent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make all &lt;span class="c1"&gt;# build + unit tests + lint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dev/tools/ci &lt;span class="c1"&gt;# full presubmit (format / vet / build / lint / mod-tidy / unit / vuln)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For the docs site itself:&lt;/p&gt;</description></item></channel></rss>