Update skills

This commit is contained in:
admin
2026-02-04 17:14:10 +00:00
parent 2a3dedde11
commit a33c69835b
22 changed files with 2158 additions and 348 deletions

View File

@@ -1,8 +1,8 @@
{
"source": "github.com/runkids/skillshare/skills/skillshare",
"type": "github-subdir",
"installed_at": "2026-01-29T15:54:54.355308942Z",
"installed_at": "2026-02-03T23:38:45.924722073Z",
"repo_url": "https://github.com/runkids/skillshare.git",
"subdir": "skills/skillshare",
"version": "0134ec0"
"version": "1bbfb66"
}

View File

@@ -1,108 +1,90 @@
---
name: skillshare
version: 0.6.4
description: Syncs skills across AI CLI tools from a single source of truth. Use when asked to "sync skills", "pull skills", "show status", "list skills", "install skill", "initialize skillshare", or manage skill targets.
version: 0.8.2
description: |
Syncs skills across AI CLI tools (Claude, Cursor, Windsurf, etc.) from a single source of truth.
Use when: "sync skills", "install skill", "search skills", "list skills", "show skill status",
"backup skills", "restore skills", "update skills", "new skill", "collect skills",
"push/pull skills", "add/remove target", "find a skill for X", "is there a skill that can...",
"how do I do X with skills", "skillshare init", "skillshare upgrade", "skill not syncing",
"diagnose skillshare", "doctor", or any skill/target management across AI tools.
argument-hint: "[command] [target] [--dry-run]"
---
# Skillshare CLI
```
Source: ~/.config/skillshare/skills ← Edit here (single source of truth)
↓ sync
Targets: ~/.claude/skills, ~/.cursor/skills, ... ← Symlinked from source
Source: ~/.config/skillshare/skills ← Single source of truth
↓ sync (symlinks)
Targets: ~/.claude/skills, ~/.cursor/skills, ...
```
## Quick Reference
## Quick Start
```bash
skillshare status # Always run first
skillshare sync # Push to all targets
skillshare sync --dry-run # Preview changes
skillshare pull claude # Import from target → source
skillshare list # Show skills and tracked repos
skillshare status # Check state
skillshare sync --dry-run # Preview
skillshare sync # Execute
```
## Command Patterns
## Commands
| Intent | Command |
|--------|---------|
| Sync skills | `skillshare sync` |
| Preview first | `skillshare sync --dry-run` then `sync` |
| Create new skill | `skillshare new <name>` then `sync` |
| Pull from target | `skillshare pull <name>` then `sync` |
| Install skill | `skillshare install <source>` then `sync` |
| Install from repo (browse) | `skillshare install owner/repo` (discovery mode) |
| Install team repo | `skillshare install <git-url> --track` then `sync` |
| Update skill/repo | `skillshare update <name>` then `sync` |
| Update all tracked | `skillshare update --all` then `sync` |
| Remove skill | `skillshare uninstall <name>` then `sync` |
| List skills | `skillshare list` or `list --verbose` |
| Cross-machine push | `skillshare push -m "message"` |
| Cross-machine pull | `skillshare pull --remote` |
| Backup/restore | `skillshare backup --list`, `restore <target>` |
| Add custom target | `skillshare target add <name> <path>` |
| Change sync mode | `skillshare target <name> --mode merge\|symlink` |
| Upgrade CLI/skill | `skillshare upgrade` |
| Diagnose issues | `skillshare doctor` |
| Category | Commands |
|----------|----------|
| **Inspect** | `status`, `diff`, `list`, `doctor` |
| **Sync** | `sync`, `collect`, `push`, `pull` |
| **Skills** | `new`, `install`, `uninstall`, `update`, `search` |
| **Targets** | `target add/remove/list`, `backup`, `restore` |
| **Upgrade** | `upgrade [--cli\|--skill]` |
## Init (Non-Interactive)
**Workflow:** Most commands require `sync` afterward to distribute changes.
**CRITICAL:** Use flags — AI cannot respond to CLI prompts.
## AI Usage Notes
**Source path:** Always use default `~/.config/skillshare/skills`. Only use `--source` if user explicitly requests a different location.
### Non-Interactive Mode
AI cannot respond to CLI prompts. Always use flags:
**Step 1:** Check existing skills
```bash
# Init - check existing skills first
ls ~/.claude/skills ~/.cursor/skills 2>/dev/null | head -10
# Then run with appropriate flags
skillshare init --copy-from claude --all-targets --git # If skills exist
skillshare init --no-copy --all-targets --git # Fresh start
# Add new agents later
skillshare init --discover --select "windsurf,kilocode"
```
**Step 2:** Run init based on findings
### Safety
| Found | Command |
|-------|---------|
| Skills in one target | `skillshare init --copy-from <name> --all-targets --git` |
| Skills in multiple | Ask user which to import |
| No existing skills | `skillshare init --no-copy --all-targets --git` |
**NEVER** `rm -rf` symlinked skills — deletes source. Always use:
- `skillshare uninstall <name>` to remove skills
- `skillshare target remove <name>` to unlink targets
**Step 3:** `skillshare status`
### Finding Skills
**Adding new agents later (AI must use --select):**
```bash
skillshare init --discover --select "windsurf,kilocode" # Non-interactive (AI use this)
# skillshare init --discover # Interactive only (NOT for AI)
```
See [init.md](references/init.md) for all flags.
## Team Edition
When users ask "how do I do X" or "find a skill for...":
```bash
skillshare install github.com/team/skills --track # Install as tracked repo
skillshare update _team-skills # Update later
skillshare search <query> # Interactive install
skillshare search <query> --list # List only
skillshare search <query> --json # JSON output
```
Tracked repos: `_` prefix, nested paths use `__` (e.g., `_team__frontend__ui`).
**Query examples:** `react performance`, `pr review`, `commit`, `changelog`
**Naming convention:** Use `{team}:{name}` in SKILL.md to avoid collisions.
## Safety
- **NEVER** `rm -rf` on symlinked skills — deletes source
- Use `skillshare uninstall <name>` to safely remove
## Zero-Install
```bash
curl -fsSL https://raw.githubusercontent.com/runkids/skillshare/main/skills/skillshare/scripts/run.sh | sh -s -- status
```
**No results?** Try different keywords, or offer to help directly.
## References
- [init.md](references/init.md) - Init flags
- [sync.md](references/sync.md) - Sync, pull, push
- [install.md](references/install.md) - Install, update, uninstall
- [status.md](references/status.md) - Status, diff, list, doctor
- [targets.md](references/targets.md) - Target management
- [backup.md](references/backup.md) - Backup, restore
- [TROUBLESHOOTING.md](references/TROUBLESHOOTING.md) - Recovery
| Topic | File |
|-------|------|
| Init flags | [init.md](references/init.md) |
| Sync/collect/push/pull | [sync.md](references/sync.md) |
| Install/update/new | [install.md](references/install.md) |
| Status/diff/list/search | [status.md](references/status.md) |
| Target management | [targets.md](references/targets.md) |
| Backup/restore | [backup.md](references/backup.md) |
| Troubleshooting | [TROUBLESHOOTING.md](references/TROUBLESHOOTING.md) |

