Setup
setup.ts
import { Trix } from '@trixdb/client';
import Anthropic from '@anthropic-ai/sdk';
const trix = new Trix({ apiKey: process.env.TRIX_API_KEY });
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });Basic Usage
chat.ts
async function chat(userMessage, userId) {
// 1. Recall relevant memories
const results = await trix.memories.list({
q: userMessage,
spaceId: userId,
limit: 5
});
// 2. Build context from memories
const context = results.data
.map(m => `- ${m.content}`)
.join('\n');
// 3. Create message with context
const response = await anthropic.messages.create({
model: 'claude-opus-5',
max_tokens: 1024,
system: `You are a helpful assistant. Here's what you know about this user:\n${context}`,
messages: [
{ role: 'user', content: userMessage }
]
});
return response.content[0].text;
}Using Claude Tools
Use Claude's tool use for automatic memory management:
tools.ts
const tools = [{
name: 'remember',
description: 'Store important information about the user for future reference',
input_schema: {
type: 'object',
properties: {
content: {
type: 'string',
description: 'The information to remember'
}
},
required: ['content']
}
}];
const response = await anthropic.messages.create({
model: 'claude-opus-5',
max_tokens: 1024,
tools,
messages: [{ role: 'user', content: userMessage }]
});
// Handle tool use
for (const block of response.content) {
if (block.type === 'tool_use' && block.name === 'remember') {
await trix.memories.create({ content: block.input.content, spaceId: userId });
}
}Claude's tool use is ideal for letting the AI decide what information is worth remembering.
Streaming with Memory
streaming.ts
async function* streamChat(userMessage, userId) {
const results = await trix.memories.list({ q: userMessage, spaceId: userId });
const stream = await anthropic.messages.stream({
model: 'claude-sonnet-5',
max_tokens: 1024,
system: buildSystemPrompt(results.data),
messages: [{ role: 'user', content: userMessage }]
});
for await (const chunk of stream) {
yield chunk;
}
}