create-slack-app

v2026.09.24

Use when a developer wants to create, scaffold, or bootstrap a new Slack app or agent from scratch with the Slack CLI. Covers prerequisites, authentication, choosing a workspace to install into, and creating a project from a Bolt (JS or Python) template locally. Trigger on "create a Slack app", "new Bolt app", "start a Slack agent".

GitHub
Install command
npx skhub add slackapi/create-slack-app
Markdown
SKILL.md

Create Slack App

Help the developer create a Slack app or agent using Bolt for $0.

This skill walks through the full setup: prerequisites, authentication, choosing a workspace to install into, project scaffolding from a template, and running the app locally.


Step 1: Check Prerequisites

1a. Detect the Slack CLI command

Use the slack:slack-cli skill — Step 1: Detect the Slack CLI — to check whether the public Slack CLI is installed and resolve its command name. The fingerprint check, alias fallback, and install instructions all live there; do not duplicate them here.

Once resolved, use the detected command name for all CLI commands throughout the rest of this skill. We refer to it as SLACK_CMD below — substitute the actual resolved command name everywhere you see SLACK_CMD.

1b. Verify the CLI version

Run SLACK_CMD version and print the version to confirm everything is working before continuing.

1c. Check language runtime

  • If $0 is bolt-js: Run node --version to verify Node.js is installed (v18+ required). If not installed, suggest brew install node or point to https://nodejs.org.
  • If $0 is bolt-python: Run python3 --version to verify Python is installed (3.6+ required). If not installed, suggest brew install python3 or point to https://python.org.

Step 2: Authenticate with the Slack CLI

Use the slack:slack-cli skill — Step 5: Authentication (slack auth) — to check the developer's auth status and walk them through SLACK_CMD login if they're not already authenticated.

Wait for confirmation that authentication succeeded before proceeding.


Step 3: Choose Where to Install the App

The app needs a Slack workspace to install into. Three targets work and they are not equivalent. Use AskUserQuestion to let the developer pick, presenting them in this order:

TargetBest forCost of entry
Developer sandbox (recommended)Anything the developer plans to keep building on. A free Enterprise Grid org isolated from real users, so org-level features are testable.Needs a Slack Developer Program account, which is free to join.
Free Team (second choice)Starting right now, when Developer Program signup is the thing in the way. A free workspace the developer creates and owns.Capped at 10 apps per workspace, and no Enterprise Grid org features.
Existing production workspace (last resort)Only when the app must reach real data or real coworkers.Usually gated by admin approval, and the developer may not be the admin.

Then follow the matching sub-step below. Whichever target they pick, authentication is the same Step 2 flow: the /slackauthticket command works in any workspace the developer belongs to, so there is no sandbox-specific login.

Whichever sub-step you follow, wait for confirmation that a target workspace exists and is authenticated before proceeding.

3a. Developer sandbox (recommended)

List existing sandboxes. Pass --team so the CLI does not stop to ask which authentication to use (get the team ID from SLACK_CMD auth list):

SLACK_CMD sandbox list --team <team_id>

If the developer has no Developer Program account, sandbox list returns nothing useful, because sandboxes belong to the developer program account whose email matches the authenticated user rather than to the workspace. Point them at https://api.slack.com/developer-program/join, and offer the Free Team path in 3b as a way to start building now rather than waiting on signup.

  • If a sandbox exists: Show it and confirm they want to use it.

  • If no sandbox exists: Create one. Ask the developer for a name and a password with AskUserQuestion, then run:

    SLACK_CMD sandbox create --team <team_id> --name <sandbox-name> --password <password>
    

    Important: the password is a credential. Do NOT echo it, restate it, or write it into a summary. Pass it straight to the command, the same rule Step 4c applies to API keys.

    Sandboxes can also be created in the browser at https://api.slack.com/developer-program/sandboxes.

Once the sandbox exists, have the developer log into it with the Step 2 flow before continuing.

3b. Free Team (second choice)

A Free Team is an ordinary Slack workspace on the free plan. The developer creates one at https://slack.com/get-started, then logs into it with the Step 2 flow.

What to tell them:

  • Everything this skill builds works there. Bolt apps install and run fine on the free plan.
  • The workspace is capped at 10 apps. Past that the CLI reports service_limits_exceeded.
  • It is a standalone workspace, not an Enterprise Grid org, unlike a developer sandbox. Anything org-level is therefore untestable: org-wide app installs and org-level app grants, the admin.* API methods (which need Business+ or Enterprise Grid), and multi-workspace behaviour generally. If the app targets those, use a sandbox instead.
  • Do not invite coworkers into it. A Free Team with real users in it is a production workspace for the purposes of 3c.

3c. Existing production workspace (last resort)

Only when the app genuinely needs real data or real users. Warn the developer before they log in:

  • Admin app approval (AAA) is likely to block the install. It is always on for Enterprise Grid organizations and can be switched on in standalone workspaces. When it applies, the install in Step 5 stops and asks whether to request approval, and then the developer waits on an admin.
  • To send that request without the prompt, set SLACK_AUTO_REQUEST_AAA=1 in the environment. It is an environment variable, not a CLI flag.
  • If approval is denied or slow, fall back to 3a or 3b instead of fighting it.

Step 4: Create the App from a Template

Ask the developer what kind of app they want to build. Present the available templates based on their chosen framework ($0):

bolt-js templates