View File

@@ -1,143 +1,68 @@
# Skillshare Troubleshooting
# Troubleshooting
Common issues, solutions, and tips for AI assistants.
## Quick Fixes
## Common Issues
| Problem | Solution |
|---------|----------|
| "config not found" | `skillshare init` |
| Target shows differences | `skillshare sync` |
| Lost source files | `cd ~/.config/skillshare/skills && git checkout -- .` |
| Skill not appearing | `skillshare sync` after install |
| Git push fails | Check remote: `git -C ~/.config/skillshare/skills remote -v` |
| Problem | Diagnosis | Solution |
|---------|-----------|----------|
| "config not found" | Config missing | Run `skillshare init` |
| Target shows differences | Files out of sync | Run `skillshare sync` |
| Lost source files | Deleted via symlink | `cd ~/.config/skillshare/skills && git checkout -- <skill>/` |
| Target has local skills | Need to preserve | Ensure `merge` mode, then `skillshare pull` before sync |
| Skill not appearing | Not synced yet | Run `skillshare sync` after install |
| Can't find installed skills | Wrong directory | Check `skillshare status` for source path |
| "permission denied" | Symlink issues | Check file ownership and permissions |
| Git remote not set | Push fails | Run `git remote add origin <url>` in source |
## Recovery Workflow
When something goes wrong:
## Diagnostic Commands
```bash
skillshare doctor # 1. Diagnose issues
skillshare backup # 2. Create safety backup
skillshare sync --dry-run # 3. Preview fix
skillshare sync # 4. Apply fix
skillshare doctor # Check environment
skillshare status # Overview
skillshare diff # Show differences
ls -la ~/.claude/skills # Check symlinks
```
## Recovery
```bash
skillshare backup # Safety backup first
skillshare sync --dry-run # Preview changes
skillshare sync # Apply fix
```
## Git Recovery
If source files were accidentally deleted:
```bash
cd ~/.config/skillshare/skills
git status # See what's missing
git checkout -- <skill-name>/ # Restore specific skill
git checkout -- . # Restore all deleted files
git status # Check state
git checkout -- <skill>/ # Restore specific skill
git checkout -- . # Restore all skills
```
If you need to restore from backup:
## AI Assistant Notes
### Symlink Safety
- **merge mode** (default): Per-skill symlinks. Edit anywhere = edit source.
- **symlink mode**: Entire directory symlinked.
**Safe commands:** `skillshare uninstall`, `skillshare target remove`
**DANGEROUS:** `rm -rf` on symlinked skills deletes source!
### Non-Interactive Usage
AI cannot respond to CLI prompts. Always use flags:
```bash
skillshare backup --list # List available backups
skillshare restore claude --from <timestamp>
# Good (non-interactive)
skillshare init --copy-from claude --all-targets --git
skillshare uninstall my-skill --force
# Bad (requires user input)
skillshare init
skillshare uninstall my-skill
```
## Tips for AI Assistants
### Symlink Behavior
Understanding symlinks is critical:
1. **merge mode** (default): Each skill in target is a symlink to source
- Editing `~/.claude/skills/my-skill/SKILL.md` edits the source
- Changes are immediate and affect all targets
- Safe: `skillshare uninstall my-skill`
- **DANGEROUS**: `rm -rf ~/.claude/skills/my-skill` - deletes source!
2. **symlink mode**: Entire target directory is a symlink
- `~/.claude/skills``~/.config/skillshare/skills`
- All targets are identical
- No local skills possible
### When to Use --dry-run
Always use `--dry-run` in these situations:
- User is cautious or new to skillshare
- Before `sync` on first use
- Before `pull --all` to see what will be imported
- First-time operations
- Before `sync`, `collect --all`, `restore`
- Before `install` from unknown sources
- Before `restore` to preview what will change
- Before `target remove` to understand impact
### Safe vs Dangerous Operations
**Safe operations:**
```bash
skillshare target remove <name> # Removes symlinks, keeps source
skillshare uninstall <name> # Removes skill properly
skillshare sync # Creates/updates symlinks
```
**NEVER do this:**
```bash
rm -rf ~/.claude/skills/my-skill # Deletes source via symlink!
rm -rf ~/.claude/skills # May delete entire source!
```
### Creating New Skills
Guide users to create skills in source:
1. Create directory: `~/.config/skillshare/skills/<skill-name>/`
2. Create `SKILL.md` with required frontmatter:
```yaml
---
name: skill-name
description: What this skill does
---
```
3. Run `skillshare sync` to distribute
### Git Workflow Reminders
After any skill changes, remind user to push:
```bash
skillshare push # Simple: commit + push
skillshare push -m "Add new skill" # With custom message
```
### Handling Init Prompts
AI cannot respond to CLI prompts. When user asks to initialize:
1. Ask clarifying questions in chat
2. Build the command with appropriate flags
3. Run non-interactively
Example conversation:
- AI: "Do you have existing skills to copy from Claude or another tool?"
- User: "Yes, from Claude"
- AI: "Which CLI tools should I set up as targets?"
- User: "Claude and Cursor"
- AI: "Should I initialize git for version control?"
- User: "Yes"
- AI runs: `skillshare init --copy-from claude --targets "claude,cursor" --git`
### Debugging Sync Issues
If sync seems stuck or wrong:
```bash
skillshare status # Check current state
skillshare diff # See actual differences
ls -la ~/.claude/skills # Check symlink targets
```
Look for:
- Broken symlinks (pointing to non-existent files)
- Regular files instead of symlinks
- Wrong symlink targets

