High-performance OpenClaw Node implemented in pure Elixir. Connect your device to OpenClaw Gateway and expose AI capabilities.
Built on the BEAM - the same technology that powers WhatsApp, Ericsson, and Nintendo Online
| Feature | Benefit |
|---|---|
| OTP Reliability | 99.9999999% uptime - it just runs forever |
| Hot Reload | Update your AI node without restarting |
| Built-in Telemetry | See your agent thinking in real-time |
| Security First | Input sanitization, TLS, command allowlisting |
| BEAM Distribution | Scale to 1000 nodes with built-in clustering |
# Clone and build
git clone https://github.com/developerfred/ElixirClaw.git
cd elixir-claw
mix deps.get
mix escript.build
# Register your node
./elixir_claw node-register --display-name "My Elixir Node"
# Start as node
./elixir_claw node-startOr run locally:
# Record your own demo
asciinema rec demo.cast
# Play it back
asciinema play demo.castdocker-compose up -d- WebSocket client with TLS support
- Camera capture (macOS, Linux)
- Screen capture & recording
- System notifications
- Location services
- Command execution with allowlist
- Device identity & authentication
./elixir_claw status # Show node status
./elixir_claw node-register # Register with gateway
./elixir_claw node-start # Start node mode
./elixir_claw node-stop # Stop node
./elixir_claw approvals # List pending approvals
./elixir_claw -i # Interactive mode{
"gateway_host": "127.0.0.1",
"gateway_port": 18789,
"display_name": "My Node",
"caps": ["camera.snap", "screen.snap", "system.notify"]
}Environment variables:
ELIXIR_CLAW_HOST- Gateway hostELIXIR_CLAW_PORT- Gateway portELIXIR_CLAW_NODE_ID- Node IDELIXIR_CLAW_TOKEN- Auth token
See COMPARISON.md for detailed comparison with ZiggyStarClaw, Clawgo, ZeroClaw, and IronClaw.
- Real Ed25519 authentication
- Unified configuration (Config.Provider)
- Structured logging with telemetry
- Progress event streaming
- Phoenix LiveView Dashboard
- LLM integration (Claude/GPT-4)
- Livebook integration
- Nx/Bumblebee for local AI
- More platform support
Track capability execution progress in real-time:
# Subscribe to events
ElixirClaw.Events.subscribe("my_node")
# Execute with progress tracking
ElixirClaw.Node.execute("screen.record", %{duration: 10}, %{
node_id: "my_node",
request_id: "req_123"
})Monitor your nodes in real-time with a web dashboard:
# Start with dashboard enabled
ELIXIR_CLAW_START_DASHBOARD=true ./elixir_claw node-start
# Open http://localhost:4000Features:
- Real-time node status
- Telemetry visualization
- Command approval interface
- Event streaming
Control ElixirClaw with natural language through multiple LLM providers:
# Unified interface - auto-selects provider
{:ok, response} = ElixirClaw.LLM.chat("Take a screenshot")
# Specific provider selection
{:ok, response} = ElixirClaw.LLM.chat("Take a screenshot", provider: :nvidia)
{:ok, response} = ElixirClaw.LLM.chat("Take a screenshot", provider: :openrouter)
{:ok, response} = ElixirClaw.LLM.chat("Take a screenshot", provider: :opencode)
# Provider-specific functions
{:ok, response} = ElixirClaw.LLM.chat_with_claude("Take a screenshot")
{:ok, response} = ElixirClaw.LLM.chat_with_gpt4("Take a screenshot")
{:ok, response} = ElixirClaw.LLM.chat_with_nvidia("Take a screenshot")
{:ok, response} = ElixirClaw.LLM.chat_with_openrouter("Take a screenshot")
{:ok, response} = ElixirClaw.LLM.chat_with_opencode("Take a screenshot")
# Local pattern matching (no API needed)
{:ok, response} = ElixirClaw.LLM.process_command("screenshot my screen")| Provider | Environment Variable | Default Model |
|---|---|---|
| Claude (Anthropic) | ANTHROPIC_API_KEY |
claude-3-sonnet-20240229 |
| OpenAI | OPENAI_API_KEY |
gpt-4-turbo-preview |
| NVIDIA NIM | NVIDIA_API_KEY |
meta/llama-3.1-8b-instruct |
| OpenRouter | OPENROUTER_API_KEY |
anthropic/claude-3.5-sonnet |
| OpenCode | OPENCODE_API_KEY |
opencode-default |
Set your preferred provider:
# Set default provider
export ELIXIR_CLAW_LLM_PROVIDER=nvidia
# Set API keys
export ANTHROPIC_API_KEY=your_key
export OPENAI_API_KEY=your_key
export NVIDIA_API_KEY=your_key
export OPENROUTER_API_KEY=your_key
export OPENCODE_API_KEY=your_keyVerify 72-hour uptime:
./stress_test.shOutputs:
- Memory usage statistics
- Error rates
- Connection stability
- Performance metrics
- Fork the repo
- Create your feature branch
- Commit your changes
- Push to the branch
- Open a PR
If this project helps you, consider supporting:
- Ethereum:
0xd1a8Dd23e356B9fAE27dF5DeF9ea025A602EC81e - Polkadot:
5DJV8DsPT3KH1rzvqTGqJ7WsCNnFt5tBn6R9yfe8SGi7YmYD - Solana:
EyFovdqgnLAicTrDzJzjawRciLHTtq5W7ZkUV5Q3azmb
MIT License - see LICENSE