engram@1.2.3
CAUTION· static onlyPublisher claims: "Local associative memory graph for an OpenClaw workspace, shipped as a set of CLI scripts: engram.py (store/recall/msgctx/task ledger over SQLite+FTS+embeddings), engram-migrate.py (markdown to nodes), engram-serve.py and bq.py (optional warm daemon over a Unix socket), embeddings.py (ONNX e5 vectors), engram-backup.py (nightly SQLite backup with retention), engram-sleep.py (nightly consolidation, optional local-Ollama distillation), engram-maintenance.py and engram-hygiene.py (dedupe/orphan/archive tiering), engram-aliases.py (alias curation), engram-rewire.py (opt-in: slims MEMORY.md, adds marked cron lines, asks first), engram-uninstall.py (full revert). Task evidence strings run through the shell. No network calls except to localhost Ollama, and only if you enable it." Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Is [email protected] safe to install?
KillerSkills analysed it statically (a sandbox run is pending) on 2026-11-13 and scored it 66/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
subprocess.run(BQ + ['delete', '--name', INTENTION_NODE_NAME], capture_output=True, text=True, cwd=WS)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.arm = subprocess.run(BQ + ['intend', INTENTION_TRIGGER, INTENTION_ACTION],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.out = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.r = subprocess.run(cmd, shell=True, capture_output=True, timeout=timeout)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.r = subprocess.run(cmd, capture_output=True, text=True, timeout=60,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result2 = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.r = subprocess.run(BQ + ['recall', query, '--compact', '--budget', '400'] + list(flags),Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.proc = subprocess.run(["crontab", "-"], input=new_crontab, capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.r = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(BQ + ['delete', '--name', INTENTION_NODE_NAME], capture_output=True, text=True, cwd=WS)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.r = subprocess.run(BQ + ['msgctx', message],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.proc = subprocess.run(["crontab", "-"], input=new_crontab, capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.r = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(cmd, cwd=WORKSPACE)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(["crontab", "-l"], capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(cmd, capture_output=True, text=True, cwd=WORKSPACE)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(["crontab", "-l"], capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.r = subprocess.run([sys.executable, BACKUP_CLI],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(cmd, cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))))Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.python3 engram/engram-rewire.py # optional: slim MEMORY.md, add cronsFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.chmod +x "$ENGRAM_DIR"/*.py "$SCRIPTS_DIR"/engram-*.py 2>/dev/null || trueFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.4. Optional — let Engram slim MEMORY.md and add its crons:Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.result = subprocess.run(cmd, cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))))Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(cmd, cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))))Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.print("add an Engram section to AGENTS.md, and append 3 marked lines to your crontab.")Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.# 3. Update AGENTS.mdFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct."""Update AGENTS.md startup section to reference engram commands."""Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
14 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim wstienstra: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.