@eve-horizon/cli
v0.2.0
Published
Eve Horizon CLI
Readme
Eve Horizon CLI
Published CLI (npx) for interacting with the Eve Horizon API. Dev/ops tooling lives in ./bin/eh.
npx @eve/cli --helpPhilosophy
The CLI is the primary interface for Eve Horizon, designed for humans and AI agents. The REST API is the substrate: every operation is exposed via HTTP, and the CLI is a thin wrapper that handles argument parsing and output formatting. It does not bypass the API or contain business logic.
See API Philosophy and OpenAPI.
Profiles (defaults + credentials)
Profiles store API URL, default org/project IDs, default harness, and Supabase auth config.
# Create or update a profile
eve profile set local \
--api-url http://localhost:4801 \
--org org_defaulttestorg \
--project proj_xxx
# Set default harness (with optional variant)
eve profile set --harness mclaude
eve profile set --harness mclaude:fast # harness with variant
# Set active profile
eve profile use local
# Show active profile
eve profile showProfile harness defaults are used when scheduling jobs.
The --harness flag accepts harness or harness:variant format everywhere.
Priority: --harness flag > job hints > profile default > system default.
Supabase config (cloud auth)
Store Supabase settings in a profile (recommended for cloud stacks):
eve profile set prod \
--api-url https://api.eve-horizon.example.com \
--supabase-url https://your-project.supabase.co \
--supabase-anon-key <anon-key>Auth
Auth is required for cloud stacks. The default flow uses GitHub SSH keys; Supabase remains an optional adapter for legacy deployments.
The CLI will refresh Supabase access tokens automatically if a refresh token is available.
# SSH login (default)
eve auth login --email [email protected] --ssh-key ~/.ssh/id_ed25519
# Supabase login (optional)
eve auth login --email [email protected] --password '...' \
--supabase-url https://your-project.supabase.co \
--supabase-anon-key <anon-key>
# Status / whoami
eve auth status
eve auth whoami
# Logout
eve auth logoutCommands
Organizations
eve org ensure "My Org"
eve org list
eve org get org_xxx
eve org update org_xxx --name "New Name"Projects
eve project ensure --name my-project --slug MyProj --repo-url https://github.com/org/repo
eve project list
eve project get proj_xxxJobs
Jobs follow a phase-based lifecycle: idea → backlog → ready → active → review → done
Jobs created without a --phase flag default to ready, making them immediately schedulable.
# Create a job (defaults to ready phase)
eve job create --description "Fix the login bug in auth.ts"
eve job create --description "Add dark mode" --priority 1 --harness mclaude
# Create a job with git controls
eve job create \
--description "Fix checkout" \
--git-ref main \
--git-branch job/fix-checkout \
--git-create-branch if_missing \
--git-commit auto \
--git-push on_success
# List and filter jobs
eve job list --phase ready
eve job ready # Schedulable jobs (ready, not blocked)
eve job blocked # Jobs waiting on dependencies
# View job details
eve job show MyProj-abc123
eve job tree MyProj-abc123 # Hierarchical view
# Update jobs
eve job update MyProj-abc123 --phase active --assignee agent-1
eve job close MyProj-abc123 --reason "Work completed"
eve job cancel MyProj-abc123 --reason "No longer needed"
# Dependencies
eve job dep add MyProj-abc123 MyProj-def456 # abc123 depends on def456
eve job dep list MyProj-abc123
# Claim/release workflow (typically used by scheduler/agents)
eve job claim MyProj-abc123 --harness mclaude
eve job release MyProj-abc123 --reason "Need more info"
eve job attempts MyProj-abc123
# Job execution and monitoring
eve job logs MyProj-abc123
eve job result MyProj-abc123 --format full # Get job results (text|json|full)
eve job result MyProj-abc123 --attempt 2 # Get results from specific attempt
eve job wait MyProj-abc123 --timeout 300 # Wait for job completion
eve job wait MyProj-abc123 --quiet --json # Wait quietly, JSON output
eve job follow MyProj-abc123 # Stream logs in real-time via SSE
eve job follow MyProj-abc123 --raw # Stream raw JSON lines
eve job follow MyProj-abc123 --no-result # Stream logs without final result
# Review workflow
eve job submit MyProj-abc123 --summary "Implemented fix"
eve job approve MyProj-abc123 --comment "LGTM"
eve job reject MyProj-abc123 --reason "Missing tests"Job Results
Fetch and display completed job results:
# Show full job result (default format)
eve job result MyProj-abc123
# Get results in different formats
eve job result MyProj-abc123 --format text # Plain text output only
eve job result MyProj-abc123 --format json # Full JSON structure
eve job result MyProj-abc123 --format full # Formatted with metadata (default)
# Get results from a specific attempt
eve job result MyProj-abc123 --attempt 2Waiting for Job Completion
Block until a job completes, with optional timeout:
# Wait for job to complete (default timeout: 300s)
eve job wait MyProj-abc123
# Custom timeout (max 300s enforced by API)
eve job wait MyProj-abc123 --timeout 120
# Quiet mode (no progress output)
eve job wait MyProj-abc123 --quiet
# JSON output format
eve job wait MyProj-abc123 --jsonExit codes:
0: Job completed successfully1: Job failed124: Timeout reached125: Job was cancelled
Real-time Log Streaming
Stream job logs in real-time using Server-Sent Events (SSE):
# Stream logs with timestamps and formatted output
eve job follow MyProj-abc123
# Stream raw JSON lines (for parsing/filtering)
eve job follow MyProj-abc123 --raw
# Stream logs without printing final result
eve job follow MyProj-abc123 --no-resultThe follow command connects to the job's SSE endpoint and displays logs as they are generated. It shows:
- Timestamps for each log entry
- Tool names and actions
Secrets
Secrets can be stored at user/org/project scope. Values are never returned in plaintext; show returns a masked value.
# Project secret
eve secrets set GITHUB_TOKEN ghp_xxx --project proj_xxx --type github_token
eve secrets list --project proj_xxx
eve secrets show GITHUB_TOKEN --project proj_xxx
eve secrets delete GITHUB_TOKEN --project proj_xxx
# Import host secrets from .env
eve secrets import --project proj_xxx --file .env- Formatted, human-readable output
Use --raw for programmatic consumption or when piping to other tools.
Scheduling Hints
Jobs can include hints for the scheduler:
eve job create --description "Heavy computation" \
--harness mclaude:fast \
--worker-type gpu \
--permission auto_edit \
--timeout 7200Creating Sub-Jobs (for agents)
Agents can create and optionally claim sub-jobs inline:
# Create sub-job under parent
eve job create --parent MyProj-abc123 --description "Implement feature X"
# Create and immediately claim (for inline execution)
eve job create --parent $EVE_JOB_ID --description "Sub-task" --claimEnvironment variables for agent context:
EVE_PROJECT_ID- Current projectEVE_JOB_ID- Current job being executedEVE_ATTEMPT_ID- Current attempt UUIDEVE_AGENT_ID- Agent identifier
Harnesses
eve harness list # List available harnesses
eve harness get mclaude # Show harness details and auth status
eve harness list --capabilities # Include model/reasoning capability hintsAgents (Orchestration Config)
Provide policy + harness context for orchestrating agents (profiles, councils, availability):
eve agents config --json
eve agents config --path /path/to/repo --no-harnessesRecommended default policy profile name: primary-orchestrator.
Pagination
List endpoints accept --limit and --offset. Default limit is 10, newest first.
eve job list --limit 10 --offset 20Dev CLI
Local dev/ops tooling:
./bin/eh --help
./bin/eh dev start
./bin/eh k8s start # Default runtime
./bin/eh docker start # Quick dev loop