Plug-and-play skills that supercharge Claude Code, Cursor, Codex, and other AI coding agents.
Talk to Slack, audit your setup, and keep stacking capabilities with one command.
Quickstart • Skills • Install • Discussions
Install the Slack skill into every agent you use in one line:
npx skills add https://github.com/azmym/agent-skills --skill slack --agent '*'Then just talk to your agent: "Summarize #engineering from today" or "Post 'deploy complete' in #releases." That's it.
New here? Start with What is a "skill"? for the 30-second mental model.
If you've ever wanted your agent to "just read that Slack thread" or "tell me what's broken in my config," this repository is for you. Each skill is a self-contained bundle of prompts, scripts, and docs that your agent loads on demand.
A skill is a focused capability you drop into your agent's skills directory. Once installed, your agent can recognize when a user intent matches the skill (for example, "summarize this Slack channel") and invoke it automatically, no extra plumbing required.
Think of skills as plug-in expertise. You install the ones you need, your agent becomes better at those tasks, and nothing else changes.
The skills CLI installs each skill into ~/.agents/skills/ and symlinks it into every agent's skills directory for you. In the commands below, replace <skill> with the name of the skill you want, for example slack or setup-check.
Use this if Claude Code is the only agent you run, or the only one you want this skill wired into.
npx skills add https://github.com/azmym/agent-skills --skill <skill>If you hop between agents (Claude Code, Cursor, Codex, and others), install once and cover them all:
npx skills add https://github.com/azmym/agent-skills --skill <skill> --agent '*'Pick a subset by passing a comma-separated list:
npx skills add https://github.com/azmym/agent-skills --skill <skill> --agent 'Claude Code,Cursor'Bring Slack into your agent's workflow. Read channels, summarize threads, search messages, post updates, react, pin, and (in browser mode) even drive features that have no public API like Canvas and Huddles.
This skill is designed around one idea: you shouldn't have to context-switch into Slack just to ask "what did the team decide?" Just ask your agent.
You pick the mode that matches your environment. Most people start with auto and never touch it again.
| Mode | Config value | When it's the right fit |
|---|---|---|
| Auto-detect (recommended) | auto |
You want browser mode's full feature set when a session exists, and token mode's speed the rest of the time. Zero babysitting. |
| Token | token |
macOS only. You want the fastest possible response times and are happy to keep Chrome open to Slack. |
| Browser | browser |
You're on Linux or Windows, or you need UI automation features like Canvas, Huddles, or Workflow Builder. |
Your agent reaches for the Slack skill when you do things like:
- Paste a Slack URL and ask "what's this about?"
- Say "summarize #engineering from today" or "what did Alex say in #standup this week?"
- Ask it to "post 'deploy complete' in #releases" or "react with 🎉 to that message"
- Mention a channel by name, for example
#design-reviews - Ask for Slack Canvas creation, Huddle interaction, or Workflow Builder changes (browser mode only)
npx skills add https://github.com/azmym/agent-skills --skill slackThe first time you trigger anything Slack-related, the agent will ask you to pick a mode:
- Token (macOS only): Fastest option. Pulls session tokens out of Chrome automatically. Requires Chrome running with Slack open, AppleScript permission, and
uvx. - Browser (cross-platform): Uses a local Playwright browser. Works on macOS, Linux, and Windows. Supports SSO, 2FA, and any login flow your workspace uses.
- Auto-detect (recommended): Uses browser mode when a Playwright session is live, falls back to token mode otherwise.
Your choice is saved to ~/.agents/config/slack/config.env and you'll never be asked again.
If you pick Browser mode, the agent opens a real browser window so you can complete your normal Slack login (SSO, 2FA, whatever you usually use). After that first login, sessions are reused.
You can change your mind at any time by editing one file:
# Switch to token mode
echo 'SLACK_MODE=token' > ~/.agents/config/slack/config.env
# Switch to browser mode
echo 'SLACK_MODE=browser' > ~/.agents/config/slack/config.env
# Switch back to auto-detect
echo 'SLACK_MODE=auto' > ~/.agents/config/slack/config.envYou can also override per invocation using an environment variable (handy for one-off calls):
SLACK_MODE=browser slack-api.sh conversations.history channel=C041RSY6DN2 limit=20The environment variable wins over the config file.
- It looks for a valid Playwright session at
~/.agents/config/slack/sessions/*/storageState.json. - If a valid session is found, it uses browser mode.
- Otherwise, it falls back to token mode.
In practice: start a browser session when you want the full feature set, stop it when you want maximum speed. No config edits required.
-
Google Chrome running with Slack open. Open Chrome, visit app.slack.com, and sign in to your workspace.
-
Allow JavaScript from Apple Events. This permission lets the skill read your Slack session token out of the page.
In Chrome, go to View > Developer > Allow JavaScript from Apple Events and confirm the prompt. Leave it on.
-
Python 3, used for JSON parsing and cookie extraction:
python3 --version # If missing: brew install python3 -
uvx (from uv), used to run
pycookiecheatagainst Chrome's cookie database:brew install uv uvx --version # sanity check
-
Node.js 18 or newer. Install from nodejs.org or your package manager:
# macOS brew install node # Ubuntu / Debian curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs
Playwright and Chromium install themselves the first time they run. Nothing else to set up.
If you're curious (or debugging), here's what each mode actually does.
- On the first API call, the skill pulls two session tokens out of Chrome:
xoxcfrom Slack'slocalStoragevia AppleScriptxoxdfrom Chrome's cookie database viapycookiecheat
- Tokens are cached in
~/.agents/config/slack/tokens.env. - If Slack rejects a token with
invalid_auth, the skill re-extracts and retries automatically. - Every call is a plain
curlrequest to the Slack Web API.
You never manage tokens by hand.
- A local Playwright Chromium instance launches.
- You log in once (manually for SSO/2FA, or automated for email/password).
- Session state (cookies plus
localStorage) is saved to~/.agents/config/slack/sessions/<id>/storageState.json. - Each API call spawns a short-lived Chromium process, restores your session, runs
fetch()inside the page context, and exits. - If no active session is found and mode is
auto, the skill quietly falls back to token mode.
Browser mode also unlocks UI automation for Slack surfaces that have no public API:
- Canvas creation and editing
- Huddle interactions
- Workflow Builder configuration
- Slack Connect invitations
- Admin and settings pages
- Visual verification via screenshots
Once installed, you don't call anything by name. Just talk to your agent:
| You say | What the skill does |
|---|---|
| "Summarize #engineering from today" | Pulls recent channel history and summarizes it |
| "What did John say in #standup this week?" | Searches messages filtered by user and channel |
| "Post 'deploy complete' in #releases" | Sends a message on your behalf |
| "React with thumbsup to that message" | Adds an emoji reaction |
| (You paste a Slack message URL) | Reads the specific message or thread |
| "Search Slack for deployment errors" | Runs a cross-channel search |
| "Pin that message" | Pins the referenced message |
| "Who is U04ABC123?" | Looks up user info by Slack ID |
| "Create a canvas in #project-alpha" | Opens browser mode and creates a Canvas |
| "Take a screenshot of the #design channel" | Captures a visual snapshot via browser mode |
Most issues fall into one of two buckets. Find the symptom, apply the fix.
| Symptom | Try this |
|---|---|
ERROR: Could not find Chrome cookie database |
Make sure Chrome is actually running. |
ERROR: Could not extract xoxc token |
Open app.slack.com in Chrome and enable View > Developer > Allow JavaScript from Apple Events. |
ERROR: Could not extract xoxd cookie |
Sanity-check pycookiecheat: uvx --from pycookiecheat python3 -c "print('ok')". |
invalid_auth keeps failing |
Close and reopen the Slack tab in Chrome, then try again. |
uvx: command not found |
Install uv: brew install uv. |
| Scripts won't execute | Run chmod +x on the files inside scripts/. |
| Symptom | Try this |
|---|---|
Node.js is required but not found |
Install Node.js 18+ from nodejs.org. |
no_browser_session |
Start one: slack-browser-session.sh start. |
browserType.launch: Executable doesn't exist |
Run slack-browser-session.sh start; it auto-installs Chromium. |
| Login page keeps reappearing | Your session likely expired. stop it, then login-manual to sign in again. |
no_teams_found |
Slack hasn't finished loading workspace data. Wait a few seconds and retry. |
| API responses feel slow | Browser mode carries launch overhead. On macOS, switch high-frequency calls to SLACK_MODE=token. |
| SSO login | Use login-manual; it opens a visible browser so you can complete SSO normally. |
Audit your Claude Code configuration and get a clear, grouped report of what's healthy, what's conflicting, and what's drifted out of date. This is the skill you run when something "feels off" and you want a second opinion before you start ripping things out.
- Skills: duplicates, broken symlinks, unused entries, placeholders
- Hooks: conflicts, missing paths, event collisions
- Plugins: disabled, stale cache, version drift
- Rules: internal contradictions, overlap with plugin behavior
- Settings: duplicate or conflicting keys (health only, no rewrites)
- Security: overly broad permissions, skipped prompts, orphaned MCP permissions
- MCP servers: empty configs, duplicates
- Memory: empty directories, stale entries, index mismatches
- Cross-category overlaps: for example, a rule duplicating what a plugin already enforces
- Updates: Claude Code CLI and plugin versions
- You ask "check my setup" or "audit my config"
- You say "what's broken?" or "find duplicates"
- You want a cleanup report before adding more plugins
- You ask about Claude Code or plugin update status
- You want to review MCP servers or memory state
- You invoke
/setup-checkdirectly, optionally with a scope
npx skills add https://github.com/azmym/agent-skills --skill setup-checkRun as /setup-check [scope] [optional goal message]. The default scope is all.
| Scope | What it audits |
|---|---|
all |
Everything below, plus update checks |
updates |
Claude Code CLI and plugin versions |
skills |
Duplicates, broken symlinks, unused, placeholders |
hooks |
Conflicts, broken paths, event collisions |
plugins |
Disabled, stale cache, version tracking |
rules |
Contradictions, overlap with plugin behavior |
settings |
Duplicates, conflicting keys (health only) |
security |
Broad permissions, skipped prompts, orphaned MCP perms |
mcp |
Empty configs, duplicate servers |
memory |
Empty dirs, stale entries, index mismatches |
overlaps |
Cross-category overlap detection only |
You can combine scopes. For example, /setup-check skills plugins runs both.
| You say | What happens |
|---|---|
| "Check my setup" | Full audit, grouped by category |
| "What's broken in my Claude Code config?" | Runs all and highlights errors, conflicts, misconfigurations |
| "Find overlaps between my skills and plugins" | Runs the overlaps cross-category detector |
/setup-check updates |
CLI and plugin update status only |
/setup-check skills hooks |
Audits just those two categories |
Ever wondered which skills, hooks, rules, plugins, or MCP tools your agent actually reached for on the last prompt? Used answers exactly that. It's a transparency skill: one command, and you get a clean report of what fired and what didn't.
Great for debugging "why did it do that?" moments, auditing your setup after a long session, or just satisfying curiosity.
- You ask "what was used?", "which skills ran?", or "show me what fired"
- You invoke
/useddirectly (last prompt) or/used --session(whole session) - You want a quick audit of MCP tools invoked vs. merely available
npx skills add https://github.com/azmym/agent-skills --skill usedInvoke as /used [session]. Default scope is the last exchange.
| Arg | Scope |
|---|---|
| (none) | Last user prompt and the immediate response only |
session or --session |
The entire conversation since the last /clear |
- Skills: every skill your agent invoked (including plugin-namespaced skills like
superpowers:brainstorming) - Hooks: hooks that injected context (SessionStart, UserPromptSubmit, and so on)
- Rules: loaded
CLAUDE.mdand~/.claude/rules/*.mdentries - Plugins: split into "active" (had a skill invoked) vs. "tools-only" (only contributed MCP tools)
- MCP tools: which tools were actually called, grouped by server (not just loaded)
Last Prompt Usage [2 skills | 1 hook | 3 rules | 1 plugin | 2 mcp tools]
--------------------------------------------------------------
Skills: using-superpowers, writing-plans
Hooks: user-prompt-submit
Rules: ask-before-acting, no-dashes, pr-labeling
Plugins: superpowers (using-superpowers, writing-plans)
MCP Tools: github (create_pull_request, get_file_contents)
| You say | What happens |
|---|---|
/used |
Reports what fired on the last prompt |
/used --session |
Reports everything that fired since the last /clear |
| "What skills ran for that last answer?" | Same as /used |
| "Show me every MCP tool we've called this session" | Runs in session mode and highlights the MCP Tools row |
Got an idea for a new skill, a fix, or a polish on the docs? You're in the right place:
- Browse or file an issue: github.com/azmym/agent-skills/issues
- Start a conversation: github.com/azmym/agent-skills/discussions
- Open a pull request, small is beautiful
If this repo saved you a context switch, a ⭐️ on GitHub helps other people find it.
Released under the MIT License.
