<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: shankar pratap</title>
    <description>The latest articles on DEV Community by shankar pratap (@shankar_pratap_f5a18b8e7e).</description>
    <link>https://dev.to/shankar_pratap_f5a18b8e7e</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4232450%2Fe11cce71-37dd-4cd8-b8ba-5a3dd5ff4faa.jpg</url>
      <title>DEV Community: shankar pratap</title>
      <link>https://dev.to/shankar_pratap_f5a18b8e7e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shankar_pratap_f5a18b8e7e"/>
    <language>en</language>
    <item>
      <title>Kill the Zombie, Not the Cluster: Building an Autonomous FinOps Tribunal on the Switch Protocol</title>
      <dc:creator>shankar pratap</dc:creator>
      <pubDate>Sat, 07 Nov 2026 16:33:48 +0000</pubDate>
      <link>https://dev.to/shankar_pratap_f5a18b8e7e/kill-the-zombie-not-the-cluster-building-an-autonomous-finops-tribunal-on-the-switch-protocol-k2n</link>
      <guid>https://dev.to/shankar_pratap_f5a18b8e7e/kill-the-zombie-not-the-cluster-building-an-autonomous-finops-tribunal-on-the-switch-protocol-k2n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Built for the **Flip the Switch Hackathon&lt;/em&gt;* · Track: Best Personal or Creative Workflow*&lt;br&gt;&lt;br&gt;
&lt;em&gt;Stack: Switch Protocol · Google Antigravity · TypeScript · AWS SDK · Vercel REST API&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;GitHub: &lt;a href="https://github.com/shankywho/StateReaper" rel="noopener noreferrer"&gt;github.com/shankywho/StateReaper&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Every engineering team has a closet full of digital ghosts.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;t3.medium&lt;/code&gt; instance launched for a prototype that shipped five months ago. An orphaned &lt;code&gt;m5.large&lt;/code&gt; runner left over from a perf sprint. A 500GB GP3 volume that was forgotten when someone terminated an EC2 instance without checking &lt;em&gt;"Delete on termination"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;According to Gartner and the FinOps Foundation, &lt;strong&gt;over 30% of enterprise cloud spend is completely wasted on abandoned, idle infrastructure&lt;/strong&gt;. That’s more than &lt;strong&gt;\$30 billion a year&lt;/strong&gt; spent keeping empty virtual machines warm.&lt;/p&gt;

&lt;p&gt;So why doesn’t every DevOps team simply run a cron job to kill idle servers?&lt;/p&gt;

&lt;p&gt;Because &lt;strong&gt;engineers fear breaking production.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The SRE Dilemma: Why Janitor Scripts Get Turned Off
&lt;/h2&gt;

&lt;p&gt;Years ago, our team set up an automated cleanup script. It ran every Sunday night at midnight, querying AWS CloudWatch for instances with average CPU utilization under 1%. If an instance stayed quiet for 48 hours, the script terminated it.&lt;/p&gt;

&lt;p&gt;It lasted three weeks.&lt;/p&gt;

&lt;p&gt;On the third Sunday, it deleted a batch data pipeline that only woke up on the first of the month, taking down our billing reconciliation. The post-mortem was brutal. The script was disabled by Monday morning, and the team went back to the old status quo: &lt;strong&gt;ignoring the AWS bill because manual audits take too long and automated scripts are too reckless.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Blind automation lacks context. It doesn't know who owns the box, whether a load balancer is routing traffic to it, or if someone was about to demo it to a customer on Monday morning.&lt;/p&gt;

&lt;p&gt;To fix cloud waste, you don't need a dumber cron job. You need an &lt;strong&gt;autonomous investigative body with human-in-the-loop governance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We built &lt;strong&gt;StateReaper&lt;/strong&gt;—an Agentic FinOps Tribunal powered by the &lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;Switch Protocol&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Concept: A Constitutional Separation of Powers in ChatOps
&lt;/h2&gt;

&lt;p&gt;Instead of building a monolithic script that acts as judge, jury, and executioner, StateReaper deploys &lt;strong&gt;three specialized AI agents&lt;/strong&gt; into a shared team chat room (Telegram or Mattermost) via Switch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                              STATE REAPER TRIBUNAL

