← All releases

v0.20.0

featurefix

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.

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.