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 skills add EliasOulkadi/shokunin --skill memorygit clone --depth 1 https://github.com/EliasOulkadi/shokuninWrote 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/skills/eliasoulkadi/shokunin/memory)<a href="https://agentmods.dev/skills/eliasoulkadi/shokunin/memory"><img src="https://agentmods.dev/badge/skills/eliasoulkadi/shokunin/memory/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/eliasoulkadi/shokunin/memory"><img src="https://agentmods.dev/badge/skills/eliasoulkadi/shokunin/memory.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium Rogue Agent · line 31 Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.Fix: Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.
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.1 | $0.00068 | $0.02111 |
| Opus 5.5 | $0.00027 | $0.00844 |
| Sonnet 5.5 | $0.00014 | $0.00422 |
| Haiku 4.5 | $0.00007 | $0.00211 |
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 2mo 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 — 205 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Memory
Persistent memory across sessions using ChromaDB vector search. Every conversation is stored and retrievable.
How It Works
The memory system uses ChromaDB (local vector database, no server needed) to store conversation context as embeddings. When you start a new session, the agent searches past memory for relevant context.
- Storage:
~/.shokunin/memory/chroma_db/(ChromaDB persistent files) - Sessions:
~/.shokunin/memory/sessions/(markdown summaries per session) - MCP Server:
~/.shokunin/memory/mcp-server.py
Workflow
Step 1: Start memory server (if not running)
The memory MCP server is configured in opencode.json. It starts automatically when OpenCode connects to it.
Step 2: Save context during session
At the end of each significant task, save context:
store_context with:
text: "Summary of what was done, key decisions, code patterns"
tags: ["project-name", "feature", "language"]
project: "project-name"
session_id: "current-session-id"
Step 3: Search past memory at session start
When starting a new session, search for relevant context:
search_context with:
query: "what we discussed about auth"
project: "current-project"
Step 4: Get full session summary
get_session_summary with:
session_id: "session-id"
Automatic Session Save
The agent should automatically:
- At the end of the session, save a summary of key decisions and context
- At the start of a new session, search for relevant past context
- Present relevant past context to the user naturally
Error Handling
| Error | Cause | Fix |
|---|---|---|
| ChromaDB not found | Not installed | pip install chromadb |
| Collection not found | First run | Creates automatically on first store |
| Slow first query | Downloading ONNX model | First run downloads ~79MB. Subsequent runs are instant. |
| Memory not returning results | No data stored yet | Normal on first use. Start by saving something. |
| Embedding model fails to download | Network blocked or proxy required | Set CHROMADB_EMBEDDING_MODEL env var. Fall back to all-MiniLM-L6-v2 which is smaller (~23MB). |
| Duplicate or stale entries flooding results | Auto-save firing too frequently during rapid iteration | Apply 5-second debounce before storing context. Consolidate entries with memory_consolidate_memories periodically. |
| Collection corrupted after crash | Write interrupted during power loss or force-quit | Restore from latest backup in ~/.shokunin/memory/backups/. Run memory-healthcheck.ps1 to verify integrity. |
| Search returns irrelevant results for short queries | Under-2-word queries have poor vector signal | Use 3+ word queries. Include project name, topic, and a descriptive verb phrase. |
| Session ID collision or reuse | Wrapper failed to generate unique ID, or manual copy-paste | Check ~/.shokunin/current-session.json. Run python chroma-helper.py session list to verify uniqueness. |
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.
- 2mo ago First seen · 205 lines · 68 tokens per session scan A 9b14c64bc372
memory is a skill published in the GitHub repository EliasOulkadi/shokunin (112 stars, last pushed 26d ago), licensed MIT. It adds 68 tokens to every session and 2,111 once invoked, about $0.0003 per session on Opus 5.5. 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-30.
Other skills, from other repositories
memory
Persistent, token-efficient project memory. When ON, maintains a .shob/memory/ folder of structured .md files so the full context of the project is NEVER lost across responses, sessions, or context compaction. Uses progressive disclosure — routes through a lightweight INDEX and loads only the files a task needs…
tiered-memory
Three-tier agent memory model (hot/cold/wiki) for 20-55% context reduction per spawn.
frontmcp-extensibility
Use when extending FrontMCP beyond the core SDK by integrating external npm packages, libraries, or third-party services into providers and tools. Covers VectoriaDB for in-memory semantic and vector search (ML-based embeddings or TF-IDF keyword engines, with persistence) and the tamper-evident, hash-chained skill…
memory-audit-pattern-extraction
A method for investigating repeated mistakes by comparing related memories and checking whether an earlier reminder failed. It looks at where the reminder was stored, when it was created, and whether it was strong enough to prevent the mistake.
frontmcp-testing
Use for anything about testing FrontMCP servers: writing or running unit, integration, and E2E tests and reaching the 95%+ coverage bar. Covers Jest setup and coverage gating; unit-testing a ToolContext execute() with mock context, inputs, and Zod schema validation; testing resources and prompts; in-memory testing via…
cortex-consolidate
Run memory maintenance — decay old memories, compress stale content, consolidate episodic memories into semantic knowledge, and run sleep-like replay. Use when the user says 'clean up memories', 'consolidate', 'run maintenance', 'compress old memories', 'memory cleanup', or periodically to keep the memory system…