Inspiration
The recent progression of agentic AI has remined me a lot of the 'Big Brother' from the novel 1987, insomuch as agents are increasingly able to remember our preferences, habits, and past interactions. That memory makes them more helpful, but it also introduces an invisible source of influence that was previously unquantifiable: a remembered preference can change what an agent decides to do.
Memory systems are able to display what an AI remembers, but fail to show how and to what extent a specific memory actually changed an action.
What it does
ShadowRecall is a pre-execution memory-influence debugger for AI agents. It compares two controlled versions of the same planned action:
- A remembering agent, which can access relevant stored memories.
- An amnesiac twin, which receives the same instruction with memory deliberately withheld
ShadowRecall compares their proposed actions field by field so that users can contrast them easily. If memory changes details such as a meeting's date, time, location, recipient, or task priority, the interface highlights the exact differences.
It then performs a counterfactual attribution test by removing candidate memories one at a time and generating the plan again. This method pinpoints the memory that the algorithm deems most likely responsible for the changed field and assigns it an influence score. You can think of this as a SHAP score in predictive modelling, where the feature is weighed based on how much it influenced the final result in comparison to other features. ShadowRecall pauses, thereafter, at a human gate, where it presents the evidence and prompts the user to approve or reject the proposed plan.
How we built it
ShadowRecall was built with Next.js, React, TypeScript and the Next.js App Router. I utilized Backboard for live memory storage, and used the cloud platform Vercel to deploy the app's website. The analysis pipeline follows this sequence:
- Acccepts a natural-language instruction
- Retrieves relevant memories from Backboard
- Creates a plan with the retrieved memory available
- Creates a control plan with memory withheld
- Computes a field-level differenec between the two actions
- Removes each candidate memory and reruns the planner
- Measures which removed memory eliminates the observed difference
- Presents the results for human review and interpretation
Zod validates the structured action data while Vitest covers teh planner, logic and demo. The application includes a live Backboard mode and a reproducible guided-demo mode.
Challenges we ran into
Our first architecture asked Backboard's hosted model to return a structured JSON action. On the contrary, it repeatedly displayed "Model returned no structured action". At first I believed it to be a parsing problem. So, I expanded the parser to handle direct objects, nested message content, ordinary JSON strings, and JSON embedded inside other text. The error persisted after all these changes, so I added a temporary debug mode that bypassed the error wrapper and surfaced the full Backboard API payload in both the browser console and a developer panel in the UI. This revelaed that the core issue was that the available Backboard API credit was reserved for Memory and RAG, and could not cover hosted LLM chat. Since I didn't have the means to pay for extra tokens, I redesigned the architecture by redirecting the live memory storage and semantic retrieval to be handled by Backboard. A simple logic planner turns instructions and retrieved memories into structured actions. This preserved a genuine Backboard integration while making the demonstration free, reliable and reproducible.
Accomplishments that we're proud of
I am proud that I was able to successfully deploy ShadowRecall, rather than only a concept. The live application does what it is attended to do, and though the UI isn't the prettiest, it definitely does a good job in doing what it's designed to: compare two "twin" agents. The project itself has nine passing automated tests covering its planner, field-difference engine, and demonstration logic. It also passes TypeScript validation and its production build, and its production dependencies report no known vulnerabilities through a npm audit. Most importantly, ShadowRecall turns what is usually an abstract, theoretical concern in AI safety into something concrete and observable. Users are now able to take the same instruction, compare two controlled plans side by side, inspect the exact field that change, and directly trace those differences back to the specific memory that caused them. In a time where AI seems to be growing in an almost out of control manner, this returns a feeling of security to LLM users.
What we learned
I learned that AI memory is something that must be considered as a casual input to an agent's decisions, not merely as background context. I realized that in the future, this feature of AI agents could pose as a genuine security threat, and shows the need for AI education in our school systems: from primary to secondary.
A list of sorted memories is not a sufficient audit trail. TO understand the effect of memory, a system needs a control condition, structured comparisons, and overall a much more empirical way of testing it's impact. This project, therefore, definitely opens doors into future research into how memory influences behavior in AI agents.
I also learned the value of separating system components. My ability to separate system components made ShadowRecall easier to test, debug and adapt when external service constraints appeared.
What's next for ShadowRecall
The next step is to expand ShadowRecall into a more diverse market of tool-based agent actions, like messages, tasks, purchases, and document changes. The long-term goal is for memory auditing to become a standard safety layer for autonomous agents: before an AI acts, users should be able to understand not only what it intends to do, but why its memory led it there.
Built With
- backboard.io
- css3
- github
- next.js
- node.js
- react
- semantic-search
- typescript
- vercel
- vitest
- zod
Log in or sign up for Devpost to join the conversation.