vir — Claude Code skill: notes from your past agent sessions
The skill searches a personal note base for decisions you already made, bugs you already fixed and tools you picked. Useful before starting something new.
npx skills add djolex999/vir --skill vir -a claude-codeWhat vir does
vir turns earlier coding-agent sessions into short markdown notes: decisions, gotchas with their fixes, patterns, tools. The skill reads those notes and never writes to them. The point is not re-solving a problem you closed months ago.
Access follows the first path that works. When vir_query is available, the skill calls it with synthesize: false, because the default path bills an LLM call to your provider while you only need the matching notes. Next option is the CLI: vir query "<question>" --json --limit 5, retrieval only, no LLM call. Should the CLI be absent or its search fail, the skill reads ~/.vir/config.json and looks through <vaultPath>/<outputDir>/ with ordinary file tools — decisions/, gotchas/, patterns/, tools/ and topics/.
Phrase the query as the problem rather than a keyword, and name the project when the task is project-specific. Two or three queries cover it. Notes get cited by slug, like [[nextjs-middleware-session-1a2b3c4d]], and a past decision outranks a fresh default. Notes do go stale, though: if the code disagrees, the skill sides with the code and flags the conflict. A score below roughly 0.45 usually means an unrelated hit. On CLI failure you get {"error": "...", "kind": "..."}; retry once on busy, otherwise drop to reading files.
What it helps with
- recall why a library was chosen for this project
- find the note about a gotcha that broke the build before
- check whether an auth decision was later reversed
- pull up your own tooling patterns before a new task
- skip re-investigating an error you already diagnosed
Example prompts for the agent
- Check my vir notes: what did I decide about middleware and sessions in growthq?
- I'm getting an empty session in auth middleware — have I hit this before? Look in vir.
- Before picking a validation library, look in vir for decisions I already made.
How to install vir
1Skills CLI (Vercel)
npx skills add djolex999/vir --skill vir -a claude-code2Manually: put the files in place
~/.claude/skills/vir/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/vir/
1Skills CLI (Vercel)
npx skills add djolex999/vir --skill vir -a codex2Manually: put the files in place
.agents/skills/vir/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add djolex999/vir --skill vir -a cursor2Manually: put the files in place
.cursor/skills/vir/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install djolex999/vir vir2Manually: put the files in place
.github/skills/vir/SKILL.md1Skills CLI (Vercel)
npx skills add djolex999/vir --skill vir -a gemini-cli2Platform CLI
gemini skills install https://github.com/djolex999/vir --path skills/virManually: put the files in place
.devin/skills/vir/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add djolex999/vir --skill vir -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about vir
How do I install vir in Claude Code?
Run npx skills add djolex999/vir --skill vir -a claude-code. The skill lands in ~/.claude/skills/vir/SKILL.md.
What does vir do?
It searches your personal note base for past decisions, gotchas, patterns and tools, then brings them into the current task. The base is built from your own agent sessions.
What does vir need to work?
Either the vir_query MCP tool, or the vir CLI, or a ~/.vir/config.json pointing at your notes vault. With none of those present, the skill says vir isn't set up and carries on without it.
Source text
SKILL.md · MIT
---
name: vir
description: "Consult the user's vir knowledge base: notes distilled from their own past coding-agent sessions (decisions, gotchas, patterns, tools). Use before starting non-trivial work in a project, when the user asks 'what did I decide about X', 'have I hit this before', 'check my notes/vault', when debugging an error that may have happened before, and before architectural or library choices."
---
# vir: the user's own past decisions
vir distills the user's past coding-agent sessions into short markdown notes:
**decisions** (what they chose and why), **gotchas** (what broke and the fix),
**patterns**, and **tools**. The notes are the user's own history, not general
advice. Checking them first avoids re-solving a problem they already solved
or re-opening a decision they already made.
This skill only **reads** the notes. It never writes them.
## 1. Pick the access path (first one that works)
1. **MCP tools.** If `vir_query` is among your tools, use it, and **pass
`synthesize: false`**. By default it synthesizes an answer with an LLM call
billed to the user's provider; you only need the matching notes, and you
can read them yourself. Other read-only tools: `vir_recent_notes` (latest
notes), `vir_project_summary` (one project's knowledge), `vir_status`
(vault health).
2. **CLI.** If `vir --version` prints a version, search with:
```bash
vir query "<question>" --json --limit 5
```
This is retrieval only: no LLM call and no cost. The only side effect is a
line in vir's local query log (`~/.vir/queries.jsonl`), which the user can
turn off with `logQueries: false`.
3. **Plain files.** If the CLI is missing or its search fails, read
`~/.vir/config.json`. The notes live in `<vaultPath>/<outputDir>/`, in
`decisions/`, `gotchas/`, `patterns/`, `tools/`, plus `topics/` for
synthesized pages. Search them with your normal file-search tools,
read-only.
4. **Nothing found** (no MCP tool, no CLI, no `~/.vir/config.json`): vir is not
set up. Say so once, briefly, and continue without it. See section 5 if the
user wants it.
## 2. Ask good questions
- Phrase the query as the problem, not a keyword: "why does auth middleware
read an empty session" beats "middleware".
- Include the project name when the task is project-specific.
- Two or three focused queries are enough. Don't sweep the whole vault.
## 3. Read the results
`vir query --json` returns a JSON array, best match first:
```json
[{ "path": "gotchas/nextjs-middleware-session-1a2b3c4d.md", "score": 0.69,
"category": "gotcha", "confidence": 0.92, "preview": "first ~200 chars",
"project": "growthq", "date": "2026-07-30T19:05:44.450Z" }]
```
- `path` is relative to `<vaultPath>/<outputDir>` from `~/.vir/config.json`.
Open the top 1–3 relevant notes. The useful part is usually
`## What Was Learned`.
- A score under ~0.45 is usually unrelated; don't force it.
- On failure the CLI prints `{"error": "...", "kind": "..."}` instead. Kinds:
`no_vault`, `ollama_unavailable`, `busy`, `invalid_args`, `not_found`,
`internal`. For `busy`, retry once. For anything else, fall back to plain
files (path 3).
## 4. Use what you found
- **Cite** each note you rely on by its slug, i.e. the filename without `.md`,
as `[[nextjs-middleware-session-1a2b3c4d]]`, so the user can open it.
- **Prefer the user's past decision** over a fresh default, and say you're
doing so ("You decided in July to keep JWT checks out of middleware
[[…]]; following that.").
- **Verify against the current code.** Notes can be stale: a library may have
been upgraded or a decision reversed since. If the code contradicts a note,
trust the code and point out the conflict.
- **Be honest about misses.** If nothing relevant came back, say "no vir notes
on this" and move on. Never invent a note or a citation.
## 5. Hard limits
- **Never write, edit, move or delete** anything in the notes folder.
- **Never run commands that distill, spend money or change state** unless the
user explicitly asks: `vir run`, `vir connect`, `vir sync-claude`,
`vir review`, `vir prune`, `vir dedupe`, `vir compose`, or the
`vir_compose` tool.
- **Never install vir on your own.** If the user wants it, explain: vir is an
open-source CLI (github.com/djolex999/vir) that reads their local session
transcripts (Claude Code and/or Codex) and needs an LLM provider (Anthropic
key, Claude Code subscription, ChatGPT plan via the Codex CLI, or Kie). Then
offer the commands for them to run:
```bash
npm install -g @djolex999/vir-cli
vir init
vir mcp install # Claude Code
vir mcp install --target codex # Codex: prints the config block to add
```
- For "is vir working?" questions, `vir doctor` is safe and read-only.
© djolex999 · MIT · djolex999/vir