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
What database does Project Atlas use?
as of 2026-09-30
- 2026-03-04Superseded“We’re standardizing on PostgreSQL 16.”
- 2026-05-12Lineage“The Atlas project is moving to PostgreSQL 17.”
- 2026-07-08Contradiction“Atlas is still running 16 in production.”
- 2026-08-19Out of context“Keep legacy services on 16.”
- 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.
- Mar 40.94Atlas standardizes on PostgreSQL 16.
- Apr 20.81Billing reads from Atlas’s database.
- Apr 200.92Atlas must stay on 16 until Q4.
- May 120.95Atlas will adopt PostgreSQL 17, replacing the PostgreSQL 16 standard, by June.
Ranked by similarity. No relationships.
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.
May 12Atlas will adopt PostgreSQL 17, replacing the PostgreSQL 16 standard, by June.
- supersedesMar 4Atlas standardizes on PostgreSQL 16.
- contradictsApr 20Atlas must stay on 16 until Q4.
- relatedApr 2Billing reads from Atlas’s database.
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.
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.
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.
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.
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.
Every fact is dated and linked. Alvia links each fact to the facts it replaces, contradicts or relates to, with the date of each.
Trace every answer to its facts. See which facts led to an answer and how they changed along the way.
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.
Resuming run 214 · session 41
QueryWhat are my current reporting instructions?
Resolved context
Publish the weekly report every Friday with incident summaries, as instructed on April 9, 2026.
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 continuityCan we roll out company-wide now?
QueryWhat rollout plan applies to Acme now?
Resolved context
Acme replaced its company-wide launch with a pilot on September 24, 2026, and the wider rollout waits for its security review.
Not yet. You’re starting with a pilot until the security review is complete.
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- import { Queue } from "./queue";
- import { redis } from "./redis";
- export const jobs = new Queue(redis);
QueryWhy does this service use Redis instead of PostgreSQL for its queue?
Resolved context
Redis was selected for low-latency job processing, replacing the proposed PostgreSQL queue.
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- Request
- Check
- Approve
- Refund
QueryWhat approval requirements apply to a $640 refund?
Resolved context
A $640 refund requires a manager’s approval: the $500 threshold replaced the $1,000 threshold on September 12, 2026.
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.
# 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.
}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.
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
Starter
Bring your first agent into production.
$20per month
- 50,000 reads a month
- 5,000 writes a month
- 5,000 stored memories
- 10 projects
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
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
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.
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.
| Feature | Free | Starter | Growth | Scale | Custom |
|---|---|---|---|---|---|
| Price and capacity | |||||
| Price per month | $0 | $20 | $99 | $499 | Let’s talk |
| Reads per month | 10,000 | 50,000 | 300,000 | 3,000,000 | Custom |
| Writes per month | 1,000 | 5,000 | 30,000 | 250,000 | Custom |
| Stored memories | 500 | 5,000 | 50,000 | 500,000 | Custom |
| Projects | 3 | 10 | Unlimited | Unlimited | Unlimited |
| PiTRA™ | |||||
| As-of queries | Included | Included | Included | Included | Included |
| Supersession | Included | Included | Included | Included | Included |
| Contradiction | Included | Included | Included | Included | Included |
| Adaptive Relevance | Included | Included | Included | Included | Included |
| Temporal Graph | Included | Included | Included | Included | Included |
| Full Lineage | Included | Included | Included | Included | Included |
| Visual graph of memories and relationships | Included | Included | Included | Included | Included |
| Resolved context | Included | Included | Included | Included | Included |
| Scopes for organizations, users, agents, apps and teams | Included | Included | Included | Included | Included |
| Memory control | |||||
| Memory policies | Included | Included | Included | Included | Included |
| Keyword filtering | Included | Included | Included | Included | Included |
| Semantic filtering | Included | Included | Included | Included | Included |
| Filtering by scope and date | Included | Included | Included | Included | Included |
| Security and administration | |||||
| Project isolation | Included | Included | Included | Included | Included |
| API keys with expiry and revocation | Included | Included | Included | Included | Included |
| Team members and admin roles | Included | Included | Included | Included | Included |
| Activity logs | Included | Included | Included | Included | Included |
| Single sign-on (SSO) | Not included | Not included | Not included | Included | Included |
| SCIM provisioning | Not included | Not included | Not included | Not included | Included |
| Private deployment | Not included | Not included | Not included | Not included | Included |
| Integrations | |||||
| REST API | Included | Included | Included | Included | Included |
| MCP server | Included | Included | Included | Included | Included |
| Dashboard and Playground | Included | Included | Included | Included | Included |
| Plugins | Included | Included | Included | Included | Included |
| Custom integrations | Not included | Not included | Not included | Not included | Included |
| Support | |||||
| Support channel | Community | Private Slack | Private Slack | Dedicated | |
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.
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.