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 atman-33/workhub --skill post-to-slackgit clone --depth 1 https://github.com/atman-33/workhubWrote 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/atman-33/workhub/post-to-slack)<a href="https://agentmods.dev/skills/atman-33/workhub/post-to-slack"><img src="https://agentmods.dev/badge/skills/atman-33/workhub/post-to-slack/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/atman-33/workhub/post-to-slack"><img src="https://agentmods.dev/badge/skills/atman-33/workhub/post-to-slack.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.00059 | $0.00670 |
| Opus 5 | $0.00030 | $0.00335 |
| Sonnet 5 | $0.00012 | $0.00134 |
| Haiku 4.5 | $0.00006 | $0.00067 |
Grade A, and why
post-to-slack 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 — 59 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Post to Slack
Resolves a channel name (or a user name for a mention) to its Slack ID before posting — the Slack MCP connector's send/search tools need IDs, not display names, and IDs are not stable across workspaces.
Steps
- Determine the message body and the target channel. If the caller (a
direct user request, or another skill such as
report-pbl-progress) already gives an explicit channel ID (C...) and/or an already-resolved mention (<@U...>), skip straight to step 4 — don't re-resolve what's already unambiguous. - If the channel is given by name rather than ID, resolve it with the Slack
MCP connector's
slack_search_channelstool and take the matching channel's ID. If more than one channel plausibly matches, ask the user rather than guessing. - If a mention is wanted and given by name rather than user ID, resolve it
with
slack_search_usersand format it as<@USERID>inline in the message text — Slack does not render@nameas a mention, only the raw<@ID>form works. - Post with
slack_send_message(thread_tsfor a thread reply,reply_broadcastto also surface a thread reply in the channel). Return the message's permalink to the caller.
Reference
Failure modes
- Channel not found:
slack_search_channelsfound no match — confirm the exact channel name with the user; don't guess a close match. - User not found: same for
slack_search_userswhen resolving a mention. - Message too long: 5000 characters per text element — split into a thread reply rather than truncating silently.
- Can't post to Slack Connect (externally shared) channels:
slack_send_messagefails outright for these; tell the user rather than retrying. - Slack Canvas unavailable:
slack_create_canvasreturnsnot_supported_free_teamon free-tier workspaces. This skill never uses Canvas for that reason — if a caller wants a richer document than a single message, that's out of this skill's scope.
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 · 59 lines · 59 tokens per session scan A f6c5ac9e2f48
post-to-slack is a skill published in the GitHub repository atman-33/workhub (2 stars, last pushed today), licensed MIT. It adds 59 tokens to every session and 670 once invoked, about $0.0003 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-09-03.
Other skills, from other repositories
gonavi-cli
Operate databases through the GoNavi headless CLI — the gonavi executable shipped in verified GitHub Release archives. Covers listing/adding/importing saved connections, running SQL queries against saved connections or ad-hoc connection files, exporting result sets to csv/json/md/html/xlsx, batch-executing SQL files…
tty7
Drive the tty7 terminal workbench from the shell with the tty7 binary — list workspaces/tabs/panes, split a pane, send text or keystrokes into one, capture what is on a pane's screen, run a command in a real PTY and pass its exit code through, block until a pane finishes or needs input, see which coding agents are…
i-have-adhd
Shape output for a reader with ADHD: lead with the next action, number multi-step work, restate state across turns, suppress tangents, give specific time estimates, make wins visible. Invoke with /i-have-adhd; stays on until "stop adhd mode".
superbrain-distill
Internal SuperBrain skill — run by the detached capture child to distill a session-event delta into routed Obsidian notes. Not for direct user invocation.
sitrep-panel
Keep a live local HTML report updated as you work on a task — a status board, a running "what's happening now" narrative, screenshots, and a newest-first log — served on localhost so the user can watch progress in a browser tab instead of reading the transcript. Use when the user invokes /sitrep-panel, asks for a…
git-workflow
Use when starting feature work that needs a branch, creating worktrees for isolation, making atomic commits during development, or completing a development branch via merge, PR, preserve, or discard. Also use when the user says "set up worktree", "create PR", "finish this branch", "start feature", or when you need an…