T08 · Insecure Dependencies
- Location
SKILL.md:51- Finding
Unpinned Dependency Installation into the System Python Environment
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill's calendar generator is mostly purpose-aligned, but its install instructions modify the system Python environment through an unpinned dependency while claiming purely local operation.
Review before installing. The generator itself does not appear to send data out or request social-media credentials, but the recommended install command can change your system Python packages and pulls the latest unpinned dependency. Use an isolated virtual environment instead, and run it in a directory where overwriting generated calendar files would not matter.
SKILL.md:51Unpinned Dependency Installation into the System Python Environment
Suspicious Unicode normalization or mixed-script content
The skill claims it is 'pure offline generation' and 'no data transmitted,' but its documented install step runs pip3 install, which reaches out to package indexes and executes package installation logic from an external dependency. This discrepancy can mislead users into believing no network access or supply-chain risk exists, increasing the chance they run the skill in sensitive environments under false assumptions.
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
border_style="cyan"
))
# ââ Best posting times ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
BEST_TIMES = {
"twitter": [("Mon", "9am"), ("Tue", "9am"), ("Wed", "12pm"), ("Thu", "9am"), ("Fri", "10am")],
"linkedin": [("Tue", "8am"), ("Wed", "10am"), ("Thu", "9am"), ("Mon", "8am"), ("Fri", "9am")],
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
"threads": [("Mon", "9am"), ("Wed", "12pm"), ("Fri", "11am"), ("Tue", "9am"), ("Thu", "2pm")],
}
# ââ Caption templates per tone ââââââââââââââââââââââââââââââââââââââââââââââââ
TONE_HOOKS = {
"educational": [
"Here's what most people get wrong about {topic}:",
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
"threads": [("Mon", "9am"), ("Wed", "12pm"), ("Fri", "11am"), ("Tue", "9am"), ("Thu", "2pm")],
}
# ââ Caption templates per tone ââââââââââââââââââââââââââââââââââââââââââââââââ
TONE_HOOKS = {
"educational": [
"Here's what most people get wrong about {topic}:",
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
}
hooks = TONE_HOOKS.get(TONE, TONE_HOOKS["educational"])
# ââ Content type formats ââââââââââââââââââââââââââââââââââââââââââââââââââââââ
CONTENT_FORMATS = {
"education": ["how-to", "tips-list", "explainer", "myth-busting", "framework"],
"inspiration": ["quote", "success-story", "milestone", "mindset", "reminder"],
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
return random.choice(CONTENT_FORMATS[key])
return random.choice(["tip", "story", "question", "fact"])
# ââ Offline topic angle generator âââââââââââââââââââââââââââââââââââââââââââââ
def get_topic_ideas(topic: str) -> list:
return [
f"beginner guide to {topic}",
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
console.print("[dim]Generating topic anglesâ¦[/dim]")
topic_ideas = get_topic_ideas(TOPIC)
# ââ Platform caption generators âââââââââââââââââââââââââââââââââââââââââââââââ
def gen_twitter(pillar: str, content_form: str, week: int) -> str:
hook = random.choice(hooks).replace("{topic}", topic_short).replace("{number}", str(random.choice([3, 5, 7])))
bodies = [
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
"threads": gen_threads,
}
# ââ Build 4-week calendar âââââââââââââââââââââââââââââââââââââââââââââââââââââ
calendar = []
for week in range(1, 5):
for platform in PLATFORMS:
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
"threads": gen_threads,
}
# ââ Build 4-week calendar âââââââââââââââââââââââââââââââââââââââââââââââââââââ
calendar = []
for week in range(1, 5):
for platform in PLATFORMS:
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
)
console.print(cal_table)
# ââ Display: Sample captions ââââââââââââââââââââââââââââââââââââââââââââââââââ
console.print()
for platform in PLATFORMS[:2]:
sample = next((p for p in calendar if p["platform"] == platform), None)
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
border_style="yellow"
))
# ââ Display: Hashtag strategy âââââââââââââââââââââââââââââââââââââââââââââââââ
HASHTAG_GUIDE = {
"twitter": "1-2 hashtags max. Use trending + niche specific. Never in the middle of text.",
"linkedin": "3-5 hashtags at the end. Mix: 1 broad + 2 niche + 1 trending.",
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
ti_lines = "\n".join([f"[dim]{i + 1}.[/dim] {idea}" for i, idea in enumerate(topic_ideas)])
console.print(Panel(ti_lines, title="[bold]ð¡ Content Angle Ideas[/bold]", border_style="magenta"))
# ââ Save outputs ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
topic_slug = re.sub(r"[^a-z0-9]", "_", TOPIC[:20].lower())
json_path = f"social_calendar_{topic_slug}_{TODAY}.json"
md_path = f"social_calendar_{topic_slug}_{TODAY}.md"
The embedded Python writes JSON and Markdown files to the local working directory without clearly warning the user about file creation and overwrite behavior. While filenames are semi-derived and not attacker-controlled beyond topic text sanitization, silent writes can still overwrite existing files with the same date/topic pattern or leak generated business content into unintended directories.
The manifest description claims the skill will 'write platform-optimised captions' and export a 'ready-to-use content calendar.' In code, the caption generators emit placeholder text such as '[insight 1]', '[reason]', '[Main value]', and '[Your honest take]', meaning the output is a scaffold for manual completion rather than finished publishable content.
No suspicious patterns detected.