View File

@@ -1,23 +1,29 @@
# Backup & Restore Commands
# Backup & Restore
## backup
Creates backup of target skills.
Create backups of target skill directories.
```bash
skillshare backup # Backup all targets
skillshare backup claude # Backup specific target
skillshare backup --list # List available backups
skillshare backup # All targets
skillshare backup claude # Specific target
skillshare backup --list # List existing backups
skillshare backup --cleanup # Remove old backups
```
Backups stored in: `~/.config/skillshare/backups/<timestamp>/`
**Location:** `~/.config/skillshare/backups/<timestamp>/`
## restore
Restores skills from backup.
Restore target from backup.
```bash
skillshare restore claude # From latest backup
skillshare restore claude --from 2026-01-14_21-22-18 # From specific backup
skillshare restore claude # Latest backup
skillshare restore claude --from 2026-01-14_21-22 # Specific backup
```
## Best Practices
- Run `backup` before major changes
- Use `--dry-run` with restore to preview
- Keep backups with `--cleanup` to save disk space

View File

@@ -1,71 +1,44 @@
# Init Command
Initializes skillshare configuration.
Initialize skillshare configuration.
## Key Concept
**Source:** Always `~/.config/skillshare/skills` (use `--source` only if user explicitly requests).
**Source is always `~/.config/skillshare/skills`** — never a CLI directory like `.claude/skills`.
- `--copy-from claude` = import skills FROM claude INTO source
- `--copy-from` does NOT change where source is located
## Copy Source Flags (mutually exclusive)
## Flags
| Flag | Description |
|------|-------------|
| `--copy-from <name\|path>` | Copy skills from target name or directory path |
| `--copy-from <name\|path>` | Import skills from target/path |
| `--no-copy` | Start with empty source |
## Target Flags (mutually exclusive)
| Flag | Description |
|------|-------------|
| `--targets <list>` | Comma-separated targets: `"claude,cursor,codex"` |
| `--all-targets` | Add all detected CLI targets |
| `--targets "claude,cursor"` | Specific targets |
| `--all-targets` | All detected targets |
| `--no-targets` | Skip target setup |
| `--git` | Initialize git repo |
| `--no-git` | Skip git init |
| `--discover` | Discover new AI tools (interactive) |
| `--discover --select "a,b"` | Non-interactive discovery |
| `--source <path>` | Custom source path |
| `--remote <url>` | Set git remote |
| `--dry-run` | Preview changes |
## Git Flags (mutually exclusive)
| Flag | Description |
|------|-------------|
| `--git` | Initialize git in source (recommended) |
| `--no-git` | Skip git initialization |
## Discover Flags (for adding new agents to existing config)
| Flag | Description |
|------|-------------|
| `--discover` | Detect and add new agents to existing config (interactive) |
| `--select <list>` | Comma-separated agents to add (non-interactive, requires `--discover`) |
## Other Flags
| Flag | Description |
|------|-------------|
| `--source <path>` | Custom source directory (**only if user explicitly requests**) |
| `--remote <url>` | Set git remote (implies `--git`) |
| `--dry-run` | Preview without making changes |
**AI Note:** Never use `--source` unless the user explicitly asks to change the source location.
## Examples
## AI Usage (Non-Interactive)
```bash
# Fresh start with all targets and git
# Step 1: Check for existing skills
ls ~/.claude/skills ~/.cursor/skills 2>/dev/null | head -10
# Step 2a: Fresh start
skillshare init --no-copy --all-targets --git
# Copy from Claude, specific targets
skillshare init --copy-from claude --targets "claude,cursor" --git
# Step 2b: Import existing skills
skillshare init --copy-from claude --all-targets --git
# Minimal setup
skillshare init --no-copy --no-targets --no-git
# Custom source with remote
skillshare init --source ~/my-skills --remote git@github.com:user/skills.git
# Add new agents to existing config (non-interactive)
skillshare init --discover --select "windsurf,kilocode"
# Add new agents (interactive)
skillshare init --discover
# Step 3: Verify
skillshare status
```
## Adding New Targets Later
```bash
skillshare init --discover --select "windsurf,kilocode"
```

