T06 · System Persistence
- Location
modules/twitter-monitor.md:55- Finding
Persistent Background Execution Through a macOS LaunchAgent
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
SoloBuddy has a coherent build-in-public purpose, but it asks for persistent monitoring, plaintext Twitter session credentials, broad Git publishing, and loosely scoped local file access that users should review carefully.
Install only if you are comfortable reviewing each action before it runs. Keep the data path in a dedicated private repository, do not use git add . for publishing, avoid storing Twitter/X session tokens in ~/.zshrc or scripts, and do not enable the LaunchAgent unless you understand how to inspect, stop, and remove the recurring job.
modules/twitter-monitor.md:55Persistent Background Execution Through a macOS LaunchAgent
modules/twitter-monitor.md:124Twitter Session Credentials Stored in Plaintext Shell Configuration and Scripts
SKILL.md:119Publishing Command Stages and Pushes the Entire Data Directory
README.md:18Mutable Latest Package Is Downloaded and Executed During Installation
SKILL.md:82Unquoted Data-Path Substitution Allows Shell Command Injection
references/soul-wizard.md:14User-Supplied Project Paths and Names Are Inserted into Shell Commands
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
- **Content Workflow**: Idea backlog → Draft → Publish
- **Twitter Expert**: 2025 algorithm insights, hook formulas, engagement optimization
- **Twitter Monitor**: Proactive engagement opportunities from your watchlist
- **Soul Wizard**: Create project personalities from documentation
- **Activity Tracking**: Know which projects need attention
## Install
The install command uses npx clawdhub@latest, which fetches and executes the latest published package version at runtime rather than a pinned, reviewed release. This creates a supply-chain risk: if the package is compromised or a malicious update is published, users following the README could immediately execute attacker-controlled code on their machine.
The quick-start examples use very generic trigger phrases like show backlog, new idea, and generate post, which can overlap with ordinary user conversation. In agentic environments, overly broad triggers can cause the skill to activate unintentionally, leading to unexpected access to project data, draft generation, or workflow actions without clear user intent.
The publishing flow performs git add ., git commit, and git push, which modifies the repository and transmits local content to a remote without any explicit warning, review step, or confirmation requirement in the skill. Because {dataPath} is user-configurable and the push publishes all tracked changes under that path, a user could accidentally exfiltrate sensitive drafts, notes, or unrelated repository data.
The skill declares very broad Telegram triggers such as "menu" and "start", which are common conversational words and can unintentionally activate privileged skill behavior during ordinary chat. In a messaging context this can cause accidental state changes or execution of follow-up actions the user did not explicitly intend, increasing the chance of unsafe command invocation.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
└── twitter-analyze.sh # Sends to ClawdBot for analysis
~/Library/LaunchAgents/
└── com.clawdbot.twitter-monitor.plist # Runs on interval
{dataPath}/data/twitter/
├── latest-fetch.json # Last fetched tweets
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
└── twitter-analyze.sh # Sends to ClawdBot for analysis
~/Library/LaunchAgents/
└── com.clawdbot.twitter-monitor.plist # Runs on interval
{dataPath}/data/twitter/
├── latest-fetch.json # Last fetched tweets
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
└── twitter-analyze.sh # Sends to ClawdBot for analysis
~/Library/LaunchAgents/
└── com.clawdbot.twitter-monitor.plist # Runs on interval
{dataPath}/data/twitter/
├── latest-fetch.json # Last fetched tweets
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
launchctl unload ~/Library/LaunchAgents/com.clawdbot.twitter-monitor.plist
# Start auto-monitoring
launchctl load ~/Library/LaunchAgents/com.clawdbot.twitter-monitor.plist
# Add to watchlist
jq '.twitter.watchlist += ["newhandle"]' ~/.clawdbot/clawdbot.json > tmp && mv tmp ~/.clawdbot/clawdbot.json
The skill instructs users to place Twitter/X authentication tokens in ~/.zshrc, which risks long-lived credential exposure to local users, shell history/workflows, backups, and other tools that read environment initialization files. While no token values are embedded in the file, normalizing insecure secret handling can lead to account/session compromise if those tokens are leaked.
The file mixes English headings with required Russian trigger phrases, Russian step prompts, and Russian button labels, indicating the interaction is designed to run in Russian by default. There is no statement that the user can choose another language or that the locale restriction is intentional and justified.
The skill accepts an arbitrary , scans markdown files under it, and later writes a JSON file to disk, but it does not constrain accessible directories or require explicit user confirmation for filesystem read/write actions. In an agent context, this can expose sensitive local/project data and cause unintended file creation or overwrite if the supplied path or project name is unsafe or attacker-controlled.
This markdown file documents that tweet data is saved to local JSON files, including fetched tweets, processed tweet IDs, and history. Because this behavior affects user data handling and persistence, the skill description should explicitly warn users that monitoring results and activity history are stored locally.
The skill lists a Russian trigger phrase alongside English commands, but the document does not explain whether multilingual behavior is optional, configurable, or user-selected. This can conflict with language/locale policy expectations when a skill implicitly supports or prefers a language without documenting user choice.
No suspicious patterns detected.