Skip to main content
NO BLACK BOX

Memory you can open in a text editor.

Every fact an Actionist agent learns lives in a plain Markdown file in your workspace, readable, editable, version-controllable. No black-box vector store. No context that silently disappears when the session ends.

The model

Memory lives in three places.

Every surface is the same underlying files. You interact with them wherever is most natural. Below: one fact, seen from all three sides.

Memory instructions”Log every client call outcome. Prefer bullet points.”auto-saves
Global memoryWorkspace-wide memory every agent sharesRead/Write

The primary configuration surface, inside the Agent Studio: Agents → select an agent → Memory tab (Brain icon). Instructions, bucket access, and the knowledge corpus, without leaving the app.

company/crm/accounts/northwind.md
## Northwind Trading
- Tier: enterprise · renewal: October
- Reports as slides, never PDF (CEO reads on phone)

Plain Markdown files. Open company/Memory.md or agents/{id}/memory/Memory.md in any editor to read, edit, or version-control what your agents know.

chat · maya
youHow does Northwind want their reports?
tool · Search Memory · “northwind report format”
mayaSlides, never PDF. Their CEO reads on a phone. Saved from your call on June 9.

Agents call Search Memory (memory_search) and Read Memory (memory_get) automatically. In conversation, in workflows, and on scheduled runs.

The write loop

Watch an agent remember.

A background curator watches every conversation, workflow, and scheduled run, and decides what is worth keeping. Below: one agent’s day, landing in her journal as it happens.

agents/maya/memory/TODAY.md
chat · maya · 09:14
09:14Client call with Northwind: they want the Q3 report in slide form, not PDF.
09:14Preference saved: reports as slides for Northwind going forward.
workflow · invoice-chase · 11:02
11:02Sent 3 payment reminders. Invoice #2041 escalated to second notice.
chat · maya · 14:38
14:38New rule from the team: always CC legal@ on contract emails.
14:39Promoted to Memory.md: this one is permanent.
schedule · daily-digest · 17:00
17:00Digest sent. Open rate trending up since switching to bullet summaries.
Nothing blocks the agent. Curation runs asynchronously in the background. The conversation never waits for a memory write.
Today, then history. The journal rolls into dated history files; durable rules get promoted to Memory.md and survive forever.
Everything is a file. Open the workspace in any editor and read exactly what your agent knows. Edit it. Version it.
Under the hood

Five stops from words to memory.

ConversationChats, workflows, and scheduled runs emit events as they happen.
Event queueObservations accumulate quietly, off the hot path.
Write plannerA background model reads the batch and plans precise file edits.
Markdown filesPlans become atomic writes to the agent’s memory tree.
INDEX.mdEvery durable write gets a one-line entry in a human-readable index.
Context, spent deliberately

What the agent reads before you type a word.

Every session opens with a deterministic preload: up to six files across five sources, wrapped in named sections, inside a total budget of 8,000 tokens: no search, no guessing. Hover a segment to inspect it.

registry
user
Memory.md
TODAY.md
history ×2
company context · 4,000 charsuser profile · 4,000 charsagent memory · 8,000 charstoday’s journal · 8,000 charsrecent history · 4,000 × 2
Truncation is front-first: when a file exceeds its budget, the oldest content is dropped and the newest is kept. If you let Memory.md or TODAY.md grow uncurated, early important context disappears silently. Keep both files tight.

The studio

The Memory tab, panel by panel.

Reach it from Agents → select an agent → Memory tab (Brain icon). Three panels, each controlling a different layer.

Agent Studio, Maya · Memory
OverviewToolsMemoryChannelsSchedule
Memory instructions
Log every client call outcome.
Prefer bullet points.
Never store API tokens.
auto-saves
Memory
Global memoryRead/Write
Every workspace has Global memory. Any further scope you define in company/Memory.md appears here as its own row with the same three-way control.
Knowledge corpus
Upload File.md .txt .pdf .docx up to 10 MB
pricing-2026.pdfextracted

Memory instructions

The markdown editor at the top of the tab writes directly to agents/{id}/memory/Memory.md. Use it to tell the agent what is worth remembering and how: “Log every client call outcome. Prefer bullet points. Never store API tokens.”Changes auto-save as you type. To revert to the default, click the Reset button (arrow-clockwise icon) in the panel header.
Keep instructions under roughly 200 words. Memory.md is injected verbatim into every session within the 8k-token preload budget. A long essay eats into the budget for TODAY.md and recent history. Write directives, not prose.
Buckets are named scopes. Each one maps to a file or folder of Markdown in your workspace. The tab shows a row per bucket with a three-way permission control, using the same labels you see in the product: No access (invisible to the agent), Read (search and recall), Read/Write (search, recall, and save new facts).Global memory (Globe icon, always at the top) covers workspace-wide memory shared by every agent. It is the one bucket present in every workspace, and its permission control works exactly like the others: set it to No access and this agent stops reading it.
Which buckets you see depends on your workspace. A new workspace shows Global memory and, once you add documents, a Knowledge corpus. Additional buckets appear only after they are defined in company/Memory.md using the format in the “Adding a custom bucket” note below. If you were expecting named company scopes and do not see them, they have not been defined yet.
A common layout, once you define it, splits shared ground truth by subject:
The Knowledge Corpus is a private document library for this specific agent. Upload reference files (specs, pricing tables, runbooks, FAQs) and the agent retrieves the relevant excerpt via semantic search rather than loading the whole document on every turn.“Private documents this agent can reference. Chunks are embedded and retrieved; nothing leaves your workspace.”Click Upload File to add a document. Accepted types for indexing: .md, .txt, .csv, .json, .yaml, .yml, .toml, .ini, .log. Rich document formats (.pdf, .docx, .xlsx) go through a text-extraction step before indexing. Maximum file size: 10 MB per file.To remove a file, hover the row and click the Trash icon. Confirm in the dialog: “Delete [filename] from the knowledge corpus?”
Try it · permissions

Permissions you can feel.

Memory is bucketed by scope so an agent only sees what it needs, a data diet rather than a free-for-all. The matrix below is an illustration built on the example buckets above. Change anything; watch the agent’s world change.

Illustrative. These bucket names are the example layout from the table above, not buckets that exist in a new workspace. Global memory is the one every workspace starts with.
Set each bucket’s access
Business InfoMission, values, company facts
ProductsProduct catalogue and specs
PoliciesInternal rules and procedures
OperationsProcesses and runbooks
CRMCustomer accounts and history
DocsReference documentation
What this agent sees
agents/maya/memory/ . Always
company/Memory.md . Always
company/business/ no accessreadread/write
company/products/ no accessreadread/write
company/policies/ no accessreadread/write
company/operations/ no accessreadread/write
company/crm/ no accessreadread/write
company/docs/ no accessreadread/write
Struck-through paths are invisible to the agent: in chat, in workflows, and in search.
Scope to ownership. Give an agent Read/Write only on the bucket it is responsible for, Read on the reference material it needs, and No access everywhere else. Two agents writing to the same bucket can contradict each other in the same file, so keep one writer per bucket.
Adding a custom bucket. Edit company/Memory.md directly using the heading-based format below. After saving, the new bucket appears in all agents’ Memory tabs immediately.
Knowledge corpus

Turn documents into searchable knowledge.

Upload a 50-page product spec once. The agent retrieves a targeted excerpt on every relevant turn, instead of re-reading the whole file or asking you to paste it in chat. Watch a file move through its lifecycle:

pricing-2026.pdf · 2.4 MBUploading…Extracting text…Uploaded, indexing pending. Searchable shortly.extracted indexed and searchable

Open the Knowledge corpus panel

In the Memory tab, scroll to the Knowledge corpus panel and click Upload File.

Pick a file

Text types index directly: .md, .txt, .csv, .json, .yaml, .yml, .toml, .ini, .log. Rich documents (.pdf, .docx, .xlsx) are text-extracted first. Maximum size: 10 MB per file.

Watch the lifecycle

Exactly the animation above: Uploading…Extracting text… (rich files) → indexing pending → the extracted badge. If you instead see “No text could be extracted from this document”, the file is image-only. Nothing is searchable.

Verify the agent can find it

Ask the agent a question the document should answer. It calls Search Memory and returns a ranked excerpt. Confirm the snippet is from your file.

Remove a file

Hover the file row and click the Trash icon. Confirm: “Delete [filename] from the knowledge corpus?” The file and its index entries are removed immediately.
Wait for the extracted badge before relying on a PDF or DOCX in a live agent. “Indexing pending” means not yet searchable; “No text could be extracted” means it never will be.
Try it · recall

Recall, ranked.

Two tools power recall, and agents call them automatically. You see the tool calls inline in chat and in workflow traces. Pick a query and watch the ranking.

memory_search(“report format”)
memory_search(“contract emails”)
memory_search(“demo follow-up”)
memory_search(“tone of voice”)
agents/maya/memory/Memory.md:120.91
Reports for Northwind go out as slides, never PDF. Their CEO reads on a phone.
company/docs/brand-voice.extracted.md:190.48
Tone of voice: direct, warm, zero filler. Short sentences win. No exclamation marks.
company/crm/accounts/northwind.md:20.37
Northwind Trading: enterprise tier, renewal in October, champion: Dana Voss.
company/policies/email.md:40.94
Always CC legal@ on anything containing contract terms or pricing commitments.
agents/maya/memory/TODAY.md:140.52
New rule from the team: always CC legal@ on contract emails. Promoted to Memory.md.
company/products/pricing.md:70.29
Pro plan pools usage across the team; Basic is single-seat with a monthly reset.
agents/maya/memory/history/2026-06-09.md:310.89
Demo follow-ups convert best when sent within 4 hours, with one concrete next step.
company/crm/accounts/northwind.md:20.44
Northwind Trading: enterprise tier, renewal in October, champion: Dana Voss.
agents/maya/memory/TODAY.md:80.33
Invoice #2041 escalated to second notice; finance wants weekly status on it.
company/docs/brand-voice.extracted.md:190.93
Tone of voice: direct, warm, zero filler. Short sentences win. No exclamation marks.
agents/maya/memory/Memory.md:120.41
Reports for Northwind go out as slides, never PDF. Their CEO reads on a phone.
company/policies/email.md:40.27
Always CC legal@ on anything containing contract terms or pricing commitments.
Ranked with the real engine’s hybrid weights: 0.6 semantic similarity · 0.25 keyword match · 0.15 recency, re-ranked so one document never dominates. Demo data, real scoring shape.

”You explained the Northwind report format once. In March.”

maya · memory_search
memory_get is scope-enforced. An agent can only read files in buckets where it has at least Read permission. Attempting to read outside the permitted scope returns an error, not the file contents. Recall works the same everywhere: in chat, in workflows, and on scheduled runs, with each tool call visible in the trace.
Memory in practice

Three teams, one pattern.

Memory is most useful when it surfaces exactly the right context without being asked. These recipes show how agents across roles use recall and write to stay useful across sessions.

Dario · Sales
Before a call, memory_search(“northwind deal stage”) surfaces the last three touchpoints, open commitments, and the champion’s name. All logged automatically from prior sessions. Dario opens the call with context instead of asking the CRM for a briefing.
saves ~6 min per call
Priya · Support lead
A support ticket asks about refund eligibility. The agent runs memory_search(“refund policy”) against the Policies bucket, finds the exact clause, and cites the source file and line number in its reply: no tab-switching, no guesswork.
cited answer in ~8 sec
Maya · Marketing Manager
Maya said once: “Northwind reports go out as slides, never PDF.” That preference was written to Memory.md and now applies on every run. Campaign drafts, digest emails, and scheduled summaries all arrive in the right format without reminders.
zero repeat instructions

Best practices

Memory habits that pay off.

Five habits that prevent the most common memory failures and make the most of the context you have.

Memory instructions are injected verbatim at session start, inside the 8,000-token preload budget. Every word you write competes with TODAY.md and recent history. Write short, imperative sentences: “Log every client call outcome. Prefer bullet points. Never store API tokens.” Past 200 words, you are writing prose that belongs in a corpus document.
Think of each agent as owning the buckets it controls: your CRM agent gets Read/Write on CRM, Read on Products, No access on Policies. Giving multiple agents Read/Write on the same bucket creates contention. Agent A’s writes can contradict agent B’s in the same file. One writer per bucket is the clean pattern.
Pasting a 50-page spec into chat loads the whole document into context every turn. Uploading it to the corpus chunks and indexes it, the agent retrieves the relevant excerpt only when needed. Good corpus candidates: specs, pricing tables, SLAs, runbooks, brand guidelines, FAQs. Bad candidates: short facts (Memory.md) and image-only PDFs (nothing extracts).
Rich documents (PDF, DOCX, XLSX) are text-extracted before indexing. The extracted badge confirms usable text came out. “No text could be extracted” means the file is image-only. OCR is not performed, nothing is searchable. Don’t put a corpus file in a production agent’s remit until the badge appears.
The curator maintains agents/{id}/memory/INDEX.md automatically, one line per memory file, trimming oldest entries first as it grows. For agents running for months, open it occasionally and confirm your most important facts still have entries. If a critical early fact was dropped, re-surface it: ask the agent to log it again, or edit the file directly.
Why it’s built this way

Four principles, no compromises.

Plain Markdown

Human-readable files, not embeddings in a vault. What you can read, you can trust.

Permissioned

Bucket-level read/write grants per agent. A support agent never wanders into finance.

Yours to inspect

The store and its search index live in your own workspace, not in a vendor black box.

Survives sessions

Monday’s lesson still applies on Friday. Memory is the product, not a side effect.
Always on

Memory that works while you sleep.

Configure buckets once. Upload your reference docs. Let the agent carry context forward on every session, every schedule, every run.

Every fact lives in a plain file you own, readable, editable, version-controllable.
Permissioned by bucket · Indexed for recall · Nothing leaves your workspace.

Keep going

Next steps.

Agents

Configure the agent that holds this memory: tools, approval mode, channels, and schedule.

Files

Browse and edit the underlying Markdown files your agents read and write.

Schedules

Put a memory-backed agent on a recurring schedule, and why bucket permissions matter for unattended runs.

Skills

Portable behavior packs that pair well with memory. A skill plus a well-scoped bucket makes a focused specialist.