Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add JSungMin/vs-token-safer --skill vs-searchgit clone --depth 1 https://github.com/JSungMin/vs-token-saferWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jsungmin/vs-token-safer/vs-search)<a href="https://agentmods.dev/skills/jsungmin/vs-token-safer/vs-search"><img src="https://agentmods.dev/badge/skills/jsungmin/vs-token-safer/vs-search/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/jsungmin/vs-token-safer/vs-search"><img src="https://agentmods.dev/badge/skills/jsungmin/vs-token-safer/vs-search.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00109 | $0.02092 |
| Opus 5 | $0.00055 | $0.01046 |
| Sonnet 5 | $0.00022 | $0.00418 |
| Haiku 4.5 | $0.00011 | $0.00209 |
Grade A, and why
vs-search scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 74 lines — stays where its author put it; the contents beside it link to each section on GitHub.
vs-token-safer search routing
Code search runs through an OFFICIAL language server's index (clangd for C++, a Roslyn-based LSP for
C#) and the result is token-capped to a compact file:line list — no source bodies. No IDE needs to
be open; the engine is spawned headlessly. Karpathy-style rules: do the listed thing, do not improvise.
Tools (MCP server name: vs-search)
- Symbol / class / function / type / variable →
search_symbol(args:q,projectPath,backend,maxResults). Nevergrep/rgfor this. - References / usages of a symbol →
find_references(args:symbolNAME, orpath+line+character— 0-based —includeDeclaration). Semantic, not a text match.direction=callers/callees+depth→ a multi-hop call hierarchy (transitive callers = blast radius before an edit / callees) via LSPcallHierarchy, instead of flat references. - Definition of a symbol →
goto_definition(args:path,line,character— 0-based). Thekindarg picks WHICH:definition(default) ·type_definition(the type of an expression) ·implementation(concrete impls of an interface/abstract/virtual — "who implements this?") ·declaration. For every usage (not the definition) usefind_referencesinstead. - Type / signature at a position →
hover(args:path,line,character). - Outline a file (its classes/functions) →
document_symbols(args:path;scope="directory"→ a signatures-only skeleton of every code file under a dir, to grasp a module's shape without reading each file). - Read ONE declaration's source (not the whole file) →
read_symbol(args:symbol, optionalpath/line,signatureOnly). The read-side twin of the edit tools — name a symbol, get just its body. Prefer over the built-in Read when you only need one declaration. - Errors / warnings →
diagnostics(args:path, orscope="directory"to scan the project). Token-cappedfile:line:col severity: message, sorted error→hint with a count summary — read this instead of the raw build/compiler output. - Rename a symbol project-wide →
rename(args:path,line,character,newName,apply). Semantic (every reference), not ased. Preview by default;apply=truewrites the edits. - Add / replace / delete a WHOLE declaration → edit it by NAME, don't Read-the-file-then-Edit:
- Replace a function/method/class body (signature included) →
replace_symbol_body(args:symbol,body, optionalpath/line,apply). - Add a declaration next to one →
insert_symbol(args:symbol,text,position=afterdefault /before,apply). - Remove a declaration →
safe_delete(args:symbol,force,apply). Refuses while it's still referenced unlessforce=true. - The outline supplies the exact span, so you skip reading the whole file into context. Preview by default;
apply=truewrites. Use the built-in Edit for a sub-declaration tweak (a few lines inside a body); use these when the unit is the whole declaration. - Perforce: an
apply=truewrite auto-runsp4 editon a read-only file first (symbol edits write via the server, so a built-in Edit/Write p4 hook never sees them). Read-only-gated, so a git repo never calls p4; disable withVTS_P4_EDIT=0.
- Replace a function/method/class body (signature included) →
- Raw text / string / comment / config key (the symbol index can't answer) →
search_text(args:q,projectPath). Token-capped; the sanctioned grep replacement. - File by name (substring or glob) →
find_files(args:q,projectPath). Replacesfind -name. - Admin/meta (rarely needed reflexively) →
vts_adminwith anop:config/setup(settings),savings/savings_reset(token ledger),warmup(pre-build the index),discover(find searches that bypassed vts),gen_compile_db(UE clangd DB),git/p4(read-only VCS, output compacted). Put the op's args inparams, e.g.vts_admin {op:"git", params:{argv:["status"]}}. (CLI keeps the bare subcommands:vts setup,vts git, …) - Log file (
.log/.jsonl, or aLogs/dir) → NOT a vs-search tool. The language-server index covers source, not logs — use gamedev-log (/gamedev-log-analyzer:logs). vts-search results aimed at a log carry a one-line pointer there.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 74 lines · 109 tokens per session scan A e929a74e125b
vs-search is a skill published in the GitHub repository JSungMin/vs-token-safer (11 stars, last pushed today), licensed MIT. It adds 109 tokens to every session and 2,092 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
clipper1
Use when maintaining legacy code that depends on Clipper 1.x API for polygon clipping and offsetting. Clipper1: the original widely-deployed polygon boolean library. Prefer Clipper2 for new projects.
clipper2
Use when performing high-performance 2D polygon boolean operations (union, intersection, difference, XOR) and offsetting via C++, C#, or Python bindings. Clipper2: the modern polygon clipping library with robust numerical handling.
aspnet-core
ASP.NET Core 8+ with controllers, services, DI, configuration, and middleware pipeline. Covers Program.cs setup and enterprise patterns. USE WHEN: user mentions "ASP.NET Core", "Web API", ".NET controllers", "Program.cs", "dependency injection", ".NET DI", ".NET configuration", "appsettings" DO NOT USE FOR: Minimal…
aspnet-middleware
ASP.NET Core custom middleware, pipeline order, exception handling middleware, and request/response manipulation. USE WHEN: user mentions "middleware", "request pipeline", "exception middleware", "ASP.NET middleware", "UseMiddleware", "pipeline order" DO NOT USE FOR: Express middleware - use express, NestJS middleware…
aspnet-validation
ASP.NET Core validation with FluentValidation, Data Annotations, and model validation. Covers custom validators and validation pipeline. USE WHEN: user mentions "FluentValidation", "Data Annotations", "model validation", ".NET validation", "input validation", "validator", "validation pipeline" DO NOT USE FOR: Spring…
aspnet-blazor
Blazor Server, WebAssembly, and United (Auto) with components, interop, and render modes. Covers .NET 8+ Blazor patterns. USE WHEN: user mentions "Blazor", "Blazor Server", "Blazor WASM", "Blazor WebAssembly", "Blazor components", "render modes", "Blazor interop" DO NOT USE FOR: Angular components - use angular, React…