CSL language support and AO debugging for Visual Studio Code and Cursor on Windows and macOS.
The repository also contains a native Claude Code LSP plugin. It bundles the same language server, so Claude receives the same compiler-backed diagnostics and symbol intelligence.
Highlights
- Compiler errors and warnings for saved and unsaved files
- Go to definition for symbols, relative imports, and
core:imports - Type-aware hover, references, rename, and signature help
- Inheritance-aware member completion and lexically scoped local completion
- Document symbols, workspace symbols, and semantic highlighting
- Exact overload resolution
- Last-known-good navigation while the current edit contains a compiler error
- AO debug adapter, automatic debug-server discovery, breakpoints, stepping, and timeline
Requirements
- Windows x64 or macOS
- Visual Studio Code 1.91 or newer, or a compatible Cursor release
- An analysis-enabled All Out client
On Windows, the extension automatically selects the newest installed client under
%APPDATA%\AllOut. On macOS, it selects the newest launcher-managed build under
~/Library/Application Support/AllOut or a compatible app in /Applications or
~/Applications, including editor bundles with a nested AllOutClient.app. If no compatible
client is found, run CSL: Select Compiler and choose AllOutClient.exe, AllOutEditor.app,
AllOutClient.app, or the client executable. The selected client must support
-csl_analysis_json.
Getting started
- Install the extension.
- Open a game repository or its
scriptsdirectory. - Open a
.cslfile. - Wait for the CSL indicator in the status bar to show a check mark.
The status-bar indicator shows analysis progress and compiler problems. Select it to open the language-server output, or select CSL: Restart Language Server from the command palette if the compiler was rebuilt while the editor was open.
Settings
| Setting | Default | Purpose |
|---|---|---|
csl.compiler.path |
Auto-detect | Path to an analysis-enabled client executable or macOS app bundle |
csl.analysis.debounceMs |
300 |
Delay after an edit before compiler analysis |
How analysis works
The language server creates a private temporary mirror of each CSL source root, overlays open editor buffers, and invokes the compiler against that mirror. Unsaved text is never written into the game project. Valid compiler snapshots power semantic editor features; if an edit temporarily fails to compile, diagnostics update immediately while navigation continues from the last valid snapshot.
Analysis currently performs a full compiler pass after a short debounce. On the production
random-roles project used by the test suite, the full end-to-end LSP smoke test completes in
about two seconds on the development machine.
Privacy and workspace trust
CSL Language Tools does not collect telemetry or transmit source code to All Out Games. Compiler analysis runs locally. Temporary source mirrors are deleted when the language server shuts down. The extension is disabled in untrusted and virtual workspaces because analysis executes the configured compiler. See PRIVACY.md for details.
Development
npm ci
npm run compile
Open the repository and press F5 to launch an Extension Development Host.
To build the matching compiler:
cd C:\allout-working-dir
jai build.jai - client assets=false
Run the full real-compiler integration suite:
$env:CSL_COMPILER_PATH = "C:\allout-working-dir\build_client\Debug\AllOutClient.exe"
npm test
The suite covers concurrent project analysis, concrete overload selection, unsaved-buffer diagnostics, stale semantic snapshots, rename safety, completions, navigation, semantic tokens, and a large production project.
Create the universal VSIX used by Visual Studio Code and Cursor on Windows and macOS:
npm run package
Build and test the Claude Code plugin against the newest deployed All Out client:
npm run test:claude-plugin
For local Claude Code development, run claude --plugin-dir .\claude-plugin. See
claude-plugin/README.md for installation and marketplace instructions.
Measure the plugin against a no-plugin Claude baseline on Paintgame:
npm run eval:claude-lsp -- --dry-run
npm run eval:claude-lsp -- --runs 3 --model sonnet
The deterministic quality and efficiency methodology is documented in evals/claude-csl-lsp/README.md.
For support and release procedures, see SUPPORT.md and RELEASING.md.