Trust Assessment
soul-shepherd received a trust score of 65/100, placing it in the Caution category. This skill has some security considerations that users should review before deployment.
SkillShield's automated analysis identified 6 findings: 0 critical, 1 high, 3 medium, and 2 low severity. Key findings include Unsafe deserialization / dynamic eval, Missing required field: name, Node lockfile missing.
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. All layers scored 70 or above, reflecting consistent security practices.
Last analyzed on February 13, 2026 (commit 13146e6a). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings6
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| HIGH | Unlisted dependency 'dotenv' The `soul-shepherd.js` script uses `require('dotenv').config();` but the `dotenv` package is not listed in the `dependencies` or `devDependencies` section of `package.json`. This indicates an unmanaged dependency, which can lead to build failures, unexpected runtime behavior, or security vulnerabilities if an unpinned or malicious version is implicitly installed or relied upon. Add `"dotenv": "^x.y.z"` to the `dependencies` in `package.json`, replacing `x.y.z` with a specific version or a pinned version range to ensure consistent and secure dependency management. | LLM | package.json:20 | |
| MEDIUM | Unsafe deserialization / dynamic eval Decryption followed by code execution Remove obfuscated code execution patterns. Legitimate code does not need base64-encoded payloads executed via eval, encrypted-then-executed blobs, or dynamic attribute resolution to call system functions. | Manifest | skills/snail3d/soul-shepherd/scripts/calendar-guardian.js:4 | |
| MEDIUM | Missing required field: name The 'name' field is required for claude_code skills but is missing from frontmatter. Add a 'name' field to the SKILL.md frontmatter. | Static | skills/snail3d/soul-shepherd/SKILL.md:1 | |
| MEDIUM | GitHub Token may have excessive permissions The `PatternLearner` component uses a `GITHUB_TOKEN` (loaded from `process.env`) to fetch user events from the GitHub API. The skill does not specify or enforce the minimum required scope for this token. If the provided `GITHUB_TOKEN` has broader permissions (e.g., `repo` or `admin:org`) than necessary (e.g., `read:user` or `public_repo` for fetching user events), it introduces an excessive permissions risk. A compromised token with overly broad access could lead to unauthorized actions on GitHub. Ensure the `GITHUB_TOKEN` provided in the environment variables has the minimum necessary scope (e.g., `read:user` or `public_repo`) to perform its function, and no broader permissions. Document the required scope for the token. | LLM | scripts/pattern-learner.js:97 | |
| LOW | Node lockfile missing package.json is present but no lockfile was found (package-lock.json, pnpm-lock.yaml, or yarn.lock). Commit a lockfile for deterministic dependency resolution. | Dependencies | skills/snail3d/soul-shepherd/package.json | |
| LOW | Potential logging of sensitive data in error messages The `soul-shepherd.js` component logs all messages, including error messages, to `logs/soul-shepherd.log`. In `PatternLearner.js`, error messages from `fetchRecentCommits` (e.g., `Failed to fetch GitHub commits: ${e.message}`) could potentially contain sensitive information like parts of the `GITHUB_TOKEN` if the underlying `fetch` error object's string representation inadvertently includes it. While unlikely for standard errors, it is a best practice to sanitize or redact sensitive information from error messages before logging them, especially when dealing with API calls involving credentials. Implement a more robust logging mechanism that sanitizes or redacts sensitive information from error messages before writing them to disk. Avoid logging raw error objects from network requests that might contain credentials. | LLM | scripts/soul-shepherd.js:90 |
Scan History
Embed Code
[](https://skillshield.io/report/27b87ccbde7d9670)
Powered by SkillShield