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: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 yourPATH, 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.exeand adds that directory to your userPATH. Open a new terminal afterwards.
kaneo on its own to see your account, your open tasks and the main commands.
Install options
Set these environment variables to change what the script does:
Pin a version, or install into another directory:
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.
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:
curl, as the script does, are not affected.
Update
Run the install command again. It replaceskaneo 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:%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
--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:--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 calleddefault. 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
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.
--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:
--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 askaneo 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.
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:
.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:
Related
- CLI command reference for every command, argument and flag.
- MCP server for AI assistants such as Claude and Cursor.
- API reference for direct HTTP access.