# Memory Slack Ingest

> Ingest Slack DMs and important channel messages into the memory knowledge base

- Skill: `lotfb86/memory-slack-ingest` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lotfb86/memory-slack-ingest`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lotfb86/memory-slack-ingest/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: lotfb86 (https://skillmd.com/u/lotfb86)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lotfb86/memory-slack-ingest

---


# 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`:

```markdown
## 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`:

```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

