kendex: Skill for Claude Code

.agents/skills/slack/SKILL.md

slack is a skill for Claude Code from vanillagreencom/kendex. It costs 32 tokens per session (1,937 once invoked), scanned C, original, MIT.

A relay that connects an overseer's mailbox to a private Slack channel. It can listen for messages and post text, files, alerts, or threaded updates.

In plain words
What is it for?
Use it to set up or inspect the connection, start or check the listener, and send messages or files to a private Slack channel.
Why use it?
It removes the need to manually move messages between the mailbox and Slack. It also provides a way to check whether the relay is running.

Skill for Claude Code

Written for Claude Code: user-invocable in frontmatter. Also seen: installed under .agents/ (shared by several agents).

This is vanillagreencom/kendex's own configuration. It tells Claude Code how to work on kendex itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything kendex configures →

Reuse

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.

Copy the file
curl -O https://raw.githubusercontent.com/vanillagreencom/kendex/main/.agents/skills/slack/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/vanillagreencom/kendex

Made for: Claude Code.

Wrote 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.

agentmods badge for slack

README.md
[![agentmods](https://agentmods.dev/badge/skills/vanillagreencom/kendex/slack/github.svg)](https://agentmods.dev/skills/vanillagreencom/kendex/slack)
Your own site
<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.

agentmods 80×15 button for slack

Your own site · 80×15
<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>
Per session 32 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,937 The whole file, excluding the scripts and references it only reads on demand.
Security scan C 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce 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

Measured 9d ago against content hash 1125a8d423b3, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

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.

The scan reads SKILL.md. This mod also ships 12 executable files (scripts/lib/__init__.py, scripts/lib/api.py, scripts/lib/mailbox.py, …), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

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 -->
.agents/skills/slack/SKILL.md · 72 lines

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 delivered with its Slack ts, mailbox id and path=live|catch-up. Eyes failures print a keyed cause and retry on the next poll; already_reacted settles 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 --status shows the running code as code=.
  • A relay reads its settings at start. After changing SLACK_OWNERS, run slack setup for each bound root: it invites an added owner to the channel and restarts the unit install wrote. 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 --channel argument.
  • read --channel needs no binding or owner settings. It uses the same token route as post --channel. --ts reads a message and its replies; --latest N reads the newest positive N top-level messages. Both print oldest first. Each line is slack: ts=TS edited=TS|- bot=ID text=TEXT, with user=ID instead of bot=ID for a user message. An absent author is user=-. text= is the last field; it preserves Slack markup and escapes backslash, newline and carriage return as \\, \n and \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.toml and the two tokens, SLACK_BOT_TOKEN and SLACK_APP_TOKEN, in its private env file: kendex.settings.toml.example.

Read the full file on GitHub · 72 lines

Changes

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.

  1. 9d ago Changed · +1 lines 1125a8d423b3
  2. 10d ago Changed a6e4e38718d9
  3. 14d ago Changed 63a6fad4fab7
  4. 15d ago Changed · +2 lines 18409d7499d9
  5. 16d ago Changed 91f3007a8c9b
  6. 18d ago Changed 1a4abbb6ab13
  7. 21d ago Changed · -1 lines 7ebca0ce8337
  8. 22d ago Changed 4a1d4d8abca0
  9. 23d ago Changed · +1 lines 224113571e02
  10. 26d ago First seen · 69 lines · 32 tokens per session scan C 12ebb9e1d89c

Subscribe to this mod's changes

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.

Related

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…

w-winter/dot314 · 84 tokens

text-search

Search indexed text corpora with qmd. For indexed content, prefer qmd over grep.

w-winter/dot314 · 22 tokens

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.

w-winter/dot314 · 44 tokens

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…

jeremylongshore/tons-of-skills-marketplace · 142 tokens

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.

kenryu42/cc-safety-net · 65 tokens

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.

cloudposse/atmos · 39 tokens