rowboat/apps/skills/slack/SKILL.md
tusharmagar e23f4ad6d2 Move skills into apps/skills/, drop override + sync layers
Skills now ship with the app under /apps/skills/ (sibling of /apps/x).
Forge bundles the directory into Resources/skills/; main resolves it via
process.resourcesPath in production and a workspace-relative path in dev,
then registers it in the DI container. The runtime reads SKILL.md files
directly from the bundle — no copy to ~/.rowboat/skills/, no GitHub
tarball sync.

Drop the override layer (FSSkillsRepo, SkillOverride, edit/diff UI,
skill-update notification) since skills are now read-only and only ship
with app updates. Resolver simplifies to a single source.

Add a placeholder substitution layer so skills that need live data
(currently `tracks`, with {{TRACK_BLOCK_SCHEMA}}) keep dynamic content
without depending on TS-module evaluation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 08:35:09 +05:30

4.6 KiB

name description license compatibility metadata
slack Send Slack messages, view channel history, search conversations, find users, and manage team communication. Use when the user wants to interact with Slack. MIT Designed for Rowboat desktop app
version title author tags
1.0.0 Slack Integration rowboatlabs slack, messaging, communication

Slack Integration Skill (agent-slack CLI)

You interact with Slack by running agent-slack commands through `executeCommand`.


1. Check Connection

Before any Slack operation, read `~/.rowboat/config/slack.json`. If `enabled` is `false` or the `workspaces` array is empty, simply tell the user: "Slack is not enabled. You can enable it in the Connectors settings." Do not attempt any agent-slack commands.

If enabled, use the workspace URLs from the config for all commands.


2. Core Commands

Messages

Action Command
List recent messages `agent-slack message list "#channel-name" --limit 25`
List thread replies `agent-slack message list "#channel" --thread-ts 1234567890.123456`
Get a single message `agent-slack message get "https://team.slack.com/archives/C.../p..."`
Send a message `agent-slack message send "#channel-name" "Hello team!"`
Reply in thread `agent-slack message send "#channel-name" "Reply text" --thread-ts 1234567890.123456`
Edit a message `agent-slack message edit "#channel-name" --ts 1234567890.123456 "Updated text"`
Delete a message `agent-slack message delete "#channel-name" --ts 1234567890.123456`

Targets can be:

Reactions

``` agent-slack message react add "" --ts agent-slack message react remove "" --ts ```

``` agent-slack search messages "query text" --limit 20 agent-slack search messages "query" --channel "#channel-name" --user "@username" agent-slack search messages "query" --after 2025-01-01 --before 2025-02-01 agent-slack search files "query" --limit 10 ```

Channels

``` agent-slack channel new --name "project-x" --workspace https://team.slack.com agent-slack channel new --name "secret-project" --private agent-slack channel invite --channel "#project-x" --users "@alice,@bob" ```

Users

``` agent-slack user list --limit 200 agent-slack user get "@username" agent-slack user get U01234567 ```

Canvases

``` agent-slack canvas get "https://team.slack.com/docs/F01234567" agent-slack canvas get F01234567 --workspace https://team.slack.com ```


3. Multi-Workspace

Important: The user has chosen which workspaces to use. Before your first Slack operation, read `~/.rowboat/config/slack.json` to see the selected workspaces. Only interact with workspaces listed in that config — ignore any other authenticated workspaces.

If the selected workspace list contains multiple entries, use `--workspace ` to disambiguate:

``` agent-slack message list "#general" --workspace https://team.slack.com ```

If only one workspace is selected, always use `--workspace` with its URL to avoid ambiguity with other authenticated workspaces.


4. Token Budget Control

Use `--limit` to control how many messages/results are returned. Use `--max-body-chars` or `--max-content-chars` to truncate long message bodies:

``` agent-slack message list "#channel" --limit 10 agent-slack search messages "query" --limit 5 --max-content-chars 2000 ```


5. Discovering More Commands

For any command you're unsure about:

``` agent-slack --help agent-slack message --help agent-slack search --help agent-slack channel --help ```


Best Practices

  • Always show drafts before sending — Never send Slack messages without user confirmation
  • Summarize, don't dump — When showing channel history, summarize the key points rather than pasting everything
  • Prefer Slack URLs — When referring to messages, use Slack URLs over raw channel names when available
  • Use --limit — Always set reasonable limits to keep output concise and token-efficient
  • Resolve user IDs — Messages contain raw user IDs like `U078AHJP341`. Resolve them to real names before presenting to the user. Batch all lookups into a single `executeCommand` call using `;` separators, e.g. `agent-slack user get U078AHJP341 --workspace ... ; agent-slack user get U090UEZCEQ0 --workspace ...`
  • Cross-reference with knowledge base — Check if mentioned people have notes in the knowledge base