# Skillshare Windows Utm

Verify skillshare on a real Windows guest running in local UTM: build a pinned commit...

- Repository: https://github.com/runkids/skillshare (2879 stars)
- Category: Testing
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add runkids/skillshare --skill skillshare-windows-utm -g -a claude-code -y`
Codex: `npx skills add runkids/skillshare --skill skillshare-windows-utm -g -a codex -y`
Cursor: `npx skills add runkids/skillshare --skill skillshare-windows-utm -g -a cursor -y`
Gemini CLI: `npx skills add runkids/skillshare --skill skillshare-windows-utm -g -a gemini-cli -y`

## Description

Verify skillshare on a real Windows guest running in local UTM: build a pinned commit in the devcontainer, push it into the VM, and either run the Windows E2E runbook with full and basic-user tokens or hand the maintainer a one-line hands-on setup. Use this whenever a change touches Windows links, junctions, file symlinks, Developer Mode, copy fallback, Windows paths, or the dashboard on Windows, or when the user asks to test or accept something on Windows / UTM.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

Linux tests cannot show Windows link behavior. This skill drives the local UTM guest with
`scripts/windows/utm.sh`. Before acting, run `python3 scripts/ai-context.py testing` and follow its
"Windows Verification" section; it is the source of truth for the rules below.

## Rules

- Build in the devcontainer from a **pinned commit** (`utm.sh build <ref>`), never from the working
  tree: other work may be editing it. Report the commit hash with every result.
- The host only drives the VM (`utmctl`). Never run `ss`, `go` or `pnpm` on the host.
- `utmctl exec` runs as SYSTEM, which can always create symlinks. Product behavior must run as the
  desktop user through `utm.sh task` (Interactive scheduled task). Use `--basic` for the basic-user
  token (`runas /trustlevel:0x20000`), which has no symlink right. Never switch to S4U: its token
  differs from a real user's.
- Isolate automated runs under `C:\Users\Public\sstest\`. Clean up with `utm.sh clean`, which uses
  `rmdir` (it does not follow junctions).
- Report which token (full or basic) and architecture each result came from.

## 1. Preflight

```sh
scripts/windows/utm.sh probe
```

| Output | Meaning and action |
|---|---|
| `stopped` | `utmctl start Windows`, then probe again after boot. |
| `OSStatus -1712` | macOS Automation permission for the terminal app is missing; ask the user to allow it. |
| `OSStatus -2700` / guest agent error | Guest still booting or agent not up. Wait, then retry. |
| `desktopUser=` empty | Nobody is logged in; Interactive tasks will not start. **Ask the user to log in** in the UTM window. Restarting the VM logs the user out. |
| `arch=ARM64` / `AMD64` | Use it as the build arch (`arm64` / `amd64`). |
| `devMode=1` | Developer Mode is on; the basic token may still create symlinks. Say so in the report. |

## 2. Build and push

```sh
scripts/windows/utm.sh build <ref> <arm64|amd64>   # ss.exe, ss-ui-dist.zip, ss-version.txt in $OUT
```

The rest: https://github.com/runkids/skillshare/blob/HEAD/.skillshare/skills/skillshare-windows-utm/SKILL.md
