This skill supports two frameworks for building Slack agents:
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionslack-agentExecute the skills CLI command in your project's root directory to begin installation:
Fetches slack-agent from vercel-labs/slack-agent-skill and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate slack-agent. Access via /slack-agent in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Create detailed user stories, acceptance criteria, and feature specs
Example
Generate user stories for 'password reset feature' with acceptance criteria, edge cases, and test scenarios
Reduce spec writing time by 50%, ensure comprehensive coverage
Research competitors, compare features, identify gaps
Example
Analyze 5 competitor products, create feature comparison matrix, suggest differentiation opportunities
Complete competitive research in 2 hours instead of 2 days
Evaluate features using frameworks (RICE, ICE, Kano) and create prioritized backlogs
Example
Score 20 feature ideas using RICE framework, generate prioritized roadmap with rationale
0
total installs
0
this week
14
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
14
stars
This skill supports two frameworks for building Slack agents:
chat + @chat-adapter/slack@slack/bolt + @vercel/slack-boltWhen this skill is invoked via /slack-agent, check for arguments and route accordingly:
| Argument | Action |
|---|---|
new |
Run the setup wizard from Phase 1. Read ./wizard/1-project-setup.md and guide the user through creating a new Slack agent. |
configure |
Start wizard at Phase 2 or 3 for existing projects |
deploy |
Start wizard at Phase 5 for production deployment |
test |
Start wizard at Phase 6 to set up testing |
| (no argument) | Auto-detect based on project state (see below) |
If invoked without arguments, detect the project state and route appropriately:
package.json with chat or @slack/bolt → Treat as new, start Phase 1manifest.json → Start Phase 2.env file → Start Phase 3.env but not tested → Start Phase 4Detect which framework the project uses:
package.json contains "chat" → Chat SDK projectpackage.json contains "@slack/bolt" → Bolt projectStore the detected framework and use it to show the correct patterns throughout the wizard and development guidance.
The wizard is located in ./wizard/ with these phases:
1-project-setup.md - Understand purpose, choose framework, generate custom implementation plan1b-approve-plan.md - Present plan for user approval before scaffolding2-create-slack-app.md - Customize manifest, create app in Slack3-configure-environment.md - Set up .env with credentials4-test-locally.md - Dev server + ngrok tunnel5-deploy-production.md - Vercel deployment6-setup-testing.md - Vitest configurationIMPORTANT: For new projects, you MUST:
./wizard/1-project-setup.md first./reference/agent-archetypes.md| Aspect | Chat SDK | Bolt for JavaScript |
|---|---|---|
| Best for | New projects | Existing Bolt codebases |
| Packages | chat, @chat-adapter/slack, @chat-adapter/state-redis |
@slack/bolt, @vercel/slack-bolt |
| Server | Next.js App Router | Nitro (H3-based) |
| Event handling | bot.onNewMention(), bot.onSubscribedMessage() |
app.event(), app.command(), app.message() |
| Webhook route | app/api/webhooks/[platform]/route.ts |
server/api/slack/events.post.ts |
| Message posting | thread.post("text") / thread.post(<Card>...) |
client.chat.postMessage({ channel, text, blocks }) |
| UI components | JSX: <Card>, <Button>, <Actions> |
Raw Block Kit JSON |
| State | @chat-adapter/state-redis / thread.state |
Manual / Vercel Workflow |
| Config | new Chat({ adapters: { slack } }) |
new App({ token, signingSecret, receiver }) |
You are working on a Slack agent project. Follow these mandatory practices for all code changes.
chat + @chat-adapter/slack for Slack bot functionality@chat-adapter/state-redis for state persistence (or in-memory for development){
"dependencies": {
"ai": "^6.0.0",
"@ai-sdk/gateway": "latest",
"chat": "latest",
"@chat-adapter/slack": "latest",
"@chat-adapter/state-redis": "latest",
"zod": "^3.x",
"next": "^15.x"
}
}
@vercel/slack-bolt for serverless Slack apps (wraps Bolt for JavaScript){
"dependencies": {
"ai": "^6.0.0",
"@ai-sdk/gateway": "latest",
"@slack/bolt": "^4.x",
"@vercel/slack-bolt": "^1.0.2",
"zod": "^3.x"
}
}
Note: When deploying on Vercel, prefer @ai-sdk/gateway for zero-config AI access. Use direct provider SDKs (@ai-sdk/openai, @ai-sdk/anthropic, etc.) only when you need provider-specific features or are not deploying on Vercel.
These quality requirements MUST be followed for every code change. There are no exceptions.
Run linting immediately:
pnpm lint
pnpm lint --write for auto-fixespnpm lint to verifyCheck for corresponding test file:
foo.ts, check if foo.test.ts existsYou MUST run all quality checks and fix any issues before marking a task complete:
# 1. TypeScript compilation - must pass
pnpm typecheck
# 2. Linting - must pass with no errors
pnpm lint
# 3. Tests - all tests must pass
pnpm test
Do NOT complete a task if any of these fail. Fix the issues first.
For ANY code change, you MUST write or update unit tests.
*.test.ts files or lib/__tests__/*.test.ts files or server/__tests__/Example test structure:
import { describe, it, expect, vi } from 'vitest';
import { myFunction } from './my-module';
describe('myFunction', () => {
it('should handle normal input', () => {
expect(myFunction('input')).toBe('expected');
});
it('should handle edge cases', () => {
expect(myFunction('')).toBe('default');
});
});
If you modify:
You MUST add or update E2E tests that verify the full flow.
Use the Chat SDK to define your bot instance. This is the central entry point for all Slack bot functionality.
lib/bot.ts or lib/bot.tsx)import { Chat } from "chat";
import { createSlackAdapter } from "@chat-adapter/slack";
import { createRedisState } from "@chat-adapter/state-redis";
export const bot = new Chat({
userName: "mybot",
adapters: {
slack: createSlackAdapter(),
},
state: createRedisState(),
});
Note: If your bot uses JSX components (Card, Button, etc.), the file must use the .tsx extension.
app/api/webhooks/[platform]/route.ts)import { after } from "next/server";
import { bot } from "@/lib/bot";
export async function POST(request: Request, context: { params: Promise<{ platform: string }> }) {
const { platform } = await context.params;
const handler = bot.webhooks[platform as keyof typeof bot.webhooks];
if (!handler) return new Response("Unknown platform", { status: 404 });
return handler(request, { waitUntil: (task) => after(() => task) });
}
The Chat SDK automatically handles:
waitUntilUse @vercel/slack-bolt to handle all Slack events. This package automatically handles:
ackTimeoutMs: 3001)waitUntilserver/bolt/app.ts)Make data-driven prioritization decisions faster
Draft PRDs, status updates, and stakeholder presentations
Example
Create executive summary of Q3 roadmap, monthly progress report, feature launch announcement
Save 3-5 hours/week on communication overhead
Prerequisites
Time Estimate
30-60 minutes to see productivity improvements
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work.
✗ Avoid when
Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed.
mattpocock/skills
parcadei/continuous-claude-v3
cursor/plugins
ailabs-393/ai-labs-claude-skills
pproenca/dot-skills
mattpocock/skills
Solid pick for teams standardizing on skills: slack-agent is focused, and the summary matches what you get after install.
Keeps context tight: slack-agent is the kind of skill you can hand to a new teammate without a long onboarding doc.
We added slack-agent from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
Registry listing for slack-agent matched our evaluation — installs cleanly and behaves as described in the markdown.
slack-agent fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
slack-agent reduced setup friction for our internal harness; good balance of opinion and flexibility.
slack-agent has been reliable in day-to-day use. Documentation quality is above average for community skills.
Solid pick for teams standardizing on skills: slack-agent is focused, and the summary matches what you get after install.
Solid pick for teams standardizing on skills: slack-agent is focused, and the summary matches what you get after install.
slack-agent has been reliable in day-to-day use. Documentation quality is above average for community skills.
showing 1-10 of 30