Build LLM agents that write and execute programs instead of reading data. ptc_runner lets LLMs generate PTC-Lisp programs that run deterministically in sandboxed BEAM processes — no Python runtime, no Docker containers.
Instead of stuffing thousands of records into an LLM’s context window, the LLM writes a small program that filters, aggregates and transforms the data computationally. Tool results stay in BEAM memory, the LLM only sees what it needs.
Features
- purpose-built PTC-Lisp (Clojure inspired) language with minimal surface area — the language itself is the sandbox
- process isolation with configurable timeouts and heap limits, one crash never takes anything else down
- typed signatures with automatic retry — LLM gets structured feedback on errors, including process crashes (OOM, timeout), and adapts
- transactional memory via
def— data persists across turns without re-entering context - composable SubAgents with typed imports/exports — agents pass large datasets between each other through BEAM memory
- parallel tool calling with
pmap/pcalls— BEAM-native concurrency, no thread pool configuration - ad-hoc
llm-queryfrom within generated programs — combine computation and LLM judgment in one workflow - compiled SubAgents — LLM writes orchestration logic once, execute deterministically after that
- telemetry spans for every turn, LLM call and tool call with parent-child correlation
- trace viewer with Chrome DevTools flame chart export
- JSON mode for single-turn structured output via Mustache templates
Based on the Programmatic Tool Calling concept from Anthropic: https://www.anthropic.com/engineering/advanced-tool-use
Blog post about the motivation and design: Stop Feeding Data to Your LLM. Let It Write Programs Instead. | ptc_runner blog
Links
Package: ptc_runner | Hex
Docs: PtcRunner v0.7.0 — Documentation
Source:






















