Skip to content

CLI reference

OculiX can be driven from the command line for scheduled jobs, CI pipelines, headless servers, and one-off scripts. This page documents every flag accepted by the IDE jar and the server runner.

Terminal window
java -jar oculixide-3.0.3.jar [options]
FlagArgumentPurpose
-l <path>path to bundleOpen this .sikuli bundle on launch
-eExecute the opened bundle immediately and exit on completion
-r <runner>py py3 rb ps1 applescript robotForce a specific runner
-cConsole mode — no GUI, log to stdout
-d <level>03Debug verbosity (0 silent → 3 very verbose)
-vPrint version and exit
-hPrint help and exit
--workspace <dir>directoryUse this workspace instead of the last-opened one
--theme <name>dark lightForce a theme
Terminal window
# Open the IDE on a script
java -jar oculixide-3.0.3.jar -l ./reports/daily.sikuli
# Run a script unattended (cron, Task Scheduler)
java -jar oculixide-3.0.3.jar -l ./reports/daily.sikuli -e
# Run a Python 3 script via the CPython runner
java -jar oculixide-3.0.3.jar -r py3 my_script.py
# Headless console mode — useful inside CI runners
java -jar oculixide-3.0.3.jar -c -l ./tests/smoke.sikuli -e

The -e flag exit codes:

CodeMeaning
0Script completed without exception
1Script raised a FindFailed
2Script raised a SikuliXception
3Script raised any other exception
4Bundle not found / could not be loaded

So in a CI pipeline:

Terminal window
java -jar oculixide-3.0.3.jar -l my.sikuli -e
if [ $? -eq 0 ]; then echo "OK"; else echo "Failed"; exit 1; fi
Terminal window
java -jar oculix-server.jar --port 5555 [options]
FlagArgumentPurpose
--port <n>TCP portPort to bind (default 4567)
--host <addr>bind addressBind address (default 127.0.0.1)
--auth <token>bearer tokenRequire this token on every request
--tlsEnable HTTPS using auto-generated cert
--cert <path>PEM fileCustom TLS certificate
--key <path>PEM fileCustom TLS private key
--workspace <dir>directoryWorkspace root
--allow-shellPermit Runner.run() shell commands (off by default)

HTTP API summary:

POST /run { "bundle": "path", "args": [] } → 200 / 4xx
GET /status → { "running": false, "lastRun": {...} }
POST /stop → 200
GET /version → { "version": "3.0.3" }

See org.sikuli.scriptrunner.ServerRunner for the full surface.

Terminal window
java -jar oculix-mcp-server.jar [stdio|http] [options]
FlagArgumentPurpose
stdioUse stdio transport (for direct AI agent plug-in)
httpUse HTTP transport (multi-session)
--port <n>TCP portHTTP transport port
--journal <path>directoryWhere to write the Ed25519-signed audit journal
--keyring <path>fileRotatable HMAC keyring
--confidentialConfidential mode — never logs payloads
--auto-approveSkip human-in-the-loop ActionGate (use with caution)
VariablePurpose
OCULIX_HOMEOverride the user-data directory (default ~/.OculiX/)
OCULIX_WORKSPACEDefault workspace path
OCULIX_TESSDATAOverride the bundled Tesseract tessdata location
OCULIX_PADDLEOCRBase URL of the PaddleOCR server (default http://localhost:5000)
ANDROID_SERIALForce a specific ADB device when several are connected
OCULIX_DEBUG1 to enable verbose internal logging
OCULIX_THEMEdark or light

Every runner writes to:

  • stdout / IDE console for info and error
  • ~/.OculiX/logs/oculix.log for the rolling log file
  • ~/.OculiX/logs/script-<timestamp>.log for per-script run logs

Increase verbosity with -d 3 or OCULIX_DEBUG=1.