Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add RohiRIK/OpenLtm/plugin install openltmWrote 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/commands/rohirik/openltm/admin)<a href="https://agentmods.dev/commands/rohirik/openltm/admin"><img src="https://agentmods.dev/badge/commands/rohirik/openltm/admin/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/commands/rohirik/openltm/admin"><img src="https://agentmods.dev/badge/commands/rohirik/openltm/admin.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.00038 | $0.01381 |
| Opus 5.5 | $0.00015 | $0.00552 |
| Sonnet 5.5 | $0.00008 | $0.00276 |
| Haiku 4.5 | $0.00004 | $0.00138 |
Grade A, and why
admin 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 5d 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 — 128 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Arguments: $ARGUMENTS
Parse the first word of the arguments as <subcommand>. Pass remaining words as <args>.
If no subcommand given, show:
Usage: /openltm:admin <subcommand>
migrate [status|up|down|reset|--legacy] — schema migrations + legacy DB detection
scan [--project X] [--dry-run] — scan memories for secrets and redact
audit [--memory-id N] [--op <op>] [--session <id>] [--since <iso>] [--limit N]
— query the memory write audit log
migrate
Manage versioned LTM schema migrations and legacy DB path migration.
| Arg | Action |
|---|---|
status (default) |
Show applied and pending migrations + check for legacy DB |
up |
Apply next pending migration |
down |
Rollback last applied migration |
reset |
Rollback ALL (requires confirmation) |
--legacy |
Trigger legacy ~/.claude/memory/openltm.db → plugin data migration |
bun run "${CLAUDE_PLUGIN_ROOT}/src/migrations.ts" --<arg>
For reset: ask user to confirm with "yes" before running.
After schema migration check, also detect legacy DB:
[ -f "$HOME/.claude/memory/openltm.db" ] && [ ! -f "${CLAUDE_PLUGIN_DATA}/openltm.db" ] && echo "⚠ Legacy DB found at ~/.claude/memory/openltm.db. Run /openltm:admin migrate --legacy to migrate it."
When --legacy is the argument:
bun "${CLAUDE_PLUGIN_ROOT}/scripts/migrate-db.ts"
scan
⚠ Note: new memories are auto-scrubbed on write (via
db.ts). This scans existing memories only.
bun --eval "
import { Database } from 'bun:sqlite';
await (async () => {
const { scrubSecrets } = await import('${CLAUDE_PLUGIN_ROOT}/packages/openltm-core/src/secretsScrubber.ts');
// bun --eval: argv[0] is bun; the rest are this command's arguments.
const args = process.argv.slice(1);
const dryRun = args.includes('--dry-run');
const p = args.indexOf('--project');
const project = p >= 0 ? args[p + 1] ?? null : null;
const dbPath = process.env.LTM_DB_PATH || '${CLAUDE_PLUGIN_DATA}/openltm.db';
if (!(await import('fs')).existsSync(dbPath)) { console.log('No database at ' + dbPath); return; }
const db = new Database(dbPath);
const where = project ? \"WHERE status='active' AND project_scope=?\" : \"WHERE status='active'\";
const rows = db.query('SELECT id, content FROM memories ' + where).all(...(project ? [project] : []));
let scanned = 0, redacted = 0;
const typeCounts = {};
for (const row of rows) {
scanned++;
const { scrubbed, redactions } = scrubSecrets(row.content);
if (redactions.length) {
redacted++;
redactions.forEach(r => typeCounts[r] = (typeCounts[r] ?? 0) + 1);
if (!dryRun) db.run('UPDATE memories SET content=? WHERE id=?', [scrubbed, row.id]);
else console.log('[dry-run] Memory ' + row.id + ' would redact: ' + redactions.join(', '));
}
}
const typeStr = Object.entries(typeCounts).map(([k,v]) => k+'('+v+')').join(', ');
console.log('Scanned ' + scanned + ', redacted ' + redacted + (typeStr ? ' ('+typeStr+')' : '') + (dryRun ? ' [dry-run]' : ''));
})();
" -- $ARGUMENTS
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.
- 5d ago Changed · -1 lines · +11 tokens per session ddeaf5c9f1ce
- 1mo ago First seen · 129 lines · 27 tokens per session scan A 9a14810a8998
admin is a command published in the GitHub repository RohiRIK/OpenLtm (28 stars, last pushed yesterday), licensed MIT. It adds 38 tokens to every session and 1,381 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-30.
Other commands, from other repositories
help
Get help with EverMem plugin setup and available commands.
audit
Audit .flow/memory/ entries against the current codebase — Keep / Update / Consolidate / Replace / Delete / Harden per entry.
memory-migrate
Migrate legacy .flow/memory/{pitfalls,conventions,decisions}.md flat files into the categorized YAML schema — host agent classifies each entry directly.
prime
Prime context for fresh session: /prime [task hint] [--quick] [--verbose].
warden-select
Measure pending token-warden candidate rules for an agent on the golden suite, evict or activate them, and recompile the agent's memory.
update
Sync tasks and refresh memory from your current activity.