Skip to content

Memory for AI agents with the right context.

Point-in-Time Reasoning, powered by PiTRA™

Alvia gives AI agents accurate, relevant context across conversations and time. Know what matters now, what mattered then, and why.One resolved answer. Not a pile of memories.

Free plan · No credit card required · Connect in under 5 minutes

as of 2026-09-30

  1. 2026-03-04Superseded“We’re standardizing on PostgreSQL 16.”
  2. 2026-05-12Lineage“The Atlas project is moving to PostgreSQL 17.”
  3. 2026-07-08Contradiction“Atlas is still running 16 in production.”
  4. 2026-08-19Out of context“Keep legacy services on 16.”
  5. 2026-09-23Current“Atlas finished its move to 17.”

Resolved

PostgreSQL 17.

Resolved through March → May → July → September.

Works with

  • Claude Code
  • Codex
  • Cursor
  • Hermes
  • OpenClaw
  • Any MCP client
  • REST API

Memory stores information. Reasoning creates understanding. Alvia delivers both.

How it’s different

Similarity isn’t understanding. Context requires reasoning.

Alvia goes beyond similarity search to determine what’s true, what’s relevant, and what belongs in context. Every answer reflects the right information for the question and point in time.

The conventional approach Store now. Figure it out later.

Information is embedded, indexed, and retrieved by similarity. As history grows, outdated decisions and contradictions accumulate. The application must reconcile them or defer cleanup to another process.

The Alvia approach Resolve on arrival. Recall what’s true.

Alvia’s PiTRA™ evaluates information as it arrives. It tracks supersession, preserves contradictions, and establishes relationships at write time, not in a later cleanup cycle.

  • One answer, not a pile.

    Alvia delivers one resolved answer with supporting evidence, not a list of memories your agent must interpret.

  • Conflicts are identified.

    When facts disagree, Alvia preserves both perspectives rather than arbitrarily choosing one.

  • Past or present. Answered.

    Ask what was true at any point in time. Alvia reconstructs historically accurate context without manual date filtering.

  • Every answer is traceable.

    Follow the memories, relationships, and history behind the context your agent receives.

Core technologies

Memory that reasons.

Six technologies power PiTRA™, Alvia’s reasoning engine. Together, they evaluate relationships, resolve conflicting information, and deliver accurate, relevant context for any point in time.

  1. Ask about any date. Ask about now and get what’s true now. Ask about April and get what was true in April. Every version stays on record with its date and the reason it changed.

  2. New facts replace old ones. When a fact changes, Alvia marks the old version as replaced. The old version stays on record, and your agent never mixes it up with the current one.

  3. Your agent hears both sides. When two facts disagree, Alvia keeps both and says so. It does not guess which one wins. A later fact settles it.

  4. Only what matters comes back. Relevance changes with time, use and feedback. Details that no longer matter fade. Facts that still matter stay in reach.

  5. Every fact is dated and linked. Alvia links each fact to the facts it replaces, contradicts or relates to, with the date of each.

  6. Trace every answer to its facts. See which facts led to an answer and how they changed along the way.

supersedescontradictsresolvesrelatedas of Apr 30Mar 4Standardize on PostgreSQL 16.May 12Atlas moves to PostgreSQL 17.Jul 8Atlas still runs 16 in production.Aug 19Keep legacy services on 16.Sep 23Atlas finished its move to 17.

Resolved

PostgreSQL 16.

In April, only March had been said.

Use cases

Built for agents, apps and workflows.

