Torvaix
Knowledge Operating System.

Your own AI workspace,
that remembers.

TORVAIX is a workspace where conversations become knowledge, knowledge becomes memory, and memory enables intelligent action. Chat with AI, organize projects, build knowledge, and work with autonomous agents—all in one connected system.

Memory-first. Local-first. Open source.
Everything, Self-Hosted

One app, a lot of capabilities

Started as an AI chat. Became a workspace. Each piece runs locally against whatever endpoints you point it at.

Chat & Agents

Multi-turn chat plus autonomous agents that plan, call tools, and work through tasks.

Tools & MCP

Built-in tools (bash, files, web, memory) plus any MCP server you connect. Toggle per tool.

Cookbook

Hardware-aware model recommendations and one-click serving across 270+ catalogued models.

Email Assistant

AI summaries, style-matched draft replies, auto-tagging and spam triage over IMAP/SMTP.

Deep Research

Multi-step research runs that gather, read, and synthesize sources into a written report.

Compare

Send one prompt to several models at once and compare their answers side-by-side.

Memory

Persistent memory the assistant builds up and recalls across all your conversations.

Skillsself-evolving

The assistant writes, refines, and reuses its own skills — getting more capable over time.

Private by default

Runs on your machine against your own endpoints. No telemetry, with optional external integrations when you choose them.

Live Memory Fragments

What Torvaix remembers

Real workspace intelligence. Persistent context. Local execution.

[Workspace Log #001]
>I asked it to summarize my repo last week. Today it remembered everything.
Memory Confidence
98%
Knowledge Nodes
14
Execution Traces
6
Developer Workspace
import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix(); import { Agent, Workspace } from '@torvaix/core'; import { LLMProvider } from '@torvaix/llm'; async function bootstrapTorvaix() { const workspace = new Workspace({ db: 'local-vector-store' }); // Initialize local uncompromised LLM const model = await LLMProvider.load('llama-3-8b-instruct'); workspace.attachModel(model); // Knowledge graph setup const memory = new VectorStore(); await memory.indexDirectory('./knowledge'); // Core event loop workspace.on('user_input', async (input) => { const context = await memory.search(input); const response = await model.generate(input, context); console.log(response); }); } bootstrapTorvaix();
◎ WHY TORVAIX EXISTS

I built Torvaix because using AI felt fragmented.

Every model had its own interface. Conversations lived in one place, notes in another, and knowledge was scattered across countless tabs and applications.

The models were getting smarter, but the workflow around them wasn't.

Torvaix began as an attempt to bring everything together: conversations, knowledge, documents, and multiple AI models inside a single workspace.

The goal isn't just to chat with AI. It's to build a system that remembers, organizes, and helps turn information into knowledge.

Whether your models run locally or in the cloud, Torvaix gives them a shared home — without locking you into a single provider.

Origin Story

Torvaix was created by a carefully crafted one-shot AI prompt:

user@torvaix: ~
>
>_ GET STARTED

Torvaix is yours.

Open-source. Local-first. Memory-native. No telemetry, no lock-in, no forgetting.

Run your own models, own your memory, and work with intelligent agents inside a connected knowledge workspace.

Bring your own stack
Node.js 20+OllamaDocker
$ git clone https://github.com/Yashasm18/Torvaix.git
$ cd Torvaix
$ npm install
$ docker compose up -d
$ ollama serve
$ npm run dev
Open SourceLocal-FirstMemory-PoweredMulti-ModelAgenticPrivacy-First