github runkids/skillshare v0.29.0

2 hours ago

skillshare v0.29.0 Release Notes

TL;DR

  1. Audit looks inside more of a skill. Bundled hooks and settings, references that leave the skill folder, disguised executables, whitespace padding, cloud metadata and internal request targets, and unsafe deserialization are all checked now.
  2. --min-severity trims the report, not the gate. Lower findings disappear from the terminal and Markdown report; scores, blocking, exit codes, JSON and SARIF stay the same.
  3. A partial scan says so. When a followed source link cannot be read, every report and the dashboard mark the scan incomplete.
  4. Switch a skill's branch from the dashboard. A skill installed from a branch shows it, and its detail page can reinstall it from another one.
  5. Project registrations stay on one machine. project add no longer writes one machine's paths into a config you sync to others.

New: audit checks

All of these run in skillshare audit, in install and update audits, and in the dashboard. Each rule can be disabled or re-rated by ID in audit-rules.yaml.

  • Bundled hooks and settings. hooks.json, hooks/hooks.json, .claude/settings.json and .claude/settings.local.json inside a skill are parsed. Hook commands are MEDIUM, and HIGH when they reach the network or upload data. apiKeyHelper and statusLine commands and unrestricted permissions such as Bash(*), bare Bash or bypassPermissions are HIGH. Narrow entries such as Bash(git diff:*) stay clean, and credential values are redacted in findings. (#752)

  • References that leave the skill. Markdown links and images are checked along with code paths and path: declarations. A reference that escapes the skill folder through .., a home or drive path, or a symlink is HIGH reference-escapes-root; a missing target stays LOW dangling-link. doctor runs the same check and reports escapes as errors. (#754)

  • Sensitive destinations and unsafe deserialization. Cloud metadata endpoints are CRITICAL, requests to loopback, private or .internal/.local hosts are MEDIUM, and unsafe deserialization (Python pickle, marshal and unsafe YAML loaders, PHP unserialize, Ruby Marshal.load, node-serialize) is HIGH in files of that language. PHP files are scanned now. A rule can be limited to some files with the new files key:

    rules:
      - id: unsafe-deserialization-python
        files: ['*.py', 'scripts/*.txt']

    (#753)

  • Whitespace padding. whitespace-padding finds text pushed out of view: 20 or more blank lines before more text (MEDIUM, HIGH from 40), 80 or more leading spaces, files that are almost all whitespace, and 100 or more repeated lines. Code blocks and tables in Markdown are exempt. (#755)

  • Disguised executables. File headers are read before extensions. A native executable, WASM module or shebang script named like a document, image or configuration file, or kept under .cache or __pycache__, is HIGH; other executables are MEDIUM. Compiled Python bytecode is HIGH, or MEDIUM when its source sits beside it. Reports in every format, including the dashboard, now count skipped, binary and oversized files. (#756)

New findings raise risk scores. The default threshold blocks at CRITICAL, so of these checks only a cloud metadata endpoint in code (a source file or a code block) blocks an install by default; the HIGH ones block under a HIGH threshold or the strict profile.

New: display-only minimum severity

skillshare audit --min-severity high
skillshare audit --format markdown --min-severity medium

--min-severity hides lower findings in the text report, the TUI and Markdown. Risk scores, the blocking threshold, the exit code, and JSON and SARIF output are unchanged, so CI gates behave as before. A clean or blocked skill stays listed even when the floor hides all of its findings. (#751, #785)

New: incomplete scans stay visible

With follow_source_links on, a linked folder that cannot be read is skipped, and so are its skills. JSON already reported this with warnings and incomplete: true. Now:

  • Markdown reports list the links under Source links not followed, even under --min-severity.
  • The TUI summary line starts with scan incomplete: N source link(s) not followed.
  • The dashboard shows Scan incomplete beside the Audit tabs, warns after a scan instead of reporting all clear, and lists it under Needs attention.
  • GET /api/audit adds warnings and incomplete with the same meaning as the CLI's JSON.

(#786)

New: switch a skill's branch in the dashboard

A skill installed with install --branch shows its branch in the Skills list, on its tile and on the Updates tab. Its detail page has a Branch picker for skills installed from GitHub, GitLab or Bitbucket. Picking a branch asks first, then reinstalls the skill from that branch with the same audit and local-changes check as an update. If that branch has no such skill, the install stays as it was. In a project, the new branch is written to .skillshare/config.yaml so teammates install from it. Tracked repos keep changing branch through Git Sync. (#783, #784)

New: Herdr panel

  • Hooks tab. Hooks are listed next to skills, agents, MCP servers and plugins, and sync with sync --all. A top-level hook can be enabled, disabled or removed after a confirmation. (#780)
  • Tidier lists. Disabled rows are hidden until you choose Show disabled, and In sync skills and agents can be grouped by source repository. Opening a plugin or MCP row shows its source, version and targets. (#782)

Fixed: project registrations stay on one machine

project add, edit and remove, and the dashboard's Projects page, wrote registrations into the shared global config. When that config was synced through Git, one machine's project paths showed up on the others. Registrations now live in machine-local state: ~/.local/state/skillshare/projects on macOS and Linux, %LOCALAPPDATA%\skillshare\state\projects on Windows.

Existing shared projects: entries keep working and need no migration. To move one into local state on a single machine without removing it elsewhere:

skillshare project localize shop-web --dry-run
skillshare project localize shop-web

(#769)

Contributors

@salmonumbrella, @chung1912

Don't miss a new skillshare release

NewReleases is sending notifications on new releases.