
get-teams-action-items
by DBS-Dev2000
Version-controlled repository for Claude Code and Claude Desktop agents and skills
SKILL.md
name: get-teams-action-items description: Extracts action items from Microsoft Teams messages across all chats and channels using keyword detection and @mentions. Triggers on "Get my Teams action items", "What action items do I have in Teams?", "Update Teams section in briefing entry [id]". Called by briefing-generator after get-email-summary. Transitions Phase from 3-Teams to 4-Wrike.
Get Teams Action Items
Retrieves Teams messages and identifies action items directed at the user.
Input Parameters
| Parameter | Required | Format | Description |
|---|---|---|---|
| entry_id | Yes | UUID | Notion page ID of briefing entry |
| date | Yes | YYYY-MM-DD | Briefing date |
| lookback_hours | No | Number | Hours to look back (default: 24, range: 12-48) |
| max_messages_per_chat | No | Number | Max messages per chat (default: 50, range: 10-100) |
Action Item Detection
High Confidence Indicators
- Direct @mention of user + action keyword
- Message from manager/team lead
- Urgency indicators: "urgent", "asap", "today", "EOD"
- Specific deadline mentioned
Action Keywords
- Assignment: "can you", "could you", "please", "need you to", "assigned to you"
- Tasks: "action item:", "todo:", "task:", "follow up on", "get back to"
- Reviews: "review this", "approve this", "test this", "look into"
- Questions directed at user
Negative Signals (Exclude)
- User's own messages
- FYI/informational messages
- Completed items ("done", "finished", "completed")
- Already answered questions
Execution Workflow
Step 1: List Teams and Chats
Get Teams: m365:teams_list_teams
{ "account_id": "prisma" }
Get Chats: m365:teams_list_chats
{ "account_id": "prisma", "max_results": 50 }
Step 2: Identify Active Channels
For each team: m365:teams_list_channels
Prioritize: General, standup, daily, dev, management channels Limit: Top 10 channels per team, max 20 total
Step 3: Fetch Messages
Chats: m365:teams_get_chat_messages
{
"account_id": "prisma",
"chat_id": "19:...",
"max_results": 50
}
Channels: m365:teams_get_channel_messages
{
"account_id": "prisma",
"team_id": "...",
"channel_id": "...",
"max_results": 50
}
Note: M365 tools have built-in is_action_item flag - leverage it.
Step 4: Analyze and Score Messages
// Scoring: @mention=3, action_keyword=2, question=1, urgency=2
// Threshold: score >= 3 = action item
// Exclude: own messages, completed items
Step 5: Format Output
Property format (pipe-separated, top 5):
Shaeem - Review PR | Michael - Test integration | Sarah - Budget approval
Content format:
## 💬 Teams Chat Action Items
- **Shaeem** (Dev Team) - Review PromoStandards PR before EOD ⚠️
- **Michael** (Kraken Channel) - Test AccuZIP integration with sample data
- **Sarah** (Management Chat) - Approve Kraken Phase 3 budget by Friday
- **Tom** (Daily Standup) - Update on offshore team code review status
Formatting: Bold sender, channel/chat context in parentheses, ⚠️ for urgent, limit 10 items.
Step 6: Update Notion
Tool: notion_update_page_properties
{
"page_id": "entry_id",
"command": "update_properties",
"properties": {
"Teams Action Items": "Shaeem - Review PR | Michael - Test integration",
"Phase": "4-Wrike"
}
}
Output Format
{
"success": true,
"entry_id": "...",
"date": "2026-01-14",
"action_items_found": 7,
"urgent_count": 2,
"sources": {
"teams_checked": 2,
"channels_checked": 8,
"chats_checked": 12,
"messages_analyzed": 234
},
"errors": []
}
Error Handling
| Code | Description | Severity | Action |
|---|---|---|---|
| TEAMS001 | Teams API unavailable | Warning | Continue, note in output |
| TEAMS002 | Channel permission denied | Warning | Skip channel, continue |
| NOTION001 | Entry not found | Critical | Fail with error |
Configuration
const CONFIG = {
max_teams: 5,
max_channels_per_team: 4,
max_chats: 15,
max_messages_per_chat: 50,
detection_weights: {
mentioned: 3,
action_keyword: 2,
question: 1,
urgency: 2,
threshold: 3
},
priority_channels: ["general", "standup", "daily", "dev", "management"]
};
⛔ MANDATORY: SAVE BEFORE COMPLETING
This skill is NOT complete until data is SAVED to Notion.
DO NOT return success until notion_update_page_properties succeeds.
Unsaved data WILL BE LOST on context compaction.
Integration
- Called by: briefing-generator orchestrator after get-email-summary
- Followed by: get-wrike-tasks (Phase 5)
- API calls: ~24 (teams, chats, channels, messages, Notion)
- Expected time: 15-25 seconds
- ⛔ MUST SAVE: Teams action items to Notion BEFORE returning
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon