EServer Command-Line Interface
Overview
The EServer CLI provides complete command-line management for Circuitry Execution Server on headless servers and systems without a graphical interface. Perfect for Linux server administrators, Docker deployments, and remote management via SSH.
Installation
Quick Install (Recommended)
macOS / Linux:
curl -fsSL https://circuitry.dev/install.sh | sh
Windows (PowerShell):
iwr -useb https://circuitry.dev/install.ps1 | iex
This will:
- Download the latest EServer CLI
- Install to
/usr/local/lib/eserver(macOS/Linux) or%ProgramFiles%\EServer(Windows) - Add
eservercommand to your PATH - Verify installation
Manual Installation
Download the appropriate installer for your platform from circuitry.dev/download.
After installing EServer from the installer package, the eserver command will be available in your PATH.
Verify Installation
eserver --version
Quick Start
-
View Available Commands
eserver --helpShows all available commands and options.
-
Generate Access Key
eserver keys create "My Device"Save the displayed API key - you'll need it for authentication.
-
Start Server
eserver start -
Check Status
eserver status -
Generate QR Code (for mobile devices)
eserver qr
Command Reference
Getting Help
All commands support the --help flag to display usage information:
# General help
eserver --help
# Help for specific commands
eserver start --help
eserver config --help
eserver keys --help
eserver service --help
Common options available on most commands:
-c, --config <path>- Specify custom config file path--help- Display help for the command--version- Display EServer version
Server Management
eserver start
Start the execution server.
eserver start [options]
Options:
-c, --config <path> Config file path (default: ~/.johnwylie/eserver-config.json)
Example:
eserver start
# Server running on localhost:3030
# Press Ctrl+C to stop
eserver status
Show current server status, statistics, and health.
eserver status [options]
Options:
-c, --config <path> Config file path
Output:
ā Server is RUNNING
Server Information:
Address: 0.0.0.0:3030
Uptime: 2h 15m
Python: 3.13.0 (native)
Statistics:
Total Executions: 142
Successful: 138
Failed: 4
Current Executions: 0
Avg Execution Time: 45ms
eserver info
Show Python runtime information and capabilities.
eserver info
Configuration Management
eserver config show
Display current server configuration.
eserver config show [options]
Options:
-c, --config <path> Config file path
eserver config set <key> <value>
Set configuration value.
eserver config set <key> <value> [options]
Options:
-c, --config <path> Config file path
Examples:
eserver config set server.port 3030
eserver config set server.allowNetworkAccess true
eserver config set execution.maxExecutionTime 300000
Common Configuration Keys:
server.port- Server port (default: 3030)server.allowNetworkAccess- Allow network access (default: false)server.maxConcurrentExecutions- Max concurrent executions (default: 5)cors.enabled- Enable CORS (default: true)cors.allowAllOrigins- Allow all origins (default: false)execution.maxExecutionTime- Max execution time in ms (default: 300000)
Access Key Management
eserver keys list
List all access keys (without exposing the actual keys).
eserver keys list
Output:
abc123
Name: My Device
Created: 2025-01-15 10:30:00
Last Used: 2025-01-15 14:20:00
eserver keys create <name>
Generate new access key.
eserver keys create <name>
Example:
eserver keys create "Production Server"
Output:
Key ID: abc123
Name: Production Server
Key: es_a1b2c3d4e5f6g7h8...
ā Save this key - it will not be shown again!
eserver keys show <keyId>
Show access key details (including full key).
eserver keys show <keyId>
Example:
eserver keys show abc123
eserver keys revoke <keyId>
Revoke access key.
eserver keys revoke <keyId> [options]
Options:
-f, --force Skip confirmation
Example:
eserver keys revoke abc123 --force
Device Connection
eserver qr
Generate QR code for easy mobile device connection.
Displays an ASCII QR code in your terminal that mobile devices (iPad, iPhone, Android) running Circuitry can scan to automatically connect to this EServer. The QR code contains the server's IP address, port, and a temporary secure access key - no manual configuration needed.
eserver qr [options]
Options:
-c, --config <path> Config file path
How to use:
- Run
eserver qrin your terminal on the server - On your iPad/iPhone, open Circuitry
- Click the EServer indicator (ā” icon) in the top-right
- Tap "Scan QR Code"
- Point your camera at the QR code in the terminal
- Connection is automatically configured
Output:
š± EServer Connection QR Code
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
āāā āāāāā āāā āāāāā āāāāā āāā
āāā ā ā āāāāāāā ā ā ā āāā
āāā āāāāā āā āāāāāā āāāāā āāā
...
ā¹ Server Address: http://192.168.1.100:3030
ā This QR code expires in 5 minutes
Scan with your mobile device to automatically connect
Perfect for:
- Connecting iPads/iPhones to Docker/CLI EServer instances
- Quick setup without typing IP addresses or keys
- Temporary access for testing or demos
- Connecting multiple devices quickly
Logs
eserver logs
Show server logs.
eserver logs [options]
Options:
-c, --config <path> Config file path
-n, --tail <lines> Number of lines to show (default: 50)
Example:
eserver logs --tail 100
System Service Management
eserver service install
Install EServer as a system service (requires root/sudo).
sudo eserver service install [options]
Options:
--exec-path <path> Path to eserver executable (default: /usr/local/bin/eserver)
--user <user> Run as user (Linux, default: eserver)
--group <group> Run as group (Linux, default: eserver)
--working-dir <path> Working directory (Linux, default: /var/lib/eserver)
--config-path <path> Config file path
--name <name> Service name (Linux, default: eserver)
--label <label> Service label (macOS, default: ai.cognaris.circuitry.eserver)
Linux (systemd):
sudo eserver service install
# Output:
# ā Systemd service installed: /etc/systemd/system/eserver.service
# ā Working directory: /var/lib/eserver
# ā Config path: /etc/eserver/config.json
#
# Next steps:
# sudo systemctl enable eserver # Enable auto-start on boot
# sudo systemctl start eserver # Start the service now
# sudo systemctl status eserver # Check service status
macOS (launchd):
eserver service install
# Output:
# ā Launchd service installed: ~/Library/LaunchAgents/ai.cognaris.circuitry.eserver.plist
# ā Config path: ~/.johnwylie/eserver-config.json
#
# Service commands:
# launchctl start ai.cognaris.circuitry.eserver
# launchctl stop ai.cognaris.circuitry.eserver
eserver service uninstall
Uninstall system service (requires root/sudo).
sudo eserver service uninstall [options]
Options:
--name <name> Service name (Linux, default: eserver)
--label <label> Service label (macOS)
eserver service status
Show service status.
eserver service status [options]
Options:
--name <name> Service name (default: eserver)
Usage Examples
First-Time Setup (Linux Server)
# 1. Create access key
eserver keys create "Production API"
# Save the displayed key
# 2. Configure for network access
eserver config set server.allowNetworkAccess true
eserver config set server.port 3030
# 3. Start server to test
eserver start
# 4. In another terminal, check status
eserver status
# 5. Install as system service
sudo eserver service install
# 6. Enable and start service
sudo systemctl enable eserver
sudo systemctl start eserver
# 7. Check service status
sudo systemctl status eserver
Docker Deployment
FROM ubuntu:22.04
# Install Python 3.11+
RUN apt-get update && apt-get install -y python3 python3-pip
# Copy EServer files
COPY circuitry-eserver /usr/local/bin/eserver
RUN chmod +x /usr/local/bin/eserver
# Create config directory
RUN mkdir -p /etc/eserver
# Set up config
RUN eserver config set server.port 3030
RUN eserver config set server.allowNetworkAccess true
# Generate initial access key
RUN eserver keys create "Docker Container" > /etc/eserver/initial-key.txt
# Expose port
EXPOSE 3030
# Start server
CMD ["eserver", "start", "--config", "/etc/eserver/config.json"]
Connecting iPad/iPhone to EServer
This is the easiest way to connect your iPad or iPhone to a Docker/CLI EServer instance.
-
On your server (Docker, Linux, or macOS), start server with network access:
eserver config set server.allowNetworkAccess true eserver start -
In another terminal, generate QR code:
eserver qrYou'll see an ASCII QR code displayed in the terminal with connection details.
-
On your iPad/iPhone:
- Open the Circuitry app
- Open a workflow with a Code node
- Change the language to Python
- Click the "Configure Node" icon (gear icon on the node)
- In the node configuration panel, click "EServer Settings"
- Tap "Scan QR Code"
- Point your camera at the QR code in the terminal
- Connection is automatically configured with a secure temporary key
-
Using the connection:
- The EServer now appears in your available servers list
- In any Code node, select "Execute on EServer"
- If you have multiple EServers, choose which one to use for that specific node
- Python code in that node will execute on the selected server (10-100x faster than browser)
Benefits:
- No manual IP address or port entry
- Automatic secure key generation
- Works across your local network
- Each node can use a different EServer if needed
Automated Deployment Script
#!/bin/bash
# deploy-eserver.sh
# Configure server
eserver config set server.port 3030
eserver config set server.allowNetworkAccess true
eserver config set execution.maxExecutionTime 600000
# Create access keys for different services
eserver keys create "Web API" | grep "Key:" | awk '{print $2}' > /etc/secrets/web-api-key
eserver keys create "Mobile App" | grep "Key:" | awk '{print $2}' > /etc/secrets/mobile-key
# Install and start service
sudo eserver service install --user eserver --group eserver
sudo systemctl enable eserver
sudo systemctl start eserver
# Verify installation
sleep 2
eserver status
echo "EServer deployed successfully"
Configuration File
The server configuration is stored in JSON format. Default locations:
- Linux/macOS:
~/.johnwylie/eserver-config.json - Linux (service):
/etc/eserver/config.json
Example Configuration:
{
"version": "1.0",
"server": {
"port": 3030,
"host": "localhost",
"allowNetworkAccess": false,
"maxConcurrentExecutions": 5,
"requestTimeout": 300000
},
"cors": {
"enabled": true,
"origins": ["http://localhost:3001"],
"allowAllOrigins": false
},
"security": {
"allowedIPs": [],
"rateLimit": {
"enabled": true,
"maxRequests": 100,
"windowMs": 60000
}
},
"execution": {
"maxExecutionTime": 300000,
"saveHistory": true,
"maxHistorySize": 100
},
"python": {
"preferredCommand": "python3",
"minVersion": "3.11"
}
}
Troubleshooting
Server Won't Start
-
Check Python installation:
eserver info -
Check port availability:
lsof -i :3030 # Check if port is in use -
Check configuration:
eserver config show -
Check logs:
eserver logs --tail 100
Permission Denied
Service installation requires root/sudo:
sudo eserver service install
Cannot Connect from Other Devices
Enable network access:
eserver config set server.allowNetworkAccess true
Check firewall:
# Linux (ufw)
sudo ufw allow 3030/tcp
# Linux (firewalld)
sudo firewall-cmd --add-port=3030/tcp --permanent
sudo firewall-cmd --reload
Service Not Starting on Boot
# Linux
sudo systemctl enable eserver
sudo systemctl start eserver
# macOS
launchctl load ~/Library/LaunchAgents/ai.cognaris.circuitry.eserver.plist
Security Best Practices
- Use Access Keys: Always use access keys for authentication
- Restrict Network Access: Only enable network access when needed
- Use Firewall: Configure firewall to restrict access to trusted IPs
- Regular Key Rotation: Revoke and regenerate access keys periodically
- Monitor Logs: Regularly check logs for suspicious activity
- Limit Permissions: Run service as dedicated user (not root)
API Integration
Access keys can be used in HTTP requests:
# Get server status
curl -H "Authorization: Bearer YOUR_ACCESS_KEY" \
http://localhost:3030/status
# Execute Python code
curl -X POST http://localhost:3030/execute/node \
-H "Authorization: Bearer YOUR_ACCESS_KEY" \
-H "Content-Type: application/json" \
-d '{
"code": "print(\"Hello from EServer\")",
"language": "python"
}'
Support
For help and questions:
- Documentation: Docs Home
- Support: Contact support through the app settings