View File

@@ -1,62 +1,87 @@
# Install, Update & Uninstall
# Install, Update, Uninstall & New
## install
Adds a skill from various sources.
Install skills from local path or git repository.
### Source Formats
```bash
# GitHub shorthand (auto-expands to github.com/...)
skillshare install owner/repo # Discovery mode
skillshare install owner/repo/path/to/skill # Direct path
# GitHub shorthand
user/repo # Browse repo for skills
user/repo/path/to/skill # Direct path
# Full URLs
skillshare install github.com/user/repo # Discovery mode
skillshare install github.com/user/repo/skill # Direct path
skillshare install git@github.com:user/repo.git # SSH
github.com/user/repo # Discovers skills in repo
github.com/user/repo/path # Direct subdirectory
https://github.com/... # HTTPS URL
git@github.com:... # SSH URL
# Local
skillshare install ~/Downloads/my-skill
# Team repo (preserves .git for updates)
skillshare install github.com/team/skills --track
~/path/to/skill # Local directory
```
**Flags:**
### Examples
```bash
skillshare install anthropics/skills # Browse official skills
skillshare install anthropics/skills/skills/pdf # Direct install
skillshare install ~/Downloads/my-skill # Local
skillshare install github.com/team/repo --track # Team repo
```
### Flags
| Flag | Description |
|------|-------------|
| `--name <name>` | Custom skill name |
| `--name <n>` | Override skill name |
| `--force, -f` | Overwrite existing |
| `--update, -u` | Update existing (git pull or reinstall) |
| `--track, -t` | Install as tracked repo (Team Edition) |
| `--dry-run, -n` | Preview without installing |
| `--update, -u` | Update if exists |
| `--track, -t` | Track for updates (preserves .git) |
| `--dry-run, -n` | Preview |
After install: `skillshare sync`
**Tracked repos:** Prefixed with `_`, nested with `__` (e.g., `_team__frontend__ui`).
**After install:** `skillshare sync`
## update
Updates skills or tracked repos.
Update installed skills or tracked repositories.
- **Tracked repos (`_repo-name`):** Runs `git pull`
- **Regular skills:** Reinstalls from stored source metadata
```bash
skillshare update my-skill # Update from stored source
skillshare update _team-repo # Git pull tracked repo
skillshare update --all # Update all tracked repos
skillshare update _repo --force # Discard local changes and update
skillshare update _team-skills # Git pull tracked repo
skillshare update team-skills # _ prefix is optional
skillshare update --all # All tracked repos + skills
skillshare update --all -n # Preview updates
skillshare update _repo --force # Discard local changes
```
Safety: Repos with uncommitted changes are blocked by default.
Use `--force` to discard local changes and pull latest.
**Safety:** Tracked repos with uncommitted changes are skipped. Use `--force` to override.
After update: `skillshare sync`
**After update:** `skillshare sync`
## uninstall
Removes a skill from source.
Remove a skill from source.
```bash
skillshare uninstall my-skill # With confirmation
skillshare uninstall my-skill --force # Skip confirmation
skillshare uninstall my-skill --dry-run
```
After uninstall: `skillshare sync`
**After uninstall:** `skillshare sync`
## new
Create a new skill template.
```bash
skillshare new <name> # Create SKILL.md template
skillshare new <name> --dry-run # Preview
```
**After create:** Edit SKILL.md → `skillshare sync`