TemplateRepoDescription
Starter Templateslack-samples/bolt-js-starter-templateBasic Bolt JS app — great starting point
Starter Agentslack-samples/bolt-js-starter-agentMinimal AI agent using Claude/OpenAI
Support Agentslack-samples/bolt-js-support-agentAI-powered IT helpdesk agent
Getting Startedslack-samples/bolt-js-getting-started-appOfficial getting started tutorial app
Examplesslack-samples/bolt-js-examplesUnified showcase of Slack features

bolt-python templates

TemplateRepoDescription
Starter Templateslack-samples/bolt-python-starter-templateBasic Bolt Python app — great starting point
Starter Agentslack-samples/bolt-python-starter-agentMinimal AI agent using Claude/OpenAI/Pydantic AI
Support Agentslack-samples/bolt-python-support-agentAI-powered IT helpdesk agent
Assistant Templateslack-samples/bolt-python-assistant-templateAgents & Assistants template
Examplesslack-samples/bolt-python-examplesUnified showcase of Slack features

Use AskUserQuestion to let the developer pick a template. Recommend the Starter Template for first-timers or the Starter Agent if they want to build an AI agent.

4a. Choose an AI provider (agent templates only)

If the developer picks Starter Agent or Support Agent, these templates contain subdirectories for different AI providers. Ask the developer which provider they want to use via AskUserQuestion:

bolt-js subdirectories:

SubdirDescription
claude-agent-sdkUses Anthropic's Claude Agent SDK
openai-agents-sdkUses OpenAI's Agents SDK

bolt-python subdirectories:

SubdirDescription
claude-agent-sdkUses Anthropic's Claude Agent SDK
openai-agents-sdkUses OpenAI's Agents SDK
pydantic-aiUses Pydantic AI (supports multiple LLM backends)

Recommend Claude Agent SDK as the default option.

4b. Name and create the project

Ask what they want to name their project (suggest a default like my-slack-app), then run:

For templates WITHOUT subdirectories (Starter Template, Getting Started, Assistant Template, Examples):

SLACK_CMD create <project-name> -t <template-repo>

For agent templates WITH subdirectories (Starter Agent, Support Agent):

SLACK_CMD create <project-name> -t <template-repo> --subdir <chosen-subdir>

For example:

# Non-agent template
SLACK_CMD create my-slack-app -t slack-samples/bolt-js-starter-template

# Agent template with provider subdir
SLACK_CMD create my-slack-agent -t slack-samples/bolt-js-starter-agent --subdir claude-agent-sdk

Confirm the project was created successfully by checking that the directory exists and listing its contents.

4c. Set required environment variables (agent templates only)

If the developer chose an agent template (Starter Agent or Support Agent), they need to set the required API key for their chosen AI provider. Ask for the key value using AskUserQuestion, then set it using the Slack CLI from within the project directory.

Required environment variables by provider:

ProviderEnv VariableDescription
claude-agent-sdkANTHROPIC_API_KEYAnthropic API key
openai-agents-sdkOPENAI_API_KEYOpenAI API key
pydantic-aiOPENAI_API_KEYOpenAI API key (required). Optionally also ANTHROPIC_API_KEY if using Anthropic as the backend — if both are set, Anthropic is used by default.

Use AskUserQuestion to ask the developer for their API key value(s). Then set each one:

cd <project-name> && SLACK_CMD env set <ENV_VAR_NAME> <value>

For example:

cd my-slack-agent && SLACK_CMD env set ANTHROPIC_API_KEY sk-ant-...

Important: Do NOT store or echo API key values in logs or output. Only pass them directly to SLACK_CMD env set.


Step 5: Run the App Locally

Use the slack:slack-cli skill — Step 6: Running an App Locally (slack run) — to resolve the app or team target and start the dev server in the background.

Tell the developer their app is now running and installed in the workspace they chose in Step 3, and that file changes will auto-reload it.

If the install stops on an admin approval request, they picked a workspace with AAA turned on: see Step 3c for the options.


Step 6: Next Steps

After the app is running, suggest next steps:

  1. Explore the code: Read through the project files together — offer to explain the app structure, manifest, listeners, etc.
  2. Make a change: Suggest a small modification (like changing a message response) to see hot-reload in action.
  3. Add features: Based on the template, suggest relevant Slack features to add (slash commands, events, modals, AI capabilities, etc.).
  4. Check the docs: Point to https://docs.slack.dev for the full Slack Platform documentation.

Notes

  • SLACK_CMD is a placeholder — always substitute the actual command name resolved in Step 1a (typically slack, but may be an alias).
  • This skill focuses on Bolt for JavaScript and Bolt for Python only. Do not suggest Deno, workflow apps, or slack deploy (hosted deployment).
  • SLACK_CMD sandbox create prompts for a name and password only when those flags are missing. Supply --team, --name, and --password and it runs non-interactively, so you can run it yourself rather than handing it to the developer. SLACK_CMD sandbox list needs --team for the same reason: without it the CLI prompts for which authentication to use.
  • Free Teams and developer sandboxes both support everything this skill builds. The CLI's free_team_not_allowed error is scoped to low-code workflow and function apps, which this skill does not create.
  • If the developer hits issues, suggest SLACK_CMD doctor to diagnose their setup.
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/create-slack-app

Default branch

main

Latest commit

4399a32

Tree SHA

27497ed