slack-post — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited slack-post (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Posting to Slack happens under one of two identities, and the choice is not cosmetic — it changes who the workspace sees as the author, what the message can @-mention, and which audit trail it lands in. This skill makes that choice explicit and consistent.
The plugin runs two Slack MCP servers, each pinned to one identity:
| Identity | Server | Tool | Posts as | When |
|---|---|---|---|---|
| User (default) | slack | mcp__plugin_adk_slack__conversations_add_message | you (your xoxp user token) | default — every post unless the prompt asks for the bot |
| Bot | slack-bot | mcp__plugin_adk_slack-bot__conversations_add_message | the Slack app/bot (xoxb token) | only when the prompt explicitly asks |
Why two servers: the underlyingslack-mcp-servercannot switch identity per call — with both tokens present it always prefers the user token. So the bot identity lives in its own server (slack-bot, launched with the bot token only, exposing just the post tool).
Default to the user. Post via slack unless the prompt clearly opts into the bot. Signals that mean use the bot:
--as botAnything else — including silence — means post as you. Do not ask which identity to use; the default is user. (If the prompt is genuinely ambiguous — e.g. "have the bot or me post, whichever" — then, and only then, ask with AskUserQuestion.)
When you post as the bot, the bot must already be a member of the target channel, or Slack rejects the post (not_in_channel). If that happens, say so and suggest inviting the app — don't silently fall back to the user identity.
Every message this skill sends — user or bot — ends with the footer:
_Sent using Claude_Append it as the final line, separated by a blank line:
<the message body>
_Sent using Claude_This is non-negotiable and applies to both identities. (To change the footer text, edit the line above — it is the single source of truth.)
--to / "#channel" / "@user" into a channel or user ID if needed (channels_list, users_search on the slack server). A thread reply needs the parent thread_ts.Sent using Claude footer as the final line.mcp__plugin_adk_slack__conversations_add_messagemcp__plugin_adk_slack-bot__conversations_add_messagenot_in_channel, channel_not_found), report the raw error and the fix — never retry under a different identity to "make it work".not_in_channel failure is reported, not worked around by quietly posting as the user (that changes the author the recipient sees).slack server's read tools directly — no skill, no footer, no identity decision.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.