| name | memory-slack-ingest |
| description | Ingest Slack DMs and important channel messages into the memory knowledge base |
| user_invocable | true |
Slack DM Ingest for Memory Knowledge Base
Pull recent Slack direct messages and important threads, extract decisions and context, append to daily log.
Process
1. Load State
Read state from /Users/jesseanglen/Documents/RandomStuff/memory-kb/state/slack-state.json.
If it doesn't exist, this is the first run — set last_checked to 3 days ago (Unix timestamp).
Jesse's Slack user ID: U01TKLJK04B
2. Search Recent DMs
Use slack_search_public_and_private to find recent DMs:
query: "to:me"
channel_types: "im,mpim"
sort: "timestamp"
sort_dir: "desc"
limit: 20
If last_checked exists, use after parameter with the Unix timestamp.
Also search for messages from Jesse in DMs:
query: "from:<@U01TKLJK04B>"
channel_types: "im,mpim"
3. Read Substantive DM Threads
For each DM found, check if it's substantive (not just "thanks" / "ok" / emoji reactions).
For substantive messages, use slack_read_thread with the channel_id and message_ts to get the full conversation context.
What's substantive:
- Questions about deals, clients, or strategy
- Requests for action or decisions
- Updates on prospect status, client work, or internal ops
- Forwarded information or meeting context
- Technical questions or implementation discussions
Skip:
- Single-word replies ("thanks", "ok", "👍")
- Automated bot messages
- Calendar/scheduling confirmations
- Idle chatter
4. Cross-Reference with Calendar Contacts
Check if the DM sender appears in /Users/jesseanglen/Documents/RandomStuff/memory-kb/state/calendar-contacts.json.
If they do, note the related_event for context linking.
5. Append to Daily Log
For each substantive DM thread, append to /Users/jesseanglen/Documents/RandomStuff/memory-kb/daily/YYYY-MM-DD.md:
## Slack DM from [Name] @ HH:MM PT
**source:** slack
**from:** [Real Name] (Slack: @username)
**channel_type:** DM | Group DM
**related_event:** [if sender is in calendar contacts, reference their last meeting]
### Key Content
- [Summary of the conversation thread]
- [Decisions made or information shared]
- [Action items or requests]
### Action Items
- [ ] [Any follow-ups identified]
Create daily log with header if it doesn't exist.
6. Update State
Write to /Users/jesseanglen/Documents/RandomStuff/memory-kb/state/slack-state.json:
{
"last_checked": "Unix timestamp",
"total_runs": N,
"last_run": {
"timestamp": "ISO",
"dms_found": N,
"dms_ingested": N,
"threads_read": N,
"status": "success"
},
"processed_message_ts": ["ts1", "ts2"]
}
Keep last 200 processed message timestamps for dedup.
7. Report
"Slack ingest complete. Found X DMs, ingested Y substantive threads."
MCP Tools Reference
slack_search_public_and_private — search DMs and channels
slack_read_channel — read recent messages from a DM (use user_id as channel_id)
slack_read_thread — read full thread replies
slack_search_users — look up user details by name
slack_read_user_profile — get user profile info
Notes
- Uses Slack MCP tools — no browser needed
- Focus on DMs (im) and group DMs (mpim) — not public channels
- Cross-reference with calendar contacts for deal context
- Jesse's user ID: U01TKLJK04B
- Skip bot messages, scheduling confirmations, single-word replies
- For group DMs, capture all participants for context