Skip to Content
Claude Plugin

Claude Plugin

The official Claude Code plugin for Vovk.ts has topic skills that teach the coding agent the framework as you describe what to build. A skill loads only when needed: “scaffold a new tenant” loads the multitenant skill, “stream chat tokens” the JSON Lines one, and so on.

The plugin lives in the Vovk.ts repo, with the skills at the repo root, and ships with every framework release.

What the agent gets from Vovk.ts

Vovk.ts sets where code goes, so the agent can predict it:

  • Code by feature in src/modules/<name>/: a controller and a service per feature, not files spread across lib/.
  • Controller and service apart: controllers define the decorated procedures; services, plain classes, hold the business logic. What the endpoint is stays apart from what it does.
  • Service methods, not loose helpers: fewer files and a predictable layout. The agent finds the right file on the first try.
  • One source of truth: the same procedure().handle() serves the HTTP endpoint, the SSR call (.fn()) and the AI tool (deriveTools). Nothing is duplicated, so the model has less to reconcile.
  • Plain REST: curl and fetch work. Types go end to end without a custom protocol.
  • Multitenancy: the multitenant() proxy and a segment per tenant host many tenants on subdomains in one Next.js app.
  • OpenAPI and AI tools: the schema comes from the procedures, Scalar shows the generated code samples, and one line makes a procedure an LLM tool.

Why a plugin

Without it, asking Claude to “scaffold a Vovk procedure with Zod validation” goes one of two ways. The model makes up an API from months-old training data, though the Vovk.ts API has changed. Or it fetches vovk.dev mid-task, which is slow, hits rate limits and often loads the wrong page first.

With the plugin, the agent loads the framework’s patterns as topic skills:

  • One topic at a time. Only the needed skills load, so Claude doesn’t read thousands of lines of docs for one question.
  • Self-contained. The base skill, loaded with every other skill, tells the agent not to fetch vovk.dev mid-task: the plugin is the source of truth. It works offline, with a predictable cost and no rate limits.
  • Handoffs between skills. A skill points to the one that owns a topic: mixins to tools for LLM tools, procedure to jsonlines for streaming. The agent loads the context it needs, not the context next to it.
  • Compressed text. Terse “caveman” prose: about 10% fewer tokens per load, with the same content.

Install

Run the command for your agent:

AgentInstall
Claude Code (CLI)claude plugin marketplace add finom/vovk && claude plugin install vovk@vovk
Claude Code (interactive)In the session, run /plugin marketplace add finom/vovk, then /plugin install vovk@vovk
Cursornpx skills add finom/vovk -a cursor
Windsurfnpx skills add finom/vovk -a windsurf
Copilotnpx skills add finom/vovk -a github-copilot
Clinenpx skills add finom/vovk -a cline
Any othernpx skills add finom/vovk

finom/vovk points to .claude-plugin/marketplace.json in the GitHub repo. The plugin and the marketplace are both named vovk: vovk@vovk is <plugin-name>@<marketplace-name>.

For a local checkout (development), use its path: claude plugin marketplace add /path/to/vovk (the repo root).

Verify

In Claude Code, run /plugin: the Installed tab lists vovk. Skill names start with vovk:; typing /vovk: (with the colon) lists all 15 skills. In other agents, the skill files are in the agent’s skill folder, such as .cursor/skills/.

Skills

The plugin has fifteen topic skills that cover every part of Vovk.ts:

  • vovk:init — set up Vovk.ts in a Next.js App Router project, or create a new Next.js app and run vovk init in it.
  • vovk:base — base rules loaded with every other vovk:* skill: commit policy for .vovk-schema/, runtime requirements, template names, the _schema_ endpoint, a short API and inference-type summary (VovkBody, VovkOutput, …).
  • vovk:config — the vovk.config.{mjs,cjs,js} shape, every config key and default (rootEntry, schemaOutDir, composedClient, segmentedClient, clientTemplateDefs, outputConfig, bundle, …), and the tsconfig.json setup.
  • vovk:segment — segments (root, named, static), initSegment, segment priority, generateStaticParams.
  • vovk:multitenant — routing tenants by subdomain: the multitenant() proxy, the overrides shape, per-tenant segments and front-end 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.
  • vovk:rpc — the generated RPC client (@/client), composed vs segmented clients, call shape, createFetcher, 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: @operation metadata, outputConfig.openAPIObject, per-segment overrides, Scalar docs, _schema_ endpoint.
  • vovk:mixins — import third-party OpenAPI 3.x schemas as typed client modules, called like your own RPC modules.
  • vovk:tools — procedures as LLM tools with deriveTools(), MCP-compatible output, @operation, controllers vs RPC modules, OpenAI / Anthropic / MCP wiring.
  • vovk:bundle — the vovk bundle command for publishable TypeScript SDKs.
  • vovk:python — generate a typed Python client (vovk-python), py / pySrc templates, TypedDict shapes, JSON Lines via Python generators, PyPI publishing.
  • vovk:rust — generate a typed Rust crate (vovk-rust), rs / rsSrc templates, async reqwest call shape, reading a futures::Stream, crates.io publishing.

First prompts to try

The skills load on their own when you describe what to build. Pick your kind of project:

  • Greenfield — “Set up Vovk.ts in a new Next.js project. I want a /api/tasks CRUD 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/chat JSON Lines streaming endpoint that proxies OpenAI completions, plus a Python script that consumes the stream.”
💡

Short prompts such as “create a backend for Next.js” don’t always load a skill: Claude finds them too general. Mention “Vovk” or “vovk-cli” once, and the right skill loads.

Reporting bugs

A skill that writes wrong code or contradicts itself is a plugin bug. Open an issue at github.com/finom/vovk/issues with your prompt and the skill that loaded.

More info:

Last updated on