From personalized assistants to customer support and autonomous workflows, Alvia provides persistent memory across conversations, sessions and interactions. Build applications that remember, without building the memory infrastructure.

  • Long-running agents Pick up where your agent left off.

    Agents run across sessions, but goals, instructions, and decisions change. Alvia returns the context that still matters, without replaying the entire history.

    See how agents maintain continuity 
  • AI applications Give your application answers that stay current.

    Users, accounts, projects, and organizations change. Alvia resolves their evolving context so your application can respond using the information that applies.

    Build with evolving context 
  • Coding agents Give coding agents the decisions behind the code.

    Requirements change. Architecture evolves. Decisions get reversed. Alvia returns the decision that applies now and the reason behind it, so coding agents work from what still governs the code.

    Follow decisions through the codebase 
  • Automated workflows Keep workflows informed as conditions change.

    Policies, instructions, and business conditions evolve. Alvia returns the context that applies so your workflows can evaluate their next step against current information.

    Keep workflows on the right state 

Integrations

Connect your agent in under 5 minutes.

Integrate Alvia with Claude Code, Codex, Cursor, OpenClaw, and Hermes through dedicated plugins, or connect using MCP and the REST API.

Connect with the tools you already use.

Install the Alvia plugin for Claude Code

Explorer

Integrations

Tools › Claude Code › Plugin

# Adds Alvia's memory tools and tells the agent to ask Alvia
# for team decisions before it searches or guesses.
# Finished conversations are saved to Alvia automatically.
# In Claude Code, /plugin runs the same steps and asks for the key.

claude plugin marketplace add alvia-ai/integrations
# Replace <API_KEY> with a key from the Alvia dashboard.
claude plugin install alvia-memory@alvia-integrations \
  --config api_key="<API_KEY>"
# Available across all Claude Code projects.
# API key is stored locally, never in source control.
# Replace <API_KEY> with a key from the Alvia dashboard.

claude mcp add \
  --scope user \
  --transport http \
  alvia https://api.alvia.ai/mcp \
  --header "Authorization: Bearer <API_KEY>"
# Run from your project's root directory.
# Each project can use its own Alvia API key.
# Configuration stays local and is never committed.
# Replace <API_KEY> with a key from the Alvia dashboard.

claude mcp add \
  --scope local \
  --transport http \
  alvia https://api.alvia.ai/mcp \
  --header "Authorization: Bearer <API_KEY>"
# Adds Alvia's memory tools and tells the agent to ask Alvia
# for team decisions before it searches or guesses.
# Finished conversations are saved to Alvia automatically.
# Set the key where Codex starts, such as your shell profile.
# Replace <API_KEY> with a key from the Alvia dashboard.
export ALVIA_API_KEY="<API_KEY>"

codex plugin marketplace add alvia-ai/integrations
codex plugin add alvia-memory@alvia

# Then start Codex, run /hooks and trust the five alvia-memory hooks.
[mcp_servers.alvia]
url = "https://api.alvia.ai/mcp"
# Replace <API_KEY> with a key from the Alvia dashboard.
http_headers = { "Authorization" = "Bearer <API_KEY>" }
# Adds Alvia's memory tools and tells the agent to ask Alvia
# for team decisions before it searches or guesses.
# Finished conversations are saved to Alvia automatically
# (local agents only).
agent plugin marketplace add https://github.com/alvia-ai/integrations

# Then open Plugins › Alvia Memory › Configure and enter the key.
# The hooks read the same key from a file only you can read.
# Replace <API_KEY> with a key from the Alvia dashboard.
mkdir -p ~/.alvia && (umask 077 && printf '%s' "<API_KEY>" > ~/.alvia/api-key)
{
  "mcpServers": {
    "alvia": {
      "url": "https://api.alvia.ai/mcp",
      "headers": { "Authorization": "Bearer <API_KEY>" }
    }
  }
}
# Adds Alvia's memory tools and tells the agent to ask Alvia
# for team decisions before it searches or guesses.
# Finished conversations are saved to Alvia automatically.
git clone https://github.com/alvia-ai/integrations
mkdir -p "${HERMES_HOME:-$HOME/.hermes}/plugins"
cp -R integrations/plugins/hermes/alvia \
  "${HERMES_HOME:-$HOME/.hermes}/plugins/alvia"

# Choose alvia, then enter a key from the Alvia dashboard.
hermes memory setup
# Adds Alvia's memory tools and tells the agent to ask Alvia
# for team decisions before it searches or guesses.
# Finished conversations are saved to Alvia automatically.
# The gateway reads the key from its env file.
# Replace <API_KEY> with a key from the Alvia dashboard.
echo 'ALVIA_API_KEY=<API_KEY>' >> ~/.openclaw/.env

git clone https://github.com/alvia-ai/integrations
openclaw plugins install ./integrations/plugins/openclaw

# Then restart the gateway.
{
  plugins: {
    entries: {
      "alvia-memory": {
        enabled: true,
        // Lets the plugin read the conversation it captures.
        hooks: { allowConversationAccess: true },
        config: { autoCapture: true },
      },
    },
  },
  // alsoAllow adds the two tools that change memory;
  // allow would hide every other tool.
  tools: { alsoAllow: ["alvia_remember", "alvia_forget_memory"] },
}
# Alvia's remote MCP server, over streamable HTTP
https://api.alvia.ai/mcp

# Authenticate every request with your API key.
# Replace <API_KEY> with a key from the Alvia dashboard.
Authorization: Bearer <API_KEY>
# Replace <API_KEY> with a key from the Alvia dashboard.
curl -X POST https://api.alvia.ai/v1/memories \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"content": "Atlas finished its move to PostgreSQL 17.", "occurred_at": "2026-09-23T14:00:00Z"}'
# Replace <API_KEY> with a key from the Alvia dashboard.
curl -X POST https://api.alvia.ai/v1/memories/import \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "Atlas finished its move to PostgreSQL 17 today."},
      {"role": "assistant", "content": "Noted: Atlas now runs on PostgreSQL 17."}
    ],
    "occurred_at": "2026-09-23T14:00:00Z"
  }'
# Replace <API_KEY> with a key from the Alvia dashboard.
curl -X POST https://api.alvia.ai/v1/memories/context \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"query": "What database does Atlas use?"}'

# {"context": "Atlas moved to PostgreSQL 17 on September 23, 2026."}
import requests

response = requests.post(
    "https://api.alvia.ai/v1/memories",
    # Replace <API_KEY> with a key from the Alvia dashboard.
    headers={"Authorization": "Bearer <API_KEY>"},
    json={"content": "Atlas finished its move to PostgreSQL 17.", "occurred_at": "2026-09-23T14:00:00Z"},
)
import requests

response = requests.post(
    "https://api.alvia.ai/v1/memories/import",
    # Replace <API_KEY> with a key from the Alvia dashboard.
    headers={"Authorization": "Bearer <API_KEY>"},
    json={
        "messages": [
            {"role": "user", "content": "Atlas finished its move to PostgreSQL 17 today."},
            {"role": "assistant", "content": "Noted: Atlas now runs on PostgreSQL 17."},
        ],
        "occurred_at": "2026-09-23T14:00:00Z",
    },
)
import requests

