/install conversation-recovery
conversation-recovery
Capture and recover conversation state across OpenClaw sessions.
Description
This skill provides conversation state management and recovery capabilities for OpenClaw. When conversations get interrupted or span multiple sessions, it captures the essential context (intents, facts, tasks) and allows seamless recovery.
Use Cases
- Long-running tasks: Save progress when a conversation spans multiple days
- Context restoration: Recover where you left off after interruptions
- Session handoff: Transfer context between different channels/platforms
- Memory management: Archive old sessions while preserving key information
Installation
# Dependencies are managed via package.json
npm install
# Build TypeScript
npm run build
Core Concepts
Session
A conversation container with metadata (status, channel, timestamps).
Snapshot
A point-in-time capture of conversation state containing:
- Intents: What the user wants to accomplish
- Facts: Established information and preferences
- Tasks: Action items and their status
Recovery
Restoring context from a snapshot to continue a conversation seamlessly.
API Usage
Starting a Session
import { startSession } from 'conversation-recovery';
const session = await startSession(
'Project Planning Discussion',
'discord'
);
Capturing a Snapshot
import { captureSnapshot } from 'conversation-recovery';
const snapshot = await captureSnapshot(session.id, {
description: 'User wants to plan Q3 roadmap',
intents: [{
id: 'intent_1',
description: 'Create Q3 product roadmap',
confidence: 0.95,
fulfilled: false,
createdAt: new Date().toISOString()
}],
facts: [{
id: 'fact_1',
statement: 'Team has 5 engineers available',
category: 'constraint',
confidence: 1.0,
active: true,
createdAt: new Date().toISOString()
}],
tasks: [{
id: 'task_1',
description: 'Gather requirements from stakeholders',
status: 'pending',
priority: 'high',
relatedIntentIds: ['intent_1'],
dependencies: [],
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}]
});
Recovering a Session
import { recoverSession } from 'conversation-recovery';
const recovery = await recoverSession(session.id);
// Returns RecoverySummary with key intents, facts, tasks, and suggestions
Managing Sessions
import {
pauseSession,
resumeSession,
archiveSession,
getActiveSessions,
deleteSession
} from 'conversation-recovery';
await pauseSession(session.id); // Mark as paused
await resumeSession(session.id); // Mark as active
await archiveSession(session.id); // Mark as archived
await deleteSession(session.id); // Permanently delete
const active = await getActiveSessions();
Storage Operations
import {
getSession,
getSnapshot,
getSessionSnapshots,
getLatestSnapshot,
deleteSnapshot,
listSessions,
getStorageStats,
cleanupSnapshots
} from 'conversation-recovery';
const session = await getSession(sessionId);
const snapshot = await getSnapshot(snapshotId);
const snapshots = await getSessionSnapshots(sessionId);
const latest = await getLatestSnapshot(sessionId);
const allSessions = await listSessions();
const stats = await getStorageStats();
// Keep only last 10 snapshots
await cleanupSnapshots(sessionId, 10);
Data Models
Session
interface Session {
id: string;
createdAt: string;
updatedAt: string;
title?: string;
channel?: string;
status: 'active' | 'paused' | 'recovered' | 'archived';
snapshots: string[];
}
Snapshot
interface Snapshot {
id: string;
sessionId: string;
createdAt: string;
description?: string;
intents: Intent[];
facts: Fact[];
tasks: Task[];
context?: string;
tokenCount?: number;
}
Intent
interface Intent {
id: string;
description: string;
confidence: number;
sourceMessageId?: string;
fulfilled: boolean;
createdAt: string;
}
Fact
interface Fact {
id: string;
statement: string;
category: 'preference' | 'constraint' | 'context' | 'decision' | 'requirement';
sourceMessageId?: string;
confidence: number;
active: boolean;
createdAt: string;
}
Task
interface Task {
id: string;
description: string;
status: 'pending' | 'in_progress' | 'blocked' | 'completed' | 'cancelled';
priority: 'low' | 'medium' | 'high' | 'critical';
relatedIntentIds: string[];
dependencies: string[];
dueDate?: string;
createdAt: string;
updatedAt: string;
}
Storage
Data is stored in JSON files at:
- Sessions:
~/.openclaw/conversation-recovery/sessions/ - Snapshots:
~/.openclaw/conversation-recovery/snapshots/
Override with environment variable:
export CONVERSATION_RECOVERY_STORAGE=/custom/path
Roadmap
Phase 1 (Current)
- ✅ Core data models (Session, Snapshot, Intent, Fact, Task)
- ✅ File storage layer (CRUD operations)
- ✅ Basic session lifecycle management
- ✅ Recovery summary generation
Phase 2 (Planned)
- Intent extraction from conversation text
- Automatic snapshot triggers (token limits, time intervals)
- Compression and summarization of old snapshots
Phase 3 (Planned)
- Vector search for similar past sessions
- Cross-session knowledge graph
- Integration with OpenClaw memory system
License
MIT
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install conversation-recovery - 安装完成后,直接呼叫该 Skill 的名称或使用
/conversation-recovery触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Conversation Recovery 是什么?
Capture and recover conversation state across OpenClaw sessions. Use when conversations get interrupted, span multiple sessions, or need context restoration.... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 204 次。
如何安装 Conversation Recovery?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install conversation-recovery」即可一键安装,无需额外配置。
Conversation Recovery 是免费的吗?
是的,Conversation Recovery 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Conversation Recovery 支持哪些平台?
Conversation Recovery 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Conversation Recovery?
由 haidong(@harrylabsj)开发并维护,当前版本 v1.0.0。