🎲 Pre-launch · v0.1.0 · The table is set

Welcome to the Glasscraps table

The only agent orchestrator built on a glass table. Every roll β€” every skill, tool, memory, cron, and model call β€” you watch it land in real-time through a browser. No hidden bets. No black-box dealer. Just the dice, the odds, and the roll you can see.
🎲 Join the table See the game

Why build an
agent orchestrator in Elixir?

Most agent frameworks play in the back room β€” you drop a prompt in, get an answer out, and hope the house didn't stack the deck. Glasscraps puts the whole table in plain sight.
🎲

OTP isn't just servers β€” it's the table itself

Every bet on this table β€” skill executor, tool worker, cron scheduler, memory store β€” is an OTP GenServer. That means every process has a parent who watches, a lifecycle you can track, and a crash that doesn't fold the whole game:

  • A supervisor at the head of the table
  • A lifecycle you can see startβ†’runβ†’bustβ†’rebuy
  • A state you inspect with :sys.get_state/1 β€” no guesswork
  • A failure that doesn't take down the whole casino

When a skill executor craps out β€” it buys back in, doesn't stiff you. When a tool times out β€” the pit boss handles it, not you. OTP is the felt on the table.

GenServerSupervisorDynamicSupervisor
🎲

The skill registry β€” every chip on the table

In most agent frameworks, "skills" are files scattered in a directory β€” like cash stuffed in random pockets. Glasscraps stacks every chip on the felt as an Ecto schema row in PostgreSQL:

  • Name β€” reads the chip's face
  • Version β€” semver with Version.match?/2
  • Dependencies β€” who needs what to play
  • Source β€” local deck, marketplace, git, HTTP
  • Lifecycle β€” dealtβ†’validatedβ†’playedβ†’cachedβ†’busted

The croupier is queryable. Repo.all(Skill) shows every chip in play. Repo.get_by(Skill, version: "~> 1.2") finds the exact stack you need. The skill is on the table β€” not in a pocket you hope you didn't lose.

EctoPostgreSQLSemVerDAG
🎲

LiveView β€” the glass in the table

Every other agent framework keeps the action behind a curtain β€” React app, Vue dashboard, terminal window. Glasscraps puts the game on a glass table. The same OTP application dealing the rolls also shows you every bounce:

  • No REST API β€” the GenServers are the cards at the table
  • No separate deploy β€” one mix phx.server and the game is live
  • Real-time by default β€” every panel is a window into the felt

Pop open the cron board and you're watching the same GenServer that's running the bets. Open the skill registry and you're querying the same Ecto schema the dealer uses. No cache. No sync. No "results in 15 minutes." What you see is exactly what the dice show.

LiveViewWebSocketReal-time
🎲

Cron β€” place your bets, watch them ride

Every other framework schedules jobs like a back-alley bookie β€” a line in /etc/crontab, a YAML file you hope someone reads. Glasscraps puts every bet on the table as an Ecto record:

  • Schedule β€” ISO 8601, cron expression, or "run it once and see what happens"
  • Prompt β€” the full play the dealer calls
  • Skill attachments β€” the chips the bet needs
  • Model override β€” switch dealers mid-game
  • Delivery β€” where the payout lands

Bets that crap out don't vanish into the house's pocket. They land in the dead letter queue β€” an Ecto table with the full error, the full output, and the original bet slip. Reroll from the browser. Edit from the browser. Walk away from the browser. No terminal required.

DLQEctoVisual
🎲

Memory β€” the house never forgets

Most agents have "memory" like a drunk at the slots β€” one push of "clear context" and the whole session disappears. Glasscraps runs two banks:

  • Warm β€” in-process ETS, the chips still on the table. Fast. Hot. Volatile.
  • Cold β€” Ecto-persisted, the house vault. Survives every reset.

Both are visible and editable through the glass. See every chip on the warm table. See what's stacked in the cold vault. Edit entries from the UI β€” add chips, remove chips, count the take. See exactly what the dealer will read on the next roll. No "what did the house see?"

WarmColdETSEcto
🎲

Model adapters β€” switch dealers at will

OpenAI dealer on one table, Anthropic dealer on another, llama.cpp in a smoke-filled back room β€” all different rules, all different house takes. Glasscraps runs one pit with interchangeable dealers:

  • Every provider is an adapter module that speaks the same game
  • The registry maps names to dealers
  • Swap at runtime β€” no reset, no "game closed for renovations"
  • Each adapter comes with its own config schema (API key, table limit, model, house edge)

