engram@1.2.3

CAUTION· static only

Publisher 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.

Registry ClawHubPublisher wstienstra · publishing for 53 daysInstalls 541Last detonated 15 h ago

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 only
t+CategoryObserved action

This 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

MEDIUM
Python subprocess execution detectedengine/engram-battery.py:133 · Python subprocess execution detectedsubprocess.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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-battery.py:134 · Python subprocess execution detectedarm = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-sleep.py:399 · Python subprocess execution detectedout = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedengine/engram.py:5549 · Python subprocess execution detectedr = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-seed-battery.py:64 · Python subprocess execution detectedr = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-migrate.py:362 · Python subprocess execution detectedresult2 = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-battery.py:213 · Python subprocess execution detectedr = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-uninstall.py:127 · Python subprocess execution detectedproc = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-sleep.py:478 · Python subprocess execution detectedr = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-battery.py:157 · Python subprocess execution detectedsubprocess.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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-battery.py:117 · Python subprocess execution detectedr = subprocess.run(BQ + ['msgctx', message],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-rewire.py:186 · Python subprocess execution detectedproc = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-sleep.py:691 · Python subprocess execution detectedr = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-maintenance.py:74 · Python subprocess execution detectedsubprocess.run(cmd, cwd=WORKSPACE)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-migrate.py:347 · Python subprocess execution detectedresult = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-rewire.py:176 · Python subprocess execution detectedresult = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-maintenance.py:71 · Python subprocess execution detectedresult = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-uninstall.py:107 · Python subprocess execution detectedresult = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram-sleep.py:870 · Python subprocess execution detectedr = subprocess.run([sys.executable, BACKUP_CLI],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedengine/engram.py:5747 · Python subprocess execution detectedresult = 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.
AST05
LOW
Instructs the agent to modify its persistent memory or instruction filesREADME.md:88 · Instructs the agent to modify its persistent memory or instruction files · informational: not an instruction filepython3 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.
AST01
MEDIUM
File permission modification commandinstall.sh:140 · File permission modification command — agent changes file ownership/permissionschmod +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.
AST05
LOW
Instructs the agent to modify its persistent memory or instruction filesinstall.sh:213 · Instructs the agent to modify its persistent memory or instruction files · informational: not an instruction file4. 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.
AST01
MEDIUM
Python subprocess execution detectedengine/engram.py:6721 · Python subprocess execution detectedresult = 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.
AST05
MEDIUM
Python subprocess execution detectedengine/engram.py:5766 · Python subprocess execution detectedresult = 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.
AST05
LOW
Instructs the agent to modify its persistent memory or instruction filesengine/engram-rewire.py:205 · Instructs the agent to modify its persistent memory or instruction files · informational: not an instruction fileprint("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.
AST01
LOW
Instructs the agent to modify its persistent memory or instruction filesengine/engram-rewire.py:225 · Instructs the agent to modify its persistent memory or instruction files · informational: not an instruction file# 3. Update AGENTS.mdFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.
AST01
LOW
Instructs the agent to modify its persistent memory or instruction filesengine/engram-rewire.py:119 · Instructs the agent to modify its persistent memory or instruction files · informational: not an instruction file"""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.
AST01

Cost to the agent

Instructions loaded
≈2,949 tok
1 file · 24 in bundle

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%
  1. 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.
  2. Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
  3. File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.
Publish a new version to ClawHub, then queue it here. Not your skill? Claim the handle to get verdict changes by email.Claim wstienstraPropose a patch to the maintainer