Getting started
panto
panto is a terminal coding agent with a small Zig core and a Lua extension surface. Run it interactively in a project directory, or use -p/--print for one-shot non-interactive turns. These pages cover the current CLI, configuration layers, key bindings, and extension API.
Overview
The default entry point is just panto: it opens the TUI in the current directory, selects a model from your layered config, and lets the agent work through tools. The shipped file tools are themselves Lua extensions, so the same loader that powers your own add-ons also powers std.read, std.write, std.edit, and std.shell.
The first argument also dispatches subcommands. panto sessions, panto auth, panto models sync, panto bootstrap, panto update, and panto lua all short-circuit before the chat loop; panto -p runs a single non-interactive turn and exits.
Install
panto builds from source with Zig. Clone the repository and build the binary:
git clone https://code.tjp.lol/pantograph.git
cd pantograph
zig build # native binary at zig-out/bin/pantoThe first real run bootstraps panto's bundled Lua runtime automatically, so most users can go straight to panto. The explicit bootstrap command is still useful for CI, fresh-machine setup, or forcing the rocks tree to exist before you start a session:
panto bootstrap
# or: panto bootstrap --forceWhere things live
The data home is$XDG_DATA_HOME/panto (or ~/.local/share/panto when XDG_DATA_HOME is unset). User config lives under $XDG_CONFIG_HOME/panto (or ~/.config/panto). Project-local overrides live in ./.panto/.First run
Start an interactive session with no arguments:
cd ~/code/ledger
pantoUseful first-day flags:
--resume <id> resumes a specific session by id prefix; -c / --continue is an alias for bare --resume.The TUI requires an interactive terminal. If you only want a single answer in a script or CI job, use -p instead of trying to pipe the full-screen UI.
Authenticate
Providers draw credentials from named auth sessions in config.toml. API-key sessions usually resolve from the environment:
export ANTHROPIC_API_KEY=sk-ant-…
panto auth statusOAuth device sessions are logged in explicitly once, then cached on disk:
panto auth login github_copilot
panto auth statusIf a provider seems missing
Anapi_key auth session that resolves to the empty string leaves its provider unavailable, so exporting the missing environment variable is often enough to make it appear. OAuth providers stay configured and resolve at use time.