Convert Feishu chat history exports into OpenClaw episodic memory format. Parses feishu_chat_YYYYMMDD.json files, normalizes messages, and writes daily episo...
---
name: feishu-chat-importer
description: "Convert Feishu chat history exports into OpenClaw episodic memory format. Parses feishu_chat_YYYYMMDD.json files, normalizes messages, and writes daily episodic summaries to memory/episodic/. Trigger phrases: import feishu chat, convert feishu history, feishu memory import."
metadata: {"clawdbot":{"emoji":"π₯","requires":{"bins":["python3"]},"env":[],"os":["win32","linux","darwin"],"homepage":"https://clawhub.com"}}
---
# Feishu Chat History Importer
Import Feishu chat history exports into OpenClaw episodic memory. Converts feishu JSON exports into daily episodic summaries that the Dreaming system can process and display in Imported Insights and Memory Palace views.
## Quick Start
```bash
# Dry run β preview what would be imported
python3 skills/feishu-chat-importer/scripts/batch.py --dir memory/Chat-history --dry-run
# Import all Feishu chats
python3 skills/feishu-chat-importer/scripts/batch.py --dir memory/Chat-history
# Import only chats since a date
python3 skills/feishu-chat-importer/scripts/batch.py --dir memory/Chat-history --since 2026-03-01
# Verbose β show every message
python3 skills/feishu-chat-importer/scripts/batch.py --dir memory/Chat-history --dry-run --verbose
```
## How It Works
1. **Read** `feishu_chat_YYYYMMDD.json` files from the source directory
2. **Group** messages by date (from `create_time` / millisecond timestamp)
3. **Normalize** each message to `{role, content, timestamp}`
- `sender.sender_type = "user"` β role = `user`
- `sender.sender_type = "app"` β role = `assistant` (Feishu bot = AI)
4. **Write** daily episodic summaries to `memory/episodic/YYYY-MM-DD.md`
5. **Dreaming** processes episodic files β appears in Imported Insights + Memory Palace
## Output Format
Writes to `memory/episodic/YYYY-MM-DD.md`:
```markdown
## Feishu Chat: <chat_id> (2026-03-19)
- Messages: <count>
- Participants: user_id, app_id
### user (ι¦ιΏ):
message content here...
### assistant (ι£δΉ¦ζΊε¨δΊΊ):
message content here...
```
## Key Concepts
- **Daily grouping**: All messages from the same YYYYMMDD file land in the same episodic file
- **Deduplication**: Chat IDs tracked β re-running never creates duplicates
- **Role mapping**: User messages β `user`, App/bot messages β `assistant`
- **Content extraction**: Handles `text` and `post` msg_type automatically
- **OPENCLAW_WORKSPACE**: Set this env var to point imports to the right agent workspace
## Source Format
Expects Feishu export files named `feishu_chat_YYYYMMDD.json` with this structure:
```json
[
{
"message_id": "om_xxx",
"chat_id": "oc_xxx",
"create_time": "1773899372102",
"msg_type": "text|post",
"sender": {
"id": "ou_xxx",
"sender_type": "user|app"
},
"body": {
"content": "{\"text\":\"message text\"}" // text type
// or
"content": "{\"title\":\"\",\"content\":[[{\"tag\":\"text\",\"text\":\"...\"}]]}" // post type
}
}
]
```
don't have the plugin yet? install it then click "run inline in claude" again.