THE FHERMA CLI

Install and set up

pipx install fherma        # or: uv tool install fherma

A command line tool belongs in an environment of its own, and on macOS it has no choice: Homebrew marks its Python as externally managed. Inside a virtual environment pip install fherma is exactly right.

That is the whole toolchain. fherma-langthe language on its own — comes along as a dependency, so the install leaves two commands on the path. Check what you got:

$ fherma --version
fherma       0.2.1
fherma-lang  0.8.0
python       3.13.4

$ fherma doctor
✓ python       3.13.4
✓ fherma       0.2.1
✓ fherma-lang  0.8.0
✓ commands     auth, implementation, testing
✓ profile      default → https://api.dev.fherma.io
• credentials  no token

doctor is offline by default — the usual reason to run it is that something is wrong, and a network timeout would bury the answer. Pass --online to check the token as well. It exits non-zero only when the toolchain is actually broken; a missing token is not broken, since scaffolding from a local signature never needs one.

Signing in

fherma auth login
fherma auth whoami
fherma auth logout

Configuration lives in ~/.fherma/config.toml. FHERMA_URL and FHERMA_TOKEN override it, so continuous integration never writes a token to disk. Several platforms — staging, a local instance — are profiles:

fherma --profile staging auth login

The command groups

fherma auth            login · logout · whoami
fherma testing         init · status · inspect · run · submit
fherma implementation  init
fherma doctor          check the installation
fherma completion      a script for bash, zsh or fish

Specifications are named as kernel/spec@version; leave the version off and the latest published one answers.

Machine-readable, always

Every command takes --json, because the output is read by CI and by the platform as well as by people. Exit codes are fixed:

0  success
1  a check ran and did not pass
2  a usage error
3  not authorised
4  the platform could not be reached

Tab completion, once:

fherma completion zsh >> ~/.zshrc