Case Study

Internal Tool Memory Systems

Persistent memory for internal tools — so context doesn't vanish the moment someone closes a tab.

The problem

Internal tools forget everything between sessions. Decisions get re-litigated. Context lives in someone's head or a lost Slack thread — not in the tool.

The reasoning behind a system is almost never written where the system lives. It's in a thread that scrolled away, a call nobody recorded, a PR comment three refactors deep. The code records what was decided; nothing records why, or which two alternatives were considered and rejected for reasons that still apply. Six months later that gap is indistinguishable from the decision having been arbitrary.

The cost shows up as repetition. The same argument gets had twice because the first outcome left no trace. A fix that took a day to work out gets worked out again by whoever hits it next. A new hire asks why something is the way it is and gets four partial answers, none of them from the tool they're actually using. Documentation is supposed to solve this, but documentation describes the current state — it's written deliberately, at a moment separate from the work, and it goes stale precisely because keeping it fresh is somebody's side task.

None of this is a knowledge-capture problem in the way the phrase is usually meant. The knowledge exists, and it was already written down once, in the moment, by the person who had it. It just landed somewhere with no index, no lifespan, and no relationship to the tool it describes.

The approach

A persistent memory layer that sits alongside internal tools — indexing decisions, context, and past work so anyone on the team can retrieve it later, not just the person who made the original call. It's not a database bolted on after the fact: the tool actively reads from and writes to shared memory as people use it.

The write path is the part that has to be nearly invisible. If capturing context is a separate step someone has to remember, it inherits the same failure mode as documentation. So memory is written from the work itself — a note left in passing, a decision recorded where it was made — rather than from a form filled in afterwards.

The read path is retrieval by meaning rather than by location. Nobody remembers which tool or thread held the answer, so the question is asked in ordinary language and matched against what was captured, with the answer surfaced next to the work it applies to instead of in a separate place someone has to think to check.

Explored through hackathon work on memory-platform internals — design and architecture research, not yet a shipped client deployment.

Written to shared memory
>the retry logic is intentional, please don't revert it
saved
Asked six months later
>why is the retry logic written this way?
intentional — flagged during the queue rewriterecorded in the deploy tool · still current · 2 related entries

Context that would slip away, kept and findable.

What memory is not

Three things this gets mistaken for, and why each one falls short of the job.

Not a wiki

A wiki is written on purpose, separately from the work, by someone who already decided the thing was worth writing down. That filter is exactly what loses the small stuff — the one-line aside that explains an entire subsystem. Memory has to catch what nobody would sit down to write.

Not a search box over Slack

Chat history records everything said, which makes it a record of nothing in particular. Searching it hands back the conversation rather than the conclusion — you still have to read the thread and work out how it ended, assuming it ended at all.

Not just a vector store

Embedding text and querying it is a component, not a product. Without a view of what supersedes what, who said it, and whether it's still true, retrieval returns confident-sounding history and leaves the reader to figure out which parts still hold.

The shape of the system

Five layers. The interesting engineering is in the first two and the last one — the middle is comparatively well-trodden.

Capture
The surfaces where context is actually produced — the tool itself, a note left in passing, a decision made during a review. The hard requirement is that using them can't feel like a separate task, because a separate task is one nobody performs on a bad week.
Extract
Turning raw text into something with a shape: what kind of thing it is (a decision, a constraint, a fix, a preference), what it refers to, who recorded it, and when. Structure here is what makes everything downstream expressible.
Store
Structured fields alongside embeddings. The structure is what lets memory be superseded, scoped, or expired; the embeddings are what let it be found in language nobody anticipated at the time of writing.
Retrieve
Matching a question by meaning, filtered to what the asker is allowed to see, and ranked with recency and supersession taken into account rather than raw similarity alone.
Surface
Putting the result where the work is — inline, at the moment the subject comes up, with a path back to the original context so the reader can judge it instead of trusting it blindly.

The questions we're working through

Memory is easy to describe and hard to get right. These are the design problems the exploration keeps returning to.

