Skip to content
Stable Included in Builder

CCPP Lua

The harness Claude Code was missing: one Lua chunk does a whole step of work.

Lua 5.5 chunks over Go packages. Read, edit, run and check in a single tool call, with the diagnostics, diffs and instructions Claude Code gives its own tools handed back by the harness.

claude mcp add ccpp-lua -- ccpp mcp --filter lua
tool call per step of work
1
Go packages behind require
23
cgo, pure Go from end to end
0
blocks per result, never a dump
8

Tool calls cannot nest. Every read, edit and test is a round trip through the model, and every round trip re-reads the whole context. CCPP Lua gives Claude one tool instead: a Lua chunk whose host capabilities are Go packages. A step of work that took twelve calls takes one.

Why teams switch

One chunk, one step

Read a file, edit it, run the tests and return the verdict in the same call. Loops, conditions and error handling live in Lua, not in the transcript.

References, enforced

A function unlocks only once its reference was read in the conversation. Guessed options raise before anything runs, so a wrong call costs nothing.

Results, not dumps

Every result is cut into blocks and ranked against what the call said it expects. The rest waits on disk, one read away.

Instructions follow the code

Touch a directory and its CLAUDE.md, AGENTS.md and path-scoped rules come back with the result, exactly as Claude Code would load them.

Diagnostics on every write

Thirteen language servers report the errors a change introduced, and the ones it broke elsewhere, before the next step starts.

Proof of every edit

Writes come back as git diffs, reads carry their git history and dependency graph. Nothing needs to be read back to be trusted.

How it works

Claude writes a chunk. The chunk calls packages with require, nests them, and returns only the fields that decide the next step.

local h = require("harness")
local r = h.bash("go test ./...", {expect = {0, 1}, prompt = "FAIL test output"})
if r.exit_code ~= 0 then
  return h.grep("func Test", {path = "internal", glob = "*_test.go"}).files
end
return "green"

What is inside

Files and shell
harness: bash, read, write, edit, grep, glob, ls, terminals
Code intelligence
lsp, vendor: definitions, references, the pinned signatures of any library
Version control
git, github
The web
http, web, chrome
Data
json, yaml, python, evidence (SQLite)
Media
images, pdf
Orchestration
subagents, replay, ask, mcp, skills
Tool calls cannot nest. Lua calls can. Everything else in CCPP follows from that sentence.
The harness bet, September 2026

Questions

  • Do I lose Claude Code's own tools? No. The harness hands back what they give: instructions, diagnostics, permissions and diffs.
  • Which models does it work with? Any model Claude Code runs. The chunk is plain Lua; the reference teaches the API.
  • Where does my code go? Nowhere. Chunks run on your machine, in your repository.

Give Claude a harness

CCPP Lua is included in the Builder plan, with every other CCPP tool.

Create an account
Every product

One account. Every tool Claude needs.

Free products come with a free account. Builder unlocks the rest, the harness first.