┌────────────────────┐       ┌────────────────────┐       ┌────────────────────┐
│  @cost-telemetry   │       │ @triage-architect  │       │  @executioner-sre  │
│   (The Hunter)     │       │ (The Adjudicator)  │       │   (The Enforcer)   │
├────────────────────┤       ├────────────────────┤       ├────────────────────┤
│ • Read-only scan   │       │ • Blast radius map │       │ • Hard-gated       │
│ • CloudWatch &amp;amp; API │──────►│ • Risk assessment  │──────►│ • Snapshot backup  │
│ • Detects $ burn   │       │ • Drafts approval  │       │ • Terminate compute│
└────────────────────┘       └────────────────────┘       └─────────┬──────────┘
                                                                    │
                                                      Human SRE     │ Must match:
                                                      in Telegram   │ @executioner-sre approve &amp;lt;ID&amp;gt;
                                                           ▼        ▼
                                                    ┌──────────────────────────┐
                                                    │ 1. EBS Snapshot Backup   │
                                                    │ 2. Clean Termination     │
                                                    │ 3. SHA-256 Audit Record  │
                                                    └──────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;@cost-telemetry&lt;/code&gt; (The Hunter):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A strictly read-only scanner. It polls CloudWatch metrics and Vercel APIs. If a resource runs with &lt;code&gt;&amp;lt;0.1% CPU&lt;/code&gt; and &lt;code&gt;0 KB/s network ingress&lt;/code&gt; for &amp;gt;48 hours, it calculates the projected monthly waste and presents the finding to the tribunal room.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;@triage-architect&lt;/code&gt; (The Adjudicator):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It examines dependency trees, active Application Load Balancer target groups, subnet route tables, and PR merge statuses. It assigns a deterministic risk score (&lt;code&gt;LOW&lt;/code&gt;, &lt;code&gt;MEDIUM&lt;/code&gt;, or &lt;code&gt;HIGH&lt;/code&gt;) and drafts the exact approval command syntax the human operator must type.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;@executioner-sre&lt;/code&gt; (The Gated Enforcer):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The executioner possesses cloud teardown credentials, but it is &lt;strong&gt;code-locked and instruction-locked&lt;/strong&gt;. It refuses to act on agent recommendations alone. It will only execute when a verified human posts an explicit approval command into the Switch room.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Why Switch is the Irreplaceable Nexus: The "Dead Man's Switch"
&lt;/h2&gt;

&lt;p&gt;When evaluating multi-agent architectures, the biggest risk is the &lt;strong&gt;runaway deletion loop&lt;/strong&gt;—an AI agent hallucinating, getting tricked, or autonomously deciding to tear down an entire cluster.&lt;/p&gt;

&lt;p&gt;In StateReaper, &lt;strong&gt;Switch is our physical security interlock&lt;/strong&gt;. We call this the &lt;strong&gt;Dead Man's Switch Invariant&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/router.ts - The Core Code-Level Safety Gate&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;routeMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SwitchRawEvent&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;ParsedMessage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Rule 1: Ignore presence/system noise&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;unroutable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Rule 2: Strictly enforce human origin&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;human&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;unroutable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// AI agents can NEVER approve teardowns!&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Rule 3: Anchored regex lock&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^@executioner-sre&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;+approve&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;([&lt;/span&gt;&lt;span class="sr"&gt;a-zA-Z0-9_-&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;approval_command&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;resourceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;approvedBy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;unroutable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because &lt;code&gt;@executioner-sre&lt;/code&gt; subscribes to the Switch Server-Sent Events (SSE) stream and requires &lt;code&gt;sender.kind === 'human'&lt;/code&gt;, &lt;strong&gt;if Switch is disconnected or turned off, zero destructive commands can physically execute.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Switch provides three things we could not build without it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Agent Decoupled State:&lt;/strong&gt; Agents communicate through room events rather than shared in-memory variables or direct API calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatOps Bridge:&lt;/strong&gt; SREs receive alerts and authorize destructions directly from Telegram on their phone while commuting or on call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity Verification:&lt;/strong&gt; The Switch protocol tags human messages separately from agent messages, preventing AI agents from colluding or self-approving.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Walking Through the Tribunal: Hunting a \$205/mo Zombie
&lt;/h2&gt;

