Skip to main content
The official Kaneo CLI is a single kaneo binary for macOS, Linux and Windows. It works with Kaneo Cloud and self-hosted instances, shows styled output in a terminal, and prints plain JSON for scripts and agents.

Install

On macOS and Linux:
On Windows, in PowerShell:
The script downloads the build for your system from the GitHub release, checks it against the release’s SHA-256 checksums, and only then replaces any existing kaneo. Nothing else is needed, not even Node.js.
  • On macOS and Linux it installs to ~/.local/bin/kaneo. If that directory is not on your PATH, the script prints the command that adds it for your shell (bash, zsh, fish or another).
  • On Windows it installs to %LOCALAPPDATA%\Programs\kaneo\kaneo.exe and adds that directory to your user PATH. Open a new terminal afterwards.
Run kaneo on its own to see your account, your open tasks and the main commands.
Both scripts are plain text. Read them before running them: install.sh and install.ps1, or print one with curl -fsSL https://kaneo.app/cli/install.sh | less.

Install options

Set these environment variables to change what the script does: Pin a version, or install into another directory:
Without KANEO_VERSION, the script asks the GitHub API for the newest CLI release (tags that start with cli-v). GitHub allows 60 of these lookups per hour from one IP address without a token, so set KANEO_VERSION in CI.

Mirrors and offline machines

KANEO_DOWNLOAD_URL replaces https://github.com/usekaneo/kaneo/releases/download. The script then downloads <url>/cli-v<version>/SHA256SUMS and <url>/cli-v<version>/<file>, so a mirror keeps the same layout as the GitHub release. It makes no call to the GitHub API, which is why KANEO_VERSION is required.
For a machine without internet access, copy install.sh (or install.ps1), SHA256SUMS and the file for that machine from the release into a cli-v<version> folder, then point KANEO_DOWNLOAD_URL at the folder that contains it. install.sh accepts a file:// URL when it downloads with curl, and install.ps1 accepts a local or network path:

Supported systems

The x64 builds are baseline builds, so they also run on older processors without AVX2. On Alpine and other musl distributions, the CLI needs the C++ runtime library. The script warns when it is missing:
Prefer the install script to downloading a binary from the release page with a browser. The macOS builds are signed ad hoc but not notarized, so Gatekeeper can block a copy that a browser downloaded. Files downloaded with curl, as the script does, are not affected.

Update

Run the install command again. It replaces kaneo with the latest release, or with the version in KANEO_VERSION, and keeps your logins and settings. Check the result with kaneo --version. If the script warns that another kaneo comes first on your PATH, for example an older community CLI, it shows both paths. Remove the other one, or move the install directory earlier in your PATH.

Uninstall

Delete the binary. To also remove your stored logins and settings, delete the config directory:
On Windows, also remove %LOCALAPPDATA%\Programs\kaneo from your user PATH (search the Start menu for “Edit environment variables for your account”). If you set KANEO_INSTALL_DIR, XDG_CONFIG_HOME or KANEO_CONFIG, delete those locations instead.

Sign in

The CLI shows a one-time code, copies it to your clipboard, and opens the approval page of your Kaneo web app. Approve the request there and the CLI saves the login. After signing in you can choose a default workspace. Pass --no-browser to print the link instead of opening a browser. For a self-hosted instance, pass its address once. Later commands reuse it:
kaneo login uses device authorization with the kaneo-cli client ID, which self-hosted Kaneo allows by default. If you set DEVICE_AUTH_CLIENT_IDS, keep kaneo-cli in the list. Check or end the session with:

API keys for CI and scripts

Create a key in Settings → Account → API Keys and set it in the environment:
The CLI picks credentials in this order: --token, then KANEO_API_KEY, then the stored login. A stored login is only ever sent to the server it was created for. A few account-level actions need a signed-in session, and the CLI tells you when an API key cannot be used.

Profiles

Each login is stored as a profile. The first one is called default. To keep a second server or account, sign in with another profile name:
kaneo login and kaneo profile use make that profile the active one. To use a profile for a single command, pass --profile work or set KANEO_PROFILE=work. kaneo profile rename and kaneo profile remove manage the rest.

Everyday commands

Tasks are addressed by their ticket ID, such as KAN-12, or by their ID. If a ticket ID exists in more than one of your workspaces, pass -w to choose one. When a workspace, project or column is missing and you are in a terminal, the CLI shows a searchable picker. In scripts it stops with an error that names the flag to pass. Every command has --help. Print a shell completion script with kaneo --completions zsh (or bash, fish, sh).

Commands

Each line is one command. The command reference lists every argument and flag.

Tasks

Comments

Labels

Time

Projects and columns

Workspaces and members

Notifications

Setup and utilities

Output for scripts and agents

The CLI uses JSON mode when you pass --json or --jq, set KANEO_JSON=true, or pipe its output:
  • A successful command prints exactly one JSON value on stdout.
  • A failed command prints {"error": "message"} on stdout and exits with code 1.
  • JSON mode never prints colors, spinners, progress lines or images.
Pass --human to force styled output. Styled output respects NO_COLOR, FORCE_COLOR and TERM=dumb, and uses plain ASCII when the terminal cannot show Unicode. Ticket IDs and project names are clickable links in terminals that support them.

Filter with --jq

--jq filters the JSON output with a jq expression. The engine is built in, so you do not need jq installed. Each result goes on its own line, and strings print without quotes:
An invalid expression fails before any request is sent. Run the same command with --json to see the data the expression receives.

Long text and stdin

Comments and descriptions can come from a file or from stdin. Pass -F <file> to read a file, or - to read stdin:
kaneo task create, task edit, comment add, comment edit, task attach, project create, project edit and workspace edit accept -F. kaneo comment add and kaneo task comment also read stdin when you leave out the text.

Confirmations

Commands that delete or remove data, such as kaneo task delete or kaneo label delete, ask for confirmation in a terminal. Deleting a project asks you to type its key, and deleting a workspace asks for its slug. In scripts, these commands stop with an error until you pass --yes:

Call the API directly

kaneo api sends an authenticated request to any Kaneo API endpoint, like gh api does for GitHub. It uses the same server, credentials and output modes as the other commands. The path is under /api, and the /api prefix is optional:
-f key=value builds a JSON body. Values that parse as JSON keep their type, and dotted keys such as a.b=1 nest. --input reads the body from a file, or - for stdin. See the API reference for the available endpoints.

Images in the terminal

kaneo task images shows the images in a task description, kaneo task attach previews the images you upload, and kaneo whoami shows your avatar.
  • Kitty and Ghostty show full images with the Kitty graphics protocol.
  • iTerm2 and WezTerm show full images with the iTerm2 protocol.
  • Other terminals with 256 colors and Unicode get a preview drawn with colored blocks. Inside tmux, screen or Zellij the CLI also uses blocks.
  • When none of these work, the CLI lists the image links instead.
Set KANEO_IMAGES to kitty, iterm or blocks to choose the method, or to off to turn images off. JSON mode never shows images. The CLI sends your token only with image requests to your Kaneo server’s own file URLs. Images hosted anywhere else are fetched without it.

Configuration

Logins are stored in ~/.config/kaneo/config.json, or $XDG_CONFIG_HOME/kaneo/config.json, with permissions that only your user can read. If another kaneo CLI already uses that file, the official CLI leaves it untouched and asks you to move it or set KANEO_CONFIG. The CLI keeps track of your running timer in timer.json next to the config file.

Repository defaults

Link a repository to a workspace and project, so commands run anywhere inside it use them:
kaneo link writes a .kaneo.json at the root of the Git repository, or in the current directory outside a repository. It keeps any other keys already in the file:
Commands look for .kaneo.json in the current directory and its parents. kaneo unlink removes the two keys, and deletes the file when nothing else is left. The CLI picks the workspace from -w, then KANEO_WORKSPACE, then .kaneo.json, then the default you chose with kaneo workspace use. It picks the project from -p, then KANEO_PROJECT, then .kaneo.json.

Check your setup

kaneo context shows the server, profile, account, workspace and project in use, and where each one came from. Use it when a command picks the wrong workspace or server. kaneo doctor checks the config file, the server, your login, the workspace, and whether the server has every API operation this CLI uses. It exits with code 1 when a check fails, so it also works in CI: