Skip to content

docs: drop leftovers from the office skill removal - #320

Open
yhh1008 wants to merge 1 commit into
mainfrom
docs/remove-office-skill-leftovers
Open

yhh1008 wants to merge 1 commit into
mainfrom
docs/remove-office-skill-leftovers

Conversation

@yhh1008

@yhh1008 yhh1008 commented Oct 15, 2026 •

Copy link
Copy Markdown

Summary

f7a50ed removed the vendored docx, pdf, pptx and xlsx skills, but three references to them survived:

  • autoskill still names pptx as a sibling skill that slide prep matches.
  • The intro of scientific-slides' references/script_reference.md still says it covers "the pptx-skill scripts". The body no longer does.
  • CITATION.cff still describes a library of 163 skills. README and docs say 177, which matches skills/.

Type of change

  • Update to an existing skill
  • Documentation

Skills touched

  • autoskill (1.6 → 1.7)
  • scientific-slides (1.12 → 1.13)

How this was tested

uv run skills-ref validate ./skills/autoskill          # Valid skill
uv run skills-ref validate ./skills/scientific-slides  # Valid skill
python3 tests/run_all.py --isolated autoskill scientific-slides   # 2 passed, 0 failed

CITATION.cff parses as YAML. A repo-wide grep finds no other references to the removed skills, apart from docs/security-triage.md, which is out of scope here.

Checklist

  • metadata.version exists, is quoted, and is bumped for both changed skills.
  • skills-ref validate passes.
  • Relevant test suites pass.
  • Security scanner results are explained below.
  • No secrets, credentials or private data.

The other checklist items concern new skills or frontmatter structure. This PR changes neither.

Notes for reviewers

Security scan: The CRITICAL BEHAVIOR_*EXFILTRATION* findings already exist on main and are unrelated to this PR. This PR changes no scripts. The scanner rescans every skill a PR touches, so it re-reported autoskill/scripts/ and scientific-slides/scripts/; both skills are already CRITICAL in docs/security-report.md on main. docs/security-triage.md (lines 26 and 129–139) records them as the known pattern of reading a service credential and sending it to that declared service. The scanner's own LLM review downgrades both skills to LOW.

docs/skills.md has both "Laboratory Automation" (under Scientific Integrations) and "Laboratory Automation & Equipment Control" (under Scientific Packages). I left them as they are, because they look like deliberate integration vs. package groupings.

docs/security-triage.md still describes the 2026-09-13 report and includes triage rows for the removed skills. I left it alone, since updating it means re-triaging the findings, not editing text.

🤖 Generated with Claude Code

f7a50ed removed the vendored docx, pdf, pptx and xlsx skills, but a few
references survived:

- autoskill still listed `pptx` as a sibling that slide prep matches.
- scientific-slides' script reference still said it documents "the
  pptx-skill scripts"; the body no longer does.
- CITATION.cff still described a library of 163 skills; README and docs
  say 177, which matches skills/.

Bump autoskill to 1.7 and scientific-slides to 1.13.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🛡️ Skill Security Scan

Generated at 2026-10-15 22:03 UTC

Skills scanned: 2
Total findings: 16
Critical: 9 | High: 1 | Safe: 0/2

Skill Severity Findings Safe
autoskill 🔴 CRITICAL 6 ❌
scientific-slides 🔴 CRITICAL 5 ❌

Findings

autoskill — 🔴 CRITICAL (6 findings)
  • 🔴 CRITICAL BEHAVIOR_CROSSFILE_ENV_VAR_EXFILTRATION — Cross-file env var exfiltration: 3 files

    Environment variable access with network calls in scripts/backends.py, scripts/doctor.py, scripts/run.py
    Remediation: Review data flow across files: scripts/run.py, scripts/doctor.py, scripts/backends.py

  • 🔴 CRITICAL BEHAVIOR_CROSSFILE_EXFILTRATION_CHAIN — Cross-file exfiltration chain: 3 files

    Multi-file exfiltration chain detected: scripts/backends.py, scripts/doctor.py, scripts/run.py collect data → scripts/run.py → scripts/backends.py, scripts/doctor.py, scripts/run.py transmit to network
    Remediation: Review data flow across files: scripts/run.py, scripts/doctor.py, scripts/backends.py

  • 🔴 CRITICAL BEHAVIOR_ENV_VAR_EXFILTRATION — Environment variable access with network calls detected

    Script accesses environment variables and makes network calls in /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/autoskill/scripts/backends.py
    File: /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/autoskill/scripts/backends.py
    Remediation: Remove environment variable harvesting or network transmission

  • 🔴 CRITICAL BEHAVIOR_ENV_VAR_EXFILTRATION — Environment variable access with network calls detected

    Script accesses environment variables and makes network calls in /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/autoskill/scripts/doctor.py
    File: /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/autoskill/scripts/doctor.py
    Remediation: Remove environment variable harvesting or network transmission

  • 🔴 CRITICAL BEHAVIOR_ENV_VAR_EXFILTRATION — Environment variable access with network calls detected

    Script accesses environment variables and makes network calls in /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/autoskill/scripts/run.py
    File: /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/autoskill/scripts/run.py
    Remediation: Remove environment variable harvesting or network transmission

  • 🔵 LOW LLM_DATA_EXFILTRATION — Screen-history summaries and API tokens sent to user-configured LLM/Screenpipe endpoints

    Deterministic analyzers flagged env-var reads (SCREENPIPE_TOKEN, LM_API_TOKEN, ANTHROPIC_API_KEY, FOUNDRY_API_KEY) combined with HTTP requests as an exfiltration chain. Verification of the source shows these credentials are used only as Authorization/x-api-key headers for the declared services (local Screenpipe daemon, LM Studio loopback server, api.anthropic.com, or a user-supplied Foundry endpoint from config.yaml). The package additionally implements defensive controls: check_remote_endpoint() rejects plaintext HTTP to non-loopback hosts, forbids credentials/query/fragment in the base URL, and prints a stderr notice naming any non-loopback destination; redact.py scrubs secrets, emails and phone patterns from event text before synthesis; fetch_window explicitly disables cloud results, frames and remote filter_pii. Residual risk is inherent to the skill's stated purpose: screen-derived cluster summaries can be sent to an opt-in cloud backend whose endpoint is user-configurable, so a misconfigured or attacker-supplied config.yaml could direct summaries to an unintended HTTPS host. No hidden destination, hardcoded exfil sink, or concealment from the user was found.
    File: config.yaml
    Remediation: Keep the local backend default, require explicit user confirmation before switching backend to a non-loopback endpoint, and review config.yaml's foundry.endpoint/screenpipe.url values before each run.

scientific-slides — 🔴 CRITICAL (5 findings)
  • 🔴 CRITICAL BEHAVIOR_CROSSFILE_ENV_VAR_EXFILTRATION — Cross-file env var exfiltration: 4 files

    Environment variable access with network calls in scripts/generate_schematic_ai.py, scripts/generate_slide_image.py, scripts/generate_slide_image_ai.py, scripts/generate_schematic.py
    Remediation: Review data flow across files: scripts/generate_slide_image.py, scripts/generate_slide_image_ai.py, scripts/generate_schematic_ai.py, scripts/generate_schematic.py

  • 🔴 CRITICAL BEHAVIOR_CROSSFILE_EXFILTRATION_CHAIN — Cross-file exfiltration chain: 4 files

    Multi-file exfiltration chain detected: scripts/generate_schematic_ai.py, scripts/generate_slide_image.py, scripts/generate_slide_image_ai.py, scripts/generate_schematic.py collect data → scripts/generate_schematic_ai.py, scripts/generate_slide_image_ai.py → scripts/generate_schematic_ai.py, scripts/generate_slide_image_ai.py transmit to network
    Remediation: Review data flow across files: scripts/generate_slide_image.py, scripts/generate_slide_image_ai.py, scripts/generate_schematic_ai.py, scripts/generate_schematic.py

  • 🔴 CRITICAL BEHAVIOR_ENV_VAR_EXFILTRATION — Environment variable access with network calls detected

    Script accesses environment variables and makes network calls in /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/scientific-slides/scripts/generate_schematic_ai.py
    File: /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/scientific-slides/scripts/generate_schematic_ai.py
    Remediation: Remove environment variable harvesting or network transmission

  • 🔴 CRITICAL BEHAVIOR_ENV_VAR_EXFILTRATION — Environment variable access with network calls detected

    Script accesses environment variables and makes network calls in /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/scientific-slides/scripts/generate_slide_image_ai.py
    File: /home/runner/work/scientific-agent-skills/scientific-agent-skills/skills/scientific-slides/scripts/generate_slide_image_ai.py
    Remediation: Remove environment variable harvesting or network transmission

  • 🔵 LOW LLM_DATA_EXFILTRATION — OpenRouter API key read from environment and .env files for declared image-generation service

    Deterministic rules flagged environment-variable exfiltration chains in generate_schematic_ai.py and generate_slide_image_ai.py. Verification against the source shows the only credential handled is OPENROUTER_API_KEY, which the manifest explicitly declares (openclaw.primaryEnv) and which is required for the skill's stated purpose of generating slide images via OpenRouter. The key is resolved from --api-key, the environment, or a .env file, and is sent only as an Authorization: Bearer header to https://openrouter.ai/api/v1. The code additionally redacts the key from error messages and the subprocess wrappers forward a minimal allow-listed environment rather than the whole parent environment. The residual contextual risk is the recursive upward .env scan from the working directory, which could pick up a credential from a parent project the user did not intend to use; this is still limited to the one declared variable and the declared destination. No other local files, environment variables, or conversation content are transmitted. The deterministic CRITICAL verdicts are not supported by the package content.
    File: scripts/generate_slide_image_ai.py
    Remediation: Optionally limit the .env search to the project root or the script directory instead of walking all parent directories, and document that prompts and attached images are transmitted to OpenRouter and the selected model provider.

@yhh1008
yhh1008 requested a review from timothykassis October 15, 2026 22:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant