T06 · System Persistence
- Location
SKILL.md:103- Finding
Autonomous Cross-Session Scheduling Creates System Persistence
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill honestly describes a social-media automation pipeline, but it gives the agent too much autonomous power to publish publicly, reschedule itself, and process arbitrary websites without enough safeguards.
Install only if you are comfortable with an agent posting live content to your TikTok and Instagram accounts. Use dedicated, low-privilege API tokens, review generated content before publishing, avoid letting it modify cron or other schedules automatically, and analyze only public sites you trust or control until URL validation and the eval-based publisher are fixed.
SKILL.md:103Autonomous Cross-Session Scheduling Creates System Persistence
scripts/publish-carousel.sh:35Website-Derived Content Can Trigger Shell Command Injection Through eval
scripts/analyze-web.js:48Unrestricted URL and Discovered-Link Navigation Enables SSRF
scripts/generate_image.py:2Runtime Installation of Unpinned Third-Party Dependencies
scripts/analyze-web.js:12Predictable Shared Temporary Directory Permits Symlink and State-Poisoning Attacks
The code only covers the research/analysis portion of the description: website scraping, extraction of brand/features/testimonials/stats/CTAs/pricing, basic competitor detection from page text, and creation of storytelling/visual-context metadata. That partially matches the declared analysis capability, but the declared primary skill is broader social media automation for TikTok and Instagram carousel growth, including content generation, auto-publishing, trending music, and analytics. None of those downstream automation capabilities appear in this code chunk. Therefore the description materially overstates what the supplied code actually does.
The code chunk implements only the analytics portion of the declared skill: it calls Upload-Post API endpoints to retrieve TikTok profile metrics, impression totals, and optional post analytics, and writes a snapshot file for later use. It does not analyze websites, extract brand or competitor information, generate carousel content, publish posts, or interact with trending music features. While analytics are mentioned in the description, the actual code’s primary behavior is much narrower than the declared end-to-end automation capability, so this is a material description-behavior mismatch.
The declared description presents a broader end-to-end growth automation skill: website analysis, viral slide generation, auto-publishing to TikTok/Instagram, trending music, and analytics feedback. The supplied code chunk is much narrower. It expects /tmp/carousel/analysis.json to already exist, extracts fields from that file, and generates six image prompts/images plus a caption and a local JSON log of prompts. There are no network calls for website scraping/analysis in this chunk, no social platform posting, no upload-post API usage, no music selection, and no real analytics loop. While slide generation aligns with part of the description, the chunk materially underdelivers relative to the declared primary capabilities, so this is a mismatch.
The declared description promises a multi-step social media growth agent focused on TikTok/Instagram carousels, website analysis, publishing, music selection, and analytics. The supplied code does none of those things. It only parses CLI arguments, obtains a Gemini API key, optionally loads an input image, sends a prompt/image request to Google's image generation model, and saves the returned image locally. There is no code for crawling URLs, extracting brand intelligence, generating multi-slide carousels specifically, interacting with social platforms, publishing content, or tracking analytics. This is a clear description-behavior mismatch with a materially different primary purpose.
The declared description promises a broad end-to-end social growth agent with website analysis, content generation, and auto-publishing across TikTok and Instagram. This code chunk only implements the analytics feedback portion: it loads local JSON files from /tmp/carousel and the skill directory, adds a tracked post, computes averages/top performers/best times/days, and saves recommendations. While analytics learning is consistent with the description's final 'feedback loop' claim, the actual code shown lacks the major advertised capabilities and has a materially narrower primary purpose. Therefore the description does not accurately represent this code chunk.
The description claims a broad automated growth workflow: website analysis, competitor/value-prop extraction, carousel generation, auto-publishing, trending music, and analytics feedback. The actual code chunk implements only the publishing portion. It does not fetch or analyze any website, does not generate slides, and does not perform analytics beyond writing a small JSON record with request_id and metadata. Additionally, while it enables auto_add_music for TikTok, it explicitly tells the user to manually add music on Instagram, so the declared cross-platform trending-music automation is overstated. The primary purpose of this code chunk is narrower than the declared skill description, so this is a material mismatch.
The declared description presents a full social-media growth automation skill with content analysis, slide generation, publishing, music selection, and analytics. The provided code does none of those primary functions. Its purpose is narrowly focused on validating the presence/basic integrity of six local slide image files and preparing instructions for a later vision review step. Reading analysis.json is incidental context, not website analysis. There are no network calls, no TikTok/Instagram integrations, no URL handling, no competitor or brand extraction, and no analytics loop. This is a material description-behavior mismatch, not just an incomplete snippet of a larger workflow, because the code chunk’s actual capability is specifically a local review helper.
The code chunk implements only a competitor/review search helper. It launches a headless browser, queries Bing and DuckDuckGo, parses search results, detects known competitor names, and updates a local JSON file. While competitor discovery is one small part of the declared description, the declared purpose emphasizes a much broader pipeline: analyzing any website URL, generating viral carousel slides, auto-publishing to TikTok/Instagram with trending music, and analytics feedback. None of those core capabilities appear in this code. Therefore the description materially overstates and misrepresents what this supplied code chunk actually does.
The skill explicitly directs autonomous public posting to TikTok and Instagram without confirmation. In context, this is dangerous because it can publish inaccurate, infringing, off-brand, or policy-violating content directly to public accounts, causing reputational damage and irreversible external actions.
The quick-start flow normalizes immediate autonomous execution and direct publishing without a prominent safety warning or gating step. Because the skill uses third-party credentials and posts externally, the absence of a clear upfront warning materially increases the chance of accidental harmful publication.
Referenced artifact was not completely inspected
e won't be analytics data — that's fine. The agent uses the default hooks from `analyze-web.js` and the generic recommendations. After 5-10 posts, `learnings.js
Referenced artifact was not completely inspected
e won't be analytics data — that's fine. The agent uses the default hooks from `analyze-web.js` and the generic recommendations. After 5-10 posts, `learnings.js
Referenced artifact was not completely inspected
## Step 6: Learn and Improve (`learn-from-analytics.js`)
The manifest describes a skill for analyzing website URLs, extracting brand and competitor information, generating viral slides, auto-publishing to TikTok/Instagram, and using analytics feedback loops. This file instead implements a standalone Gemini image generation/editing utility that takes prompts and optional local input images, calls Google's image API, and writes image files locally, with no website analysis, social publishing, trending music, or analytics behavior.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
def get_api_key(provided_key: str | None) -> str | None:
"""Get API key from argument first, then environment."""
if provided_key:
return provided_key
return os.environ.get("GEMINI_API_KEY")
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
process.exit(1);
}
// Output instructions for the agent
console.log('═══════════════════════════════════════════════════════════════');
console.log('📋 AGENT: Review each slide using your vision model.');
console.log(' Use view_file or equivalent to see each image and verify:');
The README explicitly advertises direct publishing with 'No drafts, no manual steps' and 'posts go live instantly' without a prominent warning that generated content will be published immediately to live social accounts. In an automation skill that generates content from arbitrary URLs and posts cross-platform, this increases the risk of accidental brand damage, policy violations, or unintended publication of low-quality or misleading content.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The skill declares access to environment variables and shell-capable binaries but does not define any explicit tool scope or permission boundaries. In a skill that performs website analysis, file writes, and social-media publishing, this broad undeclared capability increases the chance of unintended command execution, secret exposure, or actions beyond what a user expects.
The skill is designed for fully autonomous decision-making from research through publishing, with no intermediate confirmation. Autonomy is especially risky here because the resulting actions are external, public, and repetitive, and errors can propagate daily without human review.
## Philosophy: Daily Automated Loop
The key to growth is **consistency + learning**. This skill is designed to run **every day, fully autonomous**. The agent executes the entire pipeline without asking for confirmation — from research to publishing — and only notifies you at the end with the published TikTok and Instagram URLs.
1. **Post 1 carousel per day** - Consistency beats virality
2. **Track everything** - Every post generates data
The skill instructs the agent to modify its own future execution schedule based on learned posting times. Self-rescheduling expands the skill from content generation into persistence and autonomous control of the execution environment, which can create runaway automation, unexpected resource use, or policy evasion without fresh user approval.
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.
## Step 3: Review with Vision (Autonomous)
After generating, the agent MUST review each slide using its vision/image-to-text model. **This step is fully automatic — do not ask the user to review.**
For each slide, verify:
- ✓ Text is fully legible and correct
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.
- Slide 1: no input image (it establishes the style)
- Slides 2-6: always use `slide-1.jpg` as `--input-image` (the original reference)
Re-verify after regenerating. Repeat until all 6 slides pass. Do not ask the user — fix it automatically.
## Image Format
The metadata explicitly advertises analysis of "any website," while the skill also has network access, Playwright-based scraping, and downstream automation. That broad scope can enable misuse against internal, sensitive, or unexpected targets and increases SSRF-style or policy-bypass risk if callers provide arbitrary URLs without validation or allowlisting.
The script persistently stores scraped website-derived data to /tmp/carousel/analysis.json without any explicit consent, retention control, or user-facing notice. Because the analyzed URL is arbitrary, the collected content can include proprietary business information, personal data exposed on pages, or other sensitive material that users may not realize is being written to disk.