andreasronge

andreasronge

Ptc_runner - Programmatic Tool Calling for LLM agents without Python sandbox

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-query from 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: PTC-Runner Blog | ptc_runner blog

Links

Package: ptc_runner | Hex
Docs: PtcRunner v0.13.0 — Documentation
Source:

https://github.com/andreasronge/ptc_runner

Where Next?

Popular in Announcing Top

jakub-zawislak
Hi everyone, I’m coming from the Symfony (PHP) framework. I like Phoenix, but it has a one thing that was build much better in the Symfo...
New
kelvinst
Hey everyone! Well, we made this lib a while ago and now we decided to finally go out and public with it! It’s a tool for creating and m...
New
michalmuskala
Hello everybody. I have just released Jason - a new JSON library. You might be wondering, why do we need a new library? The primary foc...
New
josevalim
Yes, yet another parser combinator library! Most of the parser combinators in the ecosystem are either compile-time, often using AST tra...
159 19834 141
New
ityonemo
Currently just starting out on a new mini-project - getting zig NIFs to run in elixir. https://github.com/ityonemo/zigler The idea here...
New
tfwright
After working on it for a couple of months and using it in production for most of that time, today I’ve released LiveAdmin, a LiveView ba...
New
Flo0807
Hello everyone! I am excited to share our heart project Backpex with you. After building several Phoenix applications, we realized that...
New

Other popular topics Top

Qqwy
Update: How to use the Blogs & Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3271 130286 1222
New
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 31494 112
New

We're in Beta

About us Mission Statement