Claude Plugin
The official Claude Code plugin for Vovk.ts ships topic-based skills that teach the coding agent how to use the framework when you describe what you want to build. Skills load only when relevant — typing “scaffold a new tenant” pulls in the multitenant skill, “stream chat tokens” pulls in JSON Lines, and so on.
The plugin lives in the same monorepo as Vovk.ts itself, at packages/claude-plugin, and ships alongside the framework on every release.
Why Vovk.ts is built for AI-assisted coding
Vovk.ts’s structure is the prompt — the AI mind model is built into the framework:
- Logic groups under
src/modules/<name>/— Controller + Service per feature, not scattered acrosslib/. - Controller / Service split — Controllers define procedures (decorated). Services hold business logic (plain classes). Clean separation between what the endpoint is and what it does.
- Methods on a service class, not loose helpers — fewer files, predictable layout. The assistant finds the right file on the first try.
- Single source of truth — same
procedure().handle()powers the HTTP endpoint, the SSR call (.fn()), and the AI tool (deriveTools). No duplication. Less for the model to reconcile. - Plain REST under the hood —
curlworks.fetchworks. Types flow end-to-end without locking you into a custom protocol. - Multitenancy baked in —
multitenant()proxy + segment-per-tenant; one Next.js app hosts many tenants on subdomains without re-architecting. - OpenAPI native, AI tools native — schema generated from procedures, Scalar docs auto-mounted, every procedure can become an LLM tool with one line.
Why use the plugin?
Without it, asking Claude to “scaffold a Vovk procedure with Zod validation” tends to go one of two ways: the model hallucinates (training data is months stale and Vovk’s API has moved on), or it fetches vovk.dev mid-task — slow, hits rate limits, and the wrong page often loads first.
With the plugin, the framework’s idioms are loaded as topic-scoped skills the agent already understands:
- Topic-scoped, not all-or-nothing. Skills load only when relevant — “stream chat tokens” pulls in JSON Lines; “scaffold a tenant” pulls in multitenant. Claude doesn’t drown in thousands of lines of docs to answer a focused question.
- Self-contained. A directive at the top of every skill tells the agent don’t fetch vovk.dev mid-task — the plugin is the source of truth. Works offline; predictable cost; no rate-limit surprises.
- Cross-skill handoffs. Skills know to escalate. The mixins skill points at the tools skill for LLM exposure; the procedure skill points at jsonlines for streaming. The agent loads the right context, not adjacent context.
- Caveman-optimized prose — skill markdown is token-tightened (~10% fewer tokens per load, no loss of substance).
Install
Register the marketplace
Inside Claude Code, register this repository as a plugin marketplace:
/plugin marketplace add finom/vovkThe finom/vovk shorthand resolves to the GitHub repo’s .claude-plugin/marketplace.json. For a local checkout, use /plugin marketplace add /path/to/vovk instead.
Install the plugin
/plugin install vovk@vovkThe syntax is <plugin-name>@<marketplace-name>. Both happen to be named vovk here — the symmetry is coincidence.
Reload
/reload-pluginsVerify
/pluginThe Installed tab should list vovk. Skills are namespaced — typing /vovk: (with the trailing colon) lists all 14 skills available to the agent.
Skills
The plugin ships fourteen topic-based skills covering every layer of Vovk.ts:
vovk:init— initialize Vovk.ts in a Next.js App Router project, or scaffold a fresh Next.js app and runvovk initon top.vovk:common— framework fundamentals: packages,vovk.config.mjs, type inference helpers (VovkBody,VovkOutput, …), short API reference.vovk:segment— segments (root, named, static),initSegment, segment priority,generateStaticParams.vovk:multitenant— multi-tenant routing via subdomains:multitenant()proxy,overridesshape, per-tenant segments and frontend pages, wildcard DNS.vovk:procedure— procedures, validation (Zod / Valibot / ArkType), controllers, HTTP decorators,req.vovk, error handling, content types,.fn()for SSR / server components / server actions.vovk:decorators— built-in and custom decorators (createDecorator), authorization patterns,req.vovk.meta(), stacking order,decorate()for projects withoutexperimentalDecorators.vovk:rpc— generatedvovk-client, composed vs segmented clients, call shape,customFetcher, error rethrow, type inference from client methods.vovk:jsonlines— JSON Lines streaming: generator handlers,JSONLinesResponder,progressive(), client async iteration,using,asPromise, abort.vovk:openapi— OpenAPI 3.x generation:@operationmetadata,outputConfig.openAPIObject, per-segment overrides, Scalar docs,_schema_endpoint.vovk:mixins— import third-party OpenAPI 3.x schemas as typed client modules, call them identically to native RPC modules.vovk:tools— expose procedures as LLM tools viaderiveTools(), MCP-compatible output,@operation, controllers vs RPC modules, OpenAI / Anthropic / MCP wiring.vovk:bundle—vovk bundleCLI for publishable TypeScript SDKs.vovk:python— generate a typed Python client (vovk-python),py/pySrctemplates,TypedDictshapes, JSON Lines via Python generators, PyPI publishing.vovk:rust— generate a typed Rust crate (vovk-rust),rs/rsSrctemplates, asyncreqwestcall shape,futures::Streamconsumption, crates.io publishing.
First prompts to try
The skills trigger automatically when you describe what you want to build. Pick the type of project you’re starting:
- Greenfield — “Set up Vovk.ts in a new Next.js project. I want a
/api/tasksCRUD endpoint with Zod validation, and a Next.js page that consumes it through the typed client.” - Existing Next.js project — “Add Vovk.ts to my existing Next.js app and scaffold a UserController with
getUser/createUser.” - Stream-heavy work — “Add a
/api/chatJSON Lines streaming endpoint that proxies OpenAI completions, plus a Python script that consumes the stream.”
Short prompts like “create a backend for Next.js” don’t always trigger skill consultation — Claude treats them as too generic. Mention “Vovk” or “vovk-cli” once and the routing reliably catches.
Reporting bugs
If a skill produces wrong code or contradicts itself, that’s a plugin bug — open an issue at github.com/finom/vovk/issues with the prompt you used and the skill that loaded.
More info: