Skip to main content
Commands that manage the CLI itself rather than workspace data.

login

Sign in to a workspace through the browser. Omit --subdomain and the CLI prompts for it.
Credentials for every signed-in subdomain live together in ~/.config/neetoinvoice/auth.json. See Authentication.

logout

Sign out of one workspace, or all of them.
With no flag, logout removes the only entry when exactly one is signed in, and errors when several are.

whoami

List the signed-in accounts. The entry is marked (default) when exactly one is signed in.
Pass --subdomain <name> to show just one.

doctor

Check authentication, API reachability, and version. Each check runs independently, so one failure does not hide the others.
doctor needs --subdomain too when several workspaces are signed in.

version

Print the version, commit, and build date.

update

Upgrade the CLI in place. The command detects how the binary was installed and runs the matching upgrade: brew update && brew upgrade for Homebrew, the PowerShell installer on Windows, and the shell installer everywhere else.

commands

Emit the full command and flag catalog as JSON. This is the source of truth for what the installed binary supports, and it is what generates the commands overview.
Each entry has command, description, optional flags (with name, type, default, description, and required), and subcommands.

setup

Write NeetoInvoice instructions into an AI coding assistant’s config. Run it from the repository you are working in. See AI assistants.

Shell completion

neetoinvoice completion <shell> writes the completion script under ~/.config/neetoinvoice/completions and wires your shell to load it on next start. No manual sourcing is needed.
Re-running refreshes both the script and the shell config in place, so it never duplicates the loader block. fish needs no loader: it picks the script up automatically.
Re-run the completion install after every upgrade. The script on disk is generated from the binary that wrote it, so commands added later will not be suggested until you refresh it.
Pass --print to emit the raw script to standard output instead of installing it: