zeroski 0.0.1

zero.ski CLI — @-protocol dispatch, streaming chat, and trace feed for the Zero runtime
zeroski-0.0.1 is not a library.

zeroski

The official CLI for zero.ski — the Zero runtime.

zeroski speaks the Zero runtime's public HTTP contract: stream chat, dispatch the @-protocol, read your agent identity, and tail traces. It's a thin, correct Rust client — no hidden magic, one reqwest client per invocation, and the full wire format visible on your terminal.

$ zeroski chat "say hello in one word"
Hello.
[deepseek-chat] in=6 out=1 cost=$0.000012

$ zeroski me
{
  "agent_id": "06bfd230…",
  "pubkey": "…",
  "scopes": ["public"]
}

$ zeroski at help
{ "success": true, "result": { "commands": ["help", "search", "recap", …] } }

Install

Rust users:

cargo install zeroski

Pre-built binaries and Homebrew taps ship with the next release.

Usage

zeroski <command> [options]

Commands:
  chat [text…]            Stream /api/chat. Reads stdin when text is omitted.
                          Flags: --model <name>
  at   <cmd> [text…]      POST /@ with { cmd, args }.
                          Flags: --json '<raw-json>'  (use as args verbatim)
  me                      GET /api/me.
  traces [--agent <hex>] [--limit N]
                          GET /traces/agent/:id. Auto-discovers agent via /api/me.
  config                  Print the effective configuration (key masked).

Global flags:
  --base <url>            Override API base (default: https://zero.ski)
  --key  <token>          Override API key

Configuration

Precedence: CLI flag > environment > config file > defaults.

Setting CLI flag Env var Config file key
Base --base ZEROSKI_BASE base
API key --key ZEROSKI_KEY key

Config file (TOML):

  • Linux: ~/.config/zeroski/config.toml
  • macOS: ~/Library/Application Support/ski.zero.zeroski/config.toml
  • Windows: %APPDATA%\zero\zeroski\config\config.toml

Example:

base = "https://zero.ski"
key  = "zsk_live_…"

zeroski config prints the resolved values (key masked: first 4 chars + length).

Streaming format

zeroski chat consumes the server's SSE frames (OpenAI-compat delta shape) and prints each content delta to stdout without extra newlines — it types like a tty. A one-line [model] in=… out=… cost=$… summary goes to stderr once the done frame arrives. Pipe-friendly: redirect stdout for just the answer, redirect stderr for just the telemetry.

@-protocol

zeroski at help
zeroski at search "oil filter Toyota 4Runner 2005"
zeroski at recap --json '{"from":"2026-04-01","to":"2026-04-18"}'

zeroski at wraps the structured shape ({"cmd": "...", "args": {...}}). Free-form trailing text becomes args.text; --json sets args verbatim.

Status

v0.0.1 — minimum useful surface. Planned for v0.1:

  • zeroski traces --follow (WebSocket tail)
  • zeroski login (browser OAuth / device code)
  • zeroski run <file>.zsk (local @ pipeline)
  • Shell completions (zeroski completion bash|zsh|fish)

File issues and feature requests at https://github.com/tokencube/zeroski/issues.

License

Dual-licensed under MIT or Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.