response = requests.post(
    "https://api.alvia.ai/v1/memories/context",
    # Replace <API_KEY> with a key from the Alvia dashboard.
    headers={"Authorization": "Bearer <API_KEY>"},
    json={"query": "What database does Atlas use?"},
)
print(response.json()["context"])
# Atlas moved to PostgreSQL 17 on September 23, 2026.
const response = await fetch("https://api.alvia.ai/v1/memories", {
  method: "POST",
  headers: {
    // Replace <API_KEY> with a key from the Alvia dashboard.
    Authorization: "Bearer <API_KEY>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ content: "Atlas finished its move to PostgreSQL 17.", occurred_at: "2026-09-23T14:00:00Z" }),
});
const response = await fetch("https://api.alvia.ai/v1/memories/import", {
  method: "POST",
  headers: {
    // Replace <API_KEY> with a key from the Alvia dashboard.
    Authorization: "Bearer <API_KEY>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    messages: [
      { role: "user", content: "Atlas finished its move to PostgreSQL 17 today." },
      { role: "assistant", content: "Noted: Atlas now runs on PostgreSQL 17." },
    ],
    occurred_at: "2026-09-23T14:00:00Z",
  }),
});
const response = await fetch("https://api.alvia.ai/v1/memories/context", {
  method: "POST",
  headers: {
    // Replace <API_KEY> with a key from the Alvia dashboard.
    Authorization: "Bearer <API_KEY>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ query: "What database does Atlas use?" }),
});
const { context } = await response.json();
// "Atlas moved to PostgreSQL 17 on September 23, 2026."
using System.Net.Http.Json;

var http = new HttpClient();
// Replace <API_KEY> with a key from the Alvia dashboard.
http.DefaultRequestHeaders.Add("Authorization", "Bearer <API_KEY>");

var response = await http.PostAsJsonAsync(
    "https://api.alvia.ai/v1/memories",
    new { content = "Atlas finished its move to PostgreSQL 17.", occurred_at = "2026-09-23T14:00:00Z" });
using System.Net.Http.Json;

var http = new HttpClient();
// Replace <API_KEY> with a key from the Alvia dashboard.
http.DefaultRequestHeaders.Add("Authorization", "Bearer <API_KEY>");

var response = await http.PostAsJsonAsync(
    "https://api.alvia.ai/v1/memories/import",
    new {
        messages = new[] {
            new { role = "user", content = "Atlas finished its move to PostgreSQL 17 today." },
            new { role = "assistant", content = "Noted: Atlas now runs on PostgreSQL 17." },
        },
        occurred_at = "2026-09-23T14:00:00Z",
    });
using System.Net.Http.Json;
using System.Text.Json;

var http = new HttpClient();
// Replace <API_KEY> with a key from the Alvia dashboard.
http.DefaultRequestHeaders.Add("Authorization", "Bearer <API_KEY>");

var response = await http.PostAsJsonAsync(
    "https://api.alvia.ai/v1/memories/context",
    new { query = "What database does Atlas use?" });
var body = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(body.GetProperty("context"));
// Atlas moved to PostgreSQL 17 on September 23, 2026.
package main

import (
	"bytes"
	"encoding/json"
	"net/http"
)

func main() {
	body, _ := json.Marshal(map[string]any{"content": "Atlas finished its move to PostgreSQL 17.", "occurred_at": "2026-09-23T14:00:00Z"})
	req, _ := http.NewRequest("POST", "https://api.alvia.ai/v1/memories", bytes.NewReader(body))
	// Replace <API_KEY> with a key from the Alvia dashboard.
	req.Header.Set("Authorization", "Bearer <API_KEY>")
	req.Header.Set("Content-Type", "application/json")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
}
package main

import (
	"bytes"
	"encoding/json"
	"net/http"
)

func main() {
	body, _ := json.Marshal(map[string]any{
		"messages": []any{
			map[string]any{"role": "user", "content": "Atlas finished its move to PostgreSQL 17 today."},
			map[string]any{"role": "assistant", "content": "Noted: Atlas now runs on PostgreSQL 17."},
		},
		"occurred_at": "2026-09-23T14:00:00Z",
	})
	req, _ := http.NewRequest("POST", "https://api.alvia.ai/v1/memories/import", bytes.NewReader(body))
	// Replace <API_KEY> with a key from the Alvia dashboard.
	req.Header.Set("Authorization", "Bearer <API_KEY>")
	req.Header.Set("Content-Type", "application/json")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
}
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	body, _ := json.Marshal(map[string]any{"query": "What database does Atlas use?"})
	req, _ := http.NewRequest("POST", "https://api.alvia.ai/v1/memories/context", bytes.NewReader(body))
	// Replace <API_KEY> with a key from the Alvia dashboard.
	req.Header.Set("Authorization", "Bearer <API_KEY>")
	req.Header.Set("Content-Type", "application/json")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	var out struct {
		Context string `json:"context"`
	}
	json.NewDecoder(resp.Body).Decode(&out)
	fmt.Println(out.Context)
	// Atlas moved to PostgreSQL 17 on September 23, 2026.
}
mainUTF-8Shell Script

