Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run CLI commands, tests, and debugging inside the skillshare devcontainer. Use this skill whenever you need to: execute skillshare CLI commands for verification, run Go tests (unit or integration), reproduce bugs, test new features, start the web UI, or perform any operation that requires a Linux environment. All CLI execution MUST happen inside the devcontainer — never run skillshare commands on the host. If you are about to use Bash to run `ss`, `skillshare`, `go test`, or `make test`, stop an
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 158% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 267% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 81% | 0% |
Execute CLI commands and tests inside the devcontainer. The host machine is macOS but the project binary is Linux — running CLI commands on the host will silently produce wrong results or fail. This skill prevents that mistake.
ss / skillshare commands for verificationgo test, make test, make checkgit commands (git works on host)make fmt, make lint (host-safe Go toolchain commands; no container needed)cli-e2e-test skill instead (it handles ssenv isolation)Host (macOS)
└─ Devcontainer (Linux, Debian-based)
├─ Default HOME: /home/developer (persistent volume)
├─ Source: /workspace (bind-mount of repo root)
└─ ssenv environments: ~/.ss-envs/<name>/ (isolated HOME dirs)Devcontainer = Linux environment with Go, git, pnpm, air (hot-reload). Source code is at /workspace (bind-mount of the host repo). The ss / skillshare wrapper auto-builds from source on every invocation — no manual make build needed. Edit code on the host, then immediately docker exec to run it; the change is picked up automatically.
ssenv = Isolated HOME directories within the devcontainer. Each env gets its own ~/.config/skillshare/, ~/.claude/, etc. Use ssenv when you need a clean state (testing init, install, sync) without polluting the container's default HOME.
Source code is bind-mounted into the container at /workspace. The ss wrapper runs go build transparently on every invocation:
docker exec $CONTAINER ss <command> — picks up your changes instantlymake build, no restart, no rebuild stepThis also applies to go test — tests always compile against the latest source. The Web UI backend uses air for hot-reload (same zero-rebuild experience).
The quickest way — one command builds, initialises, and enters the shell:
bashmake devc # build + init + interactive shell (one step) make devc-up # start only (no shell) make devc-down # stop make devc-restart # restart + re-run start-dev.sh make devc-reset # full reset (remove volumes), then `make devc` to re-init make devc-status # show container status
Works with or without VS Code — make devc handles the full lifecycle autonomously.
docker exec workflows)bashCONTAINER=$(docker compose -f .devcontainer/docker-compose.yml ps -q skillshare-devcontainer 2>/dev/null)
If $CONTAINER is empty, tell the user: > Devcontainer is not running. Start it with make devc-up.
Then verify the binary:
bashdocker exec $CONTAINER bash -c \ '/workspace/.devcontainer/ensure-skillshare-linux-binary.sh && ss version'
bashdocker exec $CONTAINER ss <command> [flags]
Good for: ss version, ss status, ss list, ss check, ss audit.
bashENV_NAME="test-$(date +%s)" docker exec $CONTAINER ssenv create "$ENV_NAME" --init docker exec $CONTAINER ssenv enter "$ENV_NAME" -- ss status # Cleanup when done: docker exec $CONTAINER ssenv delete "$ENV_NAME" --force
Good for: testing init, install, sync, uninstall — anything that modifies config/state.
bashdocker exec $CONTAINER ssenv enter "$ENV_NAME" -- bash -c ' ss install runkids/demo-skills --track --force ss list ss sync '
Always use bash -c '...' for multi-command sequences inside ssenv enter.
bash# All tests (unit + integration) docker exec $CONTAINER bash -c 'cd /workspace && make test' # Unit tests only docker exec $CONTAINER bash -c 'cd /workspace && make test-unit' # Integration tests only docker exec $CONTAINER bash -c 'cd /workspace && make test-int' # Specific test docker exec $CONTAINER bash -c 'cd /workspace && go test ./tests/integration -run TestInit_Fresh -count=1' # Specific package docker exec $CONTAINER bash -c 'cd /workspace && go test ./internal/install/... -count=1'
Always cd /workspace before Go commands — ssenv changes HOME which can break module resolution.
Some tests (e.g., TestResolveToken, TestAuthEnv) need auth credentials removed:
bashdocker exec $CONTAINER bash -c ' eval "$(credential-helper --eval off)" cd /workspace go test ./internal/github -run TestResolveToken -count=1 eval "$(credential-helper --eval on)" '
bash# Start (global mode) docker exec $CONTAINER ui # Start (project mode — uses ~/demo-project) docker exec $CONTAINER ui -p # Stop docker exec $CONTAINER ui stop
Dashboard accessible at http://localhost:5173 (Vite dev server with HMR). API backend at http://localhost:19420. Logs: /tmp/api-dev.log, /tmp/vite-dev.log.
| Shortcut | Full form | Purpose | |----------|-----------|---------| | ssnew <name> | ssenv create <name> + enter | Create and enter isolated shell | | ssuse <name> | ssenv enter <name> | Enter existing isolated shell | | ssrm <name> | ssenv delete <name> --force | Delete environment | | ssls | ssenv list | List all environments | | ssback | ssenv reset | Leave isolated context | | sshelp | help | Show all devcontainer commands |
For automation (non-interactive), prefer ssenv enter <name> -- <command> over ssnew/ssuse (which launch subshells).
| Port | Service | Notes | |------|---------|-------| | 5173 | Vite dev server | React dashboard with HMR | | 19420 | Go API backend | skillshare ui server | | 3000 | Docusaurus | docs command in devcontainer |
ss on host — macOS binary won't match Linux container; always docker execcd /workspace — Go tests fail if HOME was changed by ssenvmake test on host — builds macOS binary, then tests run against wrong arch--init on ssenv create — env won't have config; most commands will failssenv delete <name> --force after done; or ask userss wrapper auto-redirects to ~/demo-project in project mode; use -g for global or set SKILLSHARE_DEV_ALLOW_WORKSPACE_PROJECT=1make build before testing — unnecessary; the ss wrapper auto-builds from source every time$CONTAINER at the start and reuse throughoutOther measured skills in the registry, with their headline benchmark lift.