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
| tools | for |
|---|---|
cat ls find grep patch | reading the tree |
shell pwd | running a command, and remembering where it ran |
screen | an interactive program — a pager, an editor, htop, git add -p — in rows on the screen |
hexe oslo session | asking the multiplexer, the shell, or the harness about themselves |
dino birdy | two 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