<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Explanation on ZTD — Zero Trust Dev</title><link>https://ztd-98a2ef.gitlab.io/explanation/</link><description>Recent content in Explanation on ZTD — Zero Trust Dev</description><generator>Hugo</generator><language>en</language><atom:link href="https://ztd-98a2ef.gitlab.io/explanation/index.xml" rel="self" type="application/rss+xml"/><item><title>The zero-trust model</title><link>https://ztd-98a2ef.gitlab.io/explanation/zero-trust-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ztd-98a2ef.gitlab.io/explanation/zero-trust-model/</guid><description>&lt;h2 id="the-zero-trust-model"&gt;The zero-trust model&lt;a class="anchor" href="#the-zero-trust-model"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ZTD&amp;rsquo;s name is its thesis: &lt;strong&gt;the host never implicitly trusts the guest.&lt;/strong&gt; The
guest is treated as compromised-by-default, and ZTD&amp;rsquo;s job is to guarantee the
blast radius of anything that happens inside ends at the VM.&lt;/p&gt;
&lt;p&gt;This is what makes it safe to run an agent in &amp;ldquo;YOLO&amp;rdquo; mode — no per-action
approval prompts. The guardrail is a machine boundary, not a dialog box you&amp;rsquo;d
eventually click through anyway.&lt;/p&gt;</description></item><item><title>Architecture</title><link>https://ztd-98a2ef.gitlab.io/explanation/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ztd-98a2ef.gitlab.io/explanation/architecture/</guid><description>&lt;h2 id="architecture"&gt;Architecture&lt;a class="anchor" href="#architecture"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Two principles shape ZTD: &lt;strong&gt;one interface across every backend&lt;/strong&gt;, and &lt;strong&gt;all
orchestration tooling in Docker&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="one-interface-many-backends"&gt;One interface, many backends&lt;a class="anchor" href="#one-interface-many-backends"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; ztd CLI (Go / Cobra) ← the single binary; assets embedded
 │
 ├── host lane ─────────────────────────► vz (macOS)
 │ (bash, on the host) lima / Virtualization.framework
 │
 └── container lane
 │ Taskfile → Terraform root ← runs inside the toolbox container
 │ selects ONE backend module by TARGET
 ┌─────────────┼───────────────────────┐
 kvm-local proxmox ec2
 (libvirt) (bpg/proxmox) (aws provider)
 └─────────────┴───────────────────────┘
 │ all four consume the SAME
 cloud-init (Docker + Node + agent + creds)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The CLI routes each verb down one of two lanes. Most dispatch into the toolbox
container, which runs Task and Terraform; the host lane runs bash directly on the
host for the verbs that inspect or mutate host state (&lt;code&gt;check&lt;/code&gt;, &lt;code&gt;setup&lt;/code&gt;, the agent
workflow) and for the whole &lt;code&gt;vz&lt;/code&gt; backend, which has no usable Terraform provider
and drives Apple&amp;rsquo;s hypervisor from the host.&lt;/p&gt;</description></item><item><title>Cattle, not pets</title><link>https://ztd-98a2ef.gitlab.io/explanation/cattle-not-pets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ztd-98a2ef.gitlab.io/explanation/cattle-not-pets/</guid><description>&lt;h2 id="cattle-not-pets"&gt;Cattle, not pets&lt;a class="anchor" href="#cattle-not-pets"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A ZTD VM is &lt;strong&gt;cattle&lt;/strong&gt;: created for a task, run unattended, and destroyed. It is
never a &lt;strong&gt;pet&lt;/strong&gt; — a long-lived box you nurture, patch, and fear losing.&lt;/p&gt;
&lt;h3 id="the-lifecycle"&gt;The lifecycle&lt;a class="anchor" href="#the-lifecycle"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;up ─▶ provision ─▶ inject ephemeral key + synced secrets ─▶ sync/clone repo
 ─▶ launch agent (YOLO) ─▶ agent works autonomously
 ─▶ push result branch [+ open MR] ─▶ export audit ─▶ down (manual, v1)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The operator initiates; the run is autonomous. Results are durable because they
land in &lt;strong&gt;git&lt;/strong&gt; — a branch or merge request. The VM itself holds nothing of
value, so destroying it costs nothing.&lt;/p&gt;</description></item><item><title>Roadmap</title><link>https://ztd-98a2ef.gitlab.io/explanation/roadmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ztd-98a2ef.gitlab.io/explanation/roadmap/</guid><description>&lt;h2 id="roadmap"&gt;Roadmap&lt;a class="anchor" href="#roadmap"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ZTD is pre-v1. Phases 0, 1 and 2 are complete — all four backends are validated
end to end and the Go CLI ships as an installable binary. Phase 3 is in progress.&lt;/p&gt;
&lt;h3 id="phase-0--done"&gt;Phase 0 — done&lt;a class="anchor" href="#phase-0--done"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Dockerized Terraform + Taskfile. Backends &lt;code&gt;kvm&lt;/code&gt; (local) and &lt;code&gt;proxmox&lt;/code&gt;. Shared
cloud-init. Single interface via &lt;code&gt;TARGET&lt;/code&gt;. Host needs only Docker (plus
libvirt/qemu for local).&lt;/p&gt;
&lt;h3 id="phase-1--done"&gt;Phase 1 — done&lt;a class="anchor" href="#phase-1--done"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;All three backends — &lt;code&gt;kvm&lt;/code&gt;, &lt;code&gt;proxmox&lt;/code&gt;, and &lt;code&gt;ec2&lt;/code&gt; — validated end-to-end
(&lt;code&gt;./ztd test&lt;/code&gt; green on each).&lt;/p&gt;</description></item></channel></rss>