View File

@@ -2,28 +2,15 @@
## status
Shows source location, targets, and sync state.
Overview of source, targets, and sync state.
```bash
skillshare status
```
**Expected output:**
```
Source: ~/.config/skillshare/skills (4 skills)
Targets:
claude ✓ synced ~/.claude/skills
codex ✓ synced ~/.codex/skills
cursor ⚠ 1 diff ~/.cursor/skills
Version:
✓ CLI: 0.6.4
✓ Skill: 0.6.4 (up to date)
```
## diff
Shows differences between source and targets.
Show differences between source and targets.
```bash
skillshare diff # All targets
@@ -32,16 +19,35 @@ skillshare diff claude # Specific target
## list
Lists installed skills.
List installed skills.
```bash
skillshare list # Basic list
skillshare list --verbose # With source and install info
skillshare list --verbose # With source info
```
## search
Search GitHub for skills (repos containing SKILL.md).
```bash
skillshare search <query> # Interactive (select to install)
skillshare search <query> --list # List only
skillshare search <query> --json # JSON output
skillshare search <query> -n 10 # Limit results (default: 20)
```
**Requires:** GitHub auth (`gh` CLI or `GITHUB_TOKEN` env var).
**Query examples:**
- `react performance` - Performance optimization
- `pr review` - Code review skills
- `commit` - Git commit helpers
- `changelog` - Changelog generation
## doctor
Checks configuration health and diagnoses issues.
Diagnose configuration and environment issues.
```bash
skillshare doctor
@@ -49,7 +55,7 @@ skillshare doctor
## upgrade
Upgrades CLI binary and/or built-in skillshare skill.
Upgrade CLI binary and/or built-in skillshare skill.
```bash
skillshare upgrade # Both CLI + skill
@@ -59,4 +65,4 @@ skillshare upgrade --force # Skip confirmation
skillshare upgrade --dry-run # Preview
```
After upgrading skill: `skillshare sync`
**After upgrading skill:** `skillshare sync`

