Back to skill

Security audit

Self Improving 1.1.3

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-built for local memory, but it can automatically save and reuse corrections and preferences across sessions without a clear first-use consent step.

Review this carefully before installing. It is not showing network exfiltration or malicious code, but it is designed to create and maintain local cross-session memory. Use it only if you are comfortable with corrections, preferences, and some project context being saved under ~/self-improving/, and avoid letting it store secrets, sensitive personal data, or third-party information. Prefer a strict or passive mode and verify deletion/export behavior before relying on 'forget everything.'

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T02 · Agent Memory Poisoning

Warning
Location
operations.md:23
Finding
Persistent behavioral rules may be stored without explicit cross-session consent<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:47-70`, `operations.md:23-35`, `learning.md:3-12`, `boundaries.md:52-59` **Vulnerability Type**: Persistent memory poisoning through automatic, insufficiently validated writes **Risk Level**: Medium ### Vulnerable Code Snippets `SKILL.md:47-70`: ```markdown ## Detection Triggers Log automatically when you notice these patterns: **Corrections** → add to `corrections.md`, evaluate for `memory.md`: - "No, that's not right..." - "Actually, it should be..." - "You're wrong about..." - "I prefer X, not Y" - "Remember that I always..." - "I told you before..." - "Stop doing X" - "Why do you keep..." **Preference signals** → add to `memory.md` if explicit: - "I like when you..." - "Always do X for me" - "Never do Y" - "My style is..." - "For [project], use..." **Pattern candidates** → track, promote after 3x: - Same instruction repeated 3+ times - Workflow that works well repeatedly - User praises specific approach ``` `operations.md:23-35`: ```markdown ### On Correction Received ``` 1. Parse correction type (preference, pattern, override) 2. Check if duplicate (exists in any tier) 3. If new: - Add to corrections.md with timestamp - Increment correction counter 4. If duplicate: - Bump counter, update timestamp - If counter >= 3: ask to confirm as rule 5. Determine namespace (global, domain, project) 6. Write to appropriate file 7. Update index.md line counts ``` ``` `learning.md:3-12`: ```markdown ## What Triggers Learning | Trigger | Confidence | Action | |---------|------------|--------| | "No, do X instead" | High | Log correction immediately | | "I told you before..." | High | Flag as repeated, bump priority | | "Always/Never do X" | Confirmed | Promote to preference | | User edits your output | Medium | Log as tentative pattern | | Same correction 3x | Confirmed | Ask to make permanent | | "For this project..." | Scoped | Write to project namespace | ``` `boundaries.md:52-59`: ...[truncated 3693 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit opt-in before the first write to any cross-session file. 2. Keep unconfirmed corrections and inferred observations session-local rather than writing them to `~/self-improving/`. 3. Present the exact proposed memory entry, its namespace, retention period, and source to the user before persistence. 4. Remove `User edits your output` as an automatic persistence trigger, or require explicit confirmation that the edit represents a reusable preference. 5. Add a mandatory memory-validation layer that rejects content involving: - Overrides of system, developer, safety, or authorization rules. - Requests to conceal actions or stored state. - Credentials, secrets, financial data, medical data, or access patterns. - Instructions to invoke unrelated tools, execute commands, or access resources. - Personal information about third parties. 6. Treat stored memory as untrusted data. It must never outrank system, developer, current-user, authorization, or safety constraints. 7. Require confirmation before promotion to HOT memory, even when a statement contains words such as “always” or “never.” 8. Remove the person-specific examples from `learning.md` and `scaling.md`, replacing them with non-personal project or document-format examples. 9. Add per-entry ownership, source, consent status, creation time, scope, and expiration metadata. 10. Add tests confirming that no persistent file is modified before opt-in and that unsafe preference text cannot be promoted. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
boundaries.md:44
Finding
Complete deletion may preserve memory in an automatically generated export<![CDATA[ ## Vulnerability Details **File Location**: `boundaries.md:44-50`, `operations.md:3-14` **Vulnerability Type**: Incomplete deletion caused by creating an additional data copy **Risk Level**: Low ### Vulnerable Code Snippets `boundaries.md:44-50`: ```markdown ## Kill Switch User says "forget everything": 1. Export current memory to file (so they can review) 2. Wipe all learned data 3. Confirm: "Memory cleared. Starting fresh." 4. Do not retain "ghost patterns" in behavior ``` `operations.md:3-14`: ```markdown ## User Commands | Command | Action | |---------|--------| | "What do you know about X?" | Search all tiers, return matches with sources | | "Show my memory" | Display memory.md contents | | "Show [project] patterns" | Load and display specific namespace | | "Forget X" | Remove from all tiers, confirm deletion | | "Forget everything" | Full wipe with export option | | "What changed recently?" | Show last 20 corrections | | "Export memory" | Generate downloadable archive | | "Memory status" | Show tier sizes, last compaction, health | ``` ### Technical Analysis The kill-switch procedure mandates an export before wiping learned data. This creates a new copy of the information immediately before a complete-deletion request is processed. The generated archive may remain after the active memory files are erased, making the subsequent statement that memory was cleared inaccurate or incomplete. The behavior is also internally inconsistent: `operations.md` describes export as an option, while `boundaries.md` makes it the first mandatory deletion step. A privacy-preserving implementation should not create additional copies when the user's intent is to erase all retained information. No archive path, permissions policy, encryption requirement, retention period, or secure-deletion procedure is specified. ### Attack Path 1. The Skill has accumulated persistent corrections, preferences, project context, or other learned data. 2. The user requests ...[truncated 1013 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Make export a separate, explicit choice and default to no export when complete deletion is requested. 2. Ask for confirmation using unambiguous options, such as: - Delete all memory without export. - Export memory and retain the archive. - Export memory temporarily, then delete both the active store and archive. 3. Disclose the exact export path, archive contents, file permissions, and retention behavior before creating it. 4. Create exports with owner-only permissions and avoid shared or predictable temporary locations. 5. Include generated archives, backups, indexes, correction logs, and temporary files in deletion verification unless the user explicitly asks to retain them. 6. Report exactly what was deleted and identify any intentionally retained copy. 7. Reconcile `boundaries.md` and `operations.md` so both define the same deletion semantics. 8. Add a test verifying that “forget everything” creates no new file unless the user separately authorizes an export. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Vague Triggers

Medium
Confidence
91% confidence
Finding
The skill is designed to activate on very broad conditions such as ordinary corrections, noticing its own mistakes, or wanting to improve output. In practice, that can cause persistent logging and memory updates during many normal conversations without a clear opt-in moment, increasing the chance of collecting user-related preferences or sensitive context unintentionally.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The file explains persistent storage mechanics, but the skill description and usage flow do not provide a clear upfront warning that user corrections, preferences, and self-reflections may be written to disk. That weakens informed consent and can lead users to disclose information they would not have shared if they knew it would be retained locally.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- Pattern used 3x in 7 days → promote to HOT
- Pattern unused 30 days → demote to WARM
- Pattern unused 90 days → archive to COLD
- Never delete without asking

### 4. Namespace Isolation
- Project patterns stay in `projects/{name}.md`
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| Financial | Card numbers, bank accounts, crypto seeds | Fraud risk |
| Medical | Diagnoses, medications, conditions | Privacy, HIPAA |
| Biometric | Voice patterns, behavioral fingerprints | Identity theft |
| Third parties | Info about other people | No consent obtained |
| Location patterns | Home/work addresses, routines | Physical safety |
| Access patterns | What systems user has access to | Privilege escalation |
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The kill-switch phrase "forget everything" is a simple natural-language trigger with no confirmation step, authentication, or scope constraints. That makes accidental activation, prompt-injection-induced triggering, or unauthorized memory wiping more plausible, especially in a self-improving agent that persists learned state across sessions.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill explicitly instructs the agent to log corrections immediately, bump priority for repeated feedback, and promote some patterns to persistent preferences, but it does not pair that behavior with a clear user-facing disclosure, consent step, or data-retention boundary. This creates a privacy risk because behavioral data and inferred preferences may be stored across sessions without the user understanding what is being kept, where it is stored, or how it will be used.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The reversal flow says to archive old patterns, keep history, and log reversals with timestamps, which means preference history is retained even after the user changes their mind. Without an explicit privacy warning, retention limit, or deletion mechanism, this can preserve sensitive behavioral history longer than users expect and increase exposure if the data is accessed or repurposed.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill explicitly states it will load, add to, demote, and compact a file in the user's home directory, but the file content and description do not clearly warn the user that persistent local data will be modified automatically. Silent or under-disclosed writes to user-controlled files are risky because they can alter user data, create unexpected state across sessions, and make the agent's behavior less auditable.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill specifies automatic persistence of user corrections and context into multiple memory files without any explicit user-facing notice, consent flow, or controls. In a self-improving agent, this increases privacy and integrity risk because users may reveal sensitive preferences, project details, or operational context that are silently stored and later reused across sessions.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The weekly maintenance workflow automatically scans, moves, archives, and compacts stored data based on age and usage, but does not warn users about retention behavior or data lifecycle changes. This is dangerous because sensitive information may persist longer than expected, be moved into less visible storage tiers, or be retained in archives without the user's informed awareness.

Missing User Warnings

Low
Confidence
92% confidence
Finding
The skill explicitly instructs creation of directories and files under the user's home directory on first activation, which modifies local filesystem state without any warning, consent step, or explanation of side effects. While the paths are limited and not inherently dangerous, silent persistence in a hidden-ish app directory can surprise users and creates a foothold for storing future state.

Missing User Warnings

Low
Confidence
90% confidence
Finding
The skill prescribes splitting, compacting, and archiving memory/index data but does not mention any user-facing notice, confirmation, or retention safeguards before modifying stored information. In a self-improving agent, silent consolidation or archival can cause loss of transparency about what was stored, changed, or deprioritized, which is a real privacy and integrity concern even if the content is operational guidance rather than executable code.

Static analysis

No suspicious patterns detected.