01
What is worth keeping
Capture everything and retrieval drowns in noise; capture only what someone flags and you're back to a manual step nobody does. The interesting line is between the two — what looks, at the moment it happens, like something a future person will need.
02
When to write
Memory written at the moment of the decision carries reasoning that memory written afterwards doesn't. But interrupting someone mid-decision to ask them to explain themselves is exactly the friction that kills the habit.
03
How it gets found
People don't remember where an answer lives, so location-based retrieval fails. Semantic search over captured context is closer, but the harder half is surfacing memory unprompted, at the moment it's relevant, without becoming noise.
04
How memory ages
A decision that was correct two years ago and has since been reversed is worse than no memory at all. Anything durable needs a way for entries to be superseded, contradicted, or allowed to decay — not just accumulated.
05
Who can see what
Shared memory crosses the boundaries teams normally rely on. A layer that spans tools inherits every permission model underneath it, and getting that wrong is a data-exposure problem rather than a product one.

What the exploration has shown so far

Retrieval is the cheap half

Semantic search over captured text is well-understood, and a related retrieval pattern already ships in a voice memory tool. The unsolved part sits upstream: getting the right things into memory in the first place, in a form worth retrieving.

Trust is the whole product

A memory layer that is confidently wrong once gets checked twice and then ignored. Which means provenance — who recorded this, when, in what context — matters as much as the content, and anything surfaced has to be traceable back to where it came from.

It has to live where the work is

Memory in a separate destination is documentation with extra steps. The version that seems to hold up is the one embedded in the tools people already have open, reading and writing as a side effect of ordinary use.

What would have to be true to ship it

The bar we'd hold this to before putting it in front of a client team.

01
Survives an uncooperative team
Value has to come out of ordinary use, not out of a convention people are asked to keep. Any design that depends on discipline is a design that quietly decays after the third busy week.
02
Being wrong is visible
Every surfaced memory carries who recorded it, when, and from where — plus a one-action way to mark it stale. A system with no correction path doesn't stay neutral; it accumulates confident errors.
03
Respects the boundaries it crosses
A layer spanning several tools has to inherit their permission models rather than flatten them. Anything less is a data-exposure problem wearing a product's clothes.
04
Cheap to keep
Memory grows forever by default. Storage cost, embedding cost, and retrieval quality all degrade with volume unless consolidation and decay are designed in from the start rather than added once it hurts.

Where this applies

Anywhere a persistent, shared memory layer changes how a team's internal tools behave.

01
Engineering Decision Logs
Why a schema or architecture choice was made, retrievable months later without digging through PR history.
02
Support / Ops Knowledge
How a recurring issue was resolved last time, surfaced automatically instead of re-solved from scratch.
03
Onboarding Context
New team members can ask “why does X work this way” and get the actual historical reasoning, not just current-state docs.
04
Cross-tool Memory
Context captured in one internal tool stays available in another, instead of each tool being an isolated memory island.

Why we keep pulling on this

Every internal tool we build eventually runs into this. The software works; the knowledge about why it works the way it does lives somewhere else. A year in, that gap — not the code — is what slows a team down, and no amount of shipping features closes it.

The same problem shows up in agent work, in a sharper form. An agent without durable memory re-derives its context on every run, which is merely expensive when it gets the answer right and genuinely dangerous when it doesn't. Whatever solves memory for a team's tools is close to what makes an agent useful past a single session, which is why this keeps coming back around rather than staying a side interest.

So it stays an exploration we return to, not a product with a launch date. When it does reach client work, it will most likely arrive as infrastructure inside something else — the reason a tool we built remembers what happened last quarter, rather than a thing sold on its own.

Status — active exploration

Active exploration, not a shipped client product — backed by hands-on work on memory-system internals. A related retrieval pattern already ships in a voice memory tool, where spoken thoughts become semantically searchable later.

We have worked with the People across the globe

EUROPE
USA
JAPAN
INDIA
PHILIPPINES
Let's Talk