Session management, conversation history, and checkpoints
BY alsk1992UPDATED Oct 27, 2026
INTENDED FOR◈OpenClawInstall in a listed agent.
instructions.md
---
name: sessions
description: "Session management, conversation history, and checkpoints"
emoji: "💬"
---
# Sessions - Complete API Reference
Manage conversation sessions, history, checkpoints, and resets across channels.
---
## Chat Commands
### Session Control
```
/new Start new conversation
/reset Reset current session
/session View session info
/session list List active sessions
```
### Checkpoints
```
/checkpoint save "before refactor" Save checkpoint
/checkpoint list List checkpoints
/checkpoint restore <id> Restore checkpoint
/checkpoint delete <id> Delete checkpoint
```
### History
```
/history View conversation history
/history export Export as markdown
/history clear Clear history (keeps session)
```
### Settings
```
/session scope main Use main session
/session scope channel Per-channel sessions
/session scope peer Per-user sessions
/session reset-time 00:00 Set daily reset time
/session idle-reset 30 Reset after 30 min idle
```
---
## TypeScript API Reference
### Create Session Manager
```typescript
import { createSessionManager } from 'clodds/sessions';
const sessions = createSessionManager({
// Session scope
scope: 'per-channel-peer', // 'main' | 'per-peer' | 'per-channel-peer'
// Auto-reset
dailyResetHour: 0, // Reset at midnight
idleResetMinutes: 30, // Reset after 30 min idle
// Storage
storage: 'sqlite',
dbPath: './sessions.db',
// Encryption
encryptTranscripts: true,
encryptionKey: process.env.SESSION_KEY,
});
```
### Get or Create Session
```typescript
const session = await sessions.getOrCreateSession({
userId: 'user-123',
channelId: 'telegram-456',
peerId: 'peer-789',
});
console.log(`Session ID: ${session.id}`);
console.log(`Created: ${session.createdAt}`);
console.log(`Messages: ${session.messageCount}`);
console.log(`Last activity: ${session.lastActivityAt}`);
```
### Add Message to History
```typescript
// Add user message
await sessions.addMessage({
sessionId: session.id,
role: 'user',
content: 'What is my portfolio value?',
});
// Add assistant message
await sessions.addMessage({
sessionId: session.id,
role: 'assistant',
content: 'Your portfolio is worth $10,234.56',
usage: {
inputTokens: 500,
outputTokens: 200,
},
});
```
### Get History
```typescript
// Get conversation history
const history = await sessions.getHistory(session.id, {
limit: 50,
format: 'messages', // 'messages' | 'markdown' | 'text'
});
for (const msg of history) {
console.log(`[${msg.role}] ${msg.content}`);
}
```
### Clear History
```typescript
// Clear conversation but keep session
await sessions.clearHistory(session.id);
```
### Reset Session
```typescript
// Full reset (new session)
await sessions.reset({
userId: 'user-123',
channelId: 'telegram-456',
});
```
### Checkpoints
```typescript
// Save checkpoint
const checkpoint = await sessions.saveCheckpoint({
sessionId: session.id,
name: 'Before major change',
description: 'Saving state before refactoring trading strategy',
});
console.log(`Checkpoint ID: ${checkpoint.id}`);
console.log(`Messages saved: ${checkpoint.messageCount}`);
// List checkpoints
const checkpoints = await sessions.listCheckpoints(session.id);
for (const cp of checkpoints) {
console.log(`${cp.id}: ${cp.name} (${cp.messageCount} messages)`);
}
// Restore checkpoint
await sessions.restoreCheckpoint(checkpoint.id);
// Delete checkpoint
await sessions.deleteCheckpoint(checkpoint.id);
```
### Export Session
```typescript
// Export as markdown
const markdown = await sessions.export(session.id, {
format: 'markdown',
includeMetadata: true,
});
// Export as JSON
const json = await sessions.export(session.id, {
format: 'json',
});
```
### Session Cleanup
```typescript
// Delete old sessions
await sessions.cleanup({
olderThan: '30d', // Delete sessions older than 30 days
keepCheckpoints: true,
});
```
---
## Session Scopes
| Scope | Description | Use Case |
|-------|-------------|----------|
| `main` | Single global session | Personal use |
| `per-peer` | Session per user | Multi-user, shared channels |
| `per-channel-peer` | Session per user per channel | Full isolation |
---
## Auto-Reset Behavior
| Trigger | Behavior |
|---------|----------|
| **Daily reset** | New session at configured hour |
| **Idle reset** | New session after inactivity |
| **Manual reset** | User runs `/new` or `/reset` |
---
## Encryption
When `encryptTranscripts: true`:
- All messages encrypted with AES-256-GCM
- Per-session encryption keys
- Secure key derivation from master key
---
## Context Window Management
```typescript
// Get context-aware history (for LLM)
const context = await sessions.getContextHistory({
sessionId: session.id,
maxTokens: 100000, // Fit in context window
strategy: 'smart', // 'recent' | 'smart' | 'summarize'
});
// 'smart' keeps system messages + recent + important messages
// 'summarize' compresses old messages into summaries
```
---
## Best Practices
1. **Choose appropriate scope** — Per-channel-peer for multi-user
2. **Use checkpoints** — Before major changes or experiments
3. **Export regularly** — Keep backups of important conversations
4. **Set idle reset** — Prevents stale context
5. **Enable encryption** — For sensitive conversations
---
name: sessions
description: "Session management, conversation history, and checkpoints"
emoji: "💬"
---
# Sessions - Complete API Reference
Manage conversation sessions, history, checkpoints, and resets across channels.
---
## Chat Commands
### Session Control
```
/new Start new conversation
/reset Reset current session
/session View session info
/session list List active sessions
```
### Checkpoints
```
/checkpoint save "before refactor" Save checkpoint
/checkpoint list List checkpoints
/checkpoint restore <id> Restore checkpoint
/checkpoint delete <id> Delete checkpoint
```
### History
```
/history View conversation history
/history export Export as markdown
/history clear Clear history (keeps session)
```
### Settings
```
/session scope main Use main session
/session scope channel Per-channel sessions
/session scope peer Per-user sessions
/session reset-time 00:00 Set daily reset time
/session idle-reset 30 Reset after 30 min idle
```
---
## TypeScript API Reference
### Create Session Manager
```typescript
import { createSessionManager } from 'clodds/sessions';
const sessions = createSessionManager({
// Session scope
scope: 'per-channel-peer', // 'main' | 'per-peer' | 'per-channel-peer'
// Auto-reset
dailyResetHour: 0, // Reset at midnight
idleResetMinutes: 30, // Reset after 30 min idle
// Storage
storage: 'sqlite',
dbPath: './sessions.db',
// Encryption
encryptTranscripts: true,
encryptionKey: process.env.SESSION_KEY,
});
```
### Get or Create Session
```typescript
const session = await sessions.getOrCreateSession({
userId: 'user-123',
channelId: 'telegram-456',
peerId: 'peer-789',
});
console.log(`Session ID: ${session.id}`);
console.log(`Created: ${session.createdAt}`);
console.log(`Messages: ${session.messageCount}`);
console.log(`Last activity: ${session.lastActivityAt}`);
```
### Add Message to History
```typescript
// Add user message
await sessions.addMessage({
sessionId: session.id,
role: 'user',
content: 'What is my portfolio value?',
});
// Add assistant message
await sessions.addMessage({
sessionId: session.id,
role: 'assistant',
content: 'Your portfolio is worth $10,234.56',
usage: {
inputTokens: 500,
outputTokens: 200,
},
});
```
### Get History
```typescript
// Get conversation history
const history = await sessions.getHistory(session.id, {
limit: 50,
format: 'messages', // 'messages' | 'markdown' | 'text'
});
for (const msg of history) {
console.log(`[${msg.role}] ${msg.content}`);
}
```
### Clear History
```typescript
// Clear conversation but keep session
await sessions.clearHistory(session.id);
```
### Reset Session
```typescript
// Full reset (new session)
await sessions.reset({
userId: 'user-123',
channelId: 'telegram-456',
});
```
### Checkpoints
```typescript
// Save checkpoint
const checkpoint = await sessions.saveCheckpoint({
sessionId: session.id,
name: 'Before major change',
description: 'Saving state before refactoring trading strategy',
});
console.log(`Checkpoint ID: ${checkpoint.id}`);
console.log(`Messages saved: ${checkpoint.messageCount}`);
// List checkpoints
const checkpoints = await sessions.listCheckpoints(session.id);
for (const cp of checkpoints) {
console.log(`${cp.id}: ${cp.name} (${cp.messageCount} messages)`);
}
// Restore checkpoint
await sessions.restoreCheckpoint(checkpoint.id);
// Delete checkpoint
await sessions.deleteCheckpoint(checkpoint.id);
```
### Export Session
```typescript
// Export as markdown
const markdown = await sessions.export(session.id, {
format: 'markdown',
includeMetadata: true,
});
// Export as JSON
const json = await sessions.export(session.id, {
format: 'json',
});
```
### Session Cleanup
```typescript
// Delete old sessions
await sessions.cleanup({
olderThan: '30d', // Delete sessions older than 30 days
keepCheckpoints: true,
});
```
---
## Session Scopes
| Scope | Description | Use Case |
|-------|-------------|----------|
| `main` | Single global session | Personal use |
| `per-peer` | Session per user | Multi-user, shared channels |
| `per-channel-peer` | Session per user per channel | Full isolation |
---
## Auto-Reset Behavior
| Trigger | Behavior |
|---------|----------|
| **Daily reset** | New session at configured hour |
| **Idle reset** | New session after inactivity |
| **Manual reset** | User runs `/new` or `/reset` |
---
## Encryption
When `encryptTranscripts: true`:
- All messages encrypted with AES-256-GCM
- Per-session encryption keys
- Secure key derivation from master key
---
## Context Window Management
```typescript
// Get context-aware history (for LLM)
const context = await sessions.getContextHistory({
sessionId: session.id,
maxTokens: 100000, // Fit in context window
strategy: 'smart', // 'recent' | 'smart' | 'summarize'
});
// 'smart' keeps system messages + recent + important messages
// 'summarize' compresses old messages into summaries
```
---
## Best Practices
1. **Choose appropriate scope** — Per-channel-peer for multi-user
2. **Use checkpoints** — Before major changes or experiments
3. **Export regularly** — Keep backups of important conversations
4. **Set idle reset** — Prevents stale context
5. **Enable encryption** — For sensitive conversations
COMPATIBILITY & REFERENCES
Platform guidance
Imported from the listed AgentSkill.sh category. Complete supplied package files and notices are retained. Includes source scripts; review them before use. Required external tools and credentials are not installed. No bundled code was executed during import. Individual agent task behavior has not been tested.
When the user wants to understand, reduce, or recover from developer churn. Trigger phrases include "why developers leave," "churn rate," "win-back campaign," "at-risk users," "developer retention," "preventing churn," or "competitor switching."
Uncover the functional, emotional and social jobs a customer hires a product to do: progress state, hiring trigger, alternatives, success criteria, JTBD map. Use when you need to understand why users buy, switch or churn, or to anchor positioning, messaging and onboarding in real jobs.
Hilft bei Anlagenliste Verstehen für Menschen mit Deutsch als Zweitsprache. Erklaert Juristendeutsch, klaert Risiko, Frist und naechste Handlung, und formuliert respektvoll in einfachem oder formalem Deutsch im Juristische Sprache Deutsch Als Zweitsprache.