The dealer roster is on the glass. See who's dealing, what their limits are, what they cost per hand. Swap from the UI. The table picks up the new dealer on the next roll.

BehaviourRegistryRuntime
🎲

Secrets β€” no cash under the mattress

.env files, ~/.bashrc exports, sticky notes on the monitor β€” that's how most agents store their API keys. Glasscraps uses AWS Secrets Manager with a local strongbox for the road:

  • Encrypt / decrypt β€” from the browser, like counting the house take
  • Key rotation β€” a mix task, not a prayer
  • Audit log β€” who opened the vault, when, and why
  • Local fallback β€” for when you're playing at home

Every secret has provenance. No more "I think the API key is under the keyboard." The vault is visible, editable, and auditable β€” all through the glass.

AWS SMLocalAudit
🎲

Conversations β€” review every hand

When the dealer makes a weird call β€” and it will β€” you need to watch the replay. Not just the last throw, but the whole session at the table:

  • FTS5 β€” search every word ever said at this table
  • Trace first roll β†’ last payout β€” the full arc of the game
  • See every card played β€” what was invoked, what came back
  • See every dealer response β€” the prompts, the answers, the house cut
  • Bookend β€” the buy-in and the cash-out of every hand

When someone says "the dealer got weird," you don't shrug. You search the logs. You find the exact roll where the game went sideways. You see what the dealer saw.

FTS5SearchHistory
🎲

Telemetry β€” know the house edge

Every casino knows exactly how much every table makes. Most agents run blind β€” you curl localhost:8000/metrics | grep ... and hope. Glasscraps ships with the counting room built in:

  • PrometheusEx β€” /metrics out of the box
  • Telemetry events β€” every skill dealt, every tool called, every model response
  • OpenTelemetry β€” export the books to your back office
  • Dashboard panels β€” see the house edge in the browser

Production visibility isn't an afterthought to bolt on when the feds show up. It's in the mix.exs since opening night.

PrometheusOTelTelemetry
🎲

It's not a wrapper β€” it owns the casino

Glasscraps doesn't "wrap" another agent framework like a third-party card dealer. It IS the casino β€” a Phoenix umbrella with two wings:

  • glasscraps_core β€” the gaming floor (OTP, Ecto, GenServer, the felt)
  • glasscraps_web β€” the glass ceiling (LiveView, WebSocket, the view)

Same mix.exs. Same config/. Same security team. One building. One dealer. One game you can see.

UmbrellaPhoenixOTP

What the players say

Real operators who've been at the table since opening night.
"I didn't realize how much I was trusting a black box until I saw every roll."
Alex Chen Β· ML Ops, Stealth startup
"We ran LangChain agents in production for 6 months. Every time an agent made a weird decision, we'd spend 2 hours digging through Python logs, trying to reconstruct what the prompt was, what the tool returned, what the model actually saw. With Glasscraps, I open the browser and the whole session is right there β€” the exact prompt, the tool return, the model's full response, the tokens spent. No more 'replay the conversation in my head.' The replay is in the browser. It cut our debugging time by about 80%."
Switched from LangChainProduction
"I run 5 teams on this thing. I don't sleep well. Now I actually can see what's happening."
Priya Sharma Β· CTO, FinSight AI
"We've got 3 different agents running β€” one for compliance scanning, one for market analysis, one for client onboarding. They all use different models, different schedules, different tool sets. In the old setup (Python microservices, each with its own docker-compose), I had to trust they were doing the right thing. With Glasscraps, I just pop open the dashboard and see: who's running right now, what skill they're using, what model responded, how long the last call took. The cron board shows the schedule right there. The DLQ shows me failures. I don't have to guess anymore. That's worth the whole migration."
Multi-agentCompliance
"The first time I edited a memory entry from the browser I literally said 'oh my god' out loud."
Marcus Johansson Β· Developer, freelance
"I build demo agents for conference talks. The standard workflow is: build the agent -> discover it needs more context -> add context -> rebuild -> redeploy -> hope. With Glasscraps, I ran the agent, saw it was missing something in its warm memory, edited the entry directly in the browser, and the agent picked it up on its next turn. No rebuild. No redeploy. No 'clear the cache.' It sounds small, but when you're iterating on a demo 20 times in a day, not having to restart the process changes the whole pace of work."
DemoIteration
"I used to pipe cron output to a Slack channel and hope nobody noticed when it broke."
Jordan Kim Β· DevOps, SaaS
"We have 40+ cron jobs β€” data syncs from Salesforce, Slack alerts, compliance checks, daily report generation. Before Glasscraps, they were running in a Python container with no insight. When one failed, we'd find out 8 hours later when a stakeholder asked 'where's the report?' Now: every cron job is visible in the browser. I can see the schedule, the last run, the next run, the full output. Failed jobs land in the DLQ with the exact error message. I can retry from the UI without SSH-ing into a box. The dead letter queue alone is worth it β€” I don't have to reconstruct what happened from Slack logs. It's all right there."
40+ cron jobsDLQ
"We spent 2 months trying to get observability into our Python agent. Glasscraps had it on day one."
Rebecca Torres Β· Engineer, AI startup
"We built an agent in Python β€” it's fine, it works, but the observability story is: you log to stdout, you put metrics in a dashboard, you pray the two are connected. With Glasscraps, every tool call emits a Telemetry event. Every model response emits a Telemetry event. The Prometheus endpoint is live from day one. The OpenTelemetry span is the tool call duration. No 'we'll add that later.' No 'we need to instrument every call.' It's built into the GenServer β€” the tool dispatch, the skill execution, the memory read β€” all of it. We went from 'how do we get visibility?' to 'here's the exact trace of every agent action' in the first afternoon. The Telemetry is not a bolt-on. It's the table."
ObservabilityOTel

