A Claude Code skill for driving ushell — Epic's command-line interface for Unreal Engine, shipped at <branch>/Engine/Extras/ushell/.
When the skill is loaded, Claude reasons backward from your stated goal ("get me an Insights trace at this CL on PS5") to a sequence of ushell commands — checking preconditions, skipping work already done, and stopping cleanly if anything is unreachable. Without it, Claude defaults to raw RunUAT.bat / UnrealBuildTool.exe / p4 invocations and sometimes invents non-existent flags.
Status: v2.0 — installable via Claude Code's plugin manager. 13/13 GREEN scenarios pass on first dispatch.
Compatibility:
| UE version | Status |
|---|---|
| 5.7 | ✅ Tested against (the 13 GREEN scenarios all ran here) |
| 5.6 | 🟡 Expected to work; file an issue if you hit drift |
| 5.0 – 5.5 | |
| 5.8+ | ⏳ Will be tested when the engine ships; next minor |
Full policy and drift-handling rules: docs/versioning.md.
Inside any Claude Code session:
/plugin marketplace add ABostrom/ushell-skill
/plugin install ushell@ABostrom-skills
That's it. The skill is now loaded for every Claude Code session on this machine, no symlink, no clone, no PATH.
# Open Claude Code in your UE project
cd E:\Work\MyProject
claudeThen ask Claude to build, cook, run, trace, package, bisect, etc. The skill activates whenever the conversation involves Unreal Engine (specifically when prompts mention .uproject, RunUAT, BuildCookRun, Engine/Extras/ushell, p4, Insights, cooking, staging, packaging, plugin building, channel authoring, etc.).
Upgrading from v1.x? Delete the old symlink (
Remove-Item "$env:USERPROFILE\.claude\skills\ushell") and reinstall via the/plugincommands above. Claude Code's plugin manager now owns updates; the v1.4 tag is preserved if you need to fall back.
Full walkthrough: docs/onboarding.md.
Three concrete examples of the skill in action:
Build the editor.
Claude →
Build.bat -projectfiles ...+Build.bat MyProjectEditor Win64 Development -Project=... -WaitMutex -FromMsBuild
Build the editor.
Claude →
cmd.exe /d /s /c "call <ushell.bat> --project=<uproject> && .build editor --nosummary"
Trace at CL 1234567 on PS5.
Claude → linear
p4 sync,Build.bat,RunUAT.bat BuildCookRun -build -cook -stage -package -deploy -run. Always cooks.
Trace at CL 1234567 on PS5.
Claude →
.p4 sync 1234567→.build editor→.build game ps5→.zen snapshot list game ps5→ if hit,.zen snapshot get ...(50× faster than cooking); else.cook game ps5→.stage game ps5 auto→.run game ps5 --trace=default,gpu→.perf insights latest.
Insights trace at the
MainStartPlayerStart.Claude →
/Game/Maps/BossArena?PlayerStartTag=MainStart(which is not a real UE switch).
Insights trace at the
MainStartPlayerStart.Claude →
/Game/Maps/BossArena#MainStart(the realFURL.Portalsegment, cited toURL.cpp).
For the full RED-vs-GREEN gallery: docs/before-and-after.md.
.
├─ .claude-plugin/ Claude Code plugin manifests
│ ├─ marketplace.json Declares the ABostrom-skills marketplace
│ └─ plugin.json Declares the ushell plugin
├─ skills/
│ └─ ushell/ The skill itself
│ ├─ SKILL.md Always-loaded body (~250 words prose + lookup table)
│ └─ reference/ On-demand reference files:
│ ├─ commands.md Per-command pages (78 verb entries with
│ │ Preconditions + Produces fields)
│ ├─ invocation.md Driving ushell non-interactively
│ ├─ workflows.md 14 goal-first DAGs (headlined by
│ │ the Insights-trace pipeline)
│ ├─ channel-authoring.md Writing new ushell verbs
│ ├─ troubleshooting.md Symptom-keyed diagnostics
│ ├─ unreal-args.md UE's own CLI lexicon — FURL grammar,
│ │ trace channels, -ExecCmds, LLM, etc.
│ ├─ uat.md UAT deep-dive (BuildCookRun, BuildPlugin,
│ │ RunUnreal/Gauntlet, ~45 other scripts)
│ └─ buildgraph.md BuildGraph schema + 30+ tasks + recipes
├─ docs/
│ ├─ onboarding.md New-developer walkthrough
│ ├─ cookbook.md User-facing recipe gallery
│ ├─ how-it-works.md Architecture + design philosophy
│ ├─ before-and-after.md Concrete RED-vs-GREEN proof
│ └─ superpowers/
│ ├─ specs/2026-05-13-ushell-skill-design.md Design spec
│ ├─ specs/research-notes-uat.md UAT research digest
│ └─ plans/2026-05-13-ushell-skill-implementation.md 13-phase plan
└─ tests/
├─ baseline.md 13 RED scenarios (verbatim user prompts)
├─ with-skill.md 13 GREEN rubrics (bullet thresholds)
└─ run-green.ps1 Helper: prints dispatch instructions for
a Claude Code Agent tool call
78 ushell verbs documented across the unreal/core and unreal/perforce channels, including:
- Build:
.build editor / game / client / server / program / target / clean *+.build xml / xml edit / xml set / xml clear+.build misc clangdb - Run:
.run editor / commandlet / program / target / server / client / game - Cook:
.cook+.cook game / client / server+.cook odsc client / game / all - Stage / deploy:
.stage,.deploy - UAT:
.uat <Command>— the gateway to BuildCookRun, BuildPlugin, BuildGraph, RunUnreal, etc. - Solutions:
.sln generate / open / open 10x / open tiny - Info / project:
.info,.info projects,.info config,.project - Zen:
.zen start / stop / status / version / dashboard / createworkspace / createshare / importsnapshot+.zen snapshot find / get / list - Perf:
.perf insights,.perf test default / sequence / replay / material / camera - Perforce:
.p4 sync / sync edit / sync mini / cherrypick / bisect / mergedown / switch / switch list / workspace / clean / reset / authors / who / v - Misc:
.kill,.notify,.ushell gather,.getbuild,.ddc auth
Plus deep coverage of:
- UAT BuildCookRun — full ProjectParams flag catalogue, the 7 verbs in execution order, multi-target patterns, pak/iostore/zen interaction, 15 recipe gallery, top community gotchas.
- Gauntlet RunUnreal — test driving with
UE.EditorAutomation/UE.TargetAutomation/UE.BootTest, report output (JSON, no native JUnit), failure modes. - BuildGraph — full schema, ~50 built-in tasks (30+ documented in detail), CookedEditor + LiveLinkHub case studies, 8 recipe skeletons.
- UE's own CLI lexicon — boot modes,
FURLmap URL grammar (with the critical#Portalspawn-selector grammar),-trace=channel taxonomy,-ExecCmds=, LLM, render/perf/log switches, commandlet recipes.
The skill is built test-first per superpowers:writing-skills. 13 baseline scenarios in tests/baseline.md, scored against bullet rubrics in tests/with-skill.md. All 13 pass on first GREEN dispatch — no REFACTOR cycles needed.
Re-run the GREEN suite (or any subset) with:
.\tests\run-green.ps1 # all 13 scenarios
.\tests\run-green.ps1 -Scenarios "S2,S6,S9" # subset
.\tests\run-green.ps1 -OpenRubric # open scoring file tooThe script prints the verbatim dispatch instructions for an Agent tool call. Run each from a Claude Code session and score against tests/with-skill.md.
docs/onboarding.md— first session walkthrough.docs/before-and-after.md— concrete RED-vs-GREEN proof from real transcripts.docs/cookbook.md— user-facing recipes for common workflows.docs/how-it-works.md— architecture + design philosophy.skills/ushell/SKILL.md— the always-loaded surface itself.skills/ushell/reference/*.md— when you have a specific question.
The skill stays accurate through engine-version drift via:
- Source-code citations on every commands.md entry, every uat.md flag group, every unreal-args.md grammar rule.
- Behavioural tests (not unit tests) —
tests/with-skill.mddescribes outcomes, not API.
When UE 5.8+ ships and something drifts:
- Re-run
tests/run-green.ps1against the new engine — failing scenarios show what drifted. - Update the affected
reference/<file>.mdentries; citations point you at the right source files. - Re-dispatch GREEN until 13/13 again.
- Submit a PR.
If you've found a new failure mode worth testing, append a new scenario to tests/baseline.md and add its rubric to tests/with-skill.md. See docs/onboarding.md §Step 6 for the detailed flow.
MIT — see LICENSE.
Built with Claude Code following the superpowers brainstorming → writing-plans → subagent-driven-development workflow. Authored against UE 5.7's ushell source at Engine/Extras/ushell/ and a comprehensive UAT/BuildGraph research pass captured in docs/superpowers/specs/research-notes-uat.md.