Query and operate Arc,
from the terminal.
arcli talks to the Arc servers you already run: named connections, SQL queries, writes and bulk imports, and the admin work you would otherwise script with curl.
One static binary. Table, JSON, CSV or Arrow output. Homebrew, deb, rpm, Arch and Docker. Nothing phones home.
# save a connection once, keep the token out of shell history
$ pass show arc/prod | arcli config create --name prod --endpoint https://arc.example.net --token-stdin
# check it, then query
$ arcli ping
$ arcli query "SELECT host, avg(usage) AS usage FROM cpu GROUP BY 1 ORDER BY 2 DESC" -o json | jq .dataWhat it is
The operator's client for Arc
Operating Arc without it means copying the bootstrap token out of a stderr banner, building JSON query bodies by hand, remembering the right headers, and decoding the response by eye. arcli replaces that with a workflow modelled on influx, kubectl and clickhouse-client.
It connects to Arc instances you already run and keeps exactly one file on disk: your connection profiles. Every command is one request to the server, so a token can do from arcli precisely what it is allowed to do in Arc.
Dev, staging and prod as profiles, one active, overridable per command. Environment variables for containers and CI, no config file needed.
Tokens, retention policies, continuous queries, predicate deletes, backups, compaction, cluster status and server logs, each with its own command.
Results on stdout, everything else on stderr, exit codes you can branch on, and y/N prompts that scripts skip with --yes. Tokens are redacted everywhere they appear.
Capabilities
Everything the API can do, one command each
Every Arc endpoint an operator reaches for, with the flags, prompts and output formats a script or a person expects.
Query, four ways out
SQL from an argument, a file or stdin. Table for the terminal, JSON for jq, CSV for spreadsheets, Arrow IPC for pandas, polars or DuckDB. Estimate a result before running it.
Writes in three formats
Line protocol streamed from stdin or a file, a prepared MessagePack document passed through as is, or JSON validated client-side and converted before it is sent.
Bulk import
CSV, line protocol, Parquet and TLE files uploaded to Arc’s import endpoints, which parse server-side and report rows and partitions written.
Token lifecycle
Create, rotate, revoke and delete API tokens, set permissions and expiry, see who last used what. The new secret is the only thing on stdout, so $(...) captures it cleanly.
Retention and continuous queries
Create and run retention policies and rollup queries, with a dry run before every destructive step and an execution history after it. Run them by hand on servers without the scheduler.
Backups and deletes
Create, inspect, restore and delete server-side backups; delete rows by SQL predicate with the row count shown before you confirm.
Cluster, compaction, logs
Node and cluster status, compaction tiers and history with a manual trigger, the scheduler state, and the server’s recent log entries by level and time window.
Completion and man pages
Shell completion for bash, zsh, fish and PowerShell that completes your connection names from the config file, never from a server, plus a man page per command.
Nothing phones home
arcli only ever talks to the Arc servers you configure. It carries a random installation id so Arc’s own opt-out telemetry can count CLI installs; DO_NOT_TRACK=1 turns that off.
Quick start
Install, connect, query
Three steps from a package manager to a result table.
Install
# macOS and Linux
brew install basekick-labs/tap/arcli
# Debian/Ubuntu, RHEL/Fedora and Arch packages, plus archives for every platform,
# are on the releases page; or run it as a container:
docker run --rm ghcr.io/basekick-labs/arcli --versionPackages and the Homebrew formula install shell completion and the man pages with the binary. Every release ships checksums signed with cosign and an SBOM per archive.
Connect
# the first profile becomes the active one
arcli config create --name local --endpoint http://localhost:8000 --token YOUR-TOKEN
# health plus token check in one call
arcli pingAdd more profiles for staging and prod and switch with -c NAME. In CI, ARC_ENDPOINT and ARC_TOKEN work without any file. An Arc running without authentication needs no token at all.
Write and query
echo "cpu,host=web-1 usage=0.63 $(date +%s)000000000" | arcli write --database metrics
arcli query --database metrics "SELECT host, avg(usage) FROM cpu GROUP BY 1"
arcli query --database metrics -o csv "SELECT * FROM cpu" > cpu.csvSwap -o json for jq, or -o arrow to stream straight into pyarrow. For files of any size, arcli import takes CSV, line protocol, Parquet and TLE.
Every command, flag, output format and exit code? See the arcli documentation.
Arc, one command away
Open source and built alongside Arc: arcli 26.x speaks to Arc 26.06 and newer, and prefers a clear error over a guess when a server is older.