Skip to content
panto

An agent runtime,
not just a coding agent.

A native Zig core, a fast Lua extension API, and rigs that turn it into whatever agent you need.

curl -fsSL https://tjp.lol/pantograph/install.sh | sh
your-agent.rigShip
config.tomlmodels.tomlextensions/SYSTEM.mdPROMPT.mdskills/
Lua extensionsExtend
std.readstd.writestd.editstd.shelltoolscommandsprovidersUI
Zig coreRun
agent loopTUIsessionsLua VM
Dashed: the built-in tools are extensions too, and you can turn them off.

01 · Native

Tens of megabytes, not hundreds.

Most agents run on JavaScript or Python. panto's core is compiled Zig, with native code speed and memory use. It fits on embedded boards and leaves your laptop's RAM alone. Its extensions are Lua: a dynamic language that stays fast and light.

02 · Minimal

Even the tools are optional.

read, write, edit and shell are Lua extensions, and you can deny any of them. Extensions can add tools, slash commands, model providers, events and UI, so the agent is yours to shape.

.panto/tools/words.lua
return {
  name = "words",
  description = "Count words",
  schema = { type = "object",
    properties = { text = { type = "string" } } },
  handler = function(input)
    local _, n = input.text:gsub("%S+", "")
    return n .. " words"
  end,
}
.panto/config.toml
[extensions]
deny = ["std.*"]  # no built-in tools at all
Lua extension API →

03 · Rigs

Ship an agent as one file.

A rig packs config, models, Lua extensions, prompts and any files those extensions use (skills, for example) into a .rig archive or a directory. Point panto at one and it becomes that agent, in the TUI or headless. A minimal core plus rigs makes panto a runtime for AI applications.

# interactive
$ panto --rig reviewer.rig
# one shot, scriptable
$ panto --rig reviewer.rig -p
How rigs work →

Try it.

curl -fsSL https://tjp.lol/pantograph/install.sh | sh
Getting started →