Wright is the developer CLI for Overwatch Workshop projects. It checks, lints, analyzes, inspects, and safely edits Workshop code, for people and for coding agents.
- Diagnostics and lint. Deterministic
checkandlintresults. - Cost and risk analysis. Workshop element cost, hotspots, and server-load risk indicators, each labeled exact, static, or heuristic.
- Semantic queries. Symbols, references, control flow, call graph, cost.
- Validated edits. Renames that preview a diff before writing.
- Agent and editor integration.
wright serve(JSON-RPC and MCP) andwright-lsp. - CI-friendly output. JSON reports and GitHub Actions annotations.
| Source | Status |
|---|---|
| Raw Workshop | ✅ Supported |
OverPy (.opy) |
🟡 check, compile, lint, analyze via the opy-rs provider |
| DEL / OSTW | ⚪ Recognized, not yet supported |
Language parsing and compilation live in dedicated engines:
workshop-rs,
opy-rs, and
deltin-rs. Wright reports missing
language features instead of working around them.
# macOS
brew install wrightkit/tap/wright
# macOS and Linux
curl -fsSL https://install.wrightkit.dev/wright/install.sh | bashOn Windows, use the PowerShell installer at
https://install.wrightkit.dev/wright/install.ps1. Archives, the nightly
channel, and building from source are covered in docs/release.md.
Update with wright update.
wright check [INPUT] # correctness diagnostics
wright lint [INPUT] # lint findings
wright analyze [INPUT] # cost, hotspots, and risk indicators
wright inspect [INPUT] # semantic summary
wright rename OLD NEW [INPUT] # preview a diff; --write applies it
wright compile [INPUT] # write <input>.ow
wright serve [INPUT] # agent session over stdio or MCPINPUT is a file, a project directory, or - for stdin; omit it to use the
current directory. Add --format json for machine-readable output. See
docs/cli.md for the full command reference.
See docs/README.md for the documentation index.
Read AGENTS.md and docs/CONTRIBUTING.md
first. Deliver changes through branches and pull requests.
AGPL-3.0-or-later. Third-party reference inputs keep their own licenses; see
docs/licensing.md.