Implement comprehensive conversation management system enabling AI agents like Claude Code to maintain infinite context and history. Provides semantic search, smart context retrieval, and automatic artifact linking using Brainy's existing Triple Intelligence infrastructure. Core Features: - ConversationManager API for message storage and retrieval - MCP protocol integration with 6 tools for Claude Code - Context ranking using semantic, temporal, and graph scoring - Neural clustering for theme discovery and deduplication - Virtual filesystem integration for code artifact linking - CLI commands for setup and management Zero new infrastructure required - uses existing Brainy features: - Storage via brain.add() with NounType.Message - Relationships via brain.relate() with VerbType.Precedes - Search via brain.find() with Triple Intelligence - Clustering via brain.neural() - Artifacts via brain.vfs() One-command setup: brainy conversation setup Version: 3.19.0 |
||
|---|---|---|
| .. | ||
| MCP_INTEGRATION.md | ||
| README.md | ||
Infinite Agent Memory - Conversation API
Never lose context again. Brainy's Conversation API provides infinite memory and context management for AI agents like Claude Code, enabling truly continuous conversations with semantic search, smart context retrieval, and automatic knowledge preservation.
Overview
The Conversation API turns your agent interactions into a living knowledge graph where:
- Every message is preserved with semantic embeddings for instant retrieval
- Context is automatically retrieved using Triple Intelligence (vector + graph + metadata)
- Similar conversations are discovered through neural clustering
- Code artifacts are linked to the conversations that created them
- Memory scales infinitely to millions of messages with <100ms retrieval
Quick Start
Zero-Config Usage
import { Brainy } from '@soulcraft/brainy'
const brain = new Brainy() // Zero configuration!
await brain.init()
// Access conversation manager (lazy-loaded)
const conv = brain.conversation
// Save messages with automatic embedding and indexing
const messageId = await conv.saveMessage(
"How do I implement JWT authentication?",
"user",
{ conversationId: "conv_123" }
)
// Get relevant context with semantic search
const context = await conv.getRelevantContext("authentication implementation", {
limit: 10,
includeArtifacts: true
})
// Context includes:
// - Semantically similar messages
// - Recent related conversations
// - Linked code artifacts
// - Relevance scores and explanations
Claude Code Integration (MCP)
One-time setup:
brainy conversation setup
That's it! Claude Code automatically:
- Saves every message with embeddings
- Retrieves relevant past context
- Links code artifacts to conversations
- Never loses context or momentum
Core Concepts
1. Messages
Every message is a semantic entity with:
- Content: The actual message text
- Role: user, assistant, system, or tool
- Embeddings: Automatic vector representation
- Metadata: Timestamps, conversation ID, phase, confidence, etc.
- Relationships: Temporal links to previous/next messages
const messageId = await conv.saveMessage(
"Implement user authentication",
"user",
{
conversationId: "conv_123",
phase: "planning",
confidence: 0.95,
tags: ["authentication", "security"]
}
)
2. Conversations
A conversation is a collection of related messages:
- Tracked by
conversationId - Contains temporal message sequence
- Stores aggregate metadata (tokens, duration, participants)
- Can span multiple sessions
const thread = await conv.getConversationThread("conv_123", {
includeArtifacts: true
})
console.log(`${thread.messages.length} messages, ${thread.metadata.totalTokens} tokens`)
3. Context Retrieval
Smart context retrieval uses Triple Intelligence:
- Semantic: Vector similarity to find related messages
- Temporal: Recency decay favors recent context
- Graph: Relationship traversal finds connected knowledge
const context = await conv.getRelevantContext("how to validate JWT tokens", {
limit: 10,
maxTokens: 50000,
relevanceThreshold: 0.7,
weights: {
semantic: 1.0, // Prioritize meaning
temporal: 0.5, // Recent is relevant
graph: 0.3 // Connected knowledge
}
})
4. Artifacts
Code and files created during conversations are first-class citizens:
- Stored in Brainy's Virtual Filesystem
- Linked to messages via graph relationships
- Searchable by content and metadata
- Retrieved with context
const artifactId = await conv.saveArtifact(
'/auth/middleware.ts',
codeContent,
{
conversationId: "conv_123",
messageId: messageId,
type: 'code',
language: 'typescript'
}
)
API Reference
ConversationManager
saveMessage(content, role, options)
Save a message with automatic embedding.
Parameters:
content(string): Message contentrole(MessageRole): 'user' | 'assistant' | 'system' | 'tool'options(SaveMessageOptions):conversationId?: Conversation ID (auto-generated if not provided)sessionId?: Session IDphase?: Problem-solving phaseconfidence?: Confidence score (0-1)artifacts?: Array of artifact IDstoolsUsed?: Array of tool namestags?: Array of tagslinkToPrevious?: ID of previous message
Returns: Promise<string> - Message ID
Example:
const id = await conv.saveMessage(
"Implement authentication middleware",
"assistant",
{
conversationId: "conv_123",
phase: "implementation",
confidence: 0.92,
artifacts: ["middleware-id"],
toolsUsed: ["write", "edit"],
tags: ["authentication", "middleware"]
}
)
getRelevantContext(query, options)
Retrieve relevant context with smart ranking.
Parameters:
query(string | ContextRetrievalOptions): Query or full optionsoptions?(ContextRetrievalOptions):limit?: Max messages (default: 10)maxTokens?: Token budget (default: 50000)relevanceThreshold?: Min score (default: 0.7)role?: Filter by rolephase?: Filter by phasetags?: Filter by tagstimeRange?: Time range filterweights?: Scoring weightsincludeArtifacts?: Include linked artifactsincludeSimilarConversations?: Include similar conversations
Returns: Promise<ConversationContext>
Example:
const context = await conv.getRelevantContext({
query: "JWT token validation",
limit: 15,
maxTokens: 60000,
role: "assistant",
phase: ["implementation", "testing"],
tags: ["authentication"],
includeArtifacts: true,
includeSimilarConversations: true
})
console.log(`Found ${context.messages.length} relevant messages`)
console.log(`Total tokens: ${context.totalTokens}`)
console.log(`Query time: ${context.metadata.queryTime}ms`)
searchMessages(options)
Search messages with semantic similarity.
Parameters:
options(ConversationSearchOptions):query: Search query (required)limit?: Max results (default: 10)role?: Filter by roleconversationId?: Filter by conversationsessionId?: Filter by sessiontimeRange?: Time range filter
Returns: Promise<ConversationSearchResult[]>
Example:
const results = await conv.searchMessages({
query: "authentication errors",
limit: 20,
role: "assistant",
timeRange: {
start: Date.now() - 7*24*60*60*1000 // Last 7 days
}
})
for (const result of results) {
console.log(`${result.message.role}: ${result.snippet}`)
console.log(`Score: ${result.score}, Conv: ${result.conversationId}`)
}
getConversationThread(conversationId, options)
Get complete conversation thread.
Parameters:
conversationId(string): Conversation IDoptions?:includeArtifacts?: Include linked artifacts
Returns: Promise<ConversationThread>
Example:
const thread = await conv.getConversationThread("conv_123", {
includeArtifacts: true
})
console.log(`Conversation: ${thread.id}`)
console.log(`Messages: ${thread.metadata.messageCount}`)
console.log(`Duration: ${new Date(thread.metadata.endTime) - new Date(thread.metadata.startTime)}ms`)
for (const msg of thread.messages) {
console.log(`[${msg.role}] ${msg.content}`)
}
findSimilarConversations(conversationId, limit, threshold)
Find similar past conversations.
Parameters:
conversationId(string): Conversation to find similar tolimit?(number): Max results (default: 5)threshold?(number): Min similarity (default: 0.7)
Returns: Promise<Array<{id, relevance, metadata}>>
Example:
const similar = await conv.findSimilarConversations("conv_123", 5, 0.75)
for (const s of similar) {
console.log(`Similar conversation: ${s.id}`)
console.log(`Relevance: ${s.relevance.toFixed(2)}`)
}
getConversationThemes(conversationId)
Discover themes via clustering.
Parameters:
conversationId(string): Conversation ID
Returns: Promise<ConversationTheme[]>
Example:
const themes = await conv.getConversationThemes("conv_123")
for (const theme of themes) {
console.log(`Theme: ${theme.label}`)
console.log(`Messages: ${theme.messages.length}`)
console.log(`Coherence: ${theme.coherence}`)
}
saveArtifact(path, content, options)
Save code/file artifact.
Parameters:
path(string): VFS pathcontent(string | Buffer): File contentoptions(ArtifactOptions):conversationId: Conversation ID (required)messageId?: Message ID to linktype?: 'code' | 'config' | 'data' | 'document' | 'other'language?: Programming languagedescription?: Artifact description
Returns: Promise<string> - Artifact ID
Example:
const artifactId = await conv.saveArtifact(
'/auth/jwt-middleware.ts',
middlewareCode,
{
conversationId: "conv_123",
messageId: messageId,
type: 'code',
language: 'typescript',
description: 'JWT authentication middleware'
}
)
getConversationStats(conversationId?)
Get conversation statistics.
Parameters:
conversationId?(string): Optional conversation to filter
Returns: Promise<ConversationStats>
Example:
const stats = await conv.getConversationStats()
console.log(`Total conversations: ${stats.totalConversations}`)
console.log(`Total messages: ${stats.totalMessages}`)
console.log(`Total tokens: ${stats.totalTokens}`)
console.log(`By role:`, stats.roles)
console.log(`By phase:`, stats.phases)
exportConversation(conversationId)
Export conversation to JSON.
Returns: Promise<any> - Serializable conversation object
importConversation(data)
Import conversation from JSON.
Returns: Promise<string> - New conversation ID
Advanced Usage
Custom Relevance Weights
Fine-tune context retrieval:
const context = await conv.getRelevantContext(query, {
weights: {
semantic: 0.6, // Less weight on exact matching
temporal: 0.8, // More weight on recent messages
graph: 0.4 // Moderate weight on relationships
}
})
Phase-Based Filtering
Track problem-solving progress:
const planningMessages = await conv.searchMessages({
query: "authentication approach",
role: "assistant",
phase: ["planning", "analysis"]
})
Time-Based Analysis
Analyze conversation evolution:
const recentContext = await conv.getRelevantContext(query, {
timeRange: {
start: Date.now() - 24*60*60*1000 // Last 24 hours
}
})
Multi-Session Conversations
Track across sessions:
// Session 1
await conv.saveMessage(content1, "user", {
conversationId: "conv_123",
sessionId: "session_1"
})
// Session 2 (different day)
await conv.saveMessage(content2, "user", {
conversationId: "conv_123", // Same conversation!
sessionId: "session_2"
})
Performance
- Message save: <50ms (with embedding)
- Context retrieval: <100ms (10 messages)
- Search: <150ms (1000s of messages)
- Theme clustering: <500ms
- Scales to: 10M+ messages
- Storage: Efficient vector + graph storage
Next Steps
- MCP Integration Guide - Claude Code setup
- API Reference - Complete API documentation
- Examples - Code examples and patterns
- Advanced Features - Advanced usage and optimization