Overview
This skill covers process_run — Grille's tool for spawning Windows executables directly, without a shell intermediary. Apply it whenever Claude needs to run build tools, version control commands, deployment scripts, or any allowlisted binary on the local machine.
process_run is distinct from ps_run (PowerShell cmdlets) and docker_exec (commands inside containers). Use this tool for native Windows executables.
Tools
process_run— Execute an allowlisted Windows executable with arguments. Captures stdout and stderr. 30-second default timeout, 300-second maximum. Output capped at 10 MB. Python stdout is automatically decoded as UTF-8 — nosys.stdout.reconfigure()needed in inline-cscripts.
Patterns
Always include .exe (or .cmd) in the executable name:
✅ "cargo.exe"
✅ "git.exe"
✅ "npm.cmd"
✅ "az.cmd"
❌ "cargo" ← will fail — no shell to resolve the extension
❌ "git" ← will fail
Standard build workflow:
grille:process_run
executable="cargo.exe"
args=["build", "--release"]
working_dir="C:\\dev\\myapp"
Git operations:
grille:process_run
executable="git.exe"
args=["log", "--oneline", "-10"]
working_dir="C:\\dev\\myapp"
Git for Windows deadlock prevention is baked into Grille internally (stdin: null
prevents MSYS2 PTY initialization from hanging). No action needed by Claude.
Deploy — copy built binary:
grille:process_run
executable="xcopy.exe"
args=["C:\\dev\\myapp\\target\\release\\myapp.exe",
"C:\\Users\\<user>\\AppData\\Local\\MyApp\\", "/Y"]
Constraints
- Do not attempt to use
cmd.exe,powershell.exe(5.1),wscript.exe,cscript.exe,mshta.exe,regsvr32.exe,rundll32.exe,certutil.exe, ormsiexec.exe. These LOLBins are hardcoded denials in Grille — they cannot be unblocked by any configuration. Useps_runfor PowerShell 7 (pwsh.exe) cmdlets instead. - Do not omit the
.exeor.cmdextension. Grille spawns executables viatokio::process::Commandwithout a shell. Shell extension resolution (.cmd,.bat,.ps1) does not apply. The extension must be explicit. - Do not attempt
git pushvia Grille. Git push requires SSH agent access, which is inaccessible from a Grille subprocess context. Push manually from a terminal.
⛔ git push cannot work via Grille. STOP — push manually from a terminal window.
- Do not use
process_runfor PowerShell cmdlets. Useps_run(the powershell module).process_runhaspowershell.exeon its LOLBin deny list.
⛔ For PowerShell cmdlets, STOP — use ps_run via the grille-powershell skill. Calling process_run with powershell.exe is a hardcoded denial and will always fail.
- Executable must be in
process_allowedingrille.toml. If a binary is not in the allowlist, the call is denied and logged. Checkgrille_infoorgrille.tomlto see the current allowlist. - Arguments are passed as a list, never shell-concatenated. Do not construct shell pipelines or use shell metacharacters (
|,>,&&). Each argument is a discrete array element.
Examples
Example 1: Build and check for errors
grille:process_run
executable="cargo.exe"
args=["build", "--release"]
working_dir="C:\\dev\\myapp"
→ Check stdout/stderr for "error[" lines
→ On success: Finished release in Xs
Example 2: Check git status before a commit
grille:process_run
executable="git.exe"
args=["status", "--short"]
working_dir="C:\\dev\\myapp"
→ Review modified/untracked files
→ Follow with: git.exe add / git.exe commit
→ Push manually from terminal (SSH agent not accessible via Grille)