{
  "schema_version": "cmdhub.website.command_catalog.v1",
  "tool": "slack",
  "title": "Slack CLI",
  "description": "Channels, conversations, messages, threads, reactions, and users.",
  "auth_mode": "OAuth2",
  "auth_scopes": {
    "label": "Slack OAuth",
    "scopes": [
      "channels:read",
      "groups:read",
      "im:read",
      "mpim:read",
      "channels:history",
      "groups:history",
      "im:history",
      "mpim:history",
      "channels:write",
      "groups:write",
      "chat:write",
      "users:read",
      "users:read.email",
      "reactions:read",
      "reactions:write",
      "search:read"
    ],
    "note": "Used for conversations, messages, threads, reactions, search, and users."
  },
  "markdown_url": "/cli/slack/index.md",
  "commands": [
    {
      "id": "cmd-slack-auth",
      "path": "slack auth",
      "name": "auth",
      "short": "Manage Slack authentication",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-auth-login",
      "path": "slack auth login",
      "name": "login",
      "short": "Start Slack OAuth login",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack --profile work auth login\nslack auth login\nslack auth login --help",
      "flags": []
    },
    {
      "id": "cmd-slack-auth-logout",
      "path": "slack auth logout",
      "name": "logout",
      "short": "Clear auth state",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack --profile work auth logout\nslack auth logout\nslack auth logout --help",
      "flags": []
    },
    {
      "id": "cmd-slack-auth-refresh",
      "path": "slack auth refresh",
      "name": "refresh",
      "short": "Validate stored Slack token",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack auth refresh\nslack auth refresh --help\nslack auth refresh --json",
      "flags": []
    },
    {
      "id": "cmd-slack-auth-status",
      "path": "slack auth status",
      "name": "status",
      "short": "Show auth status",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack auth status\nslack auth status --help\nslack auth status --json\nslack auth whoami",
      "flags": []
    },
    {
      "id": "cmd-slack-auth-whoami",
      "path": "slack auth whoami",
      "name": "whoami",
      "short": "Show the authenticated Slack user",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack auth whoami\nslack auth whoami --help\nslack auth whoami --json",
      "flags": []
    },
    {
      "id": "cmd-slack-capabilities",
      "path": "slack capabilities",
      "name": "capabilities",
      "short": "Describe capabilities",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack capabilities --help",
      "flags": []
    },
    {
      "id": "cmd-slack-channel",
      "path": "slack channel",
      "name": "channel",
      "short": "Work with channels",
      "long": "Inspect, join, and leave Slack channels.\n\nList channels first when you need short refs such as c1 or want to inspect valid channel identifiers.\nIf you already know the channel name, channel get can be a faster first step than channel list.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-channel-archive",
      "path": "slack channel archive",
      "name": "archive",
      "short": "Archive a channel",
      "long": "Archive one Slack channel by id, name, short ref, or one piped channel item. This changes channel visibility and requires --yes.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack channel archive --help\nslack channel archive c1 --yes",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm archiving the channel"
        }
      ]
    },
    {
      "id": "cmd-slack-channel-create",
      "path": "slack channel create",
      "name": "create",
      "short": "Create a channel",
      "long": "Create one Slack channel by name. Use --private for a private channel.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack channel create --help\nslack channel create --name cmdhub-eval-updates\nslack channel create --name cmdhub-private --private",
      "flags": [
        {
          "name": "name",
          "type": "string",
          "usage": "New channel name"
        },
        {
          "name": "private",
          "type": "bool",
          "usage": "Create a private channel"
        }
      ]
    },
    {
      "id": "cmd-slack-channel-get",
      "path": "slack channel get",
      "name": "get",
      "short": "Get one channel by id or name",
      "long": "Get one Slack channel by id, name, short ref, or one piped channel item.\n\nPrefer this when you already know the channel name and want the canonical channel id without scanning the full channel list first.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack channel get\nslack channel get c1\nslack channel get cmdhub-evals-a\nslack channel get general\nslack channel list --limit 1 --jsonl | slack channel get",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Channel id or name"
        }
      ]
    },
    {
      "id": "cmd-slack-channel-join",
      "path": "slack channel join",
      "name": "join",
      "short": "Join a public channel",
      "long": "Join one public Slack channel by id, name, short ref, or one piped channel item.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack channel join --help\nslack channel join c1\nslack channel join general",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Channel id or name"
        }
      ]
    },
    {
      "id": "cmd-slack-channel-leave",
      "path": "slack channel leave",
      "name": "leave",
      "short": "Leave a channel",
      "long": "Leave one Slack channel by id, name, short ref, or one piped channel item.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack channel leave --help\nslack channel leave c1\nslack channel leave general",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Channel id or name"
        }
      ]
    },
    {
      "id": "cmd-slack-channel-list",
      "path": "slack channel list",
      "name": "list",
      "short": "List channels",
      "long": "List Slack channels and cache local channel refs such as c1.\n\nUse --jsonl when the next step should consume one channel item from stdin.\nIf you already know the channel name, channel get can be faster than listing first.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack channel get cmdhub-evals-a\nslack channel list\nslack channel list --limit 1 --jsonl | slack channel get\nslack channel list --limit 10",
      "flags": []
    },
    {
      "id": "cmd-slack-channel-purpose",
      "path": "slack channel purpose",
      "name": "purpose",
      "short": "Set a channel purpose",
      "long": "Set the purpose for one Slack channel by id, name, short ref, or one piped channel item.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack channel purpose --help\nslack channel purpose --id cmdhub-evals-a --purpose 'Low-value test channel'\nslack channel purpose c1 --purpose 'Coordinate cmdhub evals'",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "purpose",
          "type": "string",
          "usage": "Channel purpose text"
        }
      ]
    },
    {
      "id": "cmd-slack-channel-rename",
      "path": "slack channel rename",
      "name": "rename",
      "short": "Rename a channel",
      "long": "Rename one Slack channel by id, name, short ref, or one piped channel item.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack channel rename --help\nslack channel rename --id cmdhub-eval-old --name cmdhub-eval-new\nslack channel rename c1 --name cmdhub-eval-renamed",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "New channel name"
        }
      ]
    },
    {
      "id": "cmd-slack-channel-topic",
      "path": "slack channel topic",
      "name": "topic",
      "short": "Set a channel topic",
      "long": "Set the topic for one Slack channel by id, name, short ref, or one piped channel item.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack channel topic --help\nslack channel topic --id cmdhub-evals-a --topic 'Eval workspace'\nslack channel topic c1 --topic 'Daily coordination'",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "topic",
          "type": "string",
          "usage": "Channel topic text"
        }
      ]
    },
    {
      "id": "cmd-slack-channel-unarchive",
      "path": "slack channel unarchive",
      "name": "unarchive",
      "short": "Unarchive a channel",
      "long": "Unarchive one Slack channel by id, name, short ref, or one piped channel item.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack channel unarchive --help\nslack channel unarchive c1",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Channel id or name"
        }
      ]
    },
    {
      "id": "cmd-slack-config",
      "path": "slack config",
      "name": "config",
      "short": "Inspect local configuration",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-config-explain",
      "path": "slack config explain",
      "name": "explain",
      "short": "Explain resolved configuration",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack config explain --help",
      "flags": []
    },
    {
      "id": "cmd-slack-conversation",
      "path": "slack conversation",
      "name": "conversation",
      "short": "Work with Slack conversations",
      "long": "Inspect Slack conversations, including channels and other conversation types exposed by the API.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-conversation-get",
      "path": "slack conversation get",
      "name": "get",
      "short": "Get one conversation by id or name",
      "long": "Get one Slack conversation by id, name, short ref, or one piped conversation item.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack conversation get\nslack conversation get general\nslack conversation get v1",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "Conversation id or name"
        }
      ]
    },
    {
      "id": "cmd-slack-conversation-list",
      "path": "slack conversation list",
      "name": "list",
      "short": "List conversations visible to the current user",
      "long": "List Slack conversations and cache local conversation refs such as v1.\n\nUse conversation commands when you want a broader Slack conversation view that can include channels, DMs, and MPIMs.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack conversation list\nslack conversation list --limit 10\nslack conversation list --types public_channel,private_channel --limit 10",
      "flags": [
        {
          "name": "types",
          "type": "string",
          "default": "public_channel,private_channel,im,mpim",
          "usage": "Conversation types"
        }
      ]
    },
    {
      "id": "cmd-slack-conversation-open",
      "path": "slack conversation open",
      "name": "open",
      "short": "Open a DM or group DM",
      "long": "Open a Slack DM or MPIM with exact users.\n\nPass --user one or more times with a user id, username, email-like handle already resolvable by Slack user lookup, or cached user ref from user list.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack conversation open --help\nslack conversation open --user U12345678 --user U23456789\nslack conversation open --user p1",
      "flags": [
        {
          "name": "user",
          "type": "stringArray",
          "default": "[]",
          "usage": "User id, name, or short ref to include"
        }
      ]
    },
    {
      "id": "cmd-slack-doctor",
      "path": "slack doctor",
      "name": "doctor",
      "short": "Run Slack adapter diagnostics",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack doctor\nslack doctor --help\nslack doctor --json",
      "flags": []
    },
    {
      "id": "cmd-slack-login",
      "path": "slack login",
      "name": "login",
      "short": "Start Slack OAuth login",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack --profile work login\nslack login",
      "flags": []
    },
    {
      "id": "cmd-slack-logout",
      "path": "slack logout",
      "name": "logout",
      "short": "Clear auth state",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack --profile work logout\nslack logout",
      "flags": []
    },
    {
      "id": "cmd-slack-message",
      "path": "slack message",
      "name": "message",
      "short": "Work with Slack messages",
      "long": "List, inspect, create, reply to, update, and delete Slack messages.\n\nList first when you want short refs such as m1 or want to drive follow-up actions through jsonl pipes.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-message-create",
      "path": "slack message create",
      "name": "create",
      "short": "Create a message in a channel",
      "long": "Create a Slack message in one channel.\n\nPass --channel with a channel name, conversation id, or cached short ref, then provide --text.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack message create --channel c1 --text 'hello'\nslack message create --channel general --text 'hello'\nslack message create --help",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Target channel id or name"
        },
        {
          "name": "text",
          "type": "string",
          "usage": "Message text"
        }
      ]
    },
    {
      "id": "cmd-slack-message-delete",
      "path": "slack message delete",
      "name": "delete",
      "short": "Delete one or more of your messages",
      "long": "Delete one of your Slack messages.\n\nThe target may come from explicit --channel and --ts values, a cached message ref, or one piped message item.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack message delete --channel general --ts 171.0001\nslack message delete --help\nslack message delete m1",
      "flags": [
        {
          "name": "all",
          "type": "bool",
          "usage": "Confirm batch message deletion"
        },
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "ts",
          "type": "string",
          "usage": "Message timestamp"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm destructive batch message deletion"
        }
      ]
    },
    {
      "id": "cmd-slack-message-get",
      "path": "slack message get",
      "name": "get",
      "short": "Get one or more messages by timestamp",
      "long": "Get one Slack message in detail.\n\nThe target may be:\n- --channel plus --ts\n- a cached message ref such as m1\n- one piped message item from stdin\n\nUse message get after message list when you need the channel-scoped details for a single match.\nFor JSONL recovery, pipe exactly one message item from message list or channel-scoped search into this command.\nDo not pass --json together with --jsonl; --json is for one response, --jsonl is for pipelines.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack message get\nslack message get --channel general --ts 171.0001\nslack message get m1\nslack message list --channel cmdhub-evals-a --limit 1 --jsonl | slack message get\nslack message list --channel general --limit 1 --jsonl | slack message get",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "ts",
          "type": "string",
          "usage": "Slack message timestamp"
        }
      ]
    },
    {
      "id": "cmd-slack-message-list",
      "path": "slack message list",
      "name": "list",
      "short": "List recent messages from a channel",
      "long": "List recent Slack messages from one channel and cache local message refs such as m1.\n\nThose message refs can often be used directly by message get, message reply, reaction add, and thread get because the cached reference carries both channel and ts.\nIf you know the channel already, prefer message list over search.message for seeded or recent channel-local work.\nFor recovery after a broad search misses, use --channel with --query, emit --jsonl, and pipe the one matching item into message get.\nUse --json for one structured response or --jsonl for item streams; they are mutually exclusive.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack message list\nslack message list --channel cmdhub-evals-a --limit 10\nslack message list --channel cmdhub-evals-a --query eval-slack-msg-123\nslack message list --channel general --limit 1 --jsonl | slack message get\nslack message list --channel general --limit 1 --jsonl | slack reaction add --name eyes\nslack message list --channel general --limit 10",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Text query to match message text"
        }
      ]
    },
    {
      "id": "cmd-slack-message-reply",
      "path": "slack message reply",
      "name": "reply",
      "short": "Reply in a thread",
      "long": "Reply in a Slack thread.\n\nThe target may be:\n- --channel plus --ts\n- a cached message ref such as m1\n- one piped message or thread item from stdin",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack message list --channel general --limit 1 --jsonl | slack message reply --text 'Following up here.'\nslack message reply --channel general --ts 171.0001 --text 'Following up here.'\nslack message reply --help\nslack message reply m1 --text 'Following up here.'",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "text",
          "type": "string",
          "usage": "Reply text"
        },
        {
          "name": "ts",
          "type": "string",
          "usage": "Root message timestamp"
        }
      ]
    },
    {
      "id": "cmd-slack-message-update",
      "path": "slack message update",
      "name": "update",
      "short": "Update one of your messages",
      "long": "Update one of your Slack messages.\n\nThe target may come from explicit --channel and --ts values, a cached message ref, or one piped message item.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack message update --channel general --ts 171.0001 --text 'Updated text'\nslack message update --help\nslack message update m1 --text 'Updated text'",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "text",
          "type": "string",
          "usage": "Updated text"
        },
        {
          "name": "ts",
          "type": "string",
          "usage": "Message timestamp"
        }
      ]
    },
    {
      "id": "cmd-slack-profile",
      "path": "slack profile",
      "name": "profile",
      "short": "Manage provider profiles",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-profile-create",
      "path": "slack profile create",
      "name": "create",
      "short": "Create an unauthenticated provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack profile create --help",
      "flags": []
    },
    {
      "id": "cmd-slack-profile-delete",
      "path": "slack profile delete",
      "name": "delete",
      "short": "Delete a local provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack profile delete --help",
      "flags": []
    },
    {
      "id": "cmd-slack-profile-list",
      "path": "slack profile list",
      "name": "list",
      "short": "List provider profiles",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack profile list --help",
      "flags": []
    },
    {
      "id": "cmd-slack-profile-rename",
      "path": "slack profile rename",
      "name": "rename",
      "short": "Rename a local provider profile",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack profile rename --help",
      "flags": []
    },
    {
      "id": "cmd-slack-profile-use",
      "path": "slack profile use",
      "name": "use",
      "short": "Set the default provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack profile use --help",
      "flags": []
    },
    {
      "id": "cmd-slack-reaction",
      "path": "slack reaction",
      "name": "reaction",
      "short": "Work with message reactions",
      "long": "List, add, and remove reactions on Slack messages.\n\nThese commands work best with a piped message item or a cached message ref such as m1.\nUse --jsonl when a message list/search result should feed a reaction command; do not combine --json with --jsonl.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-reaction-add",
      "path": "slack reaction add",
      "name": "add",
      "short": "Add a reaction to a message",
      "long": "Add one reaction to a Slack message.\n\nThe target may come from explicit --channel and --ts values, a cached message ref, or one piped message item.\nFor recovery, run message list with --channel and --query, then pipe one --jsonl item into this command.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack message list --channel general --limit 1 --jsonl | slack reaction add --name eyes\nslack reaction add --channel general --ts 171.0001 --name eyes\nslack reaction add --help\nslack reaction add m1 --name eyes",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Emoji name without colons"
        },
        {
          "name": "ts",
          "type": "string",
          "usage": "Message timestamp"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Accepted for compatibility; confirmation is unnecessary for one exact reaction add"
        }
      ]
    },
    {
      "id": "cmd-slack-reaction-list",
      "path": "slack reaction list",
      "name": "list",
      "short": "List reactions on a message",
      "long": "List reactions for one Slack message.\n\nThe target may come from explicit --channel and --ts values, a cached message ref, or one piped message item.\nFor recovery, run message list with --channel and --query, then pipe one --jsonl item into this command.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack reaction list\nslack reaction list --channel general --ts 171.0001\nslack reaction list m1",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "ts",
          "type": "string",
          "usage": "Message timestamp"
        }
      ]
    },
    {
      "id": "cmd-slack-reaction-remove",
      "path": "slack reaction remove",
      "name": "remove",
      "short": "Remove your reaction from a message",
      "long": "Remove one of your reactions from a Slack message.\n\nThe target may come from explicit --channel and --ts values, a cached message ref, or one piped message item.\nFor recovery, run message list with --channel and --query, then pipe one --jsonl item into this command.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack reaction remove --channel general --ts 171.0001 --name eyes\nslack reaction remove --help\nslack reaction remove m1 --name eyes",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Emoji name without colons"
        },
        {
          "name": "ts",
          "type": "string",
          "usage": "Message timestamp"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Accepted for compatibility; confirmation is unnecessary for one exact reaction removal"
        }
      ]
    },
    {
      "id": "cmd-slack-resolve",
      "path": "slack resolve",
      "name": "resolve",
      "short": "Resolve a Slack local marker or stored short reference",
      "long": "Resolve a Slack short reference into its canonical payload.\n\nUse this when you have a marker such as c1, v1, p1, m1, or u1, or a stored short id such as C2H...5FA, and want to inspect what it refers to.\n\nResolution is profile-scoped. If a marker does not resolve, verify --profile and rerun the relevant list command.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack resolve --help\nslack resolve C2H...5FA\nslack resolve c1\nslack resolve m1",
      "flags": []
    },
    {
      "id": "cmd-slack-schema",
      "path": "slack schema",
      "name": "schema",
      "short": "Emit Slack adapter schema hints",
      "long": "Show schema hints for the Slack resource payloads emitted by this CLI.\n\nUse this when you need to understand structured output fields for automation or downstream parsing.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack schema\nslack schema --help\nslack schema message.create --in --json\nslack schema message.get --out --json",
      "flags": [
        {
          "name": "in",
          "type": "bool",
          "usage": "Show input schema"
        },
        {
          "name": "input",
          "type": "bool",
          "usage": "Show input schema"
        },
        {
          "name": "out",
          "type": "bool",
          "usage": "Show output schema"
        },
        {
          "name": "schema-output",
          "type": "bool",
          "usage": "Show output schema"
        }
      ]
    },
    {
      "id": "cmd-slack-search",
      "path": "slack search",
      "name": "search",
      "short": "Search Slack resources",
      "long": "Search Slack resources using the server-side Slack search APIs.\n\nPrefer channel-scoped list/get workflows when you already know the target channel. Use search when you do not know the channel or need broad workspace discovery.\nFor channel-scoped recovery, use message list --channel <channel> --query <text> --jsonl and pipe the selected item into message get.\nUse --json and --jsonl separately; --jsonl is the mode intended for command-to-command item streams.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-search-message",
      "path": "slack search message",
      "name": "message",
      "short": "Search Slack messages",
      "long": "Search Slack messages by query text.\n\nUse this when you know the terms you want to match but do not already have a channel-scoped message list in hand.\nIf you already know the channel, prefer:\n- slack message list --channel <channel>\n- then slack message get or slack thread get\n\nWhen a broad search misses a known channel-local message, recover with:\nslack message list --channel <channel> --query <text> --limit 1 --jsonl | slack message get\n\nDo not combine --json and --jsonl; use --jsonl only when feeding another command.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "slack message list --channel cmdhub-evals-a --limit 10\nslack search message\nslack search message --channel cmdhub-evals-a --query eval-slack-msg-123 --jsonl\nslack search message --query 'from:me release'\nslack search message --query 'has:link incident' --limit 20",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Limit search to one channel by using the channel-scoped message list path"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Search query"
        }
      ]
    },
    {
      "id": "cmd-slack-thread",
      "path": "slack thread",
      "name": "thread",
      "short": "Work with Slack threads",
      "long": "Inspect Slack threads and their replies.\n\nThese commands work best with a piped message item or a cached message ref such as m1.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-thread-get",
      "path": "slack thread get",
      "name": "get",
      "short": "Get a thread and its replies",
      "long": "Get a Slack thread and its replies.\n\nThe target may come from explicit --channel and --ts values, a cached message ref, or one piped message or thread item.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack message list --channel general --limit 1 --jsonl | slack thread get\nslack thread get\nslack thread get --channel general --ts 171.0001\nslack thread get m1",
      "flags": [
        {
          "name": "channel",
          "type": "string",
          "usage": "Channel id or name"
        },
        {
          "name": "ts",
          "type": "string",
          "usage": "Root message timestamp"
        }
      ]
    },
    {
      "id": "cmd-slack-user",
      "path": "slack user",
      "name": "user",
      "short": "Work with Slack users",
      "long": "List and inspect Slack users visible to the active token.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "",
      "flags": []
    },
    {
      "id": "cmd-slack-user-get",
      "path": "slack user get",
      "name": "get",
      "short": "Get one user by id or name",
      "long": "Get one Slack user by id, name, short ref, or one piped user item.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack user get\nslack user get alice\nslack user get p1",
      "flags": [
        {
          "name": "id",
          "type": "string",
          "usage": "User id or name"
        }
      ]
    },
    {
      "id": "cmd-slack-user-list",
      "path": "slack user list",
      "name": "list",
      "short": "List users",
      "long": "List active Slack users and cache local user refs such as p1.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack user list\nslack user list --include-deactivated\nslack user list --json\nslack user list --limit 20",
      "flags": [
        {
          "name": "include-deactivated",
          "type": "bool",
          "usage": "Include deactivated Slack accounts"
        }
      ]
    },
    {
      "id": "cmd-slack-version",
      "path": "slack version",
      "name": "version",
      "short": "Show slack version information",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "slack version --help",
      "flags": []
    }
  ]
}
