mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-12 21:02:17 +02:00
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>
This commit is contained in:
parent
66c0bc5fa7
commit
e23f4ad6d2
32 changed files with 5999 additions and 1446 deletions
133
apps/skills/slack/SKILL.md
Normal file
133
apps/skills/slack/SKILL.md
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
---
|
||||
name: slack
|
||||
description: >-
|
||||
Send Slack messages, view channel history, search conversations, find users, and manage team communication. Use when the user wants to interact with Slack.
|
||||
license: MIT
|
||||
compatibility: Designed for Rowboat desktop app
|
||||
metadata:
|
||||
version: "1.0.0"
|
||||
title: "Slack Integration"
|
||||
author: rowboatlabs
|
||||
tags: "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:
|
||||
- A full Slack URL: \`https://team.slack.com/archives/C01234567/p1234567890123456\`
|
||||
- A channel name: \`"#general"\` or \`"general"\`
|
||||
- A channel ID: \`C01234567\`
|
||||
|
||||
### Reactions
|
||||
|
||||
\`\`\`
|
||||
agent-slack message react add "<target>" <emoji> --ts <ts>
|
||||
agent-slack message react remove "<target>" <emoji> --ts <ts>
|
||||
\`\`\`
|
||||
|
||||
### Search
|
||||
|
||||
\`\`\`
|
||||
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 <url>\` 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue