Non-interactive mode bypasses all prompts by providing arguments and flags directly on the command line.
New in v3.3.0: Every command now has non-interactive options with consistent naming patterns.
AI Agent Building Guide
Building with Cursor, Windsurf, or GitHub Copilot? See the complete AI Agent Building Guide for the full end-to-end workflow including authentication, testing strategies, sandbox vs production, common gotchas, and debugging.
New in v3.5.0: The global --ci flag makes the CLI fail loudly on missing required arguments instead of silently prompting (which fails in non-TTY environments).
In CI/CD pipelines and non-TTY environments (piped input, background jobs), interactive prompts silently fail, causing commands to cancel without clear error messages. The --ci flag prevents this by throwing errors when required arguments are missing:
Copy
# Without --ci (fails silently in CI/CD)lua push skill# Silently cancels - no clear error# With --ci (fails loudly with helpful error)lua --ci push skill# Error: Interactive prompt required but --ci flag is set. Provide all required flags or arguments.
Why: Ensures missing flags cause immediate, clear failures instead of silent hangs.
Don’t use --ci locally:
Copy
# Local - interactive prompts are helpfullua push skill? Select a skill: mySkill? Enter version: 1.0.1# CI/CD - no prompts, just errorslua --ci push skill# Error: missing --name flag
Why: Interactive prompts provide guidance and defaults.
Use --ci in bash scripts:
Copy
#!/bin/bashset -e# Fail fast if required args missinglua --ci push skill \ --name "$SKILL_NAME" \ --set-version "$VERSION" \ --force
Why: Scripts should fail fast and clearly, not hang waiting for input.
Even without --ci, the CLI automatically detects non-TTY environments and shows a warning:
Copy
echo "" | lua push skill# Warning: stdin is not a TTY. Interactive prompts may not work correctly.# Tip: Use --ci flag in CI/CD environments to fail loudly on missing required flags.
However, this still allows the command to continue (and likely fail silently). Using --ci prevents this by failing immediately.
# Test a skill/toollua test skill --name get_weather --input '{"city": "London"}'# Test a webhooklua test webhook --name payment-hook --input '{"query": {}, "headers": {}, "body": {"type": "payment"}}'# Test a joblua test job --name daily-report# Test preprocessorlua test preprocessor --name filter --input '{"message": "hello", "channel": "web"}'# Test postprocessorlua test postprocessor --name formatter --input '{"message": "hi", "response": "hello", "channel": "web"}'
Option
Description
--name <name>
Entity name to test
--input <json>
JSON input for testing
Detect and resolve drift without prompts:
Copy
# Check for drift (exit code 1 if found)lua sync --check# Auto-accept server statelua sync --accept
Option
Description
--check
Check only, exit 1 if drift
--accept
Auto-sync from server
Send messages without interactive session:
Copy
# Send to sandboxlua chat -e sandbox -m "Hello, what can you do?"# Send to productionlua chat -e production -m "Help me with my order"# Default: sandboxlua chat -m "Quick test message"# Scoped to an explicit threadlua chat -m "Run scenario A" --thread scenario-a# Auto-generated thread (UUID printed at start)lua chat -m "Isolated test" --thread# Isolated test with auto-clear after responselua chat -m "Run test" -t my-test --clear
Option
Description
-e, --env <env>
Environment: sandbox or production
-m, --message <text>
Message to send
-t, --thread [id]
Scope to a thread (omit ID to auto-generate UUID)
--clear, --clear-thread
Clear thread history after response (requires --thread)
lua jobs viewlua jobs trigger --job-name healthChecklua jobs activate --job-name myJoblua jobs deactivate --job-name myJoblua jobs versions --job-name myJoblua jobs deploy --job-name myJob --job-version 1.0.3lua jobs history --job-name myJob
# List variableslua env sandbox --listlua env production --list# Set variablelua env sandbox -k DATABASE_URL -v "postgres://localhost/db"lua env production -k API_KEY -v "sk_live_xxx"# Delete variablelua env production -k OLD_KEY --delete
Option
Description
--list
List all variables
-k, --key <name>
Variable name
-v, --value <val>
Variable value
-d, --delete
Delete the variable
Manage persona without prompts:
Copy
# View current personalua persona production view# List versionslua persona production versions# Deploy specific versionlua persona production deploy --persona-version 5# Deploy latestlua persona production deploy --persona-version latest --force
Action
Options
view
None
versions
None
deploy
--persona-version, --force
Manage features without prompts:
Copy
lua features listlua features enable --feature-name ticketslua features disable --feature-name raglua features view --feature-name webSearch
Connect and manage third-party integrations without prompts:Discovery Commands (for AI agents and scripting):
Copy
# View available integrationslua integrations available# Get integration details (scopes and triggers)lua integrations info linearlua integrations info linear --json# List available trigger eventslua integrations webhooks events --integration linearlua integrations webhooks events --integration linear --json
Connect with Triggers:
Copy
# Connect with triggers enabled (recommended)lua integrations connect --integration linear --auth-method oauth --scopes all \ --triggers task_task.created,task_task.updated# Connect with all available triggerslua integrations connect --integration linear --auth-method oauth --scopes all --triggers all# Connect without triggerslua integrations connect --integration linear --auth-method oauth --scopes all# Connect with custom webhook URL instead of agent triggerlua integrations connect --integration linear --auth-method oauth --scopes all \ --triggers task_task.created --custom-webhook --hook-url https://my-server.com/webhook# List connectionslua integrations list# Update connection scopeslua integrations update --integration linear --scopes "task_task_read,task_task_write"# Disconnectlua integrations disconnect --connection-id 6978e0294d9c2007ed5cb129
# View all logslua logs --type all --limit 50# Filter by typelua logs --type skill --limit 20lua logs --type webhook --limit 20lua logs --type job --limit 20# Filter by specific entitylua logs --type skill --name mySkill --limit 10# Paginationlua logs --type all --limit 20 --page 2# JSON output for scriptinglua logs --type all --json
Option
Description
--type <type>
all, skill, job, webhook, preprocessor, postprocessor, user_message, agent_response
--name <name>
Entity name (requires —type, not for message types)
--limit <n>
Number of logs (default: 20)
--page <n>
Page number
--json
JSON output
View production state without prompts:
Copy
lua production overview # Production summarylua production persona # Current personalua production skills # Deployed skillslua production env # Environment variables
Commands with --json output machine-readable JSON:
Copy
# Get logs as JSONlogs=$(lua logs --type all --limit 5 --json)# Parse with jqecho "$logs" | jq '.logs[].message'# Get installed skillsskills=$(lua marketplace install installed --json)