Install
$ agentstack add skill-frankledo-claude-skills-slack-monitor ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Slack Monitor Skill
Scans Slack for messages that need your attention since the last scan, drafts replies, and asks your approval before sending anything. State file I/O uses scripts/state.js (Node.js built-ins only) for atomic reads and writes; Slack communication uses MCP integrations.
Skill Directory
The skill's base directory is provided by Claude Code in the Base directory for this skill: header when the skill loads. Use that path directly as SKILL_SCRIPTS_DIR.
SKILL.md — core workflow (this file)
README.md — user-facing documentation
agents/
monitor-prompt.md — isolated monitor agent prompt
workflow/ — on-demand workflow details:
SETUP.md — first-run setup wizard
GUARDRAILS.md — safety limits and rules
HANDLE.md — message handling + learning
REVIEW.md — review modes + formatting
DM-REVIEW.md — DM review reply processing
FORMATS.md — state file schemas
templates/ — default files for first run
Token optimization: Only this file (SKILL.md) is loaded on every cycle. The workflow/ files are Read on demand — only when the specific feature is needed (e.g., HANDLE.md only when actionable messages are found). On idle cycles with no new messages, none of the workflow files are read.
Configuration
All configuration lives in ${CLAUDE_PLUGIN_DATA}/CLAUDE.md (YAML frontmatter). Read the frontmatter only (not the body) at the start of each cycle.
---
userId: UXXXXXXXXXX
workspaceDomain: myteam.slack.com
channels:
groups:
autoReply: true
autoReplyConfidence: 90
draftMode: false
scanOnly: false
reviewMode: remote-control
interval: 15
activeInterval: 1
offhoursInterval:
timezone: America/New_York
startHour: 7
endHour: 16
days: 1-5
maxAutoReply: 5
maxDmNotify: 10
maxSends: 15
maxQueue: 25
---
Required: userId, workspaceDomain
scanOnly: true disables all outbound messages during the monitor cycle — no auto-replies, no DMs, no drafts. Items are queued to pending_review.json only. Process them with /slack-monitor review. Combine with --allowedTools (see README) for the strongest injection defense: even a successful injection cannot send messages if the send tools are not available in the session.
reviewMode options:
remote-control(default) — queue items non-blocking; user
processes with /slack-monitor review (works locally or via /remote-control)
direct— blocking inline review at the terminal each cycleslack(legacy) — DM yourself in Slack; unreliable because
Slack does not notify you of your own messages
Setup
The setup wizard (and migration check) runs when ${CLAUDE_PLUGIN_DATA}/CLAUDE.md does not exist, or when the user passes setup as an argument: /slack-monitor setup.
When triggered, Read $SKILL_SCRIPTS_DIR/workflow/SETUP.md and follow the wizard.
State Directory
All persistent state lives at ${CLAUDE_PLUGIN_DATA}/. This path is provided by the Claude plugin framework (cross-platform).
CLAUDE.md— config (frontmatter) + knowledge (body)last_scan— ISO 8601 UTC timestamppending_review.json— messages awaiting reviewsearch_cache.json— thread read cachesaved_messages.md— log of sent repliespeople/— per-person profiles
For file format details, Read $SKILL_SCRIPTS_DIR/workflow/FORMATS.md when needed.
Argument Dispatch
Parse $ARGUMENTS before doing anything else:
| Argument | Action | |----------|--------| | setup | Read workflow/SETUP.md and run wizard | | review | Process pending review queue (see below) | | stop | Cancel scheduled cron, confirm to user | | (none) | Run monitor cycle (see below) |
Review Queue (review argument)
Processes all items in pending_review.json interactively. Works with /remote-control or directly at the terminal.
Remote-control detection: Check whether the session context contains a Base directory for this skill: ... remote-control ... header. If yes, note it in the output so the user knows responses will be routed via remote-control.
- Run:
``bash node "$SKILL_SCRIPTS_DIR/scripts/state.js" pending-list \ --data "$CLAUDE_PLUGIN_DATA" `` Parse the JSON output. If the array is empty, report "No pending items." and stop.
- Read
$SKILL_SCRIPTS_DIR/workflow/REVIEW.mdfor formatting rules.
- For each item in the queue (oldest first):
a. Display the message context: ``` [N of M] From: {from} · {channel} · {time} > {messagetext} {if threadcontext: Thread: > {thread_context}}
- Concise ({confidence}%) {if recommended: ★}
> {concise draft}
- Detailed ({confidence}%) {if recommended: ★}
> {detailed draft}
- Casual ({confidence}%) {if recommended: ★}
> {casual draft} ```
b. Use AskUserQuestion with choices:
1 — Send concise2 — Send detailed3 — Send casualskip — Don't replycustom — Type a custom reply
c. Execute the choice (per REVIEW.md formatting/threading rules). Remove the item from the queue: ``bash node "$SKILL_SCRIPTS_DIR/scripts/state.js" pending-remove "" \ --data "$CLAUDE_PLUGIN_DATA" ` Append to saved_messages.md`.
- After all items, report: N sent, N skipped, queue now empty.
Monitor Cycle (no-arg invocation)
- In parallel, Read:
${CLAUDE_PLUGIN_DATA}/CLAUDE.md— parse YAML frontmatter only.
If missing, run setup (see above).
${CLAUDE_PLUGIN_DATA}/last_scan— ISO 8601 timestamp.
If missing, default to 15 minutes ago.
- Compute
current_time(current UTC ISO 8601 timestamp).
- Read
$SKILL_SCRIPTS_DIR/agents/monitor-prompt.md.
- Resolve timezone: if the
timezoneconfig field is empty or missing,
run: ``bash node "$SKILL_SCRIPTS_DIR/scripts/detect-timezone.js" ` Use the output (e.g. America/Los_Angeles`) as the resolved timezone. Otherwise use the configured value as-is.
- Dispatch Agent with
model: haikuand the monitor prompt.
Pass the following as part of the prompt text:
SKILL_SCRIPTS_DIR=CLAUDE_PLUGIN_DATA=- All config values from CLAUDE.md frontmatter (with
timezone
replaced by the resolved value from step 4)
last_scan=current_time=
- Receive the
MONITOR_SUMMARYblock from the agent.
State writes (last_scan, search_cache.json) are handled by the monitor agent (see agents/monitor-prompt.md Step 5). Run: ``bash node "$SKILL_SCRIPTS_DIR/scripts/state.js" checkpoint-clear \ --data "$CLAUDE_PLUGIN_DATA" `` (Clears the checkpoint in the parent context where plugin data dir permissions are established.)
- Schedule next scan using
CronList,CronDelete,CronCreate:
- Compute
local_hourandlocal_dowfromcurrent_timeusing
the resolved timezone from step 4.
- Determine desired schedule:
- Outside working hours (
local_hour >= endHouror
local_hour
- If
pending_queue_depth> 0: append
→ Run /slack-monitor review to process.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: FrankLedo
- Source: FrankLedo/claude-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.