Give your models real tools. Run them on hardware you control.
Turnstone hands LLMs a shell, files, search, and the web — then orchestrates multi-turn agents across your own cluster, with direct HTTP routing and interactive interfaces. No telemetry. No phone-home. Your code, your models, your data stay put.
Agents that investigate, act, and report — without leaving your network.
Private by construction
Runs entirely on hardware you control. No telemetry, no phone-home — prompts and data never transit a third party you didn't choose.
Bring your own
vLLM, llama.cpp, NIM, the Anthropic Messages API, and Google Gemini — OpenAI-compatible or native, mixed freely per role.
Intent validation
An LLM judge — your model — grades every tool call with a risk assessment and evidence, before it runs.
Live dashboard + routing
Real-time view of every node and workstream, with a rendezvous-hashing proxy that re-routes only the keys it must on join or drop.
External tools, native
Model Context Protocol servers with native deferred loading (Anthropic/OpenAI) and a BM25 fallback for discovery.
Team controls, optional
RBAC, SSO, tool policies, and audit logs when you need them — all stored in your own database, never ours.
Of the sand.
Arenaria comes from the Latin arēna — sand. It's the genus of the ruddy turnstone, a shorebird at home where the shore opens into bare, wind-combed flat: the sand-dweller.
There's a quieter reason it fits. Everything here runs on what we draw up from sand — refined, etched, set to thinking — and Turnstone keeps that intelligence on ground you hold: your models, your data, your hardware.
Up and running in a minute.
# stable — production-grade, bugfixes only $ pip install turnstone # or the experimental track $ pip install turnstone --pre
# autodetects your distro, installs deps, # generates secrets, starts the stack $ curl -fsSL https://arenaria.ai/install.sh | bash
from turnstone.sdk import TurnstoneServer with TurnstoneServer(url, token=tok) as c: ws = c.create_workstream(name="demo") r = c.send_and_wait("Analyze the logs", ws.ws_id) print(r.content)
# any OpenAI-compatible endpoint $ turnstone --base-url http://localhost:8000/v1 $ turnstone-server --port 8080 $ turnstone-console --port 8090 ✓ dashboard live · https://localhost:8443