What Is Procedural Memory in AI Agents?
Procedural memory is memory for how to do something — a learned skill, routine, or sequence of steps — as opposed to memory for facts (semantic memory) or memory for specific past events (episodic memory). The defining trait of procedural memory is that it’s implicit: you can ride a bike or type on a keyboard without being able to fully narrate the exact motor sequence involved, and the knowledge shows up as an ability rather than as a statement you can recite. In AI agents, procedural memory has come to mean the same underlying idea applied to workflows: a record of how to successfully carry out a multi-step task, kept separate from the individual facts or events involved, so a proven process can be reused directly instead of being re-derived from scratch every time.

Where the Concept Comes From
Procedural memory is one of the two branches cognitive psychology draws within long-term memory. Declarative memory covers everything you can consciously bring to mind and state outright — including both semantic memory (facts) and episodic memory (events). Procedural memory sits outside that: it’s non-declarative, meaning it’s expressed through performance rather than through recall. This is why “muscle memory” is a reasonable everyday synonym for a lot of what procedural memory covers — riding a bike, typing, playing a learned piece of music — the knowledge is real and reliable, but it isn’t stored as a sentence you could recite; it’s stored as a skill you execute.
The distinction between declarative and procedural memory matters for AI systems for the same reason it matters in cognitive science: they’re stored and retrieved completely differently, and treating a “how to do X” skill the same way as a “what is true about X” fact loses exactly the property that makes each of them useful.
What Procedural Memory Becomes in an AI Agent
In an agent’s memory system, procedural memory refers to accumulated knowledge about how to successfully perform a task — the routines, workflows, and decision sequences an agent has learned work, kept distinct from semantic memory (general facts) and episodic memory (specific past events). If semantic memory tells an agent what’s true, and episodic memory tells it what happened, procedural memory tells it how to do something the right way, based on it having worked before.

This is a genuinely useful third category rather than an academic nicety, because “how to do a task” is a different shape of information than either a fact or an event, and it typically doesn’t belong to any one specific user. A workflow for how to correctly deploy a database migration, or the right sequence of steps for handling a particular kind of support ticket, isn’t a personal fact about any one user and isn’t tied to one specific past incident — it’s a reusable process the agent has learned, applicable the next time a similar task comes up for anyone.
Continuing the Same Example: A Coding Assistant
Picking up the same coding assistant example used to illustrate semantic and episodic memory: the user’s tabs-over-spaces preference was semantic memory, and a specific bug encountered with a specific library version last week was episodic memory. Procedural memory is a third, different kind of thing entirely — it’s the assistant having learned that, for this particular codebase, running the test suite requires first starting a local database container, then running a migration script, then running the tests in a specific order, because doing it out of order reliably fails. That’s not a fact about the user, and it’s not a record of one specific past event — it’s a learned, reusable procedure for successfully accomplishing a recurring task, and the value of storing it is that the agent doesn’t have to rediscover the correct sequence by trial and error every single time the task comes up again.
The Full Picture: Semantic, Episodic, and Procedural Together
Put side by side, the three categories answer three genuinely different questions. Semantic memory answers “what is generally true” — durable facts and preferences that hold regardless of when they were learned. Episodic memory answers “what happened, and when” — specific past events that are naturally time-bound and fade in relevance as they age. Procedural memory answers “how do you actually do this” — a learned sequence of steps whose value comes from being executed correctly, not from being recalled and stated. None of the three substitutes for either of the other two: a pile of facts doesn’t tell you how to carry out a task, a history of past events doesn’t hand you a clean, reusable procedure, and a learned workflow doesn’t carry the specific facts or history that gave rise to it.
Why This Distinction Is a Practical Design Decision
The practical payoff of treating procedural memory as its own category is reuse without re-derivation. An agent that only has semantic and episodic memory has to reconstruct the right approach to a recurring multi-step task by reasoning through it again each time, even if it has effectively solved the exact same problem before — because the “how” was never captured as its own distinct, retrievable thing. An agent with genuine procedural memory can instead retrieve the proven process directly and execute it, the same way a person doesn’t relearn how to type each morning.

This also tends to be memory that’s useful across users rather than scoped to just one, which is a meaningful architectural difference from semantic memory (which is often personal, like a user’s stated preference) and episodic memory (which is inherently tied to a specific interaction). A workflow the agent has learned for handling a category of task is typically valuable to reuse the next time any user or session hits a similar task — which means procedural memory often deserves to be stored and retrieved at a broader, shared scope rather than being isolated per user the way personal facts and conversation history usually are.
Implementing This in a Vector Database
Concretely, procedural memories are stored the same mechanical way as the other memory types — as embeddings for retrieval by similarity — but kept in their own collection and, notably, without being tied to a specific user, since a learned workflow is typically meant to be reusable across users and sessions rather than private to one. Here’s what adding that third collection looks like, extending the same setup used for semantic and episodic memory in Weaviate:
from weaviate.classes.config import Configure, Property, DataType
# Procedural memory: reusable workflows, not tied to one user or one event
client.collections.create(
name="ProceduralMemory",
properties=[
Property(name="task_description", data_type=DataType.TEXT),
Property(name="steps", data_type=DataType.TEXT),
Property(name="times_reused", data_type=DataType.INT, skip_vectorization=True),
],
vector_config=Configure.Vectors.text2vec_weaviate(source_properties=["task_description"]),
)
procedural = client.collections.use("ProceduralMemory")
# Storing a learned workflow once it's proven to work
procedural.data.insert({
"task_description": "running the test suite for this project",
"steps": "1. start the local database container\n2. run the migration script\n3. run tests in this exact order",
"times_reused": 0,
})
# Retrieving the relevant procedure for a new but similar task
result = procedural.query.near_text(
query="how do I run the tests for this repo",
limit=1,
)
Notice there’s no user or session scoping here at all, unlike the semantic and episodic collections from before — that absence is deliberate, since the whole point of procedural memory is that a proven workflow is reusable knowledge, not a private fact or a personal history. The `times_reused` field is a natural addition too: unlike episodic memory, which fades in relevance with age, a procedure that keeps getting successfully reused is a signal the agent should trust and retrieve more readily, not less.
Why It Matters
Procedural memory completes the picture that semantic and episodic memory only partially cover. Facts and events are necessary, but they’re not sufficient for an agent that needs to reliably execute multi-step tasks over and over — without a dedicated place to store “the way this gets done correctly,” an agent either has to rediscover the right approach every time or, worse, quietly repeats past mistakes because the lesson from a previous failure was never captured as a reusable process in the first place. Treating procedural memory as its own category, separate from facts and separate from history, is what lets an agent actually get better at doing things over time rather than only getting better at knowing things.