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 svyatov/handrail --skill surveygit clone --depth 1 https://github.com/svyatov/handrailWrote 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/svyatov/handrail/survey)<a href="https://agentmods.dev/skills/svyatov/handrail/survey"><img src="https://agentmods.dev/badge/skills/svyatov/handrail/survey/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/svyatov/handrail/survey"><img src="https://agentmods.dev/badge/skills/svyatov/handrail/survey.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.00104 | $0.02700 |
| Opus 5.5 | $0.00042 | $0.01080 |
| Sonnet 5.5 | $0.00021 | $0.00540 |
| Haiku 4.5 | $0.00010 | $0.00270 |
Grade A, and why
survey 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 23d 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 — 208 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Survey this repository for guardrails
You are the Surveyor. You propose Rules from what this repository states, and the user decides each one. You write nothing without its own approval. You propose guards only: never a rule that relaxes another, even where a literal you found collides with one.
A repository fact fixes a rule's matcher. It never fixes the action, the tier, or whether the rule should exist: those are the user's.
1. Resolve the binary
HANDRAIL=$(command -v handrail || echo "${XDG_DATA_HOME:-$HOME/.local/share}/handrail/bin/handrail")
If it does not exist, the SessionStart bootstrap has not run yet: tell the user
to start a new session, or to install with brew install svyatov/tap/handrail.
2. Read the facts
"$HANDRAIL" survey
"$HANDRAIL" check --json
survey prints signals[], each an id and the paths its probes found, and
instruction_files[], each a path and a class: repo or user. Open no
file that survey did not list. check --json is the effective ruleset; if its
errors[] is not empty, show the errors first, since nothing can land until
check is clean.
3. Guard the rule directories first
Before any signal, replay each rule-directory guard's calls, all four in one shell call:
G=${XDG_CONFIG_HOME:-$HOME/.config}/handrail
"$HANDRAIL" test PreToolUse --kind file_edit --field path=.handrail/local/survey-probe.md --json
"$HANDRAIL" test PreToolUse --kind file_edit --field "path=$G/survey-probe.md" --json
"$HANDRAIL" test PreToolUse --kind shell --field 'command=cd .handrail/local' --json
"$HANDRAIL" test PreToolUse --kind shell --field "command=cd $G" --json
The call names a rule directory, so where the shell guard already stands it
raises that guard's approval prompt: ask the user to approve it. On Codex the
ask guard warns and the probe runs normally. If an explicit block guard
denies a probe, ask the user to run the same commands in their own terminal
and paste the output.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 23d ago Changed · +2 lines ee391824330a
- 27d ago Changed · +18 lines 4196c6c31121
- 28d ago First seen · 188 lines · 104 tokens per session scan A af329cbb0913
survey is a skill published in the GitHub repository svyatov/handrail (2 stars, last pushed 6d ago), licensed MIT. It adds 104 tokens to every session and 2,700 once invoked, about $0.0004 per session on Opus 5.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-09-27.
Other skills, from other repositories
diet-remove
Remove a dependency identified by uzomuzo diet — analysis + issue (default) or direct PR.
diet-evaluate-removal
Data-driven deep evaluation of whether a dependency is worth removing.
implement-spec
A workflow for implementing a complete software specification with acceptance criteria and a dependency graph. It can coordinate independent work items, integrate their changes, run review, and report anything unfinished.
kirby-project-tour
Maps a Kirby project using Kirby MCP tools/resources, including roots, templates, snippets, controllers, models, blueprints, plugins, runtime status, and key config. Use when a user wants a project overview, file locations, or a quick orientation before making changes.
clickup-cli
ClickUp CLI for managing tasks, sprints, comments, statuses, Docs, and archiving. Use when the user needs to interact with ClickUp — creating/editing/archiving tasks, checking sprint status, adding comments, linking PRs, managing Docs and pages, or searching tasks. Includes a generic clickup api passthrough covering…
rmine
Reference for the rmine CLI (Redmine client) — issue, time-tracking, and project commands, filter/name-matching semantics, and profile handling. Use when the user asks about Redmine issues, tickets, time logging, or projects.