diff --git a/site/.nojekyll b/site/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/site/index.html b/site/index.html
new file mode 100644
index 0000000..ab73520
--- /dev/null
+++ b/site/index.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+ Minimal unix-style inference harness. Prompt and context in on argv/stdin, answer on stdout, diagnostics on stderr, verdict in the exit code. Sibling binary clank-jev routes and gates. Not chat.
+
+ Install
+ Package clank-cli-app → binaries clank / clank-jev (package ≠ binary). Never cargo install clank (unrelated crates.io crate).
+ cargo install clank-cli-app --locked # -> ~/.cargo/bin/clank and clank-jev
+ Fallback (pinable):
+ cargo install --locked --git https://github.com/makefunstuff/clank --tag v0.1.0
+ Prebuilt archives (linux x86_64, macOS arm64/x86_64) are on the v0.1.0 release.
+
+ 30s smoke
+ After install, point at your OpenAI-compatible server and prove the pipe:
+ export CLANK_BASE_URL=http://127.0.0.1:8080/v1
+export CLANK_MODEL=$(curl -s "$CLANK_BASE_URL/models" | jq -r '.data[0].id')
+clank -m 'reply with exactly: pong' # -> pong, exit 0
+
+ Harness cost
+ 2026-09-22 · opencode-go/glm-5.3-flash · tools off · prompt → pong. Pipe vs agent CLI on the same model, not “fastest AI.” Agent harness tax still shows with --no-tools.
+
+ clank · 0.75s · ~5MB
+ pi · 2.2s · ~177MB
+ omp · 3.4s · ~371MB
+ opencode · 5.7s · ~562MB
+
+ Method and caveats: docs/history/clank-vs-agents-2026-09-22.md.
+
+ Docs
+
+
+
+
diff --git a/site/styles.css b/site/styles.css
new file mode 100644
index 0000000..0f404dc
--- /dev/null
+++ b/site/styles.css
@@ -0,0 +1,124 @@
+:root {
+ color-scheme: light dark;
+ --fg: #111;
+ --muted: #5a5a5a;
+ --warn: #8a5a00;
+ --bg: #fafafa;
+ --pre: #efefef;
+ --line: rgba(0, 0, 0, 0.14);
+ --link: #0645ad;
+}
+@media (prefers-color-scheme: dark) {
+ :root {
+ --fg: #ececec;
+ --muted: #9a9a9a;
+ --warn: #e0b060;
+ --bg: #111;
+ --pre: #1b1b1b;
+ --line: rgba(255, 255, 255, 0.14);
+ --link: #8ab4f8;
+ }
+}
+
+* { box-sizing: border-box; }
+
+body {
+ margin: 0;
+ font: 16px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif;
+ color: var(--fg);
+ background: var(--bg);
+ -webkit-font-smoothing: antialiased;
+}
+
+main {
+ max-width: 40rem;
+ margin: 0 auto;
+ padding: 2rem 1.15rem 3.5rem;
+}
+
+.top {
+ display: flex;
+ align-items: baseline;
+ gap: 0.75rem;
+ margin-bottom: 0.85rem;
+}
+
+h1 {
+ font-size: 1.65rem;
+ font-weight: 700;
+ letter-spacing: -0.025em;
+ line-height: 1.15;
+ margin: 0;
+}
+
+h2 {
+ font-size: 0.8rem;
+ font-weight: 700;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ color: var(--muted);
+ margin: 1.85rem 0 0.55rem;
+ padding-bottom: 0.3rem;
+ border-bottom: 1px solid var(--line);
+}
+
+.lede {
+ margin: 0 0 0.25rem;
+ font-size: 1.05rem;
+ line-height: 1.45;
+ max-width: 36rem;
+}
+
+.warn {
+ margin: 0;
+ color: var(--warn);
+ font-size: 0.8rem;
+ font-weight: 650;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+}
+
+.note {
+ color: var(--muted);
+ font-size: 0.92rem;
+}
+
+p, li { margin: 0 0 0.55rem; }
+ul, ol { margin: 0 0 0.65rem; padding-left: 1.2rem; }
+li { margin-bottom: 0.28rem; }
+li pre { margin-top: 0.4rem; }
+
+a { color: var(--link); }
+
+.links {
+ list-style: none;
+ padding-left: 0;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.35rem 1.1rem;
+}
+.links li { margin: 0; }
+
+code, pre {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
+ font-size: 0.84em;
+}
+:not(pre) > code {
+ padding: 0.08em 0.28em;
+ background: var(--pre);
+ border-radius: 3px;
+}
+pre {
+ margin: 0.4rem 0 0.75rem;
+ padding: 0.8rem 0.9rem;
+ background: var(--pre);
+ border-radius: 6px;
+ overflow-x: auto;
+ line-height: 1.4;
+ -webkit-overflow-scrolling: touch;
+}
+pre code {
+ font-size: 1em;
+ background: none;
+ padding: 0;
+}