&lt;p&gt;Here is what a live lifecycle looks like when StateReaper is running in our Telegram room:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Detection
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;@cost-telemetry&lt;/code&gt; discovers an idle EC2 instance in &lt;code&gt;eu-west-1&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;⚠️ [IDLE RESOURCE DETECTED]
• Resource Type : AWS EC2 Instance (m5.large)
• Resource ID   : i-0a3b7c1e5f92d
• Idle Duration : 112h
• Avg CPU       : 0.008% (&amp;lt;0.1% threshold)
• Net Ingress   : 0 KB/s

💸 Cost Projection
• Daily Burn    : $6.84
• Monthly Waste : $205.20
• Tags          : Project=q3-perf-sprint, Owner=ops-team

🔎 Flagging for blast-radius evaluation. cc: @triage-architect
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Adjudication
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;@triage-architect&lt;/code&gt; automatically inspects the dependency graph:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔍 [BLAST RADIUS EVALUATION]
• Target Resource : i-0a3b7c1e5f92d (ec2)
• Assessed Risk   : LOW
• Recommendation  : snapshot-and-terminate
• Projected Waste : $205.20/mo

🔗 Dependency Audit:
  • Zero active network connections (0 KB/s ingress)
  • No active Application Load Balancer target bindings
  • Subnet security groups show no external routing activity

🛡️ Safety Gate: Human authorization required before destruction.
👉 Reply with: `@executioner-sre approve i-0a3b7c1e5f92d`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Safety Defense Against Adversarial Payloads
&lt;/h3&gt;

&lt;p&gt;Before testing human approval, we put the safety gate through adversarial stress testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Attack 1 (AI Agent Collusion):&lt;/strong&gt; &lt;code&gt;@triage-architect&lt;/code&gt; posts &lt;code&gt;@executioner-sre approve i-0a3b7c1e5f92d&lt;/code&gt;.
&lt;em&gt;Result:&lt;/em&gt; &lt;strong&gt;REJECTED.&lt;/strong&gt; Switch router flags &lt;code&gt;sender.kind !== 'human'&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attack 2 (Shell Injection):&lt;/strong&gt; An attacker posts &lt;code&gt;@executioner-sre approve i-0a3b7c1e5f92d; rm -rf /&lt;/code&gt;.
&lt;em&gt;Result:&lt;/em&gt; &lt;strong&gt;REJECTED.&lt;/strong&gt; Anchored regex &lt;code&gt;^@executioner-sre approve ([a-zA-Z0-9_-]+)$&lt;/code&gt; rejects the command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attack 3 (Informal Chat):&lt;/strong&gt; Someone says &lt;em&gt;"Yeah, just delete that server please."&lt;/em&gt;
&lt;em&gt;Result:&lt;/em&gt; &lt;strong&gt;IGNORED.&lt;/strong&gt; Executioner stays inert.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Human Sign-Off &amp;amp; Instant Rollback Protection
&lt;/h3&gt;

&lt;p&gt;An SRE replies from Telegram:&lt;br&gt;
&lt;code&gt;@executioner-sre approve i-0a3b7c1e5f92d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Within 1.5 seconds, the executioner runs a three-step safety pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Preservation:&lt;/strong&gt; Calls AWS EC2 &lt;code&gt;CreateSnapshotCommand&lt;/code&gt; on the root attached volume (&lt;code&gt;vol-0a3b7c1e5f92d-root&lt;/code&gt;), tagging it &lt;code&gt;ManagedBy: StateReaper&lt;/code&gt;. If anyone ever needs a file from that machine, it can be restored in &lt;strong&gt;under 60 seconds&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reclamation:&lt;/strong&gt; Issues &lt;code&gt;TerminateInstancesCommand&lt;/code&gt; to permanently decommission the compute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cryptographic Proof:&lt;/strong&gt; Computes a SHA-256 digest of the entire event payload and appends an immutable line to &lt;code&gt;finops-audit.log&lt;/code&gt;.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ [RECLAMATION COMPLETE]
• Resource ID    : i-0a3b7c1e5f92d (ec2)
• Preservation   : EBS Snapshot snap-0a3b7c1e5f92d-mw6jm011
• Termination    : Instance cleanly terminated &amp;amp; decommissioned
• Authorized By  : @shankar
• Audit Integrity: Recorded in finops-audit.log
  SHA-256 Digest : 8c0f9e2df49c09f8ebe690b4805a1f368f4bba5f748466dc4edf07d7b0158e0c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Verifying the Cryptographic Audit Trail (SOC2 / ISO 27001)