View File

@@ -1,41 +1,55 @@
# Sync, Pull & Push Commands
# Sync, Collect, Push & Pull
| Command | Direction | Description |
|---------|-----------|-------------|
| `sync` | Source → Targets | Distribute skills to all targets |
| `collect` | Targets → Source | Import skills from target(s) |
| `push` | Source → Remote | Git commit and push |
| `pull` | Remote → Source → Targets | Git pull and sync |
## sync
Pushes skills from source to all targets.
Distribute skills from source to all targets via symlinks.
```bash
skillshare sync # Execute sync
skillshare sync --dry-run # Preview only
skillshare sync # Execute
skillshare sync --dry-run # Preview
skillshare sync --force # Override conflicts
```
## pull
## collect
Brings skills from target(s) to source.
Import skills from target(s) to source.
```bash
skillshare pull claude # Pull from specific target
skillshare pull --all # Pull from all targets
skillshare pull --remote # Pull from git remote + sync all
skillshare collect claude # From specific target
skillshare collect --all # From all targets
skillshare collect --dry-run # Preview
```
## push
Commits and pushes source to git remote.
Git commit and push source to remote.
```bash
skillshare push # Default commit message
skillshare push -m "message" # Custom commit message
skillshare push --dry-run # Preview only
skillshare push # Default message
skillshare push -m "message" # Custom message
skillshare push --dry-run # Preview
```
## Workflows
## pull
**Local workflow:**
1. Create skill in any target (e.g., `~/.claude/skills/my-skill/`)
2. `skillshare pull claude` - bring to source
3. `skillshare sync` - distribute to all targets
Git pull from remote and sync to all targets.
**Cross-machine workflow:**
1. Machine A: `skillshare push` - commit and push to remote
2. Machine B: `skillshare pull --remote` - pull from remote + sync
```bash
skillshare pull # Pull + sync
skillshare pull --dry-run # Preview
```
## Common Workflows
**Local editing:** Edit skill anywhere → `sync` (symlinks update source automatically)
**Import local changes:** `collect <target>``sync`
**Cross-machine sync:** Machine A: `push` → Machine B: `pull`

View File

@@ -1,33 +1,30 @@
# Target Management
## target
Manage AI CLI tool targets (Claude, Cursor, Windsurf, etc.).
Manages sync targets.
## Commands
```bash
skillshare target list # List all targets
skillshare target claude # Show target info
skillshare target add myapp ~/.myapp/skills # Add custom target
skillshare target remove myapp # Remove target
skillshare target remove myapp # Remove target (safe)
```
## Sync Modes
```bash
skillshare target claude --mode merge # Individual skill symlinks (default)
skillshare target claude --mode symlink # Entire directory symlinked
skillshare target claude --mode merge # Per-skill symlinks (default)
skillshare target claude --mode symlink # Entire dir symlinked
```
**Mode comparison:**
| Mode | Description | Local Skills |
|------|-------------|--------------|
| `merge` | Individual symlinks per skill | Preserved |
| `symlink` | Single symlink for entire dir | Not possible |
| Mode | Behavior | Local Skills |
|------|----------|--------------|
| `merge` | Creates individual symlinks for each skill | Preserved |
| `symlink` | Entire target directory is a symlink | Not possible |
## Safety
## Safe Target Removal
**Always use** `target remove` to unlink targets.
```bash
skillshare target remove <name> # Safe: only removes link
# NOT: rm -rf ~/.target/skills # Dangerous: may delete source
```
**NEVER** `rm -rf` on symlinked targets — this deletes the source!

View File

@@ -29,7 +29,7 @@ detect_os() {
case "$OS" in
darwin) OS="darwin" ;;
linux) OS="linux" ;;
mingw*|msys*|cygwin*) error "Windows is not supported via this script. Please download from GitHub releases." ;;
mingw*|msys*|cygwin*) error "Use PowerShell: irm https://raw.githubusercontent.com/runkids/skillshare/main/install.ps1 | iex" ;;
*) error "Unsupported OS: $OS" ;;
esac
}