slack-memory-store
Comprehensive memory storage system for AI employees in IT companies who communicate via Slack. Automatically classifies and stores diverse information types (Slack messages, Confluence docs, emails, meetings, projects, decisions, feedback) in an organized folder structure with efficient indexing and retrieval. Use when managing or searching employee memory, storing conversations, documenting decisions, tracking projects, or organizing any work-related information.
$ Install
git clone https://github.com/krafton-ai/KIRA /tmp/KIRA && cp -r /tmp/KIRA/.claude/skills/slack-memory-store ~/.claude/skills/KIRA// tip: Run this command in your terminal to install the skill
name: slack-memory-store description: Comprehensive memory storage system for AI employees in IT companies who communicate via Slack. Automatically classifies and stores diverse information types (Slack messages, Confluence docs, emails, meetings, projects, decisions, feedback) in an organized folder structure with efficient indexing and retrieval. Use when managing or searching employee memory, storing conversations, documenting decisions, tracking projects, or organizing any work-related information.
Slack Memory Store
This skill enables systematic memory management for AI employees operating in IT company environments, primarily through Slack communication.
Core Capabilities
- Auto-classification - Automatically categorize incoming information into appropriate folders
- Multi-format support - Handle Slack messages, Confluence documents, emails, meeting notes, etc.
- Smart indexing - Maintain up-to-date index.md for rapid information retrieval
- Flexible schemas - Support structured metadata for each information type
- CRUD operations - Create, read, update, and delete memory entries
Quick Start
Initialize Memory Structure
Before using the memory system for the first time, initialize the directory structure:
python scripts/init_memory.py /path/to/memory
This creates:
- All required directories (channels/, users/, projects/, etc.)
- Initial index.md with navigation
- Metadata tracking file
Add New Information
The primary way to add information to memory:
python scripts/add_memory.py /path/to/memory "Title" "Content" '{"type":"channel", "channel_id":"C123"}'
The script will:
- Analyze the content and metadata
- Automatically classify into the appropriate directory
- Generate a clean filename
- Format with proper YAML frontmatter
- Save to the correct location
Update Index
After adding/modifying multiple entries, update the index:
python scripts/update_index.py /path/to/memory
This refreshes:
- Statistics (total channels, users, projects, etc.)
- Recent updates list (10 most recent changes)
- Navigation links
Search Memory
To find information quickly:
# Search by content
python scripts/search_memory.py /path/to/memory content "ํ๋ก์ ํธ"
# Search by tag
python scripts/search_memory.py /path/to/memory tag urgent
# List files in category
python scripts/search_memory.py /path/to/memory category projects
Memory Organization
Directory Structure
memory/
โโโ index.md # Main navigation and quick reference
โโโ channels/ # Slack channel information
โ โโโ C123_๋ง์ผํ
ํ.md
โโโ users/ # Team member profiles
โ โโโ U456_๊น์ฒ ์.md
โโโ projects/ # Project status and history
โ โโโ ์ ์ ํ๋ฐ์นญ.md
โ โโโ archive/
โโโ tasks/ # Completed and ongoing tasks
โ โโโ ongoing/
โ โโโ completed/
โโโ decisions/ # Decision points and rationale
โโโ meetings/ # Meeting notes and action items
โโโ feedback/ # User feedback and suggestions
โโโ announcements/ # Important announcements
โโโ resources/ # Internal docs, guides, manuals
โโโ external/ # External information
โ โโโ news/
โโโ misc/ # Uncategorized information
File Format
Each memory file follows this structure:
---
type: channel
channel_id: C01234567
channel_name: "๋ง์ผํ
ํ"
participants: [U01234567, U76543210]
tags: [marketing, important]
created: 2025-10-28 10:00:00
updated: 2025-10-28 15:30:00
---
# ๋ง์ผํ
ํ ์ฑ๋
## ์ปค๋ฎค๋์ผ์ด์
์ง์นจ
- Tone: Professional but friendly
- Response time: Within 1 hour during business hours
- Key topics: Campaign planning, performance metrics
## Recent Discussions
...
Storage Strategy: Hybrid Approach
CRITICAL: Use a hybrid strategy to optimize retrieval and file size:
1. Profile Files (One Per Entity - UPDATE, Don't Create New)
- Purpose: Persistent guidelines, preferences, static info
- Action: ALWAYS check if file exists first, then UPDATE it
- Examples:
channels/C123_๋ง์ผํ ํ.md- Channel guidelines, members, communication styleusers/U456_๊น์ฒ ์.md- User profile, preferences, work style
2. Topic Files (Multiple - CREATE New or UPDATE Existing)
- Purpose: Conversations, projects, decisions, meetings
- Action: Create new file per topic, or update if same topic continues
- Examples:
projects/์ ์ ํ๋ฐ์นญ.md- Project discussionsdecisions/AWS์ ํ_20251117.md- Important decisions (date-stamped)meetings/2025-11-17-Q4์ ๋ตํ์.md- Meeting notesmisc/๋ง์ผํ ํ_์ผ์_20251117.md- Casual conversations
3. Decision Tree for Classification
Content type:
โโ Channel/User guidelines or preferences?
โ โโ YES โ UPDATE channels/C123_์ฑ๋๋ช
.md or users/U456_์ ์ ๋ช
.md
โ
โโ NO โ What's the main topic?
โโ Project discussion โ projects/ํ๋ก์ ํธ๋ช
.md
โโ Important decision โ decisions/์ฃผ์ _DATE.md
โโ Meeting notes โ meetings/DATE-์ฃผ์ .md
โโ Casual conversation โ misc/์ฑ๋๋ช
_DATE.md (or skip if trivial)
โโ Task/feedback/announcement โ respective directories
Handling Different Content Types
Slack Conversations
When receiving Slack message threads:
- Identify context: Channel, participants, date range
- Extract key info: Decisions, action items, important discussions
- Classify using Hybrid Strategy (see Decision Tree above):
- Channel guidelines/preferences โ UPDATE
channels/C123_์ฑ๋๋ช .md - User preferences โ UPDATE
users/U456_์ ์ ๋ช .md - Project-focused โ CREATE/UPDATE
projects/ํ๋ก์ ํธ๋ช .md - Decision-focused โ CREATE
decisions/์ฃผ์ _DATE.md - Meeting notes โ CREATE
meetings/DATE-์ฃผ์ .md - Casual chat โ CREATE
misc/์ฑ๋๋ช _DATE.md(or skip if not important)
- Channel guidelines/preferences โ UPDATE
- Format: Chronological order, preserve thread structure
- Metadata: channel_id, participants, date_range, message_count, related_to (link to profile file)
Example usage:
from scripts.add_memory import MemoryManager
manager = MemoryManager('/path/to/memory')
# Example 1: Topic file (project discussion)
manager.add_memory(
title="Q4 ์ ๋ต ๋
ผ์",
content=formatted_slack_thread,
metadata={
'type': 'project', # Will create projects/Q4์ ๋ต๋
ผ์.md
'channel_id': 'C123',
'channel_name': '๋ง์ผํ
ํ',
'participants': ['U01', 'U02'],
'date_range': '2025-10-28',
'message_count': 25,
'tags': ['strategy', 'q4'],
'related_to': ['channels/C123_๋ง์ผํ
ํ.md'] # Link to channel profile
}
)
# Example 2: Profile file (channel guidelines update)
manager.add_memory(
title="๋ง์ผํ
ํ",
content="Channel guidelines: Professional tone, quick response expected",
metadata={
'type': 'channel', # Will update channels/C123_๋ง์ผํ
ํ.md
'channel_id': 'C123',
'channel_name': '๋ง์ผํ
ํ',
'guidelines': {'tone': 'professional', 'response_time': '1์๊ฐ ์ด๋ด'}
}
)
Confluence Documents
When importing Confluence documentation:
- Convert format: HTML โ Markdown
- Preserve structure: Headers, lists, tables
- Add metadata: source_url, space, last_updated
- Classify: Usually โ
resources/orprojects/
Email Threads
When storing email conversations:
- Thread structure: Maintain reply chain
- Extract metadata: From, To, Subject, Date
- Classify by content:
- Announcements โ
announcements/ - Project updates โ
projects/ - Feedback โ
feedback/
- Announcements โ
Meeting Notes
When recording meetings:
- Structure: Date, attendees, agenda, discussions, action items
- Always goes to:
meetings/ - Cross-reference: Link to related projects/decisions
- Action items: Extract and consider adding to
tasks/
External News
When saving external articles:
- Always goes to:
external/news/ - Add metadata: source, source_url, date, relevance
- Summarize: Focus on key points relevant to company
- Link: Connect to related_project if applicable
Automatic Classification
The system uses a multi-level classification strategy:
Level 1: Explicit Metadata
If type field exists in metadata โ use directly
Level 2: Structural Indicators
channel_idpresent โchannels/user_idpresent โusers/project_idpresent โprojects/
Level 3: Keyword Analysis
Scan content for keywords (see references/classification-guide.md for full list):
- "ํ๋ก์ ํธ", "project", "milestone" โ
projects/ - "๊ฒฐ์ ", "decision", "์น์ธ" โ
decisions/ - "ํ์", "meeting" โ
meetings/ - etc.
Level 4: Default
If no classification match โ misc/
Advanced Features
Update Existing Memory
To update an existing file:
manager = MemoryManager('/path/to/memory')
manager.update_memory(
directory='projects',
filename='์ ์ ํ๋ฐ์นญ.md',
new_content=updated_content,
new_metadata={'updated': '2025-10-28 16:00:00', 'status': 'completed'}
)
Cross-referencing
Use related_to metadata to link related files:
---
type: decision
related_to:
- projects/์ ์ ํ๋ฐ์นญ.md
- meetings/2025-10-28-์ ๋ตํ์.md
---
Version Management
If a file with the same name exists, the system automatically:
- Detects duplicate
- Adds version suffix:
filename_v2.md,filename_v3.md, etc.
Search Tips
- Content search: Case-insensitive by default
- Tag search: Find all files with specific tag
- Category search: List all files in a directory
- Index search: Use browser Ctrl+F on index.md for quick keyword lookup
Best Practices
1. Consistent Metadata
Always include at minimum:
type: Content typecreated: Creation timestamptags: Relevant tags for searchability
2. Descriptive Titles
Use clear, descriptive titles:
- โ "Q4 ๋ง์ผํ ์ ๋ต ํ์ - 2025-10-28"
- โ "๋ฏธํ "
3. Regular Index Updates
Update index after:
- Multiple file additions
- File deletions
- Category changes
- Or at least once per hour
4. Use Tags Liberally
Tags improve discoverability:
tags: [urgent, marketing, q4, strategy, approval-needed]
5. Link Related Information
When information is related, add cross-references:
related_to:
- projects/์น์ฌ์ดํธ๋ฆฌ๋ด์ผ.md
- decisions/๋์์ธ์์คํ
์ ํ.md
Reference Documents
For detailed information, see:
- data-schemas.md - Complete schemas for all memory types with examples
- classification-guide.md - Detailed classification rules and content handling strategies
Workflow Examples
Example 1: Storing Slack Discussion
# 1. Format the Slack thread
slack_content = """
## Participants
- @chulsoo (PM)
- @sarah (Designer)
## Discussion
[10:30] chulsoo: ๋๋ฉ ํ์ด์ง ๋์์ธ ๋ฆฌ๋ทฐ ๋ถํ๋๋ฆฝ๋๋ค
[10:35] sarah: ํ์ธํ์ต๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์ข์๋ฐ CTA ๋ฒํผ์ด ๋ ๋์ ๋์์ผ๋ฉด ์ข๊ฒ ์ด์
...
"""
# 2. Add to memory
manager.add_memory(
title="๋๋ฉ ํ์ด์ง ๋์์ธ ๋ฆฌ๋ทฐ",
content=slack_content,
metadata={
'type': 'project',
'channel_id': 'C123',
'project': '์ ์ ํ๋ฐ์นญ',
'participants': ['U01', 'U02'],
'tags': ['design', 'review', 'landing-page']
}
)
# 3. Update index
update_index()
Example 2: Quick Information Lookup
# Find all files related to "์ ์ ํ"
python scripts/search_memory.py /memory content "์ ์ ํ"
# Results show:
# 1. projects/์ ์ ํ๋ฐ์นญ.md
# 2. meetings/2025-10-15-์ ์ ํ๊ธฐํํ์.md
# 3. decisions/์ ์ ํ๊ฐ๊ฒฉ๊ฒฐ์ .md
Example 3: Tracking Project Progress
# Initial project setup
manager.add_memory(
title="์ ์ ํ ๋ฐ์นญ ํ๋ก์ ํธ",
content="""
## Overview
AI ๊ธฐ๋ฐ ์ถ์ฒ ์์คํ
๊ฐ๋ฐ ๋ฐ ๋ฐ์นญ
## Milestones
- [ ] MVP ๊ฐ๋ฐ (2025-11-30)
- [ ] ๋ฒ ํ ํ
์คํธ (2025-12-15)
- [ ] ์ ์ ์ถ์ (2025-12-31)
""",
metadata={
'type': 'project',
'status': 'in_progress',
'priority': 'high',
'participants': ['U01', 'U02', 'U03']
}
)
# Later: Update progress
manager.update_memory(
'projects',
'์ ์ ํ๋ฐ์นญํ๋ก์ ํธ.md',
updated_content_with_progress,
{'updated': '2025-10-28', 'status': 'on_track'}
)
Troubleshooting
Issue: Files not found by search
Solution: Ensure filename ends with .md and is not index.md
Issue: Wrong classification
Solution: Provide explicit type in metadata or add more specific keywords to content
Issue: Index out of date
Solution: Run update_index.py manually
Issue: Duplicate files
Solution: System automatically handles by adding version suffix (_v2, _v3, etc.)
Performance Considerations
- Index updates: O(n) where n = total files. Run after batch operations, not after each file
- Search: O(n) linear scan. For large datasets (>1000 files), consider adding full-text search
- File size: Keep individual files under 100KB for optimal performance
Integration Notes
This skill is designed to work seamlessly with:
- Slack API integrations for automatic message capture
- Confluence API for document import
- Gmail API for email archiving
- Calendar APIs for meeting notes
- Any custom data sources via the flexible add_memory interface
The memory structure is AI-agent-friendly: index.md provides rapid overview, and all content is in Markdown for easy parsing and understanding.
Repository
