Borrowing it
Nothing to install: this file belongs to tostechbr/memoryClaw. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/tostechbr/memoryClaw/main/.claude/skills/per-user-isolation/SKILL.mdgit clone --depth 1 https://github.com/tostechbr/memoryClawWrote 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/tostechbr/memoryclaw/per-user-isolation)<a href="https://agentmods.dev/skills/tostechbr/memoryclaw/per-user-isolation"><img src="https://agentmods.dev/badge/skills/tostechbr/memoryclaw/per-user-isolation/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/tostechbr/memoryclaw/per-user-isolation"><img src="https://agentmods.dev/badge/skills/tostechbr/memoryclaw/per-user-isolation.svg" alt="Reviewed on agentmods" width="80" 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.1 | $0.00042 | $0.01329 |
| Opus 5.5 | $0.00017 | $0.00532 |
| Sonnet 5.5 | $0.00008 | $0.00266 |
| Haiku 4.5 | $0.00004 | $0.00133 |
Grade A, and why
per-user-isolation 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 — 177 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Per-User Isolation Patterns
Target Directory Structure (Sprint 0)
{dataDir}/
└── users/
├── default/ <- no userId given = backward compatible
│ ├── memory.db <- isolated SQLite DB
│ ├── MEMORY.md <- main memory file
│ ├── context.json <- working memory (scratchpad)
│ └── memory/
│ └── *.md
├── user_123/
│ ├── memory.db
│ ├── MEMORY.md
│ ├── context.json
│ └── memory/*.md
└── 5511999999999/ <- WhatsApp phone as userId
└── ...
Storage Layer Change (storage.ts)
Current (flat):
const dbName = `memory_${config.userId}.db`;
this.dbPath = path.join(ensureDir(config.dataDir), dbName);
// Result: {dataDir}/memory_mcp-user.db
Target (per-user):
const userDir = path.join(config.dataDir, "users", config.userId);
ensureDir(userDir);
this.dbPath = path.join(userDir, "memory.db");
// Result: {dataDir}/users/user_123/memory.db
Manager Layer Change (manager.ts)
Current (shared workspace):
const memoryFile = path.join(this.config.workspaceDir, "MEMORY.md");
const memoryDir = path.join(this.config.workspaceDir, "memory");
Target (per-user workspace):
The workspaceDir passed to MemoryManager should already be the user-specific dir.
Responsibility: the MCP server constructs the per-user workspaceDir before creating MemoryManager.
// In mcp-server getManager(userId):
const userWorkspaceDir = path.join(this.baseWorkspaceDir, "users", userId);
await fs.mkdir(userWorkspaceDir, { recursive: true });
await fs.mkdir(path.join(userWorkspaceDir, "memory"), { recursive: true });
const manager = new MemoryManager({
dataDir: this.dataDir,
userId,
workspaceDir: userWorkspaceDir, // user-specific workspace
memory: this.memoryConfig,
});
Working Memory Interface (working-memory.ts)
// packages/core/src/memory/working-memory.ts
export interface WorkingMemory {
session_id?: string;
active_topic?: string;
last_interaction?: string; // ISO 8601
pending_decisions?: string[];
entities_seen?: string[];
updated_at: string; // ISO 8601
}
const DEFAULT_WORKING_MEMORY: WorkingMemory = {
updated_at: new Date().toISOString(),
};
export async function getWorkingMemory(workspaceDir: string): Promise<WorkingMemory> {
const contextPath = path.join(workspaceDir, "context.json");
try {
const content = await fs.readFile(contextPath, "utf-8");
return JSON.parse(content) as WorkingMemory;
} catch {
return { ...DEFAULT_WORKING_MEMORY };
}
}
export async function setWorkingMemory(
workspaceDir: string,
data: Partial<WorkingMemory>
): Promise<WorkingMemory> {
const current = await getWorkingMemory(workspaceDir);
const updated: WorkingMemory = {
...current,
...data,
updated_at: new Date().toISOString(),
};
const contextPath = path.join(workspaceDir, "context.json");
await fs.writeFile(contextPath, JSON.stringify(updated, null, 2), "utf-8");
return updated;
}
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 · 177 lines · 42 tokens per session scan A 58cb80d9c317
per-user-isolation is a skill published in the GitHub repository tostechbr/memoryClaw (8 stars, last pushed 8mo ago), licensed MIT. It adds 42 tokens to every session and 1,329 once invoked, about $0.0002 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-31.
per-user-isolation compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| per-user-isolationtostechbr/memoryClaw | Skill | 8 | 8mo ago | MIT | A | 42 | Claude Code |
| harness-creatorwalkinglabs/learn-harness-engineering | Skill | 23k | 15d ago | MIT | A | 142 | Codex |
| dev-browserMemTensor/MemOS | Skill | 12k | 2d ago | Apache-2.0 | A | 84 | Claude Code, Codex |
| awm-rsi-toolkitPrism-Shadow/penguin-harness | Skill | 3.2k | yesterday | Apache-2.0 | A | 58 | Claude Code, Codex |
| browserwing-adminMemTensor/MemOS | Skill | 12k | 2d ago | Apache-2.0 | B | 47 | Claude Code, Codex |
| computer-historyMemTensor/memmy-agent | Skill | 2.2k | yesterday | MIT | A | 42 | Claude Code, Codex |
| update-setupMemTensor/memmy-agent | Skill | 2.2k | yesterday | MIT | A | 0 | Claude Code, Codex |