Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/choria-io/fisk-ai/memorygit clone --depth 1 https://github.com/choria-io/fisk-aiWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/choria-io/fisk-ai/memory)<a href="https://agentmods.dev/agents/choria-io/fisk-ai/memory"><img src="https://agentmods.dev/badge/agents/choria-io/fisk-ai/memory.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00000 | $0.01642 |
| Opus 5 | $0.00000 | $0.00821 |
| Sonnet 5 | $0.00000 | $0.00328 |
| Haiku 4.5 | $0.00000 | $0.00164 |
Grade A, and why
memory scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 179 lines — stays where its author put it; the contents beside it link to each section on GitHub.
+++ title = "Memory" description = "a key/value store the model keeps across runs" toc = true weight = 70 +++
Memory gives the model a small key/value store that persists across runs, so it can keep durable notes (a layout it worked out, a convention, the outcome of an investigation) and pick them up next time rather than rediscovering them. It is opt-in and agent-mode only; like the human-in-the-loop tools it is never exposed over MCP.
[!info] Warning Memory is shared state. Treat what a memory contains as data the model saved, not as trusted instructions.
Enable it under harness.memory. The backend field selects where memories are
kept; it defaults to file, so the minimal configuration is just:
harness:
memory:
enabled: true
When enabled the model is offered four tools: memory_list (keys and their
descriptions), memory_read (one memory by key), memory_write (save a memory
with a key, a one-line description, and a body), and memory_delete. A key uses
letters, digits and ., _, = or - (no slashes or spaces), which keeps it
valid both as a filename and as a NATS KV key. memory_write creates by default
and refuses to overwrite an existing key unless called with overwrite: true, so
the model does not silently clobber a note; the create still fails cleanly if two
writers race for the same new key.
read_only: true serves memory_list and memory_read and withholds the other two, for a run that should use what
earlier runs saved without changing it. The store itself is unaffected, so anything else writing to it still does.
At the start of a run the stored keys and descriptions are injected into the
system prompt as an index so the model knows what it has saved; memory_list is
the live view during the run. Turn the index off with no_index: true.
A memory body is capped at 64 KB and a store holds at most 1024 entries. Both limits are shared by every backend, and a write that would exceed them fails cleanly. The on-disk format is shared too, so a value written by one backend migrates to another unchanged.
fisk info shows a Memory section with the resolved backend and, for the
jetstream backend, the bucket, NATS context and key prefix, so you can confirm
where memory is stored without starting a run.
Two backends ship today: file (the default) and jetstream {{% badge style="primary" title="Version" %}}0.0.3{{% /badge %}}.
File backend
The file backend keeps each memory as a markdown file named for its key under
the configured directory, which defaults to memory/<identity>.
harness:
memory:
enabled: true
backend: file
options:
directory: memory
A relative directory, including that default, resolves under the store base when a
deployment sets one and against the working directory otherwise; an absolute
directory is used as-is. The identity is the agent's name, set with the
identity configuration field and defaulting to the application binary's base
name; the configuration reference covers it in detail. Point two
agents at the same directory and they share a memory; leave the default and each
agent keeps its own.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 179 lines · 0 tokens per session scan A 13db408d6833
memory is an agent published in the GitHub repository choria-io/fisk-ai (5 stars, last pushed 3d ago), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 1,642 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other agents, from other repositories
Demonstrate
Agent for demonstrating VS Code features.
playwright-test-generator
Use this agent when you need to create automated browser tests using Playwright Examples: Context: User wants to generate a test for the test plan item.
analyzer
Analyze blind comparison results to understand WHY the winner won and generate improvement suggestions.
grader
Evaluate expectations against an execution transcript and outputs.
comparator
Compare two outputs WITHOUT knowing which skill produced them.
.NET-Notebook-Migration-Agent
Expert .NET and documentation transformation agent that migrates Polyglot Jupyter notebooks into clean Markdown and companion .NET sample code.