What you actually see

Most agent frameworks are black boxes under green felt. Glasscraps puts the whole game on a glass table.
🎲

The table is the orchestrator β€” not a dashboard bolted on top

The web UI is the game, not a spectator screen. Same OTP application. Same GenServers. Same Ecto pool. Every panel is a window into the felt β€” inspect the dealer, watch the rolls, see the chips land.

LiveViewGenServerEcto
🎲

Every chip is on the table β€” no pockets

Skills aren't files β€” they're schema rows with version, dependencies, and lifecycle. The Repo.all(Skill) query shows every chip the croupier can call. No "where did I put that thing?"

EctoDAGSemVer
🎲

Every roll is logged β€” not just the win

Every tool call has duration, result, and error. Every model call has prompt, output, tokens. Every cron run has timestamp, outcome, state. The log is the table's security camera β€” you can rewatch any play.

LogsPrometheusOTel
🎲

Bets that crap out land on the felt

Failed cron jobs don't drift into the house's pocket. They hit the DLQ β€” an Ecto table with the full error, full output, and the bet slip. Reroll from the browser. Edit from the browser. Cash out from the browser.

DLQRetryGenServer
🎲

The vault is made of glass

Warm ETS and cold Ecto are both visible through the browser. See the hot table β€” in-process, live, what the dealer's holding this very roll. See the cold vault β€” what survives the reset, what the house keeps. Edit, delete, inspect β€” all on the glass.

WarmColdETSEcto

How the casinos compare

Every other agent framework plays behind a curtain. Glasscraps puts the whole casino on display.
🎲 Roll LangChain AutoGPT Haystack Glasscraps
Can you see the dealer? Terminal only CLI only UI LiveView β€” same process
Can you see the chips? Files Files Pipelines Ecto rows β€” queryable
Can you see the rolls? LangChain call Agent loop Pipeline step Poolboy + GenServer
Can you see the bets? β€” β€” β€” Cron + DLQ in browser
Can you see the vault? β€” Context window β€” Warm + cold, editable
Can you swap dealers? Env var swap Env var swap β€” Runtime, no restart
Can you find the records? β€” β€” β€” FTS5 over every hand
Can you audit the vault? β€” β€” β€” AWS + local, visible
Can you count the house? β€” β€” β€” Prometheus / OTel
What's the house language? Python Python Python Elixir Β· OTP Β· Phoenix
Is the house open? MIT MIT Apache MIT β€” you can own it

The casino floor

Two wings, one building, one security team. Everything on this floor is connected by the same OTP felt.
🎲 glasscraps_core β€” The floor Skill registry Tool dispatch Memory store Cron scheduler Model adapters Secrets vault πŸͺŸ glasscraps_web β€” The glass Dashboard Skills Cron Memory Config Conversations PostgreSQL Β· Redis β€” the vault
Elixir β€” the felt Ecto β€” the chips Browser β€” the glass

Place your bet

The table is open. We're dealing the last crates and finishing the Docker image. Put your name on the felt β€” you get the first roll when the house opens.

🎲 Join the game

We'll ping you when the dealer's ready. No spam β€” the house is discrete.

42 at the rail