Setting Up WSL Dev Environment
Looking at this task, I need to identify distinct skill areas that Claude would need for this Unity→Prowl parity project. Let me break down the workflow into discrete, reusable skills.
name: setting-up-wsl-dev-environment description: Installs and verifies system dependencies, Node.js, .NET SDK, REA, and GitHub CLI on WSL/Ubuntu for a cross-platform development project. Use when bootstrapping a new project environment, verifying tool versions, or diagnosing missing/outdated dependencies on WSL before any coding begins.
Bash# Verify core system deps for pkg in git curl unzip procps jq; do dpkg -s "$pkg" >/dev/null 2>&1 && echo "OK: $pkg" || echo "MISSING: $pkg" done
Install missing ones with sudo apt-get update && sudo apt-get install -y <pkg>.
Progress:
- Step 1: Confirm working directory lives under
/mnt/c/...(never~or ext4/home) - Step 2: Install/verify base system packages (
git,curl,unzip,procps,jq) - Step 3: Verify Node.js version meets requirement (e.g.
>= 22.23.4or>= 24.22.1); install via nvm/fnm if too old - Step 4: Verify/install target SDK (e.g. .NET 10) and confirm
dotnet --version - Step 5: Verify
ghCLI installed andgh auth statusauthenticated - Step 6: Verify
git config user.name/user.emailset, set them if absent - Step 7: Configure
core.autocrlf=inputand.gitattributes(* text=auto eol=lf) on any repo under/mnt/c - Step 8: Report full version table to the user before proceeding
Step details
Working directory check (always first). Never create files until the exact Windows-backed path is confirmed. If unknown, stop and ask — do not guess or default to ~.
Node version check:
Bashnode --version # If below requirement: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash source ~/.bashrc nvm install --lts
SDK check (example .NET):
Bashdotnet --version dotnet --list-sdks
If missing, download install script from the official source, run with --install-dir pointing to a path under the project's Windows-mounted tree if sandboxing is required, otherwise standard location is fine since the SDK itself is tooling, not project content.
GitHub auth check:
Bashgh --version gh auth status
If not authenticated, do not attempt to authenticate silently — present the exact command (gh auth login) and wait.
Git identity:
Bashgit config --global user.name git config --global user.email
If either is empty, ask the user for values rather than inventing placeholders.
CRLF safety for Windows-mounted repos:
Bashgit config core.autocrlf input cat > .gitattributes <<'EOF' * text=auto eol=lf EOF
- Always print a summary table (tool / required version / found version / status) before declaring the environment ready.
- Treat any install that downloads >~100MB (SDKs, engine binaries, IDEs) as requiring explicit user confirmation first.
- Prefer version managers (nvm, fnm) over system package manager for language runtimes to avoid sudo conflicts and allow per-project overrides.
- Re-run the full verification table after any install step — don't assume success.
- Installing or caching anything under
~or native/homeext4 when the project must live under/mnt/c— this silently creates a split environment that breaks later. - Proceeding past a failed step with a "workaround" instead of stopping to ask.
- Forgetting
procpson Linux — many Node-based agent tools silently fail without it (missingps). - Assuming
gh auth logincan be run non-interactively on your behalf — it requires user action.
name: setting-up-rea-mcp-server description: Installs rea-agents globally, registers the REA MCP server with a code agent (opencode or manual registration), and runs readiness/doctor checks. Use when onboarding REA for static assembly analysis, when an agent isn't in REA's supported list, or when verifying REA is operational before starting investigation work.
Bashnpm install --global rea-agents npx rea-agents setup npx rea-agents doctor # or equivalent readiness command — paste full output to user
Do not proceed to any analysis until the doctor/readiness command reports fully green.
Progress:
- Step 1: Confirm Node.js version satisfies REA's requirement (delegate to environment-setup skill if not)
- Step 2:
npm install --global rea-agents - Step 3:
npx rea-agents setup— attempt automatic agent registration - Step 4: If the target agent (e.g. opencode) isn't in REA's supported list, fall back to manual MCP registration
- Step 5: Run readiness/doctor command, capture and report full output verbatim
- Step 6: Only proceed to feature work once readiness is green
Manual MCP registration (when agent unsupported)
- Read
docs/getting-started/installation.md#mcp-registryfrom themorluto/rearepository for the exact MCP server command/args/env schema. - Locate the target agent's config file inside the project directory (never in a global/home dotfile location unless that's the agent's only supported mechanism).
- Add an MCP server entry following the agent's own schema, e.g. for opencode's config:
JSON{ "mcp": { "rea": { "command": "npx", "args": ["rea-agents", "mcp-server"], "enabled": true } } }
(Verify exact command/args against the installation doc — do not guess the invocation.) 4. Restart/reload the agent session so it picks up the new MCP registration. 5. Confirm the MCP tool surface is visible to the agent (list available tools) before trusting it for analysis.
- Always paste the full, unedited readiness/doctor output to the user — don't summarize it as "looks fine."
- Keep REA config scoped to the project directory, consistent with the project's "nothing lives outside the Windows-mounted project folder" rule.
- Treat REA setup as a one-time phase per project; don't re-run
setupspeculatively mid-task.
- Writing MCP config to a global/home location "because it's easier" — violates project isolation rules.
- Declaring REA ready based on install success alone, without actually running the readiness check.
- Skipping the manual registration path and declaring the agent "unsupported, can't proceed" without trying the documented fallback.
name: locating-unity-managed-assemblies description: Finds and catalogs Unity's managed DLLs (UnityEngine..dll, UnityEditor..dll) on disk from an existing Unity Hub installation, or requests the needed version/path from the user. Use when preparing targets for REA static analysis of Unity's CIL assemblies, or when a specific Unity module/version can't be found locally.
Bashfind "/mnt/c/Program Files/Unity/Hub/Editor" -maxdepth 1 -mindepth 1 -type d 2>/dev/null # For a given version: VER="2022.3.50f1" ls "/mnt/c/Program Files/Unity/Hub/Editor/$VER/Editor/Data/Managed/"
Progress:
- Step 1: Search standard Unity Hub install locations under
/mnt/c/Program Files/Unity/Hub/Editor/*/Editor/Data/Managed/ - Step 2: If found, list installed versions and confirm which one matches the target feature's Unity version
- Step 3: If not found, stop and ask the user: install via Unity Hub (which version?) or supply a path to existing DLLs
- Step 4: Once located, catalog relevant assemblies (
UnityEngine.CoreModule.dll,UnityEngine.PhysicsModule.dll,UnityEditor.*.dll, etc.) relevant to the current feature - Step 5: Copy or reference these DLLs from a path under the project's
/mnt/cworking tree (an ignored, non-committed subfolder) rather than analyzing them in place, to keep REA inputs reproducible
Common managed assembly locations by concern
| Concern | Typical assembly |
|---|---|
| Core (GameObject, Transform, Component, MonoBehaviour) | UnityEngine.CoreModule.dll |
| Physics (Rigidbody, Collider, Raycast) | UnityEngine.PhysicsModule.dll |
| Physics 2D | UnityEngine.Physics2DModule.dll |
| Animation | UnityEngine.AnimationModule.dll |
| UI | UnityEngine.UIModule.dll, UnityEngine.UI.dll |
| Editor-only APIs | UnityEditor.CoreModule.dll and related UnityEditor.*.dll |
| Audio | UnityEngine.AudioModule.dll |
| Input (new) | Unity.InputSystem.dll |
- Always confirm the exact Unity version against the feature being analyzed — API surface and defaults can change across versions, which matters for "exact semantics" claims in the evidence report.
- Keep a local manifest file (e.g.
Docs/Evidence/_assemblies.jsonor similar within the ignored artifacts area) listing which DLL + version was used as source, so every evidence report can cite it precisely. - Never commit Unity DLLs to the repo — they're proprietary binaries.
- Assuming any installed Unity version is "close enough" without checking — minor version differences can change default values and edge-case behavior.
- Searching only
/mnt/c/Program Files/Unity/Hub/Editorwithout checking for non-standard custom install paths the user might have. - Forgetting to ask before triggering a multi-GB Unity Hub install.
name: reverse-engineering-unity-api-with-rea description: Uses REA to statically analyze Unity's managed CIL assemblies and produce an evidence-based report distinguishing observed facts, inferred behavior, and unknowns. Use when investigating the exact semantics, defaults, edge cases, and execution order of a specific Unity feature before reimplementing it elsewhere.
Given a feature name (e.g. "Rigidbody.AddForce"), investigate in this order:
- Locate the declaring type and assembly via REA's inventory/metadata tools.
- Pull the full member signature (overloads, default parameter values, access modifiers).
- Decompile/inspect IL for the method body to understand actual logic, not just the public contract.
- Trace references: what does this method call internally, what calls it, what fields/state does it touch.
- Check related types (enums, structs, attributes) that shape behavior (e.g.
ForceMode,RigidbodyConstraints).
Progress:
- Step 1: Identify target assembly and fully-qualified type/member name
- Step 2: Extract signature(s): parameters, defaults, overloads, return type, visibility, attributes
- Step 3: Inspect IL body for the member(s) to understand real