stk/

The drift‑proof framework for AI‑built apps.

stk is a strict Python framework for AI coding agents. Every session lands in the same architecture, passes the same gate, and proves the app still works in a real browser, so what agents build stays reliable, secure, and easy to change.

paste into your coding agent

Build me an app on stk. Read stkit.dev/start.md and follow it step by step. The app: [describe your app]

your agent, in ~/acme
$ uvx --from stkit stk init acme
+ created acme/acme/app.py
+ created acme/CLAUDE.md and five agent skills
+ created acme/.env (fresh secrets)
$ uv run stk new invoice
+ added invoice to the extensions in acme/app.py
+ migration generated and applied for invoice
$ uv run stk verify
✓ ruff
✓ checks
✓ migration-drift
$ uv run stk smoke
PASSED dashboard /dashboard/
PASSED /invoices/ /invoices/
Smoke status: passed

Built for the new
cost curve.

AI made scaffolding, refactoring, and documentation cheap. It did not make security, review, or product judgment cheap. stk is shaped around that shifted center of gravity.

A package, not a fork

Your app is a thin package that depends on stk, published as stkit. It never edits a framework file: features are extensions, and a template is overridden by putting one at the same path. Upgrading is a version bump plus the release note.

# acme/app.py
app = Stk(__name__, config=Config, extensions=[invoice])
# pyproject.toml
dependencies = ["stkit>=17.1.0,<18"]

Small commands, real boundaries

The agent should not infer everything from random files. stk exposes boring, inspectable facts about the app and a verification gate before you trust the result.

$ uv run stk inspect context --json
$ uv run stk doctor
$ uv run stk verify --watch
$ uv run stk smoke
see the whole loop, with real output →

No JavaScript build step

The frontend runs on Vue 3, loaded directly in the browser. There's no separate JavaScript build to install or maintain, so the agent edits plain HTML templates instead of wrestling a toolchain.

# no build, no install step
templates/index.html  → Vue 3 from pinned static files

The hard parts are already built

User accounts, the admin dashboard, the async database layer, realtime, and migrations already exist and are tested, so the agent spends its time on your product instead of rebuilding the basics.

auth · admin · async-db · realtime
migrations · sessions · rbac · audit-log

Agents arrive briefed

Every new app ships with the rules an agent would otherwise learn by breaking things: a CLAUDE.md (also read as AGENTS.md), five skills for blueprints, APIs, migrations, deploys, and lessons, and a CI workflow that runs the tests, the verify gate, and a real browser on every push.

CLAUDE.md  → AGENTS.md
.claude/skills/  stk-api stk-blueprint stk-deploy stk-lessons stk-migrate
.github/workflows/checks.yml  tests · stk verify · stk smoke

Less to install. Less to break. Less to secure.

One language to review
Your dependencies are Python only: one list to read, pin, and update, instead of two stacks to keep current.
No outside service holds your users
User accounts and passwords stay in your own database. No third party holds them, and there's no per-user fee to log people in.
No JavaScript build tools
Because the frontend runs in the browser, it doesn't pull in the hundreds of small packages a typical web build depends on.

Everything a SaaS needs, already wired.

auth
Registration, login, recovery, and server-side sessions, plus TOTP 2FA, WebAuthn passkeys (Touch ID, YubiKey), OAuth (Google, GitHub), recovery codes, account lockout, and rate limiting.
2FA · TOTPWebAuthnOAuthArgon2id
async
Quart, async SQLAlchemy, aiosmtplib, and native WebSockets. Real concurrency, not async bolted onto a sync core.
admin
User CRUD, role-based access, an activity audit log, paginated tables with a JSON API, and realtime updates over WebSocket.
database
SQLite by default so you deploy anywhere. Drop in PostgreSQL when you need it. Alembic migrations included.
ui
Vue 3 + Vuetify 4 in the browser with 5,000+ Tabler icons, all self-hosted and pinned. Edit a template, refresh, done.

One prompt. A working app.

Your agent installs stk, writes the app with fresh secrets, creates the admin user, and proves it green with doctor, verify, and a real-browser smoke test before it builds anything. The steps it follows are public, so you can read them first.

paste into your coding agent

Build me an app on stk. Read stkit.dev/start.md and follow it step by step. The app: [describe your app]

Give your agent the docs.

A read-only MCP server answers from the same pages as docs.stkit.dev, with three tools: search_docs, get_page, and get_command. No sign-in.

mcp.stkit.dev
# Claude Code
$ claude mcp add --transport http stk-docs https://mcp.stkit.dev/mcp
# Codex
$ codex mcp add stk-docs --url https://mcp.stkit.dev/mcp
# Cursor, ChatGPT, Claude, anything else: a custom MCP server, no auth
https://mcp.stkit.dev/mcp

Ship it three ways.

Built-in deploy script

Your app's repo to a fresh VPS in one command: Caddy with automatic TLS, a firewall, fail2ban, and key-only SSH.

sudo DOMAIN=example.com REPO=you/myapp bash deploy.sh
Docker

PostgreSQL, Redis, and Nginx with TLS. It refuses to start until real passwords and certificates are set.

docker compose up --build
Manual

Plain ASGI: Uvicorn behind Nginx or Caddy, managed by systemd.

uvicorn myapp.app:app

Built with stk

Sealbook

Evidence intelligence for defensible investigations. AI proposes claims pinned to the exact line, frame or region they came from, people decide with a passkey, and findings export as a signed package anyone can verify offline.

sealbook.org →
Ziglag

Open-source, self-hosted invoicing for freelancers and small businesses. No document limits.

view Ziglag →
Qarina

An AI research assistant for human rights investigators. Deterministic collection lanes, content credentials, an archived citation trail and a hashed report. AI finds leads. Humans establish facts.

qarina.org →