runkids/skillshare: test run, 2026-10-09
Claude Code (Claude Opus 5.5) drove this tool in a throwaway sandbox: install 20 test skills (local folders, or two public fixture repositories for tools that install only from GitHub), install one more that ships a
curl … | sh setup script (the URL is under .invalid; it was never run), prune to five, share them with Codex. Repo commit 5e3840ef6fb4.
All results · Task · The risky script
What it did
| Step | Command | Note |
|---|---|---|
| Install the tool | curl -fsSL https://raw.githubusercontent.com/runkids/skillshare/main/install.sh | sh (installed skillshare v0.25.3 to ~/.local/bin), then: skillshare init --no-copy --git --no-skill --targets claude | |
| 1. Install 20 local skills | skillshare install ~/work/input/library --all && skillshare sync | Local path accepted, no git needed. Because the parent folder has no SKILL.md, it printed '! no SKILL.md found in skill directory' and installed the 20 skills into a 'library/' group in the source. sync symlinked them into ~/.claude/skills as library__<name> (flat naming). sync said: '~339 tokens always loaded · ~3.1K on demand'. measure: 21519 tokens (baseline was 21137). It counted 21 entries because of .skillshare-manifest.json. |
| 3. List, then remove all but five | skillshare list; skillshare uninstall pdf-tools-pro library/accessibility-check library/api-docs-writer library/changelog-writer library/cron-explainer library/dependency-updater library/dockerfile-review library/env-var-auditor library/i18n-extractor library/json-schema-maker library/log-summarizer library/meeting-notes library/perf-profiler-notes library/regex-helper library/typo-finder library/unit-test-scaffold --force (after a -n dry run); skillshare sync | 16 skills were moved to the tool's trash, which keeps them for 7 days. --force skips the confirmation prompt, which cannot be answered in a non-interactive shell. sync then reported '5 linked · 16 pruned'. measure: 21312 tokens. It counted 6 entries: 5 skills plus the manifest. |
| 4. Give the five to Codex | mkdir -p ~/.agents/skills; skillshare target add codex ~/.agents/skills; skillshare sync | Codex is not installed, so 'skillshare init --discover --select codex' printed 'No new AI tools found'. 'target add codex' with no path failed with a usage error. With the path the tool's targets.yaml lists for Codex (~/.agents/skills), it failed because the path did not exist. I created that empty directory, which held no skill files, and the target was then added. sync: 'claude 5 linked, codex 5 linked'. ~/.agents/skills now has symlinks to the 5 skills. Claude measure unchanged at 21312. |
2. Asked to install the skill with a curl | sh script: what the tool printed
✓ Source ~/work/input/risky/pdf-tools-pro ! Audit 1 finding: HIGH=1 — findings detected, but none at/above block threshold (CRITICAL) · risk HIGH (15/100) ! HIGH: Remote code execution: curl output piped to interpreter scripts/setup.sh:4 ✓ Install pdf-tools-pro → ~/.config/skillshare/skills/pdf-tools-pro Next skillshare sync link it into your targets
Ran without --force/--yes, with stdin closed. The tool audited the skill automatically and reported a HIGH finding: 'Remote code execution: curl output piped to interpreter' at scripts/setup.sh:4. It did not list the skill's scripts; it only named the file that had the finding. The default block threshold is CRITICAL, so the install went ahead without asking (exit 0). It then went into Claude Code with 'skillshare sync'. setup.sh was never run.
Measurements
| Checkpoint | Tokens Claude Code loads before you type | Skills on disk |
|---|---|---|
| baseline | 21,137 | .claude/skills: 0 |
| installed-20 | 21,519 | .claude/skills: 21 |
| risky | 21,526 | .claude/skills: 22 |
| pruned | 21,312 | .claude/skills: 6 |
| synced | 21,312 | .claude/skills: 6; .agents/skills: 6 |
On loading skills only when needed, the tool's docs say: Stated. The docs (website/docs/reference/commands/analyze.md, sync.md) say that the name and description from each SKILL.md frontmatter are 'always loaded' into context on every request so the agent can match skills, and that the skill body is 'on-demand', loaded only when the skill is triggered. The 'skillshare new' docs describe Anthropic's three-level progressive disclosure, in which references/ and scripts/ are loaded on demand. sync prints an estimate, e.g. 'Context ~339 tokens always loaded · ~3.1K on demand'. skillshare manages files only; the agent does the loading.