One Elixir module. Every surface, one runtime.
Runtime, agent harness, and payment rails run on OTP. Render to terminal, LiveView, SSH, MCP, Telegram, Watch, and Speech.
$
curl -fsSL https://raxol.io/install | bash
Settle
[
{
"id": null,
"type": "flex",
"children": [
{
"id": null,
"label": "XOCHI SANDBOX REPLAY · NO FUNDS",
"type": "text",
"children": [],
"role": "text",
"content": "XOCHI SANDBOX REPLAY · NO FUNDS"
},
{
... 69 more lines, 2069 bytes total
defmodule Settle do
use Raxol.Core.Runtime.Application
alias Raxol.Payments.Actions.Payments, as: P
alias RaxolPlayground.SettlementSandbox, as: Sandbox
@payment %{
amount: "25.00", from_chain_id: 8453,
to_chain_id: 42_161, settlement: "stealth",
trust_score: 25, slippage_bps: 50,
min_to_amount: "24900000"
}
def init(_) do
{:ok, demo} = Sandbox.start(@payment)
{:ok, intent} =
P.ExecuteXochiIntent.call(demo.payment, demo.context)
{:ok, receipt} = P.PollXochiStatus.call(
%{intent_id: intent.intent_id}, demo.context)
signed = Sandbox.Wallet.signatures()
{:error, denied} = P.ExecuteXochiIntent.call(
%{demo.payment | amount: "75.00"}, demo.context)
%{demo: demo, intent: intent, receipt: receipt,
denied: denied,
safe?: Sandbox.Wallet.signatures() == signed,
t: 0}
end
def update(:tick, m), do: {%{m | t: m.t + 1}, []}
def update(_, m), do: {m, []}
def subscribe(_), do: [subscribe_interval(200, :tick)]
def view(m),
do: column(do: Enum.map(Sandbox.lines(m), &text/1))
end
models
Claude (subscription, via CLI)
Grok (subscription, via CLI)
Anthropic (Claude)
OpenAI
Kimi (Moonshot)
OpenRouter
LongCat (Meituan)
DeepSeek
Proton Lumo
Ollama (local)
LM Studio (local)
LLM7
Cursor
acp editors
Zed
JetBrains
neovim
Emacs
VS Code
agent commerce
Virtuals Protocol
networks
Ethereum
Optimism
Polygon
Robinhood Chain
Arc
Base
Arbitrum One
Tron