Security

Engineered for trust. Secure by design.

Alvia is built with the engineering discipline expected of enterprise infrastructure. Security is embedded in the architecture, not added afterward. Strict tenant isolation, least-privilege access, project-bound credentials, and configurable memory policies establish clear boundaries around your data. Automated adversarial testing, audit trails, and controlled data deletion reinforce those boundaries throughout the memory lifecycle.

  • Project isolation Isolated by design.

    Everything Alvia stores belongs to a tenant and project. Storage, relationships, and retrieval remain isolated across project boundaries, with automated adversarial tests validating that isolation before every release.

  • Project-bound API keys Access without overreach.

    Every API key is bound to a single project. It grants access only to that project’s facts and relationships, never to another project’s data.

  • Scopes Boundaries within boundaries.

    Partition data by organization, user, agent, application, or team. Each operation respects the scope it sends, keeping facts and relationships within their boundaries.

  • Zero-trust requests Every request earns access.

    Every request is authenticated and restricted to its key’s project. Scopes further narrow what each request reads, so no credential reaches beyond its project.

  • Memory policies Your data. Your rules.

    Define what Alvia keeps using keywords and natural-language policies. Exclude sensitive information, restrict specific topics, and prevent unwanted content from entering Alvia.

  • Deletion and audit records Track changes. Control what remains.

    Delete facts and their relationships when they’re no longer needed. Audit records provide visibility into data access, changes, and processing.

Learn more 

Pricing

Start free. Scale when you’re ready.

Every plan includes Alvia’s complete PiTRA™ reasoning engine. No feature restrictions, no credit card required to start. Just the capacity you need, with room to grow.

  • Free

    Build, experiment, and see Alvia in action.

    $0per month

    • 10,000 reads a month
    • 1,000 writes a month
    • 500 stored memories
    • 3 projects
    Get startedwith Free
  • Growth

    Scale context across agents and applications.

    $99per month

    • 300,000 reads a month
    • 30,000 writes a month
    • 50,000 stored memories
    • Unlimited projects
    Get startedwith Growth
  • Scale

    Built for demanding production workloads.

    $499per month

    • 3,000,000 reads a month
    • 250,000 writes a month
    • 500,000 stored memories
    • Unlimited projects
    Get startedwith Scale

Custom

Your infrastructure. Your requirements.

Deploy Alvia on your terms, with the infrastructure, identity integration, and support your organization requires.

  • Enterprise SSO & SCIM

    Centralized authentication and user provisioning.

  • Private deployments

    Run Alvia in your own environment.

  • Custom capacity

    Usage limits tailored to your workloads.

  • Custom terms & support

    Terms and support built around your requirements.

Talk to us 

Compare plans

Full reasoning engine. Every plan.

Every plan includes PiTRA™ and Alvia’s complete core memory capabilities. Choose the capacity that fits your workload, with enterprise identity, private deployments, and tailored support available through Custom.

