pinecall
Voice AI that runs where you do. Pinecall is a self-hosted runtime for voice agents: phone calls, web voice, chat and WhatsApp, on your box, your carrier, your models.
This repository is the runtime: the gateway that answers the doors and the worker that runs the
calls, one Python package, one wheel, on LiveKit. It runs Pinecall's own production
(box.pinecall.io) and its sandbox on one box. The agents are written with the SDK, in
pinecall/agents (TypeScript) or the Ruby SDK, and talk to
this runtime over the wire pinecall/wire/ declares. Nothing here is imported by an agent.
On a machine with Ubuntu 24.04 and its names pointed at it, the runtime makes it a box by itself:
$ curl -LsSf https://astral.sh/uv/install.sh | sudo env UV_INSTALL_DIR=/usr/local/bin sh
$ sudo uvx --from pinecall pinecall-runtime box up --domains voice.example.com,sandbox.example.com
docs/from-zero.md takes it from there to a caller heard. To work on the runtime itself:
$ git clone https://github.com/pinecall/runtime && cd runtime
$ uv sync # Python 3.12, one venv, every dev tool
$ make check # the rules and every suite that needs no database
$ make test # every suite, on a throwaway Postgres (colima or docker)
docs/architecture.md is the map: what each folder does and what it may import.
docs/glossary.md defines the ten words of the domain. docs/conventions.md says how a file is
written. examples/ walks an inbound number, an outbound call and a chat with curl.
What it is
- Any vendor, no list. Every LiveKit plugin works out of the box: the model, the ears and the voice are whatever is installed and keyed. Bring your own key, or use the box's. Nothing in the code decides which models you may run.
- One deployment, two worlds. Production and sandbox on one gateway and one database, each with its own worker fleet and its own name. One login, one key, a switch in the console.
- The log is the product. Every call is an append-only log: what was said, what the model read, every tool call and its answer, every measure LiveKit took, the judges' verdicts at hang-up. The console, the CLI and the API read the same log.
- Compliance is built in, and provable. Calling hours and a frequency cap by destination, consent on file and a do-not-call list the agent honours with one call, the AI disclosure and the recording notice said before the greeting and logged, judges that settle by code whether a call identified the business and honoured a "stop". Erasure through one path the append-only trigger admits, with a trail; retention per org; an export in one request; an access log of who read what; call records kept 24 months for a carrier's traceback; encrypted nightly backups.
- A wheel, not a checkout. A deploy is one file copied to the box and three units restarted. Migrations run before the gateway comes up; a deploy never cuts a call.
- Three hops from a door to its effect, enforced by tests the commit hook runs. No registries, no layers, no vendor named in code.
What runs
The call's log; voice and text on one session; tenants, people, keys and sign-in (password, one-use codes, SSO); numbers from any carrier account and outbound calls with their guards; WhatsApp; knowledge bases and contact memory looked up in the call; goldens, simulated callers and judges; every operator door and verb; a fleet per world that grows through a cloud script; the console served at the box's names. Coming: local models end to end (the model, the ears and the voice on your own hardware).
Where to start reading
docs/from-zero.mdwalks a box to its first call;docs/a-box-in-production.mdis what a box keeps, backs up and forgets.docs/protocol/gateway-api.mdis every door a tenant's code knocks at, anddocs/protocol/every-door.mdall of them in one table.docs/protocol/numbers.mdis the phone side: carriers, numbers, dials and their guards.docs/the-runtime-cli.mdis the operator's terminal;docs/the-environment.mdnames every variable.docs/wire/describes every frame, event and command on the wire.
Working on it
make check the rules and the suites that need no database
make test every suite, on a local Postgres in colima (T=tests/log for one folder)
make hooks install the pre-commit hook (runs `make check`)
make deploy the console built in, a wheel, released on the box, the live suite, the journal
Python 3.12 and uv; colima for the suites that need Postgres (make db). Nothing runs LiveKit
locally. Apache-2.0.
Metadata
Release files for pinecall 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pinecall-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Release files / pinecall-0.1.2-py3-none-any.whl
| Download URL | pinecall-0.1.2-py3-none-any.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
66f1a10bab3cbe6353bfd35f402e6e46013520a593a631524910e0ce84e816e6
|
|
BLAKE2b-256 checksum How to use checksums |
d7fc46748a534a68b035bd16a758e5fb6cf2a6ab641e6bbde84153bbee5a321d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency log