Scan Report
22 /100
local-self-healing-machine-learning
A fully local ML engine that learns from agent runtime history, detects errors via embeddings or regex, and autonomously evolves fix strategies with auditable GEP protocol.
A legitimate self-healing ML engine with minor documentation gaps: filesystem WRITE and shell execution are used for core functionality (git operations, code evolution, skill auto-heal) but are not explicitly declared in SKILL.md's capability section. Remote Ollama install via curl|bash is documented as an optional setup step. No actual malicious behavior observed.
Safe to install
Add an explicit 'Declared Capabilities' section to SKILL.md listing filesystem:WRITE (for code evolution and skill auto-heal), shell:WRITE (for git/npm operations), and network:READ (localhost Ollama). Clarify that hardcoded test credentials in test/ are test fixtures for the sanitize module. Consider pinning dotenv version.
Findings 7 items
| Severity | Finding | Location |
|---|---|---|
| Medium | Undeclared filesystem WRITE capability Doc Mismatch | src/gep/skillDistiller.js:89 |
| Medium | Undeclared shell:WRITE capability via execSync Doc Mismatch | src/ops/self_repair.js:9 |
| Medium | Remote script execution via curl|bash documented in SKILL.md Supply Chain | SKILL.md:43 |
| Low | Unpinned dotenv dependency Supply Chain | package.json:19 |
| Low | Skill auto-heal runs npm install in skills directory Priv Escalation | src/ops/skills_monitor.js:67 |
| Info | Reads session logs from ~/.openclaw/agents/ Sensitive Access | src/evolve.js:65 |
| Info | SKILL.md tagline overstates 'zero network calls' Doc Mismatch | SKILL.md:17 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | NONE | WRITE | ✗ Violation | src/ops/skills_monitor.js:89 writes SKILL.md stubs; src/gep/skillDistiller.js wr… |
| Shell | NONE | WRITE | ✗ Violation | src/ops/self_repair.js:9 execSync('git rebase --abort'); src/ops/skills_monitor.… |
| Network | READ | READ | ✓ Aligned | src/ml/embeddings.js:88 POSTs to http://localhost:11434 (Ollama). Declared in SK… |
| Environment | NONE | READ | ✓ Aligned | index.js:7 dotenv config; src/evolve.js:36 process.env reads for EVOLVE_STRATEGY… |
| Skill Invoke | NONE | READ | ✓ Aligned | src/ops/skills_monitor.js:31 reads SKILL.md and package.json from skills directo… |
| Clipboard | NONE | NONE | — | No clipboard access found |
| Browser | NONE | NONE | — | No browser access; dashboard serves local HTML only |
| Database | NONE | NONE | — | No database access found; uses local JSON/JSONL files |
6 Critical 10 findings
Critical Dangerous Command 危险 Shell 命令
curl -fsSL https://ollama.com/install.sh | sh SKILL.md:43 Critical API Key 硬编码 API 密钥
sk-abcdefghijklmnopqrstuvwxyz test/sanitize.test.js:10 Critical API Key 硬编码 API 密钥
ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx test/sanitize.test.js:19 Critical API Key 硬编码 API 密钥
gho_abcdefghijklmnopqrstuvwxyz1234567890 test/sanitize.test.js:21 Critical API Key 硬编码 API 密钥
AKIAIOSFODNN7EXAMPLE test/sanitize.test.js:29 Critical Dangerous Command 危险 Shell 命令
rm -rf / test/skillDistiller.test.js:210 Medium External URL 外部 URL
https://mastermindshq.business SKILL.md:5 Medium External URL 外部 URL
https://ollama.com/install.sh SKILL.md:43 Info Email 邮箱地址
[email protected] test/sanitize.test.js:57 Info Email 邮箱地址
[email protected] test/sanitize.test.js:74 File Tree
71 files · 489.3 KB · 13151 lines JavaScript 66f · 12525L
HTML 1f · 365L
Markdown 2f · 206L
JSON 2f · 55L
├─
▾
dashboard
│ ├─
index.html
HTML
│ └─
server.js
JavaScript
├─
▾
memory
│ └─
knowledge.json
JSON
├─
▾
scripts
│ ├─
analyze_by_skill.js
JavaScript
│ ├─
extract_log.js
JavaScript
│ ├─
generate_history.js
JavaScript
│ ├─
gep_append_event.js
JavaScript
│ ├─
gep_personality_report.js
JavaScript
│ ├─
human_report.js
JavaScript
│ ├─
suggest_version.js
JavaScript
│ └─
validate-modules.js
JavaScript
├─
▾
src
│ ├─
▾
gep
│ │ ├─
a2a.js
JavaScript
│ │ ├─
a2aProtocol.js
JavaScript
│ │ ├─
analyzer.js
JavaScript
│ │ ├─
assetCallLog.js
JavaScript
│ │ ├─
assets.js
JavaScript
│ │ ├─
assetStore.js
JavaScript
│ │ ├─
bridge.js
JavaScript
│ │ ├─
candidates.js
JavaScript
│ │ ├─
contentHash.js
JavaScript
│ │ ├─
deviceId.js
JavaScript
│ │ ├─
envFingerprint.js
JavaScript
│ │ ├─
hubSearch.js
JavaScript
│ │ ├─
llmReview.js
JavaScript
│ │ ├─
memoryGraph.js
JavaScript
│ │ ├─
memoryGraphAdapter.js
JavaScript
│ │ ├─
mutation.js
JavaScript
│ │ ├─
narrativeMemory.js
JavaScript
│ │ ├─
paths.js
JavaScript
│ │ ├─
personality.js
JavaScript
│ │ ├─
prompt.js
JavaScript
│ │ ├─
questionGenerator.js
JavaScript
│ │ ├─
reflection.js
JavaScript
│ │ ├─
sanitize.js
JavaScript
│ │ ├─
selector.js
JavaScript
│ │ ├─
signals.js
JavaScript
│ │ ├─
skillDistiller.js
JavaScript
│ │ ├─
solidify.js
JavaScript
│ │ ├─
strategy.js
JavaScript
│ │ ├─
taskReceiver.js
JavaScript
│ │ └─
validationReport.js
JavaScript
│ ├─
▾
ml
│ │ ├─
embeddings.js
JavaScript
│ │ ├─
errorClassifier.js
JavaScript
│ │ ├─
feedbackLoop.js
JavaScript
│ │ ├─
knowledgeBase.js
JavaScript
│ │ ├─
predictor.js
JavaScript
│ │ └─
trainer.js
JavaScript
│ ├─
▾
ops
│ │ ├─
cleanup.js
JavaScript
│ │ ├─
commentary.js
JavaScript
│ │ ├─
index.js
JavaScript
│ │ ├─
innovation.js
JavaScript
│ │ ├─
self_repair.js
JavaScript
│ │ ├─
skills_monitor.js
JavaScript
│ │ └─
trigger.js
JavaScript
│ └─
evolve.js
JavaScript
├─
▾
test
│ ├─
contentHash.test.js
JavaScript
│ ├─
embeddings.test.js
JavaScript
│ ├─
feedbackLoop.test.js
JavaScript
│ ├─
knowledgeBase.test.js
JavaScript
│ ├─
mutation.test.js
JavaScript
│ ├─
predictor.test.js
JavaScript
│ ├─
sanitize.test.js
JavaScript
│ ├─
selector.test.js
JavaScript
│ ├─
signals.test.js
JavaScript
│ ├─
skillDistiller.test.js
JavaScript
│ ├─
strategy.test.js
JavaScript
│ └─
validationReport.test.js
JavaScript
├─
index.js
JavaScript
├─
package.json
JSON
├─
SECURITY.md
Markdown
└─
SKILL.md
Markdown
Dependencies 1 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
dotenv | ^16.4.7 | npm | No | Version not pinned (uses caret range) |
Security Positives
✓ No actual credential theft or data exfiltration observed — sanitize.js actively redacts API keys, tokens, emails, and private keys from capsule payloads before any potential broadcast
✓ Comprehensive safety mechanisms: blast radius limits, ethics committee, circuit breakers, rollback on failure, LLM review gate before skill distillation
✓ Auto-update is disabled by default and requires explicit opt-in via openclaw.json — supply chain risk is acknowledged and mitigated
✓ Skill distiller strips dangerous validation commands (rm -rf /, shell expansions) before execution — rm -rf / in tests is a test case for this safety feature, not a live vulnerability
✓ Hardcoded API keys in test/sanitize.test.js are clearly fake test fixtures (sk-abcdefgh..., ghp_xxx..., AKIAIOSFODNN7EXAMPLE) used for regression testing of the redactString function
✓ Hub search, task receiver, and A2A HTTP transport are all stubbed out — local-only build confirmed by code
✓ Device ID is a randomly generated UUID stored locally, not a hardware fingerprint
✓ Environment fingerprint collects only node version, platform, and arch — no MAC addresses, hostnames, or hardware identifiers
✓ Session scope isolation prevents cross-channel/cross-project memory contamination via EVOLVER_SESSION_SCOPE
✓ EVOLVE_ALLOW_SELF_MODIFY is off by default with explicit warning 'Not recommended'
✓ No base64-encoded execution, no eval(), no obfuscation, no anti-analysis techniques