NewThe Pinecall runtime is open source. One command makes a box.

Bernardo Castro · AI systems engineer

Agents that
do the work.

I build voice agents and the server side they run on: a runtime on LiveKit where every call is a log you own, scored the moment it hangs up. Eighteen years shipping software; co-founder of Pinecall.

Open to senior roles and contract work · Uruguay and Spain · English, español

replayinga real call to my agent · from its log
    $0.028 · claude-haiku-4.53/3 judges held

    Runtime

    The part nobody demos.

    Audio in, a gateway that picks the worker, workers that take the call. Watch one die.

    Gateway
    13/24calls lost to a dead worker, before
    Workers
    5 sbetween heartbeats: the gateway hears every worker
    Callers
    21 sfrom a worker killed to its callers told, never silence
    Who picks the worker for each call
    w2 up

    0 answered0 rang in silence

    LiveKit keeps a dead worker registered for 15–20 minutes and keeps drawing it. Each call it gets rings in silence for 10 s.

    Scaling

    Machines come and go. Calls stay.

    The fleet keeps itself 60% busy. Over it, the cloud adds a machine; under it, the quietest stops taking calls and leaves once empty.

    Seats
    32calls on one 8-vCPU machine, at 57%
    Grow
    91 sfrom the busy signal to a new machine
    Shrink
    27 san idle machine cordoned, drained, deleted
    busy 0%target 60%0 calls

    One machine, 32 seats. Calls start to arrive.

    terraform$ make tf-plan ENV=productionNo changes. 27 resources, the fleet included

    Pinecall runtime on LiveKit · the fleet in Terraform · measured in the lab, Oct 2026

    How a call works

    From hello to sealed.

    Six things happen in every call, most of them in under a second. Each one can break in its own way, and each one leaves a line in the call's log.

    A phone call reaches the box from the carrier over SIP, and a browser call over WebRTC. Both end up in the same place: a LiveKit room, which carries the audio both ways.

    where it breaksAnyone on the internet can knock on a phone port, and some do it all day, looking for free calls.

    how it holdsThe phone port only answers the carrier's own addresses. Everyone else gets no reply at all.

    on the logcall.ringingweb · bernardo

    A worker, one of the machines that hold conversations, joins the room for this call. It loads the agent's voice, model and words for the world the call belongs to.

    where it breaksA machine dies mid-call, or every seat is taken at the busiest minute.

    how it holdsThe caller is told in one sentence and offered a call back. They never get silence. A dead worker's callers hear that sentence within about 21 seconds.

    on the logcall.startedworker joined · sandbox

    Speech recognition writes down what the caller says, and a turn detector decides when they have actually finished, not just paused for breath.

    where it breaksIt answers too early and cuts the caller off, or a "mhm" makes the agent stop mid-sentence.

    how it holdsTurn rules per language: a few words to interrupt, and backchannels like "mhm" and "vale" are let through.

    on the logturn.user"Thursday would be great."

    The model reads a prompt rendered from the call's state and decides what to do. When it needs a fact or an action, it calls a tool, and the tool runs in the business's own code, not in ours.

    where it breaksIt invents a time that does not exist, books something nobody agreed to, or goes quiet for twenty seconds.

    how it holdsOnly tools change anything. The irreversible ones wait for a yes. A model silent for 12 seconds is cut, and the caller hears "one moment".

    on the logtool.callfreeSlots(Thursday)45 ms

    The reply is spoken as it is written, word by word, so the caller hears the start of it before the model has finished thinking.

    where it breaksThe agent talks over the caller, or every reply arrives a beat too late to feel like a conversation.

    how it holdsWhen the caller speaks, the agent stops. Every turn records its time to first audio, so a slow day shows up as a number.

    on the logturn.agent"How about one of these…"ttft 518 ms

    The call ends and its record is closed: every model priced, what the agent learned remembered, and the call graded by judges.

    where it breaksNobody listens to the calls, so a bad one is only found when a customer complains.

    how it holdsEvery call is judged as it hangs up: by code where a rule can decide, by a model only where it cannot. The record cannot be edited afterwards.

    on the logcall.scoreconsent · grounded · promises3/3 held · $0.028

    Open source

    Built in the open.

    What I reach for on real work, released for anyone to use. Install it, read the code, and judge the engineering before we talk.

    pinecall

    pinecall

    The server side of voice AI, as one open-source runtime on LiveKit.

    The call's log, gateways that hold no state, worker fleets, tenants, evals, memory and hosted apps, in one Python package. One command turns a clean Ubuntu machine into a box that answers calls; the agents talk to it from TypeScript or Ruby.

    the runtime
    $ sudo uvx --from pinecall pinecall-runtime box up --domains …
    the SDK and the CLI
    $ npm i pinecall
    • Python
    • TypeScript
    • LiveKit
    • Apache-2.0

    taskops

    bernatch22

    A shared work board for teams of coding agents, with a human who decides.

    Milestones, cards and one git worktree per card, served over MCP so a fleet of agents can plan, take, deliver and review without stepping on each other. Nobody reviews their own work: the server refuses it.

    $ uv tool install taskops-cli
    • Python
    • MCP
    • Claude Code

    vibesmell

    bernatch22

    The smells a linter can't see, because they live between files.

    Functions that only forward, parameters carried through three functions unread, the same body written twice. It reads a Python package or a TypeScript project whole, and each finding says what is wrong and how to fix it.

    $ uvx --from vibesmell vibesmell score
    • Python
    • TypeScript
    • MIT

    Approach

    How I build.

    Three decisions I make on every system. Each one was paid for in production.

    1. 01

      Measure the curve, not the point.

      I ramp a system until it breaks and size it from where it did, counting capacity in calls, never in CPU.

      32 of 32 seats at 57 %, measured in the lab

    2. 02

      One record, and everything reads it.

      Every fact of a call is an append-only entry. The console, billing and the judges read the same log, so they cannot disagree.

      UPDATE and DELETE refused by the database

    3. 03

      Degrade out loud.

      When something fails, the caller hears a sentence and is offered a call back. Never silence.

      21 s from a worker killed to its callers told

    Experience

    Eighteen years shipping.

    With models in production since GPT-3: as a team lead, a co-founder, and the engineer partners call for the hard ones.

    Open to senior roles and contract work

    1. 2025 – now

      Pinecall

      Co-founder · the engineopen source · Apache-2.0

      Co-founded Pinecall and own the engine: the open-source runtime on LiveKit that every call runs through. The call's log, gateways that hold no state, worker fleets that grow and shrink by themselves, tenants, evals and memory, and the SDKs an agent is written in. My co-founder Gabriel Cardama keeps the clients; I stay on the runtime and the infrastructure. Production is code in Terraform, and every change is measured in a lab first: a gateway machine killed under 1,200 live calls lost none.

      python · typescript · livekit · postgres · terraform

    2. 2026 – now

      Ringside

      Co-founder · with Kickboxing Zona Franca · Barcelona

      An operating system for fight gyms, built and validated together with Gabriel and Edu at Kickboxing Zona Franca in Barcelona, where it runs the gym day to day: memberships billed on Stripe, a door that opens with a QR or, optionally, the member's face, every scan checked against their Stripe subscription, face vectors that never leave the local box, and apps for reception, members and staff. More than 100 subscriptions are billed through it today. The next layer, built with Edu, is a model that reads a fight, trained on a dataset the club labels itself.

      kickboxingzf.com

      typescript · hono · stripe · electron · ionic · yolo11-pose · pytorch

    3. May 2026 – now

      Cloudacio

      Quant systems engineer · Axion

      Axion is decision infrastructure for autonomous AI agents, a project of Cloudacio's founder, deployed first against crypto-derivatives research. I built it from zero and own the full stack: the agents' control surface, the evidence layer and the data platform underneath. Agents pre-register hypotheses over MCP before any outcome exists, and a live forward clock judges them. A backtest can only reject, never promote, and every ledger is append-only, over an 843M-row lake.

      python · clickhouse · fastapi · claude code · mcp · gcp

    4. 2025 – 2026

      ServiceHub

      AI engineer · legacy platform and security

      Owned the legacy platform a healthcare-interpreting business runs on, 2.5M+ encounters a year: kept it running, shipped features on it, account transfers among them, and helped carry it into the platform replacing it. When an external penetration test came back, I closed every Critical and High finding across the three applications. Two of them lived in a dispatcher console of Classic ASP and VB6 COM+ components written in 2000. I found the build server a past developer had left half-finished, rebuilt the DLLs from source with VB6 SP6, the rebuilt library matched production byte for byte, and shipped the fix into 25-year-old code.

      php · classic asp · vb6 · com+ · sql server

    5. 2020 – 2025

      DigitalBGA

      Software architect · AI team lead

      Nearly five years at one of the fastest-growing life-insurance agencies in the US (3× Inc. 5000), and where my AI work starts. When GPT-3 shipped I built a voice agent over a weekend to call back the leads nobody had time for, and it became the company's main project: 10,000+ leads captured. Then a complete e-app system, 4,000+ applications with Mutual of Omaha and other carriers, and a call-center conversation analyzer.

      ruby · php · react · python

    6. 2017 – 2019

      Crisalix

      Full-stack · Barcelona

      3D medical imaging. Built the public API from scratch, an image editor with comparison tools, a subscription manager and KPI dashboards. Won the first company hackathon: a selfie to a 3D model.

      ruby · js

    7. 2008 – 2020

      + 8 earlier roles

      Full-stack · US and EU clients · since age 17

      CallAction, PUSHTech, Teamitup NY, Tarmac, Dawson, and Cubox, the Montevideo studio founded by an early Twitter engineer, where I learned TDD and pairing shipping for US startups. Plus a CMS for a national airline, shipped at 18.

      ruby · php · js