# Claude Code mod (https://docs.vitrinka.ai/dev/skills/mod)



## What it draws [#draws]

The `vitrinka-mod` plugin is a Claude Code mod: it draws on Claude Code's own surface instead of teaching the agent anything, so it ships no skill and adds nothing to the MCP catalogue. It reads the files the `vitrinka` CLI keeps for the session and draws from them; the model never prints a link for it, and nothing it shows costs a token.

* **The compass** — the session's board, epic and task in the prompt footer as `◆ board · ▲ epic · ● task`. Each chip is a link to the exact address the server returned. A narrow terminal drops the epic, then the board. An empty or stale slot says why — not bound, signed out, unreachable, as of a time — and names its fix.
* **The `/vt` pane** — the work tree around the task (epic, story and task, each with its state and who holds it), your brainstorms with their open, staged, sent and decided counts and a way into Studio, the two inbox lanes kept apart (**Needs you** and **Ready for this session**), the bound sprint, the todos that are ripe and the task's pull requests with their checks. It refreshes on a tick while it is open and shows its age.
* **The hand-back** — the block a hand-back prints is drawn folded, with **Raw** to unfold the whole text; the stored record is unchanged.

The footer draws in the terminal and the desktop app; the pane draws on every surface.

## The /vt verbs [#vt]

| Verb                                 | What it does                                                                                                                                         |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/vt`                                | Opens the pane.                                                                                                                                      |
| `/vt task`, `/vt epic`, `/vt board`  | Opens that slot's address in the browser.                                                                                                            |
| `/vt copy task` (or `epic`, `board`) | Copies the address.                                                                                                                                  |
| `/vt board <board>`                  | Picks the session's board, by its slug or address. Your pick outranks the board the brainstorming skill declares, and a clash between them is drawn. |
| `/vt board clear`                    | Drops your pick.                                                                                                                                     |
| `/vt refresh`                        | Reads everything again.                                                                                                                              |

A verb answers with a toast and leaves no row in the transcript, so the model reads nothing and no turn is spent.

## Installing it [#install]

The mod is opt-in and Claude Code only. Enable it like a module — `mod` is its name there, and the plugin name works too:

```bash
vitrinka setup modules enable mod      # installs vitrinka-mod@kit
vitrinka setup modules disable mod     # removes it
```

`vitrinka setup modules list` shows it beside the modules, `vitrinka doctor` reports it like any plugin and `vitrinka update` refreshes it with the rest. Restart Claude Code sessions to load it. Two options are set from `/plugin configure vitrinka-mod@kit`: `compass` (the footer, on by default) and `tickSeconds` (the pane's refresh, 30 by default).

To try a working copy without installing it, load the tree for one session — `plugins/mod` in a checkout of the vitrinka source, `plugins/vitrinka-mod` in a checkout of the kit:

```bash
claude --plugin-dir plugins/mod
```

## Under managed Claude Code [#managed]

Where an organization manages Claude Code, a plugin a person installs does not run hooks on Claude Code's own events — the mod's `SessionStart` and `FileChanged`. Only a plugin the organization turns on in managed settings runs them, and with `allowManagedHooksOnly` no person-installed plugin runs any hook at all, the PM plugin's work-loop hooks included. The recipe lists the kit and the plugins in the managed settings file (`/Library/Application Support/ClaudeCode/managed-settings.json` on macOS, `/etc/claude-code/managed-settings.json` on Linux, `C:\Program Files\ClaudeCode\managed-settings.json` on Windows), under their exact `plugin@marketplace` ids:

```json
{
  "extraKnownMarketplaces": {
    "kit": { "source": { "source": "github", "repo": "henderson-tech/vitrinka-kit" } }
  },
  "enabledPlugins": {
    "vitrinka@kit": true,
    "vitrinka-pm@kit": true,
    "vitrinka-mod@kit": true
  }
}
```

Without that listing the mod still works: it checks its files every 15 seconds, so the compass catches up within that window instead of the moment a file changes.

## Air-gapped: a marketplace mirror [#mirror]

The kit is a git repository, so an estate without internet access serves it from its own git server and registers the mirror under the same name, `kit`; every `@kit` id then installs from it.

```bash
git clone --mirror https://github.com/henderson-tech/vitrinka-kit.git
git -C vitrinka-kit.git push --mirror https://git.example.internal/tools/vitrinka-kit.git
claude plugin marketplace add https://git.example.internal/tools/vitrinka-kit.git
vitrinka setup modules enable mod
```

Under managed settings, point the `kit` entry at the mirror instead — `"source": { "source": "git", "url": "https://git.example.internal/tools/vitrinka-kit.git" }` — and `strictKnownMarketplaces` can keep every other source out. Refresh the mirror when a release ships, then `vitrinka update` brings each machine along.

The mod itself makes no network call. It reads the session's files and runs the `vitrinka` CLI, which reaches only the deployment it is signed in to — on an [air-gapped deployment](/security/airgap), your own.
