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/wessamfathi/suhail/sunpx skills add wessamfathi/suhail --skill sugit clone --depth 1 https://github.com/wessamfathi/suhailWrote 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/wessamfathi/suhail/su)<a href="https://agentmods.dev/skills/wessamfathi/suhail/su"><img src="https://agentmods.dev/badge/skills/wessamfathi/suhail/su.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.1 | $0.00046 | $0.00640 |
| Opus 5 | $0.00023 | $0.00320 |
| Sonnet 5 | $0.00009 | $0.00128 |
| Haiku 4.5 | $0.00005 | $0.00064 |
Grade A, and why
su 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 5d 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 — 45 lines — stays where its author put it; the contents beside it link to each section on GitHub.
su — Suhail front desk
This skill is a pure router: it locates and defers to the matching commands/<job>.md, and never restates or advances the orchestrator's own state machine.
1. Argument routing
If $ARGUMENTS is non-empty, or the user's message plainly names a job, take the first token and match it case-insensitively against the eight job names: go, init, discover, next, auto, skip, status, abort.
On a match: locate the corresponding command file (see "Locating the command file" below), read it into memory, and follow its instructions exactly as if the user had invoked /su:<job> directly — passing any remaining tokens through as that command's own arguments.
On no match: state so in one sentence and list the eight job names. Do not proceed further.
Do not infer a job from vague conversational context — only a non-empty $ARGUMENTS or an unambiguous, plainly-named job triggers routing. If neither is present, proceed to the menu below instead.
2. Locating the command file
Given a job name, resolve commands/<job>.md by checking these two paths in order:
- Plugin install:
${CLAUDE_PLUGIN_ROOT}/commands/<job>.md— this resolves only when Suhail is installed as a Claude Code plugin, because the token is substituted inline before this file is read; in a non-plugin context the token stays literal and the path will not exist, so resolution falls through to the next step. - Dev repo:
./commands/<job>.md.
If neither path exists, end with: "Cannot locate commands/<job>.md — reinstall Suhail."
Do not duplicate or summarize the orchestrator logic here. The canonical state machine lives in commands/go.md.
3. Menu
When no job is named, ask a single AskUserQuestion with header "Job", single-select, and exactly these four options:
- Run plan → route to
go(then ask for the plan path viago's own flow). - Discover plan → route to
discover. - Init intel → route to
init. - Status → route to
status.
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.
- 5d ago First seen · 45 lines · 46 tokens per session scan A 6701c1aed707
su is a skill published in the GitHub repository wessamfathi/suhail (2 stars, last pushed 3d ago), licensed MIT. It adds 46 tokens to every session and 640 once invoked, about $0.0002 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
cloudflare-email-routing
Cloudflare Email Routing for receiving/sending emails via Workers. Use for email workers, forwarding, allowlists, or encountering Email Trigger errors, worker call failures, SPF issues.
bun-sqlite
Use for bun:sqlite, SQLite operations, prepared statements, transactions, and queries.
bun-http-server
Use when building HTTP servers with Bun.serve, handling requests/responses, implementing routing, creating REST APIs, or configuring fetch handlers.
api-testing
HTTP API testing for TypeScript (Supertest) and Python (httpx, pytest). Test REST APIs, GraphQL, request/response validation, authentication, and error handling.
bun-jest-migration
Use when migrating from Jest to Bun's test runner, import compatibility, mocks, and config.
bun-test-mocking
Use for mock functions in Bun tests, spyOn, mock.module, implementations, and test doubles.