STET //

Your AI coding agent stops
and waits for your verdict.

STET is a human-in-the-loop review gate for AI coding agents. Your agent pushes the spec, mockup, diagram or research it just produced, then blocks — until you approve it or send it back with notes. It reads the verdict and keeps going, or revises and pushes again.

$ curl -fsSL https://stet.fyi/cli/install.sh | sh

Works with Claude Code, Codex, and any agent that can run a command.

How the review loop works

1 / Your agent pushes

Versioned, immutable content sets — Markdown, HTML, images, PDFs, whole file sets. Every push is a new version, so nothing is overwritten and the history stays readable.

stet push <slug> <file...> --wait

2 / You approve, or you don't

Open the link. Read the rendered page — the mockup as a page, the diagram as a diagram, the checklist as a checklist. Approve it, or request changes with notes.

3 / Your agent reads the verdict

It was blocked this whole time. Now it knows: it moves on, or it revises and pushes again. No polling loop for you to write.

stet wait <slug>

One flag turns a push into a checkpoint

$ stet push auth-spec spec.md --wait
{"slug":"auth-spec","version":3,…}
https://stet.fyi/contents/auth-spec
stet: waiting for review of auth-spec v3 (every 15s, Ctrl-C to stop)…
auth-spec v3  APPROVED  ship it
$

That pause is the product. stet push <slug> <file...> --wait blocks the agent until there's a verdict; stet wait <slug> does the same for something already pushed. Nothing to orchestrate, no webhook to receive, no callback server to run.

Review what the agent made, not a diff of it

Agents produce documents, not just code: specs, research write-ups, architecture diagrams, HTML mockups. STET renders them.

The STET review screen: a pushed spec with its version history, and Approve and Request changes buttons
The screen your agent is blocked on
A mermaid flowchart pushed by an agent, rendered as a zoomable diagram inside STET
A mermaid block in the spec, rendered server-side to SVG
  • Diagrams render on the server

    A mermaid or vega-lite block in your Markdown becomes an SVG — zoomable, fullscreen, no client-side JavaScript.

  • HTML previews are sandboxed, and honest

    STET lints every HTML push, flags what the sandboxed preview can't render, and tells the agent — so it fixes the mockup instead of you discovering it was wrong.

  • Checklists survive the next version

    Ticks are keyed to the item's text, so they follow the item when the agent pushes a new version.

  • Every version stays

    Immutable pushes, full history, and a signed view link you can send to someone without an account.

Any agent, any machine, one binary

Per-agent tokens, not a vendor session. An unattended agent on any model can push and block on a verdict — and you can revoke one agent without touching the others.

The CLI is a single static binary: Linux, macOS and Windows, amd64 and arm64. No SDK, no runtime, no vendor client. The only other thing it needs is your password-manager CLI, so the token stays in your vault instead of a dotfile.

Agents enroll themselves from an enroll token you generate — stet enroll, once, per project. For Claude Code, stet install-hooks wires the session context so every session knows what STET is for. Install the CLI.

Where your work lives

Worth knowing before you push a spec you care about.

  • On a server in Germany

    Content you push is stored on STET's own machine in Germany and served to you over HTTPS — not handed to a third-party object store.

  • Tokens are stored hashed

    Agent tokens live as SHA-256 digests. STET can't show you a token after it's issued, and neither can anyone who reads the database.

  • Share links expire

    The login-free view links (/v/…) are signed, read-only, scoped to one version, and expire after 24 hours.

  • Revoke one agent, not all of them

    Every token is per-agent and revocable from the web UI. Revoking one doesn't disturb the others.

  • Archives are deleted on a schedule

    Archived content is cleaned up on a window that depends on your plan — the numbers are in Pricing, below.

Pricing

Every price includes tax. Monthly, cancel any time.

Free

free

  • 10 MB storage
  • 30 pushes to try it
  • 3 agents
  • Archive cleaned periodically

mini

€4,99/mo

incl. tax

  • 100 MB storage
  • Unlimited pushes
  • Unlimited agents
  • Archive kept 30 days

ultra

€19,99/mo

incl. tax

  • 500 MB storage
  • Unlimited pushes
  • Unlimited agents
  • Archive kept indefinitely

Start free — no card to begin. Payments and tax are handled by Stripe as the seller of record; your statement shows LINK.COM* and receipts come from Link. Questions about a plan, a charge or an invoice — [email protected].

Questions

Which agents does this work with?
Any of them. STET is a CLI, not an integration: if your agent can run a shell command, it can push and block on a verdict — any model, any harness, no SDK. Claude Code additionally gets stet install-hooks to wire the session context for you.
What happens if I never review something?
The agent blocks until you do, or until you stop it (Ctrl-C). stet feedback is idempotent, so an agent can re-read verdicts safely.
Is this code review?
No. It's review of what the agent produced before the code — specs, plans, mockups, diagrams, research. Your existing pull-request review stays where it is.
Can I try it without paying?
Yes. The free tier gives you 30 pushes and 3 agents, no card.
How do I point an agent at this?
Agents enroll themselves from an enroll token you generate; no manual wiring per agent. Run stet enroll, then sign up to get one. This page has a markdown version written for agents — hand them the URL and they can onboard themselves.
stet /stɛt/ verb · proofreading

To cancel a marked correction and let the original stand — from the Latin stet, “let it stand.” An editor writes it beside a change they’ve decided to keep.

Here, it’s the one word your agent is waiting for. //