Borrowing it
Nothing to install: this file belongs to vanillagreencom/kendex. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/vanillagreencom/kendex/main/.agents/skills/slack/SKILL.mdgit clone --depth 1 https://github.com/vanillagreencom/kendexWrote 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/vanillagreencom/kendex/slack)<a href="https://agentmods.dev/skills/vanillagreencom/kendex/slack"><img src="https://agentmods.dev/badge/skills/vanillagreencom/kendex/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/vanillagreencom/kendex/slack"><img src="https://agentmods.dev/badge/skills/vanillagreencom/kendex/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.00032 | $0.01937 |
| Opus 5.5 | $0.00013 | $0.00775 |
| Sonnet 5.5 | $0.00006 | $0.00387 |
| Haiku 4.5 | $0.00003 | $0.00194 |
Grade C, and why
slack scanned grade C with 1 finding 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 9d 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.
Hidden instructionshighPrompt injection
Directives inside HTML comments, invisible characters or bidirectional overrides are read by the model and not by the person reviewing the file.
<!-- kendex:project-instructions:start --> How it starts
The opening of the file, as written. The whole thing — 72 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Project Instructions
Problems with a kendex-owned skill go through kendex report; check ownership in the file first.
Slack
The relay between one checkout's overseer mailbox and one private Slack channel. Mailbox reads use the mailbox package installed beside Slack inside the relay process. Writes use the bound checkout's lane-mail. The relay keeps its own record under tmp/slack/.
.agents/skills/slack/scripts/slack setup [--root ROOT] [--name NAME | --take CHANNEL_ID]
.agents/skills/slack/scripts/slack listen --root ROOT [--root ROOT]... [--once]
.agents/skills/slack/scripts/slack listen --status --root ROOT [--root ROOT]...
.agents/skills/slack/scripts/slack post [--root ROOT] [--channel ID] --text TEXT [--mention] [--file PATH] [--thread TS] [--update TS]
.agents/skills/slack/scripts/slack read --channel ID (--ts TS | --latest N)
.agents/skills/slack/scripts/slack compact [--root ROOT]...
.agents/skills/slack/scripts/slack install --root ROOT [--root ROOT]... [--print]
What each verb does, every setting, and every keyed line: slack --help. Python 3.8 or newer, standard library only.
Rules
- A root is a checkout with the orch skill installed. A relay serves every root it is given, and one relay serves one checkout, held by an OS lock.
- One relay per Slack app. Slack sends each owner message to one of an app's open Socket Mode connections, so a second relay on the same app takes part of the first one's messages, and each waits for the first relay's next reconnect. Each machine runs its own app and one relay over every root on it.
- The mailbox package owns mailbox reads, numbering and cursors. The relay reuses its store. An owner's words land through
lane-mail send --delivery-id; who judges a repeat is DEVELOPMENT.md § Constraints. - A delivery prints
deliveredwith its Slack ts, mailbox id andpath=live|catch-up. Eyes failures print a keyed cause and retry on the next poll;already_reactedsettles the mark. - Owner answers, question closure and ruling notices follow orch communication-modes.md § Owner asks.
- Every outbound text and file passes the secret-value pattern the orch skill ships at
references/secret-value.ere. A match is refused, journaled and never sent. - Webhooks cannot work through a proxy that swaps headers only. Every message post uses
chat.postMessage. - A package update reaches a running relay by itself: each poll fingerprints its code and the installed sibling mailbox reader definitions, and a change that holds for two polls re-executes the relay in the same process, which reads its settings again. The reload replaces the reader and its cached results. The reload waits while the relay reconnects or holds a refused live delivery.
listen --statusshows the running code ascode=. - A relay reads its settings at start. After changing
SLACK_OWNERS, runslack setupfor each bound root: it invites an added owner to the channel and restarts the unitinstallwrote. A plain restart drops a removed owner but never invites an added one. After changing either token, restart the relay. - A threaded directive's parent carries every owner and app thread message its reader generation has not received: schemas/journal.md § Parent pointers. Follow orch § Thread delivery when reading it.
- The channel binding is installation state written by
setup, never a setting. The alert channel is the caller's--channelargument. read --channelneeds no binding or owner settings. It uses the same token route aspost --channel.--tsreads a message and its replies;--latest Nreads the newest positive N top-level messages. Both print oldest first. Each line isslack: ts=TS edited=TS|- bot=ID text=TEXT, withuser=IDinstead ofbot=IDfor a user message. An absent author isuser=-.text=is the last field; it preserves Slack markup and escapes backslash, newline and carriage return as\\,\nand\r. An empty channel prints nothing and exits 0. API refusals use the existing keyed stderr format and exit 2.- Settings live in the project's
kendex.settings.tomland the two tokens,SLACK_BOT_TOKENandSLACK_APP_TOKEN, in its private env file: kendex.settings.toml.example.
What ships with it
18 files 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.
- app-manifest.yaml 562 B
- kendex.settings.toml.example 2.2 KB
- README.md 16 KB
- schemas/journal.md 14 KB
- scripts/lib/__init__.py 0 B runs code
- scripts/lib/api.py 10 KB runs code
- scripts/lib/mailbox.py 12 KB runs code
- scripts/lib/main.py 12 KB runs code
- scripts/lib/markup.py 12 KB runs code
- scripts/lib/refusals.py 11 KB runs code
- scripts/lib/relay.py 73 KB runs code
- scripts/lib/secret.py 1.8 KB runs code
- scripts/lib/settings.py 6.4 KB runs code
- scripts/lib/store.py 19 KB runs code
- scripts/lib/verbs.py 18 KB runs code
- scripts/lib/websocket.py 9.5 KB runs code
- scripts/slack 2.7 KB
- systemd/slack-listen.service 743 B
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.
- 9d ago Changed · +1 lines 1125a8d423b3
- 10d ago Changed a6e4e38718d9
- 14d ago Changed 63a6fad4fab7
- 15d ago Changed · +2 lines 18409d7499d9
- 16d ago Changed 91f3007a8c9b
- 18d ago Changed 1a4abbb6ab13
- 21d ago Changed · -1 lines 7ebca0ce8337
- 22d ago Changed 4a1d4d8abca0
- 23d ago Changed · +1 lines 224113571e02
- 26d ago First seen · 69 lines · 32 tokens per session scan C 12ebb9e1d89c
slack is a skill published in the GitHub repository vanillagreencom/kendex (87 stars, last pushed yesterday), licensed MIT. It adds 32 tokens to every session and 1,937 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it C with 1 finding (hidden instructions). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-29.
Other skills, from other repositories
prose-review
Review prose written for others (e.g., user-facing documentation, prompts for other LLMs, reports, plans, inline comments, docstrings) for local jargon leakage, orphaned references, missing grounding, and audience or genre mismatch. Always run on prose you produce or materially edit, except for routine conversational…
text-search
Search indexed text corpora with qmd. For indexed content, prefer qmd over grep.
rp
Always read this skill when the user mentions "rp" or "repoprompt", or before accessing a repository outside the current RepoPrompt workspace. Covers workspace discovery, binding, root verification, and workspace hygiene.
agency-os
Notion-as-source-of-truth dispatch board for running your work like an AI agency. One Tasks database is the source of truth; tasks flow Suggestion through Discussion, To-Do, In Progress, and Done with subtasks, recurring cadences, dependencies, and template subtrees. Batch execution fans approved To-Do rows out to…
release-notes
Generate and publish concise, evidence-based notes in the body of the latest existing GitHub Release. Use only when the user explicitly invokes $release-notes or explicitly asks to update the latest existing GitHub Release body. Do not invoke for general release planning, changelog, tag, or version tasks.
atmos-custom-commands
Custom CLI commands: command definition in atmos.yaml, arguments, flags, shared native step types, when: conditions, output/UI steps, env vars, custom component types.