Rhai Client Binary
A command-line client for executing Rhai scripts on remote workers via Redis.
Binary: client
Installation
Build the binary:
cargo build --bin client --release
Usage
# Basic usage - requires caller and circle keys
client --caller-key <CALLER_KEY> --circle-key <CIRCLE_KEY>
# Execute inline script
client -c <CALLER_KEY> -k <CIRCLE_KEY> --script "print('Hello World!')"
# Execute script from file
client -c <CALLER_KEY> -k <CIRCLE_KEY> --file script.rhai
# Use specific worker (defaults to circle key)
client -c <CALLER_KEY> -k <CIRCLE_KEY> -w <WORKER_KEY> --script "2 + 2"
# Custom Redis and timeout
client -c <CALLER_KEY> -k <CIRCLE_KEY> --redis-url redis://localhost:6379/1 --timeout 60
# Remove timestamps from logs
client -c <CALLER_KEY> -k <CIRCLE_KEY> --no-timestamp
# Increase verbosity
client -c <CALLER_KEY> -k <CIRCLE_KEY> -v --script "debug_info()"
Command-Line Options
| Option | Short | Default | Description | 
|---|---|---|---|
--caller-key | 
-c | 
Required | Caller public key (your identity) | 
--circle-key | 
-k | 
Required | Circle public key (execution context) | 
--worker-key | 
-w | 
circle-key | 
Worker public key (target worker) | 
--redis-url | 
-r | 
redis://localhost:6379 | 
Redis connection URL | 
--script | 
-s | 
Rhai script to execute | |
--file | 
-f | 
Path to Rhai script file | |
--timeout | 
-t | 
30 | 
Timeout for script execution (seconds) | 
--no-timestamp | 
false | 
Remove timestamps from log output | |
--verbose | 
-v | 
Increase verbosity (stackable) | 
Execution Modes
Inline Script Execution
# Execute a simple calculation
client -c caller_123 -k circle_456 -s "let result = 2 + 2; print(result);"
# Execute with specific worker
client -c caller_123 -k circle_456 -w worker_789 -s "get_user_data()"
Script File Execution
# Execute script from file
client -c caller_123 -k circle_456 -f examples/data_processing.rhai
# Execute with custom timeout
client -c caller_123 -k circle_456 -f long_running_script.rhai -t 120
Interactive Mode
# Enter interactive REPL mode (when no script or file provided)
client -c caller_123 -k circle_456
# Interactive mode with verbose logging
client -c caller_123 -k circle_456 -v --no-timestamp
Interactive Mode
When no script (-s) or file (-f) is provided, the client enters interactive mode:
🔗 Starting Rhai Client
📋 Configuration:
   Caller Key: caller_123
   Circle Key: circle_456
   Worker Key: circle_456
   Redis URL: redis://localhost:6379
   Timeout: 30s
✅ Connected to Redis at redis://localhost:6379
🎮 Entering interactive mode
Type Rhai scripts and press Enter to execute. Type 'exit' or 'quit' to close.
rhai> let x = 42; print(x);
Status: completed
Output: 42
rhai> exit
👋 Goodbye!
Configuration Examples
Development Usage
# Simple development client
client -c dev_user -k dev_circle
# Development with clean logs
client -c dev_user -k dev_circle --no-timestamp -v
Production Usage
# Production client with specific worker
client \
  --caller-key prod_user_123 \
  --circle-key prod_circle_456 \
  --worker-key prod_worker_789 \
  --redis-url redis://redis-cluster:6379/0 \
  --timeout 300 \
  --file production_script.rhai
Batch Processing
# Process multiple scripts
for script in scripts/*.rhai; do
  client -c batch_user -k batch_circle -f "$script" --no-timestamp
done
Key Concepts
- Caller Key: Your identity - used for authentication and tracking
 - Circle Key: Execution context - defines the environment/permissions
 - Worker Key: Target worker - which worker should execute the script (defaults to circle key)
 
Error Handling
The client provides clear error messages for:
- Missing required keys
 - Redis connection failures
 - Script execution timeouts
 - Worker unavailability
 - Script syntax errors
 
Dependencies
rhai_dispatcher: Core client library for Redis-based script executionredis: Redis client for task queue communicationclap: Command-line argument parsingenv_logger: Logging infrastructuretokio: Async runtime