With AI agents increasingly relying on CLI tools over MCP — especially when MCP requires workspace admin approval — slackcli hits a sweet spot for Slack automation. I've been using it to build agents that monitor conversations and it works great.
The one gap I'm hitting is Canvas. My agents can read messages but can't access documentation that teams put in Canvas. Since slackcli already positions itself as AI-friendly, canvas support feels like a natural next step.
Proposal
Add a canvas command group:
slackcli canvas list [--limit] [--channel] [--json]
slackcli canvas read <canvas-id> [--channel] [--raw] [--json]
The Slack API has no canvases.read method, but canvas content can be retrieved as HTML via files.info + download — this is the established workaround used by agent-slack, slack-explorer-mcp, and others.
The HTML-to-Markdown conversion would be an internal module with zero new dependencies, following the same pattern as mrkdwn.ts.
Context
I'm aware of #7 which was closed for inactivity. My approach differs: zero deps, focused scope (no channel name resolution), and Slack-specific HTML handling (checklists, emoji, mentions, embedded files).
I have a working implementation on my fork — happy to open a PR if this is something you'd welcome.
With AI agents increasingly relying on CLI tools over MCP — especially when MCP requires workspace admin approval — slackcli hits a sweet spot for Slack automation. I've been using it to build agents that monitor conversations and it works great.
The one gap I'm hitting is Canvas. My agents can read messages but can't access documentation that teams put in Canvas. Since slackcli already positions itself as AI-friendly, canvas support feels like a natural next step.
Proposal
Add a
canvascommand group:The Slack API has no
canvases.readmethod, but canvas content can be retrieved as HTML viafiles.info+ download — this is the established workaround used by agent-slack, slack-explorer-mcp, and others.The HTML-to-Markdown conversion would be an internal module with zero new dependencies, following the same pattern as
mrkdwn.ts.Context
I'm aware of #7 which was closed for inactivity. My approach differs: zero deps, focused scope (no channel name resolution), and Slack-specific HTML handling (checklists, emoji, mentions, embedded files).
I have a working implementation on my fork — happy to open a PR if this is something you'd welcome.