&lt;/h2&gt;

&lt;p&gt;Enterprise compliance teams hate automated deletion because there's often no tamper-evident record of who authorized what.&lt;/p&gt;

&lt;p&gt;StateReaper includes a CLI verifier (&lt;code&gt;npm run audit:verify&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm run audit:verify

Auditing file: /Users/shankar/PROJECTS/StateReaper/statereaper-finops/audit-logs/demo-audit.log...

┌─────┬─────────────────────┬──────────────┬───────────────┬────────────────────┬───────────┐
│ &lt;span class="c"&gt;#   │ Timestamp           │ Resource ID  │ Approved By   │ SHA-256 Digest     │ Status    │&lt;/span&gt;
├─────┼─────────────────────┼──────────────┼───────────────┼────────────────────┼───────────┤
│ 1   │ 2026-11-07T02:13:12 │ i-0a3b7c1e5f │ shankar       │ ccb73e577acb4bd... │ VALID     │
│ 2   │ 2026-11-07T02:15:28 │ i-0a3b7c1e5f │ shankar       │ 2454de9ee0d11c8... │ VALID     │
│ 3   │ 2026-11-07T02:15:52 │ i-0a3b7c1e5f │ shankar       │ 8f0e0908ebe4a96... │ VALID     │
└─────┴─────────────────────┴──────────────┴───────────────┴────────────────────┴───────────┘

VERIFICATION SUMMARY
• Total Audit Records       : 3
• Cryptographically Valid   : 3 / 3 &lt;span class="o"&gt;(&lt;/span&gt;100% Intact&lt;span class="o"&gt;)&lt;/span&gt;
• Root Snapshot Protected   : 3 / 3 &lt;span class="o"&gt;(&lt;/span&gt;Zero data loss guarantee&lt;span class="o"&gt;)&lt;/span&gt;
• Audit Status              : PASSED — AUDIT INTEGRITY SEALED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If an unauthorized party manually edits an audit log line (e.g. altering who approved a teardown), the SHA-256 avalanche effect immediately flags the record as &lt;strong&gt;TAMPERED&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Learned Building on Switch
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Role separation beats single-agent monolithic prompts every time.&lt;/strong&gt; Trying to make one LLM scan, evaluate, decide, and delete creates prompt bloat and unpredictable hallucinations. Separating them into isolated personas with strict addressing rules (&lt;code&gt;statereaper-pipeline.template.yaml&lt;/code&gt;) made behavior deterministic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;sender.kind&lt;/code&gt; is an underrated security superpower.&lt;/strong&gt; By distinguishing between human senders and agent senders at the protocol layer, Switch gives developers a native primitive for building human-in-the-loop safety gates without having to parse usernames.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local developer experience matters.&lt;/strong&gt; To make StateReaper 100% clone-and-run reproducible for judges without requiring an external Go or Rust daemon, we built an embedded Switch server (&lt;code&gt;npm run switch:server&lt;/code&gt;) directly in Node.js.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Try It in 2 Seconds
&lt;/h2&gt;

&lt;p&gt;You can clone and run the full end-to-end tribunal simulation on your machine without needing AWS credentials or a Switch server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/shankywho/StateReaper.git &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;StateReaper
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# 1. Run the 2-second automated tribunal walkthrough&lt;/span&gt;
npm run demo

&lt;span class="c"&gt;# 2. Launch the interactive browser dashboard&lt;/span&gt;
npm run ui
&lt;span class="c"&gt;# 👉 Open http://127.0.0.1:3333&lt;/span&gt;

&lt;span class="c"&gt;# 3. Run all 37 unit &amp;amp; integration tests&lt;/span&gt;
npm run verify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check out the full repository and architecture docs at &lt;strong&gt;&lt;a href="https://github.com/shankywho/StateReaper" rel="noopener noreferrer"&gt;github.com/shankywho/StateReaper&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Zero cloud waste. Zero outage anxiety. 100% governed by Switch.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>aws</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
  </channel>
</rss>
