Every @Howl command, permission scope, and troubleshooting step for the Slack agent.
Howl lives in your Slack workspace, right where customers report issues. Mention
@Howl in any channel it’s in to investigate a reported bug, review PRs, fix CI failures,
and open pull requests, without leaving Slack.
The native AI Assistant experience (the assistant panel and thread status updates) requires
your workspace to be on a paid Slack plan. Every other feature on this page — @mentions, PR
reviews, CI fixes, and connect commands — works on Slack Free too.
See tasksmind’s privacy policy for how workspace and message
data is collected, used, and stored.
Installation
1
Add Howl to Slack
Install from your dashboard so the workspace links to your organization. Sign in, then go to
Settings → Integrations and click Add to Slack there. This runs the authenticated
OAuth flow, so no manual token configuration is needed. (Installing from a public
page can’t detect your organization, so it isn’t offered there.)The following permissions are requested:
Scope
What it’s for
app_mentions:read
Respond to @Howl mentions
chat:write
Post messages and thread replies
channels:history
Read messages in public channels Howl is in
groups:history
Read messages in private channels Howl is in
im:history
Read direct messages sent to Howl
channels:read
Confirm channel membership for routing
channels:join
Join a public channel when you connect it
users:read
Resolve Slack user names for attribution
users:read.email
Match a Slack user to their tasksmind account
assistant:write
Power the native AI Assistant panel (paid Slack plans)
2
Add Howl to a channel, before you connect it
The connect commands below run inside the channel they configure, so Howl has to be a
member of that channel first.
/invite @Howl
Or open the channel name → Integrations → Add apps → Howl. For a public channel,
Howl adds itself when you connect it; a private channel must invite it (agents can’t
self-add). If you connect before it’s in the channel, nothing is saved, it’ll ask you to add
it first.
3
Link a channel to a GitHub repo
Link a repo to the current channel. Howl uses this repo as context for all agent commands
run in this channel.
@Howl connect github your-org/your-repo
Repeat this in each channel to connect different repos. One channel can have one active repo.
4
Connect a customer-support channel (optional)
In a channel your customers post to, an org owner or admin maps it to an on-call project’s
repo. Reports here become incidents and fix PRs automatically. Customers only see friendly
updates, never code, logs, or stack traces.
@Howl connect support your-org/your-repo
The repo must already have an on-call project in your dashboard.
5
Designate a dev channel for incident detail (optional)
In your team’s internal engineering channel (never your customer support channel), route the
full technical detail for incidents, root cause, file paths, PR links:
@Howl set dev channel here
The agent refuses to designate a channel already marked as a support channel, so this can’t
accidentally leak technical detail to customers.
Every command works as an @Howl … mention in a channel the agent is in, or in a DM with
the agent. Agent commands stream progress updates in a thread and may ask for approval before
taking action.
Setup
Command
What it does
@Howl connect github org/repo
Link a GitHub repo to this channel
@Howl connect support org/repo
Make this a customer-support channel (owner/admin)
@Howl set dev channel here
Route root cause, file paths, and PR links to this channel (refuses on a support channel)
@Howl status
Show repos connected to this channel
@Howl setup
Post the full step-by-step setup guide
@Howl ping
Health check, confirms backend and SDK are reachable
Status & info
Instant replies, no agent job started.
Command
What it does
@Howl status PR #214
PR status, review state, and CI checks
@Howl status TICKET-123
Ticket status and execution history
@Howl changes PR #214
File changes and diff summary for a PR
Agent commands
These start a background job. Howl posts progress steps in a thread and asks for approval
before committing or opening a PR.
Command
What it does
@Howl review https://github.com/org/repo/pull/214
Full code review: findings, risks, suggestions
@Howl review PR #214
Same as above using PR number (repo must be connected)
Investigate a bug report, find root cause, propose fix
@Howl implement <feature>
Plan and implement a feature, requires approval before committing
@Howl summarize this repo
Index the connected repo and generate an architecture summary
@Howl investigate <topic>
Pull Slack, logs, and recent commits to root-cause a customer issue
Replies are posted in a thread on your message so the channel stays clean.
The approval & safety gate
Full detail on the four approval buttons, risk classification, and who can approve.
Enterprise & self-hosted
If your team uses a self-hosted or enterprise Slack App, configure the following URLs in your
Slack App manifest under Event Subscriptions and Interactivity:
Under Event Subscriptions → Subscribe to bot events, add: app_mention, message.channels,
message.im.Then invite the agent to your channels with /invite @Howl.
Troubleshooting
@Howl requests fail with a signature error
Cause:SLACK_SIGNING_SECRET is missing or wrong in the agent configuration.Fix: Verify the signing secret matches the value in your Slack App → Basic Information →
App Credentials.
@Howl mentions get no response
Cause: The agent is not in the channel, or the app_mention event is not subscribed.Fix: Run /invite @Howl in the channel. Then check Slack App → Event Subscriptions
and confirm app_mention is listed under bot events.
The agent still shows up under its old name
Cause: The name Slack renders comes from the Slack app’s own configuration, not from
your installation. Reinstalling re-runs OAuth, which refreshes the permissions granted to
the app — it does not change what the app is called.Fix: Nothing to do on your side. A rename propagates to every workspace that already has
the app installed; reload Slack if a client is still showing the old name.
A newly added permission doesn't seem to apply
Cause: Slack freezes the set of granted scopes at install time. Adding a scope to the app
grants it to nobody — every workspace keeps exactly the permissions it agreed to when it
installed.Fix: Re-run Add to Slack from Settings → Integrations. Only a completed OAuth flow
rewrites the granted scopes for your workspace. (This is the one thing reinstalling does
fix.)
connect github returns "workspace is not registered"
Cause: The workspace was not installed via the OAuth flow, only a direct token was added.Fix: Re-install via the Add to Slack button on the Integrations page to complete the
OAuth install and register the workspace.
Agent returns "Repository appears to be empty or inaccessible"
Cause: The GitHub token does not have access to the repository (common with fine-grained
tokens).Fix: Use a classic GitHub Personal Access Token (ghp_...) with repo scope, or ensure
your fine-grained token explicitly includes the target repository.
fix CI / review PR returns a 404 error
Cause: The GitHub token lacks read access to the repository, or the PR number does not
exist.Fix: Confirm the token has repo scope and the PR number is correct. Merged PRs are still
accessible via the API.
ping returns sdk=not loaded
Cause: The tasksmind SDK module failed to import, usually a missing dependency or env
var.Fix: Check that SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY are set in your deployment
secrets.
Your setup guide
The full account-to-first-fix walkthrough.
API keys
Programmatic access for webhooks and custom integrations.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"tasksmind","description":"Setup guide and real-world walkthroughs for tasksmind and Howl, its AI engineer, which turns customer-reported bugs into safe, human-approved pull requests.","colors":{"primary":"#6B1F2A","dark":"#6B1F2A"},"logo":{"light":"https://mintcdn.com/tasksmind/di7whDQidjnQ3dMa/logo/light.svg?fit=max\u0026auto=format\u0026n=di7whDQidjnQ3dMa\u0026q=85\u0026s=599db902e2c781355de2f66bbe4b295a","dark":"https://mintcdn.com/tasksmind/di7whDQidjnQ3dMa/logo/dark.svg?fit=max\u0026auto=format\u0026n=di7whDQidjnQ3dMa\u0026q=85\u0026s=b39dd576b8e218367d0d7ea27d48c6c2"},"favicon":"https://mintcdn.com/tasksmind/35uaD6cOeZbpeiyW/favicon.ico?fit=max\u0026auto=format\u0026n=35uaD6cOeZbpeiyW\u0026q=85\u0026s=7b262d14cc6f766e59953a0d30d55ed4","appearance":{"default":"light","strict":true},"background":{"color":{"light":"#F5E7E1"}},"navbar":{"links":[{"href":"https://tasksmind.com/auth","label":"Sign in"}],"primary":{"type":"button","label":"tasksmind.com","href":"https://tasksmind.com"}},"footer":{"socials":{"github":"https://github.com/TasksMind"}},"fonts":{"heading":{"family":"Geist","weight":500,"source":"https://cdn.jsdelivr.net/npm/@fontsource/[email protected]/files/geist-sans-latin-500-normal.woff2","format":"woff2"},"body":{"family":"Geist","weight":400,"source":"https://cdn.jsdelivr.net/npm/@fontsource/[email protected]/files/geist-sans-latin-400-normal.woff2","format":"woff2"}},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","latex":false},"contextual":{"options":["copy","view","assistant","mcp","add-mcp"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"tasksmind.com","icon":"house","href":"https://tasksmind.com"},{"anchor":"Blog","icon":"newspaper","href":"https://tasksmind.com/blog"},{"anchor":"Support","icon":"life-buoy","href":"mailto:[email protected]"}]},"directory":"card","pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tasksmind","hasAudioNarration":false,"actualSubdomain":"tasksmind","customDomains":["docs.tasksmind.com"],"gitSource":{"type":"github","owner":"tasksmind","repo":"tasksmind.com","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":"","_id":"6ad991241d875ca883188d1f"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad991381d875ca883188fbd","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"What You Can Do","count":7},{"language":"default","tag":"Get Started","count":2},{"language":"default","tag":"Reference","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Geist Mono\";font-style:normal;font-weight:400;font-display:swap;src:url(\"https://cdn.jsdelivr.net/npm/@fontsource/[email protected]/files/geist-mono-latin-400-normal.woff2\")\n format(\"woff2\")}:root{--default-border-color: #e3ccc3}code,pre,kbd{font-family:\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace}.card{background-color:#fbf2ee!important;border-color:#e3ccc3!important;border-radius:0!important}#sidebar .nav-dropdown-trigger{border:none!important;background:transparent!important;box-shadow:none!important;padding-left:0.375rem}#sidebar .nav-dropdown-trigger:hover{background-color:rgb(0 0 0 / 0.04)!important}#sidebar .nav-dropdown-trigger .nav-dropdown-item-icon,.nav-dropdown-content .nav-dropdown-item-icon{border:none!important;background:transparent!important;height:auto!important;width:auto!important;padding:0!important}.nav-dropdown-content .nav-dropdown-item-description{display:none!important}#sidebar .nav-anchor span{font-family:\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;font-size:12px;font-weight:500;letter-spacing:-0.02em;text-transform:uppercase}img.nav-logo{max-width:220px}"}],"page":{"pagePath":"reference/slack-agent","slug":"/reference/slack-agent","pageMetadata":{"title":"Slack Agent Reference","description":"Every @Howl command, permission scope, and troubleshooting step for the Slack agent.","href":"/reference/slack-agent"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Every @Howl command, permission scope, and troubleshooting step for the Slack agent.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Heading,Note,Step,Steps,Table}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Howl lives in your Slack workspace, right where customers report issues. Mention\n`,_jsx(_components.code,{children:`@Howl`}),` in any channel it’s in to investigate a reported bug, review PRs, fix CI failures,\nand open pull requests, without leaving Slack.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The native AI Assistant experience (the assistant panel and thread status updates) requires\nyour workspace to be on a paid Slack plan. Every other feature on this page — @mentions, PR\nreviews, CI fixes, and connect commands — works on Slack Free too.`})}),`\n`,_jsxs(_components.p,{children:[`See tasksmind’s `,_jsx(_components.a,{href:`https://tasksmind.com/privacy`,children:`privacy policy`}),` for how workspace and message\ndata is collected, used, and stored.`]}),`\n`,_jsx(Heading,{level:`2`,id:`installation`,children:`Installation`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Add Howl to Slack`,children:[_jsxs(_components.p,{children:[`Install from your dashboard so the workspace links to your organization. Sign in, then go to\n`,_jsx(_components.strong,{children:`Settings → Integrations`}),` and click `,_jsx(_components.strong,{children:`Add to Slack`}),` there. This runs the authenticated\nOAuth flow, so no manual token configuration is needed. (Installing from a public\npage can’t detect your organization, so it isn’t offered there.)`]}),_jsx(_components.p,{children:`The following permissions are requested:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scope`}),_jsx(_components.th,{children:`What it’s for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`app_mentions:read`})}),_jsx(_components.td,{children:`Respond to @Howl mentions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`chat:write`})}),_jsx(_components.td,{children:`Post messages and thread replies`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`channels:history`})}),_jsx(_components.td,{children:`Read messages in public channels Howl is in`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`groups:history`})}),_jsx(_components.td,{children:`Read messages in private channels Howl is in`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`im:history`})}),_jsx(_components.td,{children:`Read direct messages sent to Howl`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`channels:read`})}),_jsx(_components.td,{children:`Confirm channel membership for routing`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`channels:join`})}),_jsx(_components.td,{children:`Join a public channel when you connect it`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`users:read`})}),_jsx(_components.td,{children:`Resolve Slack user names for attribution`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`users:read.email`})}),_jsx(_components.td,{children:`Match a Slack user to their tasksmind account`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`assistant:write`})}),_jsx(_components.td,{children:`Power the native AI Assistant panel (paid Slack plans)`})]})]})]})]}),_jsxs(Step,{title:`Add Howl to a channel, before you connect it`,children:[_jsx(_components.p,{children:`The connect commands below run inside the channel they configure, so Howl has to be a\nmember of that channel first.`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`/invite @Howl`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(_components.p,{children:[`Or open the channel name → `,_jsx(_components.strong,{children:`Integrations`}),` → `,_jsx(_components.strong,{children:`Add apps`}),` → Howl. For a public channel,\nHowl adds itself when you connect it; a private channel must invite it (agents can’t\nself-add). If you connect before it’s in the channel, nothing is saved, it’ll ask you to add\nit first.`]})]}),_jsxs(Step,{title:`Link a channel to a GitHub repo`,children:[_jsx(_components.p,{children:`Link a repo to the current channel. Howl uses this repo as context for all agent commands\nrun in this channel.`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`@Howl connect github your-org/your-repo`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`Repeat this in each channel to connect different repos. One channel can have one active repo.`})]}),_jsxs(Step,{title:`Connect a customer-support channel (optional)`,children:[_jsx(_components.p,{children:`In a channel your customers post to, an org owner or admin maps it to an on-call project’s\nrepo. Reports here become incidents and fix PRs automatically. Customers only see friendly\nupdates, never code, logs, or stack traces.`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`@Howl connect support your-org/your-repo`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`The repo must already have an on-call project in your dashboard.`})]}),_jsxs(Step,{title:`Designate a dev channel for incident detail (optional)`,children:[_jsx(_components.p,{children:`In your team’s internal engineering channel (never your customer support channel), route the\nfull technical detail for incidents, root cause, file paths, PR links:`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`@Howl set dev channel here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`The agent refuses to designate a channel already marked as a support channel, so this can’t\naccidentally leak technical detail to customers.`})]}),_jsx(Step,{title:`Verify setup`,children:_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`@Howl ping`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Expected: pong | backend=connected | sdk=loaded`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`@Howl status`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Expected: lists your connected repo`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`commands`,children:`Commands`}),`\n`,_jsxs(_components.p,{children:[`Every command works as an `,_jsx(_components.code,{children:`@Howl …`}),` mention in a channel the agent is in, or in a DM with\nthe agent. Agent commands stream progress updates in a thread and may ask for approval before\ntaking action.`]}),`\n`,_jsx(Heading,{level:`3`,id:`setup`,children:`Setup`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Command`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl connect github org/repo`})}),_jsx(_components.td,{children:`Link a GitHub repo to this channel`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl connect support org/repo`})}),_jsx(_components.td,{children:`Make this a customer-support channel (owner/admin)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl set dev channel here`})}),_jsx(_components.td,{children:`Route root cause, file paths, and PR links to this channel (refuses on a support channel)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl status`})}),_jsx(_components.td,{children:`Show repos connected to this channel`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl setup`})}),_jsx(_components.td,{children:`Post the full step-by-step setup guide`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl ping`})}),_jsx(_components.td,{children:`Health check, confirms backend and SDK are reachable`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`status-\u0026-info`,children:`Status \u0026 info`}),`\n`,_jsx(_components.p,{children:`Instant replies, no agent job started.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Command`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl status PR #214`})}),_jsx(_components.td,{children:`PR status, review state, and CI checks`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl status TICKET-123`})}),_jsx(_components.td,{children:`Ticket status and execution history`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl changes PR #214`})}),_jsx(_components.td,{children:`File changes and diff summary for a PR`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`agent-commands`,children:`Agent commands`}),`\n`,_jsx(_components.p,{children:`These start a background job. Howl posts progress steps in a thread and asks for approval\nbefore committing or opening a PR.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Command`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl review https://github.com/org/repo/pull/214`})}),_jsx(_components.td,{children:`Full code review: findings, risks, suggestions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl review PR #214`})}),_jsx(_components.td,{children:`Same as above using PR number (repo must be connected)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl fix CI for PR 214`})}),_jsx(_components.td,{children:`Fetch failing check logs, identify root cause, propose fix`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl fix bug \u003cdescription>`})}),_jsx(_components.td,{children:`Investigate a bug report, find root cause, propose fix`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl implement \u003cfeature>`})}),_jsx(_components.td,{children:`Plan and implement a feature, requires approval before committing`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl summarize this repo`})}),_jsx(_components.td,{children:`Index the connected repo and generate an architecture summary`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@Howl investigate \u003ctopic>`})}),_jsx(_components.td,{children:`Pull Slack, logs, and recent commits to root-cause a customer issue`})]})]})]}),`\n`,_jsx(_components.p,{children:`Replies are posted in a thread on your message so the channel stays clean.`}),`\n`,_jsx(Card,{title:`The approval \u0026 safety gate`,icon:`shield-check`,href:`/use-cases/approval-and-safety`,children:_jsx(_components.p,{children:`Full detail on the four approval buttons, risk classification, and who can approve.`})}),`\n`,_jsx(Heading,{level:`2`,id:`enterprise-\u0026-self-hosted`,children:`Enterprise \u0026 self-hosted`}),`\n`,_jsxs(_components.p,{children:[`If your team uses a self-hosted or enterprise Slack App, configure the following URLs in your\nSlack App manifest under `,_jsx(_components.strong,{children:`Event Subscriptions`}),` and `,_jsx(_components.strong,{children:`Interactivity`}),`:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Events URL: https://\u003cyour-host>/slack/events`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Interactivity URL: https://\u003cyour-host>/slack/interactions`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Event Subscriptions → Subscribe to bot events`}),`, add: `,_jsx(_components.code,{children:`app_mention`}),`, `,_jsx(_components.code,{children:`message.channels`}),`,\n`,_jsx(_components.code,{children:`message.im`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Then invite the agent to your channels with `,_jsx(_components.code,{children:`/invite @Howl`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`@Howl requests fail with a signature error`,id:`howl-requests-fail-with-a-signature-error`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` `,_jsx(_components.code,{children:`SLACK_SIGNING_SECRET`}),` is missing or wrong in the agent configuration.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fix:`}),` Verify the signing secret matches the value in your Slack App → Basic Information →\nApp Credentials.`]})]}),_jsxs(Accordion,{title:`@Howl mentions get no response`,id:`howl-mentions-get-no-response`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` The agent is not in the channel, or the `,_jsx(_components.code,{children:`app_mention`}),` event is not subscribed.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fix:`}),` Run `,_jsx(_components.code,{children:`/invite @Howl`}),` in the channel. Then check Slack App → Event Subscriptions\nand confirm `,_jsx(_components.code,{children:`app_mention`}),` is listed under bot events.`]})]}),_jsxs(Accordion,{title:`The agent still shows up under its old name`,id:`the-agent-still-shows-up-under-its-old-name`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` The name Slack renders comes from the Slack app’s own configuration, not from\nyour installation. Reinstalling re-runs OAuth, which refreshes the `,_jsx(_components.em,{children:`permissions`}),` granted to\nthe app — it does not change what the app is called.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fix:`}),` Nothing to do on your side. A rename propagates to every workspace that already has\nthe app installed; reload Slack if a client is still showing the old name.`]})]}),_jsxs(Accordion,{title:`A newly added permission doesn't seem to apply`,id:`a-newly-added-permission-doesnt-seem-to-apply`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` Slack freezes the set of granted scopes at install time. Adding a scope to the app\ngrants it to nobody — every workspace keeps exactly the permissions it agreed to when it\ninstalled.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fix:`}),` Re-run `,_jsx(_components.strong,{children:`Add to Slack`}),` from `,_jsx(_components.strong,{children:`Settings → Integrations`}),`. Only a completed OAuth flow\nrewrites the granted scopes for your workspace. (This is the one thing reinstalling `,_jsx(_components.em,{children:`does`}),`\nfix.)`]})]}),_jsxs(Accordion,{title:`connect github returns \"workspace is not registered\"`,id:`connect-github-returns-workspace-is-not-registered`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` The workspace was not installed via the OAuth flow, only a direct token was added.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fix:`}),` Re-install via the `,_jsx(_components.strong,{children:`Add to Slack`}),` button on the Integrations page to complete the\nOAuth install and register the workspace.`]})]}),_jsxs(Accordion,{title:`Agent returns \"Repository appears to be empty or inaccessible\"`,id:`agent-returns-repository-appears-to-be-empty-or-inaccessible`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` The GitHub token does not have access to the repository (common with fine-grained\ntokens).`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fix:`}),` Use a classic GitHub Personal Access Token (`,_jsx(_components.code,{children:`ghp_...`}),`) with `,_jsx(_components.code,{children:`repo`}),` scope, or ensure\nyour fine-grained token explicitly includes the target repository.`]})]}),_jsxs(Accordion,{title:`fix CI / review PR returns a 404 error`,id:`fix-ci-review-pr-returns-a-404-error`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` The GitHub token lacks read access to the repository, or the PR number does not\nexist.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fix:`}),` Confirm the token has `,_jsx(_components.code,{children:`repo`}),` scope and the PR number is correct. Merged PRs are still\naccessible via the API.`]})]}),_jsxs(Accordion,{title:`ping returns sdk=not loaded`,id:`ping-returns-sdk-not-loaded`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cause:`}),` The tasksmind SDK module failed to import, usually a missing dependency or env\nvar.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Fix:`}),` Check that `,_jsx(_components.code,{children:`SUPABASE_URL`}),` and `,_jsx(_components.code,{children:`SUPABASE_SERVICE_ROLE_KEY`}),` are set in your deployment\nsecrets.`]})]})]}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Your setup guide`,icon:`rocket`,href:`/getting-started`,children:_jsx(_components.p,{children:`The full account-to-first-fix walkthrough.`})}),_jsx(Card,{title:`API keys`,icon:`key`,href:`/reference/api-keys`,children:_jsx(_components.p,{children:`Programmatic access for webhooks and custom integrations.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Slack Agent Reference","description":"Every @Howl command, permission scope, and troubleshooting step for the Slack agent.","href":"/reference/slack-agent"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Installation","slug":"installation","depth":2,"children":[]},{"title":"Commands","slug":"commands","depth":2,"children":[{"title":"Setup","slug":"setup","depth":3,"children":[]},{"title":"Status \u0026 info","slug":"status-\u0026-info","depth":3,"children":[]},{"title":"Agent commands","slug":"agent-commands","depth":3,"children":[]}]},{"title":"Enterprise \u0026 self-hosted","slug":"enterprise-\u0026-self-hosted","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"tasksmind","siteName":"tasksmind","title":"Slack Agent Reference - tasksmind","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T04:29:27.688Z","originalFileLocation":"reference/slack-agent.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Every @Howl command, permission scope, and troubleshooting step for the Slack agent.\">\u003cmeta data-mint-head name=\"application-name\" content=\"tasksmind\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Slack Agent Reference - tasksmind\">\u003cmeta data-mint-head property=\"og:description\" content=\"Every @Howl command, permission scope, and troubleshooting step for the Slack agent.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"tasksmind\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.tasksmind.com/reference/slack-agent\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tasksmind.mintlify.site/_mintlify/api/og/v2?division=Reference\u0026amp;title=Slack+Agent+Reference\u0026amp;description=Every+%40Howl+command%2C+permission+scope%2C+and+troubleshooting+step+for+the+Slack+agent.\u0026amp;theme=eb1a1f9b85d5eaf3fda6fc5b\u0026amp;signature=31eaf39cab01f5f7bd914b6ae25a2f0574f457f4c0dc41a6a8168b3ce4614ab2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Slack Agent Reference - tasksmind\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Every @Howl command, permission scope, and troubleshooting step for the Slack agent.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tasksmind.mintlify.site/_mintlify/api/og/v2?division=Reference\u0026amp;title=Slack+Agent+Reference\u0026amp;description=Every+%40Howl+command%2C+permission+scope%2C+and+troubleshooting+step+for+the+Slack+agent.\u0026amp;theme=eb1a1f9b85d5eaf3fda6fc5b\u0026amp;signature=31eaf39cab01f5f7bd914b6ae25a2f0574f457f4c0dc41a6a8168b3ce4614ab2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/tasksmind/N6Lb-IhVHuOMIaWc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"tasksmind\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6B1F2A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.tasksmind.com/reference/slack-agent\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/reference/slack-agent.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.tasksmind.com/#organization\",\"name\":\"tasksmind\",\"url\":\"https://docs.tasksmind.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tasksmind/di7whDQidjnQ3dMa/logo/light.svg?fit=max\u0026auto=format\u0026n=di7whDQidjnQ3dMa\u0026q=85\u0026s=599db902e2c781355de2f66bbe4b295a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.tasksmind.com#website\",\"name\":\"tasksmind\",\"url\":\"https://docs.tasksmind.com\",\"publisher\":{\"@id\":\"https://docs.tasksmind.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.tasksmind.com/reference/slack-agent#webpage\",\"url\":\"https://docs.tasksmind.com/reference/slack-agent\",\"name\":\"Slack Agent Reference\",\"description\":\"Every @Howl command, permission scope, and troubleshooting step for the Slack agent.\",\"dateModified\":\"2026-10-22T04:29:27.688Z\",\"isPartOf\":{\"@id\":\"https://docs.tasksmind.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tasksmind.com/reference/slack-agent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tasksmind.com/reference/slack-agent#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"tasksmind\",\"item\":\"https://docs.tasksmind.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Slack Agent Reference\",\"item\":\"https://docs.tasksmind.com/reference/slack-agent\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.tasksmind.com/reference/slack-agent#article\",\"headline\":\"Slack Agent Reference\",\"name\":\"Slack Agent Reference\",\"description\":\"Every @Howl command, permission scope, and troubleshooting step for the Slack agent.\",\"url\":\"https://docs.tasksmind.com/reference/slack-agent\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tasksmind.com/reference/slack-agent#webpage\"},\"dateModified\":\"2026-10-22T04:29:27.688Z\",\"publisher\":{\"@id\":\"https://docs.tasksmind.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.tasksmind.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"tasksmind\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"tasksmind\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/reference/slack-agent.md","siteName":"tasksmind","nav":{"global":{"anchors":[{"anchor":"tasksmind.com","icon":"house","href":"https://tasksmind.com"},{"anchor":"Blog","icon":"newspaper","href":"https://tasksmind.com/blog"},{"anchor":"Support","icon":"life-buoy","href":"mailto:[email protected]"}]},"directory":"card","groups":[{"group":"Get Started","icon":"rocket","expanded":true,"pages":[{"title":"What is tasksmind?","href":"/index"},{"title":"Your setup guide","href":"/getting-started"}]},{"group":"What You Can Do","icon":"sparkles","expanded":true,"pages":[{"title":"What You Can Do","href":"/use-cases/overview"},{"title":"From Customer Report to Pull Request","href":"/use-cases/report-to-pr"},{"title":"Customer Support, Without the Leak","href":"/use-cases/support-escalation"},{"title":"Fixing a Failing CI Run","href":"/use-cases/ci-auto-fix"},{"title":"Asking Howl Directly","href":"/use-cases/ask-tasksmind"},{"title":"The Approval \u0026 Safety Gate","href":"/use-cases/approval-and-safety"},{"title":"Using tasksmind Outside Slack","description":"Run tasksmind from your own terminal with the tasksmind CLI, or run a local agent that claims fix handoffs from the queue and works against your own machine.","href":"/use-cases/cli-and-local-agent"}]},{"group":"Reference","icon":"book","expanded":true,"pages":[{"title":"Slack Agent Reference","href":"/reference/slack-agent"},{"title":"API Keys","description":"Programmatic access to tasksmind for your own webhooks, scripts, or internal tools.","href":"/reference/api-keys"}]}]},"basePath":"","title":"Slack Agent Reference - tasksmind","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}