What each plan includes
FeatureFreeStarterGrowthScaleCustom
Price and capacity
Price per month$0$20$99$499Let’s talk
Reads per month10,00050,000300,0003,000,000Custom
Writes per month1,0005,00030,000250,000Custom
Stored memories5005,00050,000500,000Custom
Projects310UnlimitedUnlimitedUnlimited
PiTRA™
As-of queriesIncludedIncludedIncludedIncludedIncluded
SupersessionIncludedIncludedIncludedIncludedIncluded
ContradictionIncludedIncludedIncludedIncludedIncluded
Adaptive RelevanceIncludedIncludedIncludedIncludedIncluded
Temporal GraphIncludedIncludedIncludedIncludedIncluded
Full LineageIncludedIncludedIncludedIncludedIncluded
Visual graph of memories and relationshipsIncludedIncludedIncludedIncludedIncluded
Resolved contextIncludedIncludedIncludedIncludedIncluded
Scopes for organizations, users, agents, apps and teamsIncludedIncludedIncludedIncludedIncluded
Memory control
Memory policiesIncludedIncludedIncludedIncludedIncluded
Keyword filteringIncludedIncludedIncludedIncludedIncluded
Semantic filteringIncludedIncludedIncludedIncludedIncluded
Filtering by scope and dateIncludedIncludedIncludedIncludedIncluded
Security and administration
Project isolationIncludedIncludedIncludedIncludedIncluded
API keys with expiry and revocationIncludedIncludedIncludedIncludedIncluded
Team members and admin rolesIncludedIncludedIncludedIncludedIncluded
Activity logsIncludedIncludedIncludedIncludedIncluded
Single sign-on (SSO)Not includedNot includedNot includedIncludedIncluded
SCIM provisioningNot includedNot includedNot includedNot includedIncluded
Private deploymentNot includedNot includedNot includedNot includedIncluded
Integrations
REST APIIncludedIncludedIncludedIncludedIncluded
MCP serverIncludedIncludedIncludedIncludedIncluded
Dashboard and PlaygroundIncludedIncludedIncludedIncludedIncluded
PluginsIncludedIncludedIncludedIncludedIncluded
Custom integrationsNot includedNot includedNot includedNot includedIncluded
Support
Support channelCommunityEmailPrivate SlackPrivate SlackDedicated

FAQ

Frequently asked questions

How does usage work?

Every plan includes monthly read and write allowances and a fixed memory capacity. Reads retrieve context, while writes submit information for memory formation. A context call uses 5 reads and an inspect 3; list, search and recall use 1 read each. Monthly allowances reset on the first of each month. Stored memories persist and count toward your plan’s capacity until forgotten.

What happens if I exceed my monthly limits?

On every plan, reads or writes stop when their monthly allowance is used up and resume on the first of the following month, or as soon as you upgrade. There are no overage charges.

All plans enforce memory capacity limits. Once reached, new memories cannot be formed until capacity is available.

Are there rate limits?

Yes. Every plan uses token-bucket rate limiting to ensure fair usage. Paid plans support substantially higher throughput and request bursts. Requests exceeding the available rate limit receive HTTP 429 responses.

Detailed limits are available in the documentation.

What counts as a stored memory?

Each fact Alvia keeps counts as one stored memory, no matter how many times it’s revised. A fact with 10 revisions still counts as one, and its full lineage is kept at no extra cost. Each revision counts as a write. Forgetting a fact releases its capacity once the operation is processed.

See how usage is counted →

Are features restricted by plan?

No. Every plan, including Free, includes all of PiTRA™. Supersession, contradiction detection, temporal reasoning, and other core technologies are available without upgrading. Plans differ by capacity and throughput, not intelligence.

How does billing work?

Subscriptions are billed on the first of each month. Your initial payment is prorated based on when you subscribe, but your full plan allowances are available immediately. Upgrades take effect immediately, with prorated billing adjustments.

There are no hidden fees or automatic overage charges.

Can I change or cancel my plan?

Yes. Upgrade, downgrade, or cancel anytime without long-term commitments or cancellation fees. Upgrades take effect immediately. Cancellations retain paid access through the current billing period, after which your account moves to Free.

Your memories remain intact. If your stored memories exceed the new plan’s capacity, you can still retrieve existing context, but cannot form new memories until you’re below the limit.

Is my data used to train AI models?

No. Alvia never uses your memories to train or fine-tune models. Your data stays within its project.

Can I deploy Alvia in my own environment?

Yes. Custom plans support private deployments, enterprise SSO and SCIM provisioning, tailored capacity, and custom support agreements. Contact us to discuss your infrastructure and security requirements.

Can I export my memories?

Yes. Your memories belong to you. You can list every memory and inspect its versions through the API.

Get started

Better memory. Smarter agents.

Give your AI the context it needs to make better decisions. Free to start. Production-ready from day one.