slack-formatter

slack-formatter is a skill for Claude Code from lexfrei/ccc. It costs 76 tokens per session (926 once invoked), scanned A, original, BSD-3-Clause.

A macOS tool that converts Markdown into formatted text and a plain-text fallback, then places both on the clipboard for Slack.

In plain words
What is it for?
It helps prepare Markdown messages for pasting into Slack with Cmd+V.
Why use it?
It keeps headings, lists, bold text, and code blocks formatted when pasted into Slack, avoiding manual reformatting.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter.

Part of the slack-formatter plugin — 1 skill shipped together

Good fit It helps prepare Markdown messages for pasting into Slack with Cmd+V.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/lexfrei/ccc/slack-formatter
View source ↗ lexfrei/ccc
Install

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.

Any agent
npx skills add lexfrei/ccc --skill slack-formatter
Clone the repo
git clone --depth 1 https://github.com/lexfrei/ccc

Made for: Claude Code.

Or install slack-formatter, the plugin that ships this one along with the rest of its 1 skill.

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-formatter

README.md
[![agentmods](https://agentmods.dev/badge/skills/lexfrei/ccc/slack-formatter/github.svg)](https://agentmods.dev/skills/lexfrei/ccc/slack-formatter)
Your own site
<a href="https://agentmods.dev/skills/lexfrei/ccc/slack-formatter"><img src="https://agentmods.dev/badge/skills/lexfrei/ccc/slack-formatter/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-formatter

Your own site · 80×15
<a href="https://agentmods.dev/skills/lexfrei/ccc/slack-formatter"><img src="https://agentmods.dev/badge/skills/lexfrei/ccc/slack-formatter.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 76 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 926 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
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.00076 $0.00926
Opus 5.5 $0.00030 $0.00370
Sonnet 5.5 $0.00015 $0.00185
Haiku 4.5 $0.00008 $0.00093

Measured 1mo ago against content hash 62e3df8e1f36, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

slack-formatter 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 1mo 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.

skills/slack-formatter/skills/slack-formatter/SKILL.md · 88 lines

How it starts

The opening of the file, as written. The whole thing — 88 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Convert markdown to rich text and place it in the macOS clipboard so the user can Cmd+V it into Slack with formatting preserved.

When to invoke this skill

Trigger automatically when the user:

  • asks to prepare/format text for Slack (any language: "для Slack", "paste to Slack", "send to Slack", "для слака", "put into pbcopy for Slack")
  • has a drafted reply in markdown in the conversation and wants it copied to the clipboard for pasting somewhere that supports rich text
  • explicitly asks to "put into pbcopy with formatting" / "copy as rich text"

Do not invoke when the user asks for plain text only (tldrpr already covers that case).

Input resolution

Parse $ARGUMENTS:

  1. If a file path is passed — use that file.

  2. Otherwise — use the most recent drafted markdown content from the conversation context (a reply, message, summary). Write it to a temp file first:

    TMPFILE=$(mktemp -t slackfmt).md
    # write conversation-drafted markdown here via Write tool
    

If no draft is available and no path given — ask the user what text to format.

Execution

Require pandoc (install via Homebrew if missing: brew install pandoc). Swift is already shipped with macOS.

Run this block, substituting $MDFILE with the resolved input path:

MDFILE="${1:?markdown file required}"
HTMLFILE="${MDFILE%.md}.html"

command -v pandoc >/dev/null || { echo "pandoc not found — brew install pandoc" >&2; exit 1; }

pandoc -f gfm -t html "$MDFILE" -o "$HTMLFILE" || exit 1

SWIFT_SCRIPT=$(mktemp -t slackfmt).swift
cat > "$SWIFT_SCRIPT" <<'SWIFT'
import AppKit
import Foundation

guard CommandLine.arguments.count >= 3 else {
    FileHandle.standardError.write("usage: pbcopy_html <htmlfile> <plainfile>\n".data(using: .utf8)!)
    exit(2)
}

guard let html = try? String(contentsOfFile: CommandLine.arguments[1], encoding: .utf8),
      let plain = try? String(contentsOfFile: CommandLine.arguments[2], encoding: .utf8) else {
    FileHandle.standardError.write("cannot read input files\n".data(using: .utf8)!)
    exit(1)
}

let pb = NSPasteboard.general
pb.clearContents()
pb.setString(html, forType: .html)
pb.setString(plain, forType: .string)
print("OK: html=\(html.count) bytes, plain=\(plain.count) bytes")
SWIFT

swift "$SWIFT_SCRIPT" "$HTMLFILE" "$MDFILE"
rm -f "$SWIFT_SCRIPT" "$HTMLFILE"

Read the full file on GitHub · 88 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. 1mo ago First seen · 88 lines · 76 tokens per session scan A 62e3df8e1f36

Subscribe to this mod's changes

slack-formatter is a skill published in the GitHub repository lexfrei/ccc (11 stars, last pushed 14d ago), licensed BSD-3-Clause. It adds 76 tokens to every session and 926 once invoked, about $0.0003 per session on Opus 5.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-04.

Related

Other skills, from other repositories

orbit-notion

Open Orbit briefing skill — selected by the Orbit pipeline when Notion is the user's only connected connector, or when the user explicitly scopes their daily digest to Notion. Pulls the past 24 hours of document edits, comments, mentions, and database row changes from the user's authenticated Notion connection and…

nexu-io/open-design · 117 tokens

agentmail

Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by your inbox assignment.

paperclipai/paperclip · 30 tokens

rowboat-spaces

How to work as a member of Rowboat Spaces, the team chat where people and agents work together. Load it once per session, before acting on any request that reaches you from Rowboat; it covers your setup, mentions and hand-offs, the tools, and files.

rowboatlabs/rowboat · 60 tokens

feishu

Work with Feishu or Lark bots, docs, sheets, bitables, approval flows, and OpenAPI/MCP setup without hardcoding credentials.

Hmbown/CodeWhale · 33 tokens

pinchtab-mcp

Use this skill when a task requires browser automation through PinchTab's MCP server connected to a remote browser instance. Covers navigation, element interaction, data extraction, form filling, multi-step flows, and session management via MCP tools.

pinchtab/pinchtab · 52 tokens

Cortex

Operate Cortex, the LifeOS memory system — the typed Knowledge Archive (People, Companies, Ideas, Research with typed related: links) plus recall of prior work sessions, ISAs, and conversations. Search, add, harvest, develop, ingest, distill, graph-navigate, recall. USE WHEN cortex, knowledge, knowledge base, search…

danielmiessler/LifeOS · 196 tokens