CLI reference (jc)
One binary for everything outside the inference path: workloads, object storage, receipts, balances, compliance evidence. Drop-in for both Mac and Linux, x86_64 and arm64.
Install
# one-liner
curl -fsSL https://invisible.openie.sh/install.sh | sh
# Homebrew
brew install openie/tap/jc
# Manual
curl -L https://invisible.openie.sh/jc-darwin-arm64 -o /usr/local/bin/jc
chmod +x /usr/local/bin/jc
Authenticate
jc login # opens portal in browser, captures device code
jc whoami # prints the bound account + scope
Tokens live in the macOS Keychain / freedesktop Secret Service / ~/.config/jc/credentials on bare Linux.
Workloads
jc deploy # deploys current invisible.hcl
jc deploy --plan # show what would change, no apply
jc list # list workloads in the account
jc logs <workload> [--tail] [--since 1h]
jc energy <workload> [--since 1h] [--by hour|day|month]
jc scale <workload> --min 2 --max 20
jc suspend <workload>
jc resume <workload>
jc delete <workload>
Functions
jc fn deploy handler.js --route /webhook --runtime node-22 --memory 256MB [--cron "0 * * * *"] [--on bucket/uploads/object-created] [--on queue/jobs]
jc fn list
jc fn logs <name> --tail
jc fn delete <name>
Object Store
# sync external → mesh (resumable, parallelized)
jc storage sync s3://bucket jc://bucket --workers 32
jc storage sync gs://bucket jc://bucket
jc storage sync ./localdir jc://bucket/prefix
# inspect
jc storage ls jc://bucket [/prefix/]
jc storage cat jc://bucket/key
jc storage stat jc://bucket/key # size, energy-to-serve, last access
jc storage cp jc://bucket/a jc://bucket/b
jc storage rm jc://bucket/key
# pre-signed URL (S3 sigv4 compatible)
jc storage sign jc://bucket/key --ttl 1h
Database (JouleDB)
jc db create main --region eu-fi --size 100GB
jc db list
jc db connect main # opens psql against the database
jc db slowlog main --by energy --top 50
jc db snapshot main # immediate point-in-time snapshot
jc db restore main --snapshot snap_…
jc db delete main
Receipts & compliance
jc receipt get rcpt_… # full JSON
jc receipt verify --key signer_pubkey.hex receipt.json
jc receipt export --since 30d > receipts.ndjson
# CSRD / ESRS E1 evidence pack — auditor-ready
jc compliance export --format esrs-e1 --period q2-2026
jc compliance export --format ai-act-annex-xi --period 2026
Balance & billing
jc balance # current balance + projected runway
jc topup --amount 100 # Stripe-defaulted flow; --rail usdc, --rail points
jc bill --month current # itemised current-period bill
jc bill --month 2026-05 # past period
jc bill --export csv # write to stdout
Mesh
jc mesh nodes # which mesh nodes are healthy now
jc mesh status # the same data as status.greenjoules.cloud
jc mesh trace <workload> # routing decisions for that workload's last N requests
Configuration
invisible.hcl (workloads, routes, databases)
workload "api" {
image = "ghcr.io/me/api:1.0"
region = "auto"
cpu = "2 vCPU"
memory = "4 GB"
energy_budget = "10 kJ/day"
scale { min = 1, max = 20 }
env = {
DATABASE_URL = database.main.url
}
}
database "main" {
region = "eu-fi"
size_gb = 100
}
route "api.example.com" {
to = workload.api
https = true
}
bucket "uploads" {
region = "eu-fi"
class = "standard"
}
~/.config/jc/config.toml
default_account = "my-team"
default_region = "auto"
output = "human" # or "json" for scripts
editor = "code"
Output formats
Every command supports --output json for machine-readable output. Pipe to jq for scripting. The human format prints to stdout with ANSI colour; the JSON format is stable across versions.
jc list --output json | jq '.[] | select(.energy_kj_24h > 5)'
Exit codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Generic error |
| 2 | Bad input / argument |
| 3 | Auth failure |
| 4 | Resource not found |
| 10 | Insufficient balance (top up needed) |
| 20 | Energy budget exceeded |
Source
The jc CLI is part of the invisible-cli binary in the substrate. Source-available at git.openie.sh/openie/invisible-infrastructure.