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 agentmods add skills/timohaa/scopewalker-mcp/create-testnpx skills add timohaa/scopewalker-mcp --skill create-testgit clone --depth 1 https://github.com/timohaa/scopewalker-mcpWrote 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/timohaa/scopewalker-mcp/create-test)<a href="https://agentmods.dev/skills/timohaa/scopewalker-mcp/create-test"><img src="https://agentmods.dev/badge/skills/timohaa/scopewalker-mcp/create-test.svg" alt="Measured on agentmods" 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 | $0.00029 | $0.01064 |
| Opus 5 | $0.00015 | $0.00532 |
| Sonnet 5 | $0.00006 | $0.00213 |
| Haiku 4.5 | $0.00003 | $0.00106 |
Grade A, and why
create-test 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 today.
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 — 127 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Create Test
Generate tests for existing code following project conventions.
Test File Layout
Tests live alongside the source file:
| Source | Test |
|---|---|
src/tools/<name>.ts |
src/tools/<name>.test.ts |
src/lib/<name>.ts |
src/lib/<name>.test.ts |
src/utils/<name>.ts |
src/utils/<name>.test.ts |
src/tools/<name>Helpers.ts |
src/tools/<name>Helpers.test.ts |
Variants (e.g., language-specific cases for a single tool) use a dotted
suffix: documentationCoverage.languages.test.ts.
Framework: vitest (describe, it, expect, vi).
Workflow
-
Read the source file to understand what to test
-
Identify test cases:
- Happy path scenarios
- Edge cases (empty input, missing fields, large input)
- Error handling (invalid args, file not found, parse errors)
- Path-scoping behavior for tools that take a
pathparameter
-
Choose the right harness:
- Tools (anything in
src/tools/that registers viaregister*Tool) → usegetToolHandler+parseContentfromsrc/testUtils/toolTestHarness.ts - Helpers / lib / utils → import the function directly
- Tools (anything in
-
Create test file following the patterns below
-
Run tests with the smallest scope:
npx vitest run src/tools/<name>.test.ts
Patterns
Tool Test (uses MCP harness)
Setup (temp dir, handler, beforeAll/afterAll) lives at module top
level; describe blocks only group the it cases. Import vi only
when the test mocks something.
import { mkdir, rm, writeFile, realpath } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { describe, it, expect, beforeAll, afterAll } from "vitest";
import { getToolHandler, parseContent } from "../testUtils/toolTestHarness.js";
import type { MyToolResult } from "../types/index.js";
import { registerMyTool } from "./myTool.js";
let testDir: string;
const handler = getToolHandler(registerMyTool, "my_tool");
beforeAll(async () => {
const tempPath = join(tmpdir(), `scopewalker-myTool-${String(Date.now())}`);
await mkdir(tempPath, { recursive: true });
testDir = await realpath(tempPath);
await writeFile(join(testDir, "sample.ts"), `export const x = 1;\n`);
});
afterAll(async () => {
await rm(testDir, { recursive: true, force: true });
});
describe("myTool", () => {
it("returns expected result for a valid path", async () => {
const response = await handler({ path: testDir });
const result = parseContent<MyToolResult>(response);
expect(result.files).toHaveLength(1);
});
it("returns an error for a path outside allowed roots", async () => {
const response = await handler({ path: "/etc" });
expect(response.isError).toBe(true);
});
});
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.
- today Changed 845c8394aea4
- 4d ago First seen · 127 lines · 29 tokens per session scan A 58c8f422b5d3
create-test is a skill published in the GitHub repository timohaa/scopewalker-mcp (0 stars, last pushed yesterday), licensed MIT. It adds 29 tokens to every session and 1,064 once invoked, about $0.0001 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-31.
Other skills, from other repositories
tsa-pr-review
AST-grounded PR / diff review. One workflow → per-file risk ranking, blast radius per changed symbol, the exact pytest command to gate merge, any architecture-constraint violations, and a final BLOCK / REVIEW / APPROVE verdict — in 1–2k tokens and 4–6 MCP calls. Goes beyond a generic LLM diff-read because only TSA's…
tests-run
Execute Unity tests (EditMode or PlayMode) and return per-test results. Supports filtering by test assembly, namespace, class, and method. Refreshes the AssetDatabase first; defers execution across domain reloads if scripts changed. Precondition: every open scene must be saved — dirty scenes abort the run.
xcodebuildmcp-test-boundary-review
Use when reviewing XcodeBuildMCP tests for correct unit, snapshot, schema, smoke, and external process boundaries.
build-and-test
Build the Wassette workspace and run its test suite with the just recipes — debug and release builds, example and test components, and the combined unit plus documentation tests. Use when compiling Wassette, building example components, or running and debugging tests.
myco:runtime-bootstrap-and-test-isolation
Activate this skill when adding a new manager, adding a new tool category, writing or debugging tool unit tests, diagnosing tool-visibility failures, investigating startup performance, or extending/maintaining/debugging the two-tier tool discovery system (toolindex) — even if the user doesn't explicitly ask about the…
write-test
Use when adding or modifying JETLS tests. Covers test file and module structure, @testset organization, let blocks, withserver usage, and when subroutine tests are sufficient for language-server features.