Skip to content
Documentation
Skill

/slack-unanswered

Slackの未返信メッセージを検出し、返信ドラフトを生成するスキル。 「未返信メッセージ」「返信してないメッセージ」「Slack確認」等のリクエストで発動。

From plugin
ai-agent-camp
345193 skills8 agents200 commands
Install
$ npx -y skills add minicoohei/ai-agent-camp --skill slack-unanswered --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/slack-unanswered

Context preview

The summary Claude sees to decide when to auto-load this skill.

Slackの未返信メッセージを検出し、返信ドラフトを生成するスキル。 「未返信メッセージ」「返信してないメッセージ」「Slack確認」等のリクエストで発動。

SKILL.md

slack-unanswered.SKILL.md
name: slack-unanswered
description: "Slackの未返信メッセージを検出し、返信ドラフトを生成するスキル。 「未返信メッセージ」「返信してないメッセージ」「Slack確認」等のリクエストで発動。"
triggers:
  - 未返信メッセージ
  - 返信してないメッセージ
  - Slack確認
  - 未読メンション
  - 返信が必要なメッセージ
  - slack-unanswered
  - unanswered messages

トリガーワード

「未返信メッセージ」「返信してないメッセージ」「Slack確認」「未読メンション」

Slack Unanswered Messages Finder

This skill finds Slack messages that need your attention and helps you reply to them.

Target Directory

All searches are performed in: `slack-sync/data/`

Your Identifiers

> 以下を自分の Slack 表示名・ユーザー名に置き換えてください。

Search for these names (case-insensitive):

  • `@{YOUR_DISPLAY_NAME}`
  • `@{YOUR_FULL_NAME}`
  • `@{YOUR_SLACK_USERNAME}`
  • Messages posted by: `{YOUR_FULL_NAME}`, `{YOUR_SLACK_USERNAME}`

設定方法: 上記のプレースホルダーを自分の情報に書き換えるか、`--users` オプションで指定してください。

---

Workflow

Step 1: Find Unanswered Messages

Search for messages containing your identifiers:

grep -rn -B2 -A10 -E "@{YOUR_DISPLAY_NAME}|@{YOUR_SLACK_USERNAME}|{YOUR_FULL_NAME}" slack-sync/data/

Step 2: Identify Unanswered Messages

A message is **unanswered** if: 1. It contains a mention of your name (or you posted it) 2. It ends with a question (`?`) or contains a request 3. There are NO lines starting with `> ####` immediately after it (before the next `###` or `---`)

Focus on recent messages (last 7 days). Exclude bot messages (Sentry, Vercel, etc.).

Step 3: Present Findings

For each unanswered message, provide:

  • Channel name
  • Date/Time
  • Sender
  • Content summary
  • Slack link
  • Whether it needs a reply or is a follow-up

Step 4: Generate Reply Draft

For messages that need replies, generate a draft reply in Japanese. Ask the user to review and edit.

Step 5: Send Reply (with confirmation)

**IMPORTANT: Always get user confirmation before sending!**

The reply flow is: 1. Show the draft reply to the user 2. Ask: "この内容で送信してよろしいですか? (修正があれば教えてください)" 3. Wait for user confirmation or edits 4. Only after explicit approval, use the reply script

---

Replying to Messages

Reply Script Location

data/slack-sync/scripts/reply_slack.py

Usage

# Dry run (preview without sending)
python data/slack-sync/scripts/reply_slack.py \
  --url "https://xxx.slack.com/archives/CHANNEL/pTIMESTAMP" \
  --message "返信内容" \
  --dry-run

# Actually send (only after user confirms!)
python data/slack-sync/scripts/reply_slack.py \
  --url "https://xxx.slack.com/archives/CHANNEL/pTIMESTAMP" \
  --message "返信内容"

Environment Variable Required

SLACK_USER_TOKEN=xoxp-...

This token needs the `chat:write` scope. See setup instructions below.

---

Reply Flow Example

Claude: 以下の返信案を作成しました:

---
宛先: @{SENDER_NAME}
チャンネル: datadev-ai
Slack: [リンク](https://...)

返信案:
「担当者名のSlackアカウントは @xxx です!」
---

この内容で送信してよろしいですか? (修正があれば教えてください)

User: OKです

Claude: [reply_slack.py を実行して送信]
送信しました!

---

Setup: Adding chat:write Scope

To enable reply functionality:

1. Go to [Slack API Apps](https://api.slack.com/apps) 2. Select your app (e.g., "Message Archiver") 3. Navigate to **OAuth & Permissions** 4. Under **User Token Scopes**, add:

  • `chat:write` - Post messages

5. Click **Reinstall to Workspace** 6. Copy the new `xoxp-...` token 7. Update `SLACK_USER_TOKEN` in your environment/GitHub Secrets

---

Message Format Reference

Messages in markdown files:

  • **Main message**: `### HH:MM - Sender Name [[Slack]](url)`
  • **Reply**: Lines starting with `> ####`

---

TODO File Management

TODO File Location

slack-sync/TODO.md

TODO Format

- [ ] **[channel-name]** Sender名 (日付 時刻)
  - 内容: メッセージの要約
  - Slack: URL
  - 返信案: 返信内容のドラフト

Workflow with TODO

1. **検索時**: 未回答メッセージを見つけたらTODO.mdに追加 2. **返信時**: 返信したらチェックボックスを `[x]` に変更 3. **完了時**: 「完了したメッセージ」セクションに移動

Adding a Task

When you find an unanswered message, add it to `slack-sync/TODO.md`:

- [ ] **[datadev-ai]** {SENDER_NAME}さん (1/7 19:10)
  - 内容: 担当者名のSlackアカウント名の確認
  - Slack: https://...
  - 返信案: アカウント名を確認して回答

Completing a Task

After sending a reply: 1. Change `- [ ]` to `- [x]` 2. Move the item to the "完了したメッセージ" section

---

Quick Commands

Find mentions in recent files:

grep -rn -B2 -A10 "@{YOUR_DISPLAY_NAME}" slack-sync/data/ | head -200

Find your posts:

grep -rn "### [0-9:]* - {YOUR_DISPLAY_NAME}" slack-sync/data/ | head -100

Find questions to you:

grep -rn -A5 "@{YOUR_DISPLAY_NAME}" slack-sync/data/ | grep -E "\?$|でしょうか|ですか|ますか|ください"

View current TODO:

cat slack-sync/TODO.md
Read more
Ships withai-agent-camp

AI Agent Training for Non-Engineers - Complete Guide to Claude Code / Cursor / Codex ### ⚠️ Before you clone Official repository (maintained by the authors): Running AI agents from this repo grants them shell, file-write, and external-API permissions on your

Get the whole plugin

Other skills on ai-agent-camp.