---
title: v0.20.0
date: 2026-09-24
description: 'seite now works reliably for coding agents — Claude Code, Codex, OpenCode, and Cursor: no-TTY safe prompts, a real --json mode, a background-friendly dev server, and an MCP server every agent can load.'
tags:
- feature
- fix
---

## `seite check`: every problem in one pass

The new `seite check` command validates the whole site without touching `dist/`: `seite.toml` (including unknown keys, with "did you mean `minify`?" hints), frontmatter, shortcodes, data files, templates, rendering, internal links, and missing assets. Output is compiler-style — `content/posts/a.md:3:7: error[frontmatter-parse]: …` with a `hint:` line — and `--json` returns the same diagnostics with stable codes. `--strict` also fails on warnings. Coding agents get the same results from the new `seite_check` MCP tool.

## Better build errors

- `seite build` now reports every broken file at once instead of stopping at the first.
- Broken links and missing images, scripts, and stylesheets point at the source `.md`, template, or data file and line — not the generated HTML — with did-you-mean suggestions. `--strict` fails on both.
- Hugo-style shortcodes (`{{< /callout >}}`, `{{< youtube id="x" >}}`) get the corrected seite syntax in the hint; template errors name the template file and line, and render errors name the page and template.
- Links between content files written as relative `.md` paths (`[intro](../docs/intro.md)`) are rewritten to page URLs; ones that don't resolve are reported.
- A failed build no longer wipes `dist/`: full builds write to a staging directory and swap it in only on success.

## Works without a terminal

Every prompt now goes through one helper. Without a TTY, prompts use their default or fail with an error naming the flag to pass (for example `missing --deploy-target`) instead of `IO error: not a terminal`. The new global `-y/--yes` flag (or `SEITE_YES=1`) accepts confirmations. `seite deploy` refuses to continue past a failed pre-flight check — including a localhost `base_url` — without `--yes`, before committing, pushing, or uploading anything.

`seite serve --no-repl` runs the dev server without the interactive prompt, and the server now keeps running when stdin closes, so it can run in the background. An explicit `--port` that is already taken now fails clearly.

## Real `--json` output

`--json` used to be accepted and ignored. Now every supported command prints exactly one JSON document on stdout — `{"ok":true,"command":"build","data":{...},"warnings":[]}` on success, `{"ok":false,"error":{"message":...,"chain":[...]}}` with a non-zero exit on failure — and all human output moves to stderr. `build` reports counts, broken links, and per-step timings; `new` reports the created path and URL. Commands that stream or take over the terminal (`serve`, `agent`, `mcp`, `completions`, `self-update`) reject `--json`.

## MCP server fixes

- **Loads in Claude Code.** `seite init` now registers the server in `.mcp.json` (Claude Code ignores `mcpServers` in `.claude/settings.json`) and pre-approves it. `seite upgrade` migrates existing sites without dropping other servers, and `seite agent` passes the MCP config through.
- **Correct results.** `seite_build` reports warnings (including template fallbacks) and broken links, and accepts `strict`. Content listings and search use the real output URLs and include each item's source `path`. Config is re-read on every request, and load errors are shown verbatim.
- **Safer writes.** `seite_create_content` refuses to overwrite existing files and rejects empty slugs. Theme names are validated, and a customized `base.html` is backed up before a theme is applied.
- **Spec-compliant errors.** Tool failures are returned as `isError` results with actionable messages.

## Codex, OpenCode, and Cursor support

`seite init --agents claude,codex,opencode,cursor` (all by default) now sets a site up for each coding agent, not just Claude Code:

- **Codex:** `.codex/config.toml` registers the MCP server with its tools pre-approved (Codex applies it once you trust the project), and skills go to `.agents/skills/`.
- **OpenCode:** `opencode.json` registers the server and mirrors the Claude allowlist in its `permission` block.
- **Cursor:** `.cursor/mcp.json`, `.cursor/cli.json` permissions for `cursor-agent`, and `.cursor/rules/*.mdc` generated from the same rules as `.claude/rules/`.
- **AGENTS.md** gets a per-agent setup table (config file and one-time approval step) and an index of the context rules, so agents without path-scoped rules can read them on demand.

`seite upgrade` adds the files for existing sites and merges into config files you already have without dropping your settings or reordering keys. Pass `--agents` to change the selection.

## Agents check their own work

When a coding agent finishes its turn in a seite site, a stop hook runs `seite check --hook <agent>` and hands any errors back to the agent so it fixes them before stopping (warnings never block, and it continues at most once per turn). `seite init` and `seite upgrade` install it for each selected agent: Claude Code (`.claude/settings.json`), Codex (`.codex/hooks.json` — approve it once in `/hooks`), Cursor (`.cursor/hooks.json`), and OpenCode (`.opencode/plugins/seite-check.js`). Delete a hook to opt out; `seite upgrade` won't re-add it. Everyone working on the site needs seite 0.20 or newer on `PATH`.

## `/seite` workflow skill

A new `seite` skill gives every agent one entry point for site work: `/seite check`, `new`, `preview`, `build`, `deploy` (dry run first, then asks), `theme`, and `collection`. It ships to `.claude/skills/` and `.agents/skills/`, with a `/seite` command wrapper for OpenCode. Interactive `seite init` preselects the coding agents it finds installed.

## MCP server upgrades

- Negotiates current MCP protocol versions (through 2026-07-28), sends server `instructions`, and marks each tool with read-only/destructive annotations. Results include `structuredContent` validated against each tool's `outputSchema`.
- New tools: `seite_check`, `seite_get_page` (one page as the build sees it), `seite_list_templates` (overrides, blocks, context variables, shortcodes), `seite_update_frontmatter` (edits frontmatter, keeps the body byte-for-byte), `seite_create_collection`, and `seite_content_stats`.
- `seite_build` also returns missing assets and diagnostics.
- `seite_update_frontmatter` keeps comments and formatting in frontmatter.

## `seite agent` for any agent

`seite agent --with codex|opencode|cursor` (or `SEITE_AGENT`) runs the other agents as well as Claude Code. The agent prompt no longer repeats what's already in AGENTS.md, and Claude Code's shell access is limited to `seite` and read-only `git` commands.

## Other fixes

- `--json` output is only the JSON document; human status lines appear only with `--verbose`. Output from child processes (git, wrangler, …) is kept off stdout on every platform.
- Dependencies updated (clap, console, open, toml, thiserror, ureq, sha2 0.11, getrandom 0.4, katex-rs 0.3, and quick-xml 0.41, which clears RUSTSEC-2026-0194/0195).
- Shortcode render errors now include the underlying template error instead of just "Failed to render".
- A data file next to a same-named data directory (`authors.yaml` + `authors/`) is always reported as a conflict instead of silently depending on directory order.
- `seite workspace add` works on a freshly initialized workspace.
- Stale subdomain output is removed once no collection uses a subdomain.
- `seite check` works in workspaces (every site, or `--site`), and workspace builds report unknown config keys and located link diagnostics under `--strict`.
- The update check is skipped under `CI`, `DO_NOT_TRACK`, `SEITE_NO_UPDATE_CHECK`, without a terminal, or with `--json`, and prints to stderr.
- `seite build` shows per-step timings only with `--verbose`.
- `--config` now works when it points at a `seite.toml`.
- `seite new` refuses to overwrite an existing file.
- Errors no longer end with an empty `Caused by:` line.
- `init --help` lists `netlify` as a deploy target.
- Generated agent context and docs corrected: theme count, command list, MCP resources, `mermaid`, `[access]`, plus a new "Verify your change" section.
