Skip to main content

Zeno CLI - measure the supervision cost of AI-assisted work

Project description

zeno-cli

Measure the supervision cost of AI-assisted work, from your terminal. zeno records RTLX-S load probes + session activity, fits your personal "babysitting tax" curve, and surfaces where your optimal number of parallel agents sits.

Install

Install the zeno CLI straight from the monorepo over SSH. It is one self-contained package: the SDK, core, adapters, session-intelligence engine, and SQLite migrations all ship inside it. Requires Python >= 3.12 and GitHub SSH access to the repo.

uv tool install \
  --from "git+ssh://git@github.com/Marwan01/zeno.git@cli-v0.3.3#subdirectory=apps/cli" \
  zeno-cli

pipx install "git+ssh://git@github.com/Marwan01/zeno.git@cli-v0.3.3#subdirectory=apps/cli" works the same way. The git clone runs an in-tree build, so the hatchling build hook (apps/cli/hatch_build.py) vendors the workspace packages into the wheel. Update by bumping the tag: re-run with @cli-v0.3.3 (uv) or pipx install --force ...@<newtag>.

Why git+ssh and not an index: TestPyPI is not a durable distribution channel and a private index is overkill at team scale. A public PyPI wheel comes only when non-repo-access users do. The packaging blocker for it is now resolved - the build is sdist-clean (uv build --sdist -> a wheel built from that sdist installs and runs every verb; see the build-hook note under Packaging), so the remaining gate is purely "do public users exist yet", not a broken build.

Install channels (staged)

The distribution channel widens as the audience does. Use the one that matches where the project is, not the most convenient:

Stage Channel Command Status
Now git+ssh tag uv tool install --from "git+ssh://git@github.com/Marwan01/zeno.git@cli-v0.3.3#subdirectory=apps/cli" zeno-cli Live (needs repo SSH access)
Next PyPI uv tool install zeno-cli (or pipx install zeno-cli) Lands when .github/workflows/publish.yml runs on the first GitHub release; the packaging metadata is ready
Later Homebrew brew install zeno-cli Formula not written yet

The PyPI publish is OIDC Trusted-Publishing gated and fires only on a published GitHub release - see .github/workflows/publish.yml. Until that first release, the git+ssh tag is the supported path.

From a built wheel (offline / air-gapped; the wheel is fully self-contained):

uv build --wheel --package zeno-cli          # -> dist/zeno_cli-*.whl
uv tool install ./dist/zeno_cli-0.3.3-py3-none-any.whl

From source (development inside the monorepo, no install):

uv run --project /path/to/zeno zeno <cmd>

New here? Follow docs/ADOPT.md for the 10-minute install -> capture -> survey loop.

Use

zeno survey        # log how a session felt (~6s, RTLX-S 5-item probe)
zeno status        # tier, streak, tax curve, cognitive state, today's survey
zeno curve         # render the babysitting-tax curve (needs ~10 sessions of data)
zeno weekly        # 7-day rollup
zeno doctor        # health check: API reachability + identity
zeno login         # browser sign-in; stores a Clerk JWT in the OS keyring
zeno whoami        # show the identity + tier the API sees for your token
zeno logout        # clear the stored token

Authentication

zeno login runs a browser + loopback sign-in and stores the resulting Clerk JWT in your OS keyring; the CLI sends it as a Bearer token so the API attributes requests to your user. Token resolution order, used by every command: ZENO_API_TOKEN env override first, then the keyring token from zeno login, then none (local-only). Use zeno login --no-browser for SSH / headless (prints the URL), and --authorize-url / ZENO_LOGIN_AUTHORIZE_URL to target a non-default bridge.

The dashboard /cli/authorize bridge page + the Clerk zeno-api JWT template that mint the token are a documented follow-up (not yet shipped). See src/zeno_cli/login.py for the callback contract.

Full daily-loop guide: docs/CLI_QUICKSTART.md. Requires Python >= 3.12.

Cognition HUD add-on

zeno-hud-bar is the single differentiated cognition line (att / eff / drv) that stacks UNDER whatever popular HUD you already run, instead of replacing it. Claude Code has one statusLine slot, so zeno rides the HUD you have:

zeno hud install            # auto-detect: ccstatusline (native widget) or claude-hud (wrapper)
zeno hud install --dry-run  # print what would change, write nothing
zeno hud status             # what is detected + whether the line is wired in
zeno hud uninstall          # remove from both adapters (idempotent; --restore for byte-for-byte)

--target {auto,ccstatusline,claude-hud} forces an adapter (auto prefers ccstatusline when both are present). Every edit is backed up and reversible. The bar is crash-safe: on any error it prints an empty line and exits 0, so it never breaks the host HUD. Full model and both recipes: docs/HUD_ADDON.md.

Packaging notes

  • sdist-clean via a build hook. apps/cli/hatch_build.py (a custom hatchling build hook, enabled on BOTH the wheel and sdist targets) vendors the four workspace packages (zeno_core / zeno_sdk / zeno_adapters / zeno_session_intel) plus the SDK alembic tree into an in-root, gitignored _vendor_build/ stage at build time. The wheel target flattens them to the archive top level (the exact layout the old static force-include produced, so absolute imports resolve unchanged); the sdist target ships the whole _vendor_build/ stage inside the tarball so a wheel built FROM the sdist finds the sources locally. This replaced the static [tool.hatch...force-include] of ../../packages/... relative-parent paths, whose .. escaped the sdist root and were silently dropped - a wheel from that sdist died with "Forced include not found". Repo source under packages/* is never moved, so the uv workspace, the API, and the test suite keep importing the editable members unchanged; the vendored copy is purely a build artifact.
  • zeno ingest / zeno usage are backed by zeno_session_intel, vendored alongside the other internal packages by the build hook. It is stdlib-only with relative-only internal imports, so it flattens into the wheel with zero import rewrites. Omit it and both subcommands abort with a "not bundled" hint at runtime (the regression fixed in 0.3.3); scripts/install-smoke.sh now exercises every advertised subcommand so this cannot ship silently again.
  • Agent-framework adapters (zeno_sdk.adapters -> crewai / openai / anthropic / langgraph) are off the CLI path and pull heavy framework deps; they are kept optional and will be exposed as extras (e.g. zeno-cli[crewai]) in a later stage.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zeno_cli-0.3.5.tar.gz (159.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zeno_cli-0.3.5-py3-none-any.whl (183.4 kB view details)

Uploaded Python 3

File details

Details for the file zeno_cli-0.3.5.tar.gz.

File metadata

  • Download URL: zeno_cli-0.3.5.tar.gz
  • Upload date:
  • Size: 159.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zeno_cli-0.3.5.tar.gz
Algorithm Hash digest
SHA256 0b18077522eaaaca26d44c60bf5b4905c8156f12cf4b7864654fbdab97869817
MD5 cefa9bfb43cfbe03a560d05e515490df
BLAKE2b-256 3ada951938943306c2d20638a33f94f3cda48d20d3298df0c0d26589bc5f25e9

See more details on using hashes here.

File details

Details for the file zeno_cli-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: zeno_cli-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 183.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zeno_cli-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e5d505027c77aa2c601c25d17912e1dec820f8b00e3ee1b8dba3ff5f96501cc4
MD5 50efbfac46ae4f38794870828dc52591
BLAKE2b-256 c887f1d0edda6a6622dd1ab00ad3a3dcc82ecaafe725fe4ae7465c9874e95d77

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page