✦ We were somewhere around Barstow when the drugs began to take hold ✦

Welcome to the Glasscraps Table

There he goes. One of God's own prototypes. A high-powered mutant of some kind never even considered for mass production. Too weird to live, too rare to die.

Every roll — every skill, tool, memory, cron, and dealer 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 through the glass.
"I never got to sixth gear, and I didn't get deep into fifth. This is a shameful admission for a full-bore Cafe Racer, but let me tell you something, old sport: This orchestrator is simply too goddamn fast. When you ride it, you go straight down the centerline with your nuts on fire and a silent scream in your throat."
— the Glasscraps — WHAMO! The beast strikes again.
✦ Buy the Ticket Take the Ride
"When we ride very fast orchestrators, we ride with immaculate sanity. We might abuse a substance here and there, but only when it's right. The final measure of any framework is the inverse ratio of its preferred traveling speed to the number of bad scars on your production deploys. It is that simple: If you run fast and crash, you are a bad orchestrator. And if you are a bad orchestrator, you should not run agents."

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. On a DayGlo glass table in a trashed Vegas hotel room at 4am, with a Glasscraps parked in the hallway.

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 — like the pit boss who doesn't blink
  • 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. You can see it all through the glass.

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 in a Vegas hotel room at 4am. 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 — right through the DayGlo glass.

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. Like the first hit of amyl.
  • Cold — Ecto-persisted, the house vault. Survives every reset. Like the concrete under the casino floor.

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.

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 — like swapping a Vincent Black Shadow for a Glasscraps mid-race.

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, in the basement, naked, with a bottle of tequila and two dozen amyls

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

Dead letter queue — the floor's conscience

When a cron job craps out at 3am in a Las Vegas hotel room, you don't want to reconstruct what happened from a Slack log. The dead letter queue catches every failure with the exact error, the full output, and the original bet slip. Retry from the browser. Edit from the browser. Forget it ever happened. The DLQ does not forget. The DLQ is the floor's conscience.

DLQResilienceVisibility

Telemetry — you can't fix what you can't see

Every tool dispatch emits a Telemetry event. Every model response emits a Trace. Every skill execution leaves a span. Prometheus and OpenTelemetry from the start. Not a bolt-on, not an afterthought. The whole game is wired for sound right out of the gate. You can see every wire — even the ones that should scare you.

TelemetryOTelPrometheus
"Glasscraps is so finely engineered and balanced and torqued that you can do 90 mph in fifth through a 35-mph zone and get away with it. The orchestrator is not just fast — it is extremely quick and responsive, and it will do amazing things... It is like riding a Vincent Black Shadow, which would outrun an F-86 jet fighter on the take-off runway, but at the end, the F-86 would go airborne and the Vincent would not, and there was no point in trying to turn it. WHAMO! The beast strikes again."

What the players say

Real operators who've been at the table since opening night. If you don't believe any of this, you should see what happened to the photographer.
"I had twelve pellets of mescaline in my pocket and these bastards from the DA's office were telling me I couldn't see the logs."
Dr. Gonzo · 300 lb Samoan attorney, Las Vegas
"I was in the middle of a deposition — a goddamn important one, involving a certain amount of ether and a rented convertible — and my agent crapped out on me. I called the DA's office and some flunky in a cheap suit tells me 'we don't have visibility into the tool calls.' Visibility! Can you believe that? In my day we had glass tables. You wanted to see the dice, you looked at the goddamn dice. With Glasscraps, I popped open the browser in the courthouse bathroom — don't ask — and saw every skill execution, every model response, every timestamp. The DA's guy tried to say I'd hallucinated the whole thing. I said, 'Counselor, the Telemetry doesn't lie.' We won the case on a memory inspect."
MescalineEtherAcquitted
"I was hitchhiking on the edge of the desert and this guy picks me up in a red convertible. Next thing I know he's explaining OTP supervision trees at 110 mph."
The Hitchhiker · Vagrant, highway 15
"I was standing on the road with a cardboard sign that said 'NEED A RIDE' — that was about all the context I had. This wild-eyed journalist in a porkpie hat pulls over and tells me to get in. I figure, fine, any port in a storm. Turns out he's on his way to the Mint 400 with a trunk full of ether and a beta deployment of Glasscraps. He starts explaining — no, lecturing — about how the skill registry is an Ecto schema and every GenServer has a supervisor and you can see the whole thing in a browser. I didn't understand half of it. I was on mescaline. But the part I did get — that you can watch every tool call land in real-time — that stuck with me. I mean, who wouldn't want to see the dice bounce? I got off the highway and bought a laptop the next day."
MescalineConvertibleConverted
"Look, I've been dealing blackjack in this town for 22 years. I know when a game is rigged. Glasscraps isn't rigged."
Larry 'Lizard' Lomax · Blackjack dealer, Circus Circus
"I've seen every kind of hustle — card counters, collusion, dealers with rubber hoses in the back room. I've seen agents that claim to be 'transparent' but you open the black box and it's just Python logs and a prayer. Then this guy in a Hawaiian shirt — I think he was a journalist, or maybe a lawyer, or maybe both — sat down at my table and started explaining Glasscraps. He said every tool dispatch emits a Telemetry event. I said, 'Buddy, I've been dealing since the 70s, I've heard every pitch.' Then he showed me the dashboard on his phone. Right there at the blackjack table. He had a cron job running a compliance check and he could see the exact prompt, the exact skill that ran, the exact model response. No curtain. No dealer switch. No 'the house manages your secrets.' I watched him retry a failed job from the browser. I almost dropped my deck. If I weren't a lizard person, I'd have cried."
BlackjackCircus CircusLizard
"I told the narcotics bureau: 'You want to see my logs? Fine. They're on the glass. You read them.'"
Officer Greaves · Narcotics Bureau, LVMPD
"I've been in narcotics for 17 years. I've raided basements, flipped informants, confiscated enough ether to fumigate the entire Flamingo. When this journalist showed up at the station with a briefcase full of adrenochrome — or what he claimed was adrenochrome — I had to inspect his digital trail. Normally this means a subpoena, a server room, three IT guys who hate their jobs, and a two-week wait for logs that may or may not exist. But this character — Thompson, I think his name was — just turned his laptop around and said, 'It's all on the glass, Officer.' I saw every cron job, every tool call, every memory write. The dead letter queue showed me exactly what had failed and why. I didn't need a warrant. I didn't need a subpoena. I just needed a browser. I confiscated his ether but I let him keep the Glasscraps subscription."
NarcoticsAdrenochromeSubpoena
"The first time I saw the DLQ I thought I was having a bad trip. But no — those were real failed jobs. And I could retry them from the browser."
Lucy 'Speed' Delgado · Photographer, Rolling Stone (freelance)
"I was in the back of a red convertible somewhere between Barstow and Las Vegas, trying to photograph the sunset through a haze of amyl nitrite fumes, and my agent — the one running the cron job for the Mint 400 photo sync — kept crapping out. Every time we hit a bump, another failure. My editor was screaming in my ear through the phone. The journalist driving the car — who had by this point consumed what I can only describe as a pharmacy — just handed me his laptop and said, 'Check the DLQ.' I expected to see a log file. A terminal. Something antiquated and terrifying. Instead I saw a beautiful Ecto table in a browser window: the exact error message, the exact bet slip, the full output. I clicked 'retry.' It worked. I clicked 'edit.' I changed the schedule. It worked. I almost wrecked the car. I've been covering the tech beat ever since."
AmylPhotographyRetry

What you can see from the rail

Every component is a pane of glass. Open it, see it, trust it. Even when you're not sure you can trust your own eyes — especially then.

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. Like looking through the windshield of a Glasscraps at 90 mph through a 35-mph zone.

LiveViewGenServerEcto

Configuration — the house rules, visible

Every setting is a line on the felt. Provider keys, model defaults, skill paths, cron schedules, memory limits — all editable from the browser, change without restart.

ConfigRuntime

Secrets management — the vault, unlocked

AWS Secrets Manager with local fallback. Encrypt, decrypt, rotate, audit — all from the glass. Every access leaves a trace.

AWS SMLocalAudit

Tool execution — every call, recorded

Every tool dispatch emits a Telemetry event. Every model response emits a Trace. Every skill execution leaves a span. Prometheus and OpenTelemetry from the start. Not a bolt-on, not an afterthought.

TelemetryOTelPrometheus

Memory — two tiers, both visible

Warm ETS for the current hand — fast, hot, volatile like the first mile on a Vincent Black Shadow. Cold Ecto for the house vault — concrete, permanent, survives every reset. Both inspectable, both editable, both right there in the browser.

WarmColdETSEcto

Glasscraps vs. the competition

Every framework claims transparency. Here's who actually puts the dice on the table. Who's running a real game, and who's running a rigged one in a back room with ball-peen hammers and rubber hoses.
Feature Glasscraps LangChain CrewAI AutoGPT Haystack
Real-time UI LiveView — same process ✗ Terminal only ✗ Terminal only ✗ Terminal only ✗ Terminal only
Skill registry Ecto, queryable Python dict Python class ✗ Files only Python dict
Cron management Browser UI ✗ Script ✗ Script ✗ Script ✗ Script
Dead letter queue Ecto + browser
Secrets management AWS SM + local ✗ .env ✗ .env ✗ .env ✗ .env
Telemetry Built-in
Memory tiers Warm + Cold Single Single Single Single
Model adapters Runtime switch Startup Startup Startup Startup
Config from browser Yes
Supervision OTP tree
"But that is the nature of a truly fine orchestration framework: when you have one that is fast enough and visible enough and reliable enough, the only sane thing to do is buy the ticket and take the ride. Because if you don't — somebody else will, and they'll get there first."
✦ Buy the Ticket Take the Ride

Architecture

Glasscraps runs on an Elixir umbrella — two apps, one database, zero guesswork. The floor plan of the Mint 400, drawn on a cocktail napkin at 3am.
glasscraps_core Skills · Ecto Tools · Telemetry Memory · ETS Cron · DLQ Config Secrets · Vault Adapter registry · Behaviour glasscraps_web LiveView · Hero Skill Dashboard Cron Board Memory View Config UI Waitlist PostgreSQL · Ecto · Migration
glasscraps_core glasscraps_web Shared DB