ccpp shell
One Bash, the same on every operating system, with its core commands written in Go.
The shell under every harness.bash call: a Bash interpreter whose core commands are compiled into ccpp, so a script behaves the same on Linux, macOS and Windows.
ccpp lua 'return require("harness").bash("ls -la").stdout'
- shell on every OS
- 1
- coreutils to install
- 0
- streams, never mixed
- 2
- failures raised, never hidden
- 100%
An agent that writes grep -rn on Windows should not have to know it is on Windows. ccpp shell interprets Bash itself and ships the commands scripts rely on, written in Go, so the script Claude wrote on your laptop runs unchanged on your CI and on your colleague's machine.
Built for agents
Same everywhere
Paths are written the way scripts write them, /c/Users/me on Windows. No WSL, no Git Bash, no surprises.
Failures are values
A non-zero exit raises with the end of stderr. A failing step never flows silently into the next one.
Streams kept apart
stdout and stderr come back separately, with their dropped bytes counted, so output can be parsed without guessing.
How it works
Every harness.bash call of CCPP Lua runs in this shell. Scripts accept the exit codes you expect, a working directory, an environment and a timeout.
local r = require("harness").bash("grep -q TODO main.go", {expect = {0, 1}})
return r.exit_code == 0 and "has TODOs" or "clean"
Specifications
- Language
- Bash, interpreted in Go
- Core commands
- Written in Go and compiled into ccpp
- Platforms
- Linux, macOS, Windows
- Timeouts
- Per call, bounded by a configurable ceiling
- Configuration
- ~/.ccpp/ccpp.yml
Free with every account
ccpp shell ships inside the ccpp CLI. Create an account to download it.
Works well with ccpp shell
Every productCCPP Lua
The harness Claude Code was missing: one Lua chunk does a whole step of work.
CCPP Limits
No tool result reaches the agent whole, and every token a session spends is measured.
CCPP Emmet
Emmet for every language, expanded before the file is written, so Claude types less.
One account. Every tool Claude needs.
Free products come with a free account. Builder unlocks the rest, the harness first.