nervネルフ
the casper mark

casper

The tools a coding agent runs, and the screen they draw on. One process per call, and it knows nothing about models, turns or transcripts.

What it offers

toolsfor
cat ls find grep patchreading the tree
shell pwdrunning a command, and remembering where it ran
screenan interactive program — a pager, an editor, htop, git add -p — in rows on the screen
hexe oslo sessionasking the multiplexer, the shell, or the harness about themselves
dino birdytwo games, because a surface that can draw a game can draw anything

Every one is declared in config/tools.lua, in Lua, and nothing about them is compiled in. A tool of your own goes in the same file — see writing a tool.

Why a spawn and not a socket

casper's job is running programs, and a socket that runs commands is a remote shell wearing a friendly name. The spawn link carries the trust instead: a parent that can spawn casper could have run the command itself, so nothing is granted by handing it over. One exec per call.

At a terminal

casper tools                 every tool it offers, as declarations a harness can register
casper run <tool>            run one; the call arrives as JSON on stdin
casper surface <tool>        hold rows on the harness's screen and draw into them
casper verbs                 what its socket answers

casper tools --cbor          the same reply, as bytes

The shape of it

casper

one crate, by module