Back to skill

Security audit

Stoic Companion

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for Stoic journaling, but it persistently stores sensitive personal reflections and contact details and creates scheduled messaging jobs without enough privacy, retention, or deletion controls.

Review this skill before installing if you plan to use it with real relationship details, phone numbers, chat IDs, or vulnerable personal reflections. Use it only in a private workspace, confirm where memory files are stored, set a clear stop/delete process for cron jobs and notes, and avoid saving identifying details unless you are comfortable with local plaintext persistence.

Vulnerability Patterns
  • 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
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • 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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:24
Finding

Unprotected Plaintext Storage of Sensitive Personal and Delivery Data

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:24-34, SKILL.md:74, SKILL.md:81-85, SKILL.md:118-122, and references/config-template.md:3-44
Vulnerability Type: Sensitive data stored in predictable plaintext files without defined access, retention, or deletion controls
Risk Level: Medium

Vulnerable Code Snippets

From SKILL.md:24-34:

markdown
On first use, ask the user:

1. **Language**: what language to communicate in (default: user's language)
2. **What are you working on?** (separation, grief, career change, general growth, etc.)
3. **Key relationships** to track virtue alignment with (partner, ex, family, colleagues)
4. **Preferred schedule**: morning affirmation time, evening check-in time, weekly summary day/time
5. **Channel**: where to deliver messages (Telegram, WhatsApp, etc.)
6. **Audio or text?** For the morning affirmation
7. **Trigger phrase** for anxiety/impulse moments (default: "I need to stop")

Store configuration in `memory/stoic-companion.md`. See [references/config-template.md](references/config-template.md) for the template.

From SKILL.md:74:

markdown
When the user responds, acknowledge their reflection, highlight strengths, gently note areas for growth. Log key points in `memory/YYYY-MM-DD.md`.

From SKILL.md:81-85:

markdown
1. Review daily memory files from the past 7 days
2. Identify patterns: recurring struggles, improvements, consistent strengths
3. Rate each virtue based on the week's data
4. Highlight best moment and hardest moment
5. Suggest one focus area for next week

From SKILL.md:118-122:

markdown
## Memory Structure

- `memory/stoic-companion.md` — User config, context, relationships, goals
- `memory/YYYY-MM-DD.md` — Daily notes from check-ins and interactions
- `MEMORY.md` — Long-term patterns and insights (update periodically)

From references/config-template.md:3-44:

markdown

...[truncated 4347 chars]
Remediation
View remediation

Remediation Suggestions

  1. Require explicit storage consent

    • Explain which fields will be retained, why they are needed, and how long they will remain.
    • Offer a memory-free mode in which reflections are processed without persistence.
    • Obtain separate consent before storing highly sensitive distress or relationship information.
  2. Minimize collected data

    • Store only information necessary for the requested feature.
    • Avoid recording full names, detailed relationship narratives, or verbatim journal responses by default.
    • Summarize reflections using neutral, non-identifying terms.
    • Do not retain the anxiety trigger phrase unless the user explicitly requests persistence.
  3. Separate identifiers from journal records

    • Keep phone numbers and chat IDs in a dedicated protected configuration store.
    • Reference delivery destinations through an opaque internal identifier.
    • Do not place delivery identifiers in the same file as personal context or journal history.
  4. Protect data at rest

    • Use a platform-provided secrets or protected state store where available.
    • Encrypt sensitive records at rest.
    • Apply restrictive file permissions so only the intended agent identity can read or modify the records.
    • Prevent unrelated Skills and sessions from accessing the storage namespace.
  5. Define retention and deletion controls

    • Establish a short default retention period for daily records.
    • Automatically delete or aggregate expired entries.
    • Provide user commands to inspect, export, redact, and permanently delete stored data.
    • Ensure deletion also covers derived summaries where supported.
  6. Apply redaction and content controls

    • Detect and redact phone numbers, addresses, credentials, and other unnecessary identifiers before writing journal entries.
    • Store structured minimum-necessary fields rather than unrestricted prose.
    • Avo ...[truncated 368 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 20)May include surrounding context.

md
- **Affirmations file**: Included at `assets/affirmations.json` — 366 Stoic affirmations (one per day of the year) in Spanish. Users can replace this file with

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 43)May include surrounding context.

md
- **Affirmations file**: Included at `assets/affirmations.json` — 366 Stoic affirmations (one per day of the year) in Spanish. Users can replace this file with

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly instructs the agent to collect and store sensitive personal context such as grief, separation, key relationships, anxiety triggers, schedules, and communication channels in local memory files without any user-facing privacy notice, consent step, or retention guidance. Because this skill is mental-health-adjacent and encourages vulnerable disclosures, undisclosed persistence materially increases privacy and misuse risk if logs are later accessed, reused, or exposed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The evening check-in flow asks users to share emotionally sensitive reflections and then directs the agent to log key points in dated memory files, but it does not tell users that their responses will be recorded. In the context of anxiety support and impulse control, users may disclose highly private mental-health-adjacent information they believe is ephemeral, making undisclosed logging a meaningful privacy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This JSON asset contains all user-facing affirmation text in Spanish, with no indication that users can choose another language or that the skill is explicitly limited to Spanish-speaking users. Under the language/locale policy, forcing a specific language without opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The template asks for schedules, communication channels, and target identifiers such as chat IDs or phone numbers, but it does not include any privacy notice, consent requirement, or warning about messaging consequences. That creates a realistic risk of collecting and storing personally identifiable contact data and behavioral routines without clear safeguards, which could lead to privacy harm, misdelivery, or unwanted automated outreach.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The template defines a free-form trigger phrase for anxiety or impulse support without any constraints on uniqueness, confirmation behavior, or channel scope. In a messaging-based skill, an overly broad or guessable phrase can cause unintended activation, potentially surfacing sensitive support content or initiating workflows in the wrong context.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.