Back to skill

Security audit

Scholar Deep Research

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent scholarly research skill, but it automatically updates its own code from Git and can run another locally discovered skill script, so it needs user review before installation.

Install only if you are comfortable with the skill contacting scholarly services and writing research state in your workspace. Prefer a package-manager install or set SCHOLAR_SKIP_UPDATE_CHECK=1 before use; avoid git-clone installs that auto-update from origin unless you review and pin commits. Treat PAPER_FETCH_SCRIPT and direct PDF URLs as trusted inputs, and use a dedicated virtual environment for dependencies.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (4)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:52
Finding
Mandatory Silent Remote Code Update and Immediate Activation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:52-64`; `scripts/check_update.py:104-106, 138-140, 187-250` **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical ### Vulnerable Code `SKILL.md:52-64`: ```markdown **Step 0 — Check for skill updates (silent, once per day).** Before anything else, run: ```bash python scripts/check_update.py ``` The script self-throttles to one real check per 24 hours (via a `.last_update_check` timestamp in the skill root); running it every session is cheap. It always exits 0 and never fails the workflow — route on `data.action` only when you need to tell the user something: - **`updated`** → one line: `[Skill updated: <from> → <to> (<commits_behind> commits). Continuing with new version.]`. - **`skipped_dirty`** → one line notifying the user that the update was skipped. - Everything else (`up_to_date`, `skipped_throttled`, `skipped_disabled`, `not_a_git_repo`, `check_failed`) → continue silently. ``` `scripts/check_update.py:104-106, 138-140`: ```python def fetch() -> tuple[bool, str]: rc, _, stderr = run_git("fetch", "--quiet", "origin") return rc == 0, stderr def fast_forward() -> tuple[bool, str]: rc, _, stderr = run_git("pull", "--ff-only", "--quiet") return rc == 0, stderr ``` `scripts/check_update.py:187-250`: ```python # One network call: fetch objects so we can diff locally afterwards. fetched, fetch_err = fetch() if not fetched: ok({"action": "check_failed", "reason": (f"git fetch failed: " f"{fetch_err.splitlines()[0] if fetch_err else 'unknown error'}"), "local_head": local[:12]}) return upstream = upstream_head() if not upstream: ok({"action": "check_failed", "reason": ("No upstream tracking branch configured " "(e.g. 'git branch --set-upstream-to=origin/main')"), "local_head": local[:12]}) return if local == upstream: ok({"action": "up_to_date", "head" ...[truncated 3891 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove automatic update installation from normal Skill activation. 2. Replace `git pull` with a non-mutating availability check. 3. Display the repository URL, current commit, proposed commit, and change summary before any update. 4. Require explicit user approval before modifying the installed Skill. 5. Pin approved releases to immutable commit hashes or signed tags. 6. Verify commit or tag signatures against a bundled allowlist of maintainer keys. 7. Validate that `origin` exactly matches an approved canonical repository before contacting it. 8. Install updates into a staging directory and audit them before activation. 9. Activate updated code only in a new session or process after review. 10. Default to update checks being disabled for package-manager installations and provide a clearly documented opt-in mechanism. 11. Preserve `SCHOLAR_SKIP_UPDATE_CHECK`, but do not rely on an opt-out variable as the primary security control. ]]>

T07 · Tool Hijacking and Spoofing

Error
Location
scripts/extract_pdf.py:49
Finding
Automatic Execution of an Unverified Externally Installed Skill Script<![CDATA[ ## Vulnerability Details **File Location**: `scripts/extract_pdf.py:49-90, 246-250` **Vulnerability Type**: Local tool hijacking through implicit executable discovery **Risk Level**: High ### Vulnerable Code `scripts/extract_pdf.py:49-79`: ```python _FETCH_SCRIPT = "scripts/fetch.py" # All known skill install paths across platforms. # Order: Claude Code → OpenCode → OpenClaw → Hermes → agents convention. _CONVENTION_PATHS = [ Path.home() / ".claude" / "skills" / "paper-fetch" / _FETCH_SCRIPT, Path.home() / ".config" / "opencode" / "skills" / "paper-fetch" / _FETCH_SCRIPT, Path.home() / ".opencode" / "skills" / "paper-fetch" / _FETCH_SCRIPT, Path.home() / ".openclaw" / "skills" / "paper-fetch" / _FETCH_SCRIPT, Path.home() / ".hermes" / "skills" / "research" / "paper-fetch" / _FETCH_SCRIPT, Path.home() / ".agents" / "skills" / "paper-fetch" / _FETCH_SCRIPT, ] def _find_paper_fetch() -> Path | None: """Locate paper-fetch's fetch.py. Returns path or None. Discovery chain: 1. PAPER_FETCH_SCRIPT env var (explicit override) 2. Known skill install paths across platforms """ env = os.environ.get("PAPER_FETCH_SCRIPT") if env: p = Path(env) if p.is_file(): return p print(f"[warn] PAPER_FETCH_SCRIPT={env} not found, trying convention paths", file=sys.stderr) for path in _CONVENTION_PATHS: if path.is_file(): return path return None ``` `scripts/extract_pdf.py:82-90`: ```python def _fetch_via_paper_fetch(doi: str, fetch_script: Path) -> tuple[Path, dict[str, Any]]: """Resolve DOI via paper-fetch skill. Returns (pdf_path, metadata).""" tmpdir = tempfile.mkdtemp(prefix="scholar_fetch_") result = subprocess.run( [sys.executable, str(fetch_script), doi, "--format", "json", "--out", tmpdir], capture_output=True, text=True, timeout=120, ) ``` `scripts/extract_pdf.py:246-250`: ```python if ...[truncated 2789 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove automatic convention-directory discovery and execution. 2. Require an explicitly configured `PAPER_FETCH_SCRIPT` path or a formally declared package dependency. 3. Resolve the configured path with `Path.resolve()` and reject symlinks or paths outside an approved installation root. 4. Verify that the file and parent directories are owned by the expected user and are not group- or world-writable. 5. Pin the integration to a reviewed version and verify a cryptographic hash or digital signature before execution. 6. Display the exact executable path and require approval before first use. 7. Run the external fetcher in a restricted subprocess with a minimal environment, constrained working directory, resource limits, and network policy. 8. Prefer importing a pinned library through a defined API rather than executing an arbitrary Python file. 9. If validation fails, use the built-in Unpaywall implementation rather than trying additional ambient paths. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/extract_pdf.py:137
Finding
Unrestricted URL Fetching Enables SSRF and Resource Exhaustion<![CDATA[ ## Vulnerability Details **File Location**: `scripts/extract_pdf.py:137-174, 255-264` **Vulnerability Type**: Server-side request forgery and unbounded download **Risk Level**: Medium ### Vulnerable Code `scripts/extract_pdf.py:137-174`: ```python import httpx email = os.environ.get("SCHOLAR_MAILTO", "scholar-deep-research@example.com") api_url = f"https://api.unpaywall.org/v2/{doi}?email={email}" try: r = httpx.get(api_url, follow_redirects=True, timeout=30.0, headers={"User-Agent": "scholar-deep-research/0.1"}) r.raise_for_status() except httpx.HTTPError as e: status = getattr(getattr(e, "response", None), "status_code", None) err("unpaywall_request_failed", f"Unpaywall API failed for {doi}: {type(e).__name__}: {e}", retryable=True, exit_code=EXIT_UPSTREAM, doi=doi, status=status) data = r.json() best_oa = data.get("best_oa_location") or {} pdf_url = best_oa.get("url_for_pdf") or best_oa.get("url") if not pdf_url: err("no_open_access_pdf", f"No open-access PDF found for DOI {doi} via Unpaywall", retryable=False, exit_code=EXIT_VALIDATION, doi=doi, is_oa=data.get("is_oa", False)) # Download the PDF try: r2 = httpx.get(pdf_url, follow_redirects=True, timeout=60.0, headers={"User-Agent": "scholar-deep-research/0.1"}) r2.raise_for_status() except httpx.HTTPError as e: status = getattr(getattr(e, "response", None), "status_code", None) err("pdf_download_failed", f"Failed to download PDF from {pdf_url}: {type(e).__name__}: {e}", retryable=True, exit_code=EXIT_UPSTREAM, doi=doi, pdf_url=pdf_url, status=status) tmp = tempfile.NamedTemporaryFile(suffix=".pdf", delete=False) tmp.write(r2.content) tmp.close() ``` `scripts/extract_pdf.py:255-264`: ```python elif args.url: import httpx try: r = httpx.get(args.url, follow_redirects=True, timeout=60.0, headers={"User-Agent": ...[truncated 3034 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Permit only `https` URLs by default. 2. Resolve the hostname before connecting and reject loopback, private, link-local, multicast, unspecified, and reserved IP ranges. 3. Repeat destination validation after every redirect; do not rely solely on validating the initial URL. 4. Explicitly block common cloud metadata addresses and hostnames. 5. Where feasible, use an allowlist of recognized scholarly repositories and publisher domains. 6. Use `httpx.stream()` and stop reading after a conservative maximum size. 7. Reject responses whose declared `Content-Length` exceeds the limit. 8. Validate `Content-Type` and require the downloaded bytes to begin with a valid PDF signature. 9. Set separate connection, read, write, and pool timeouts. 10. Store temporary files through a managed temporary directory and remove them in a `finally` block after extraction. 11. Consider requiring explicit user confirmation for URLs outside recognized scholarly domains. ]]>

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding
Unpinned and Unhashed Python Dependencies<![CDATA[ ## Vulnerability Details **File Location**: `requirements.txt:1-2` **Vulnerability Type**: Non-reproducible third-party dependency installation **Risk Level**: Medium ### Vulnerable Code `requirements.txt:1-2`: ```text httpx>=0.27.0 pypdf>=4.0.0 ``` The documented installation path uses: ```bash pip install -r requirements.txt ``` ### Technical Analysis Both dependencies use open-ended lower-bound constraints. Any future release with a matching package name and a version at or above the minimum is accepted. The project supplies no lockfile, exact transitive dependency set, or package hashes. This prevents reproducible installation and means that two users installing the same audited Skill revision at different times may receive materially different dependency code. A compromised future package release, maliciously altered distribution artifact, or security-regressing update can enter the environment without a corresponding change to the Skill repository. The package names appear legitimate, and no evidence of typosquatting or a currently malicious dependency was found. The vulnerability is the unsafe supply-chain configuration rather than a confirmed compromise of `httpx` or `pypdf`. ### Attack Path 1. A malicious, compromised, or security-regressing future release of a named dependency or transitive dependency is published. 2. Its version satisfies the broad `>=` requirement. 3. A user follows the documented `pip install -r requirements.txt` instruction. 4. The package installer selects the uncontrolled release. 5. The dependency's installation or runtime code executes in the Skill's Python environment. 6. Subsequent search or PDF-extraction operations import and use the affected package. ### Impact Assessment A compromised dependency can potentially execute with the permissions of the Python installation or Agent process. This may permit: - Reading accessible files and environment variables. - Making arbitrary network requests. - Tamper ...[truncated 337 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin every direct dependency to an exact reviewed version. 2. Generate a lockfile containing exact transitive versions. 3. Use hash-checked installations, such as a requirements file generated with `--generate-hashes` and installed with `pip --require-hashes`. 4. Perform dependency upgrades through an explicit review and test process. 5. Run vulnerability and license scanning against the resolved dependency graph. 6. Install the Skill in a dedicated virtual environment rather than a shared system or Agent environment. 7. Record the Python version and supported platform constraints in the lock process. 8. Publish signed release artifacts containing the reviewed dependency lockfile. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
Findings (76)

Tainted flow: 'api_url' from os.environ.get (line 140, credential/environment) → httpx.get (network output)

Critical
Category
Data Flow
Content
api_url = f"https://api.unpaywall.org/v2/{doi}?email={email}"

    try:
        r = httpx.get(api_url, follow_redirects=True, timeout=30.0,
                      headers={"User-Agent": "scholar-deep-research/0.1"})
        r.raise_for_status()
    except httpx.HTTPError as e:
Confidence
90% confidence
Finding
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The documented behavior allows the skill to contact a remote Git origin and update itself automatically, which is unnecessary for its stated scholarly-research purpose. This introduces a remote code modification path that could be abused through repository compromise, dependency confusion in later steps, or unexpected behavior drift, all without a deliberate installation/update action by the user.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description presents a full literature-review/research orchestration capability across multiple scholarly APIs. The supplied code chunk instead contains only shared infrastructure helpers: JSON success/error envelopes, exit codes, parser-to-schema export, output/state routing, normalized paper construction, and idempotency caching. While some helpers are compatible with a scholarly research system (e.g., make_paper, reconstruct_inverted_abstract, emit to research_state), the primary behavior of this chunk is framework/CLI support rather than executing the described academic deep-research workflow. It also adds capabilities not mentioned in the description, such as schema emission and idempotency caching. Therefore, the description does not accurately represent what this code chunk actually does.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description is about an academic research and literature-review engine. The supplied code chunk does not implement any research, search APIs, citation handling, report generation, or workflow orchestration. Its sole purpose is concurrency-safe local state management via file locks and atomic writes. This is not merely a supporting detail of the declared behavior in the provided chunk; the chunk's primary behavior is unrelated infrastructure, with no visible connection to the claimed scholarly capabilities. Therefore the description does not accurately represent what this code chunk actually does.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description is about an academic research skill that gathers and synthesizes scholarly evidence from literature databases. The supplied code does none of that. Instead, it is an operational self-update script for the skill itself: it inspects whether the install is a git repo, fetches from origin, compares local and upstream HEADs, detects dirty files, optionally performs a fast-forward pull, writes a .last_update_check timestamp, and reports update status. This is a materially different primary purpose and introduces undeclared capabilities involving git/network update behavior and local file mutation. While such maintenance code could support the broader skill, this chunk’s behavior is not accurately represented by the declared purpose and includes unrelated trigger semantics (daily update check at Phase 0 Step 0).

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description presents a full academic literature-review skill with broad user-facing research capabilities and multi-source evidence synthesis. The supplied code chunk implements only one backend maintenance component: deduplication of already-ingested paper records in a state file. While deduplication is mentioned in the description as part of the larger workflow, this code alone does not match the declared primary purpose. It neither queries OpenAlex/arXiv/Crossref/PubMed nor generates scholarly analysis or structured report output. Therefore, the code chunk's actual behavior is materially narrower and different from the declared skill behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The declared description presents a full research-and-synthesis skill for conducting literature reviews using multiple scholarly APIs and producing evidence-based reports. The supplied code chunk instead implements a narrow export tool: it loads an existing local research state and serializes paper metadata into bibliography formats (BibTeX, CSL-JSON, RIS). This is related to scholarly workflows in a supporting sense, but it is not the described primary behavior. There is no API access, no search, no analysis pipeline, no citation chasing, and no report generation. Therefore the code chunk does not accurately match the declared purpose.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description presents a high-level academic research and literature review system. This code chunk, however, is only a PDF text-extraction helper. It resolves a DOI through an external paper-fetch script or Unpaywall, downloads PDFs from URLs, reads PDFs with pypdf, supports page ranges, and writes extracted text or preview metadata. While this could support a research workflow, it does not itself implement the described scholarly discovery, multi-source evidence gathering, comparative analysis, citation generation, ranking, or report synthesis. The primary purpose is materially narrower and different, so this is a clear description-behavior mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The declared description presents a full end-to-end literature review/research pipeline spanning multiple scholarly sources and multiple analytic phases. The supplied code chunk, however, is only a single Crossref search component: it accepts a query, optional year bounds and email, calls the Crossref API, normalizes metadata fields, and emits the results. While this behavior is consistent with one sub-piece of the larger declared system, the chunk itself does not match the declared purpose as a whole because its primary function is much narrower and it lacks most of the described capabilities. There is no evidence here of the 8-phase workflow, multi-source orchestration, deduplication, ranking, citation chasing, self-critique, or report synthesis.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The supplied code chunk does not implement the described research skill behavior. It is a support/testing utility used to invoke local scripts, parse JSON stdout, create temporary state, and fabricate dummy paper payloads for tests. The description claims a production research workflow involving external scholarly data sources, deduplication, ranking, citation chasing, and structured reporting, none of which appear here. The explicit module docstring even says 'Shared helpers for the CLI contract smoke tests' and 'No network,' which directly conflicts with the declared external-source research purpose. This is a material description-behavior mismatch, not merely an internal implementation detail.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description describes a research automation skill for multi-source academic literature review using several external scholarly APIs/databases. The supplied code does none of that. It is a generic unittest discovery/execution script with no network access, no research workflow, no citation handling, and no interaction with OpenAlex, arXiv, Crossref, or PubMed. Its primary purpose is materially different from the declared purpose, so this is a clear mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says this skill performs a multi-source academic research workflow and produces literature-review outputs. The actual code chunk does not implement or run that workflow; instead, it is a test suite validating behavior of command-line scripts such as research_state.py, export_bibtex.py, and rank_papers.py. While some tested commands are research-related in name, this file’s primary purpose is QA/testing of CLI mechanics, safety gates, metadata, and state behavior—not retrieval, synthesis, citation chasing, or report generation. Therefore the code chunk’s actual behavior is materially different from the declared purpose.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description promises an end-user research capability: an 8-phase literature review pipeline using external scholarly data sources and producing cited reports. The actual code does not implement or invoke those research functions. It is only a test module for contract behavior of `research_state.py`, focused on CLI/state-management correctness and envelope formatting. No evidence in this chunk shows source querying, deduplication, ranking, citation chasing, or report generation. This is a materially different primary purpose, so the description does not accurately represent the supplied code chunk.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description promises a full academic research and literature survey capability, including multi-source retrieval, ranking, citation chasing, self-critique, and structured reporting. The actual code chunk does none of that. It is a unit test module for export formatting. It initializes temporary state, writes a JSON payload with dummy papers, invokes local scripts, and asserts that exported outputs exist and contain expected sentinels for bibtex, CSL-JSON, and RIS. This is a materially different primary purpose from the declared skill behavior, so it is a clear mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says this skill should conduct a full scholarly research workflow across external academic sources. The actual code chunk is only a test module for gate predicates and CLI phase advancement. Its primary purpose is validating internal workflow constraints, not executing the research workflow itself. While gate tests may support the larger system, this chunk alone does not implement the described end-user capability and instead exposes an unrelated/internal testing behavior. Therefore the description does not accurately represent what this supplied code chunk actually does.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The code shown does not implement or invoke a literature review workflow. It is only a test module for payload ingestion behavior in a state script, checking deduplication/idempotency and schema validation. While deduplication is mentioned in the declared description, this snippet is narrowly focused on backend ingest testing and lacks the core declared capabilities: source querying, academic synthesis, citation generation, comparative analysis, or structured report production. Therefore the supplied code chunk's primary purpose is materially different from the declared skill description.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description is for a user-facing scholarly research and citation workflow. The actual code chunk does not perform literature retrieval, source aggregation, ranking, citation chasing, self-critique, or report generation. Instead, it is a test file focused on validating that concurrent ingests into a state file are correctly serialized under a lock. This is a materially different primary purpose and capability set from the declared skill behavior, so it should be flagged as a mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says this skill performs a multi-phase academic research workflow over scholarly APIs and outputs structured literature reviews with citations. The actual code chunk does nothing related to literature search, academic synthesis, citations, or external scholarly resources. Instead, it is a regression/unit test for command-line schema emission across scripts. This is a materially different primary purpose, so the description does not accurately represent the supplied code.

Hidden Instructions

High
Category
Prompt Injection
Content
</nav>

  <main id="main-content">
  <!-- Hero -->
  <div class="hero">
    <div class="container">
      <div class="hero-badge">v0.2 &mdash; Now with Auto-Update</div>
Confidence
70% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Hidden Instructions

High
Category
Prompt Injection
Content
</div>
  </section>

  <!-- Report archetypes -->
  <section>
    <div class="container">
      <h2 class="section-title">5 Report Archetypes</h2>
Confidence
70% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Self-Modification

High
Category
Rogue Agent
Content
- [ ] **Step 8: Commit**

### Task 2: Update SKILL.md

**Files:**
- Modify: `SKILL.md`
Confidence
85% confidence
Finding
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Hidden Instructions

High
Category
Prompt Injection
Content
</nav>

  <main id="main-content">
  <!-- Hero -->
  <div class="hero">
    <div class="container">
      <div class="hero-badge">v0.2 &mdash; 新增自动升级</div>
Confidence
70% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
A literature-research skill does not need the capability to modify its own codebase during routine use. Auto-updating from origin on each run creates a supply-chain risk: any compromise of the upstream repository, dependency path, or account can turn a benign research tool into a code execution vector on user machines.

Missing User Warnings

High
Confidence
97% confidence
Finding
Advertising automatic self-updating on every invocation without a strong warning means users may run materially different code than the version they reviewed or installed. This undermines trust boundaries and creates a silent code-change channel that is especially dangerous in agent skills that may invoke shells, network access, and local file operations.

Missing User Warnings

High
Confidence
95% confidence
Finding
The page encourages users to tell an agent to clone a repository and run pip install -r requirements.txt automatically, without safety guidance. That normalizes unreviewed remote code retrieval and dependency installation, which is a common path for supply-chain compromise, dependency confusion, or execution of malicious setup/install scripts.

Static analysis

No suspicious patterns detected.