| name | kendo-cli |
| description | Kendo CLI tool for managing issues, projects, sprints, epics, reports, and time tracking
directly from the terminal. Use this skill whenever interacting with kendo issues,
checking board status, creating or updating issues, searching across projects,
logging time, managing sprints and epics, or triaging reports (bug reports, feedback) —
especially when the MCP server is unavailable or when a quick CLI command is simpler
than an MCP tool call. Also use when the user mentions "kendo cli", "kendo command",
or wants to run kendo operations via the terminal.
|
Kendo CLI
Manage kendo issues, projects, sprints, epics, reports, and time tracking via the kendo CLI.
The CLI communicates with the kendo REST API using OAuth Device Flow authentication.
Installation
Quick install (Linux / macOS)
curl -sSL https://central.kendo.dev/cli/install.sh | sh
The script detects OS/arch, downloads the correct binary, verifies checksums, and installs
to ~/.local/bin/kendo (or /usr/local/bin/kendo with sudo).
Update
kendo update
kendo update --check
Verify
kendo version
Authentication
After installing, the user must log in interactively (Claude cannot do this step —
it requires stdin for the OAuth device flow):
kendo auth login
This will prompt for the tenant URL (e.g., yourteam.kendo.dev), then open a browser
for authorization. Tokens are stored in ~/.config/kendo/tokens.json.
Check auth status or log out:
kendo auth status
kendo auth logout
Active Project
Most commands require an active project. Set it once and it persists across sessions:
kendo project select <PROJECT_CODE>
The active project is stored in ~/.config/kendo/config.yaml.
Global Flags
These flags work on any command:
--json — Output as JSON instead of table (use when you need to parse/extract specific fields)
--project <CODE> — Override the active project for this single command
The --project flag is useful for quick cross-project lookups without switching the active project.
Output Modes
- Table (default): Human-readable aligned columns with ANSI colors
- JSON (
--json): Machine-readable, ideal for parsing in scripts
Table output is usually fine for displaying results to the user. Use --json only when you
need to programmatically extract specific fields (e.g., getting an issue ID to use in a follow-up
command). Always append 2>&1 to capture errors alongside output.
Commands That Don't Need an Active Project
These commands work without kendo project select — they operate across all accessible projects:
kendo issue my — issues assigned to current user across all projects
kendo search — global search across all projects
kendo team list — all teams
Don't waste time selecting a project before running these.
Commands Reference
Projects
kendo project list
kendo project select <CODE>
kendo project view
Issues
kendo issue list
kendo issue list --lane "To Do"
kendo issue list --sprint active
kendo issue list --type bug
kendo issue list --priority high
kendo issue view <REF>
kendo issue my
kendo issue search <QUERY>
kendo issue create --title "Title"
kendo issue update <REF> [flags]
kendo issue move <REF> <LANE_ID>
kendo issue comment <REF> -m "text"
kendo issue delete <REF>
kendo issue link-branch <REF>
Filters can be combined for precise queries:
kendo issue list --sprint active --lane "In Progress"
kendo issue list --sprint active --type bug --priority high
kendo issue list --sprint active --lane "In Review"
Issue create flags:
| Flag | Required | Default | Description |
|---|
--title | yes | — | Issue title |
--description | yes | — | Issue description (markdown) |
--type | no | feature | feature or bug |
--priority | no | medium | highest, high, medium, low, lowest |
--lane | no | first lane | Lane ID |
--sprint | no | — | Sprint ID |
--assignee | no | — | User ID |
Issue update flags (all optional — only changed fields are updated):
| Flag | Type | Description |
|---|
--title | string | Issue title |
--description | string | Issue description (markdown) |
--type | string | feature or bug |
--priority | string | highest, high, medium, low, lowest |
--lane | int | Lane ID |
--sprint | int | Sprint ID |
--assignee | int | User ID |
Search (Cross-Project)
kendo search <QUERY>
kendo search <QUERY> --project-id 1
kendo search <QUERY> --type bug
kendo search <QUERY> --priority high
kendo search <QUERY> --lane 2
kendo search <QUERY> --sprint 12
kendo search <QUERY> --epic 9
kendo search <QUERY> --assignee 1
kendo search <QUERY> --limit 50
Board
kendo board
kendo board --rows 10
kendo board --rows 0
kendo board --json
The board shows lanes as columns with issue counts. Issues assigned to you are marked
with * and sorted to the top. Columns truncate at 6 rows with ...+N overflow.
Sprints
kendo sprint list
kendo sprint active
kendo sprint todo
Epics
kendo epic list
kendo epic issues <epic>
kendo epic issues "My Epic"
kendo epic issues 9
kendo epic create --title "Title"
kendo epic create --title "T" --start 2026-03-17 --end 2026-04-01 --color red
Reports
kendo report list
kendo report create --title "T" --description "D"
kendo report promote <id> [id...] --title "T" --description "D"
kendo report promote 1 2 --title "Bug fix" --description "..." --priority high --type bug
kendo report dismiss <id>
kendo report delete <id>
Report promote flags (all optional except --title and --description):
| Flag | Type | Description |
|---|
--title | string | Title for the new issue (required) |
--description | string | Description for the new issue (required) |
--lane | int | Lane ID (default: first lane) |
--priority | string | highest, high, medium, low, lowest |
--type | string | feature or bug |
--assignee | int | User ID |
--sprint | int | Sprint ID |
--epic | int | Epic ID |
--estimate | int | Estimated time in minutes |
Lanes
kendo lane list
Teams
kendo team list
Time Tracking
kendo time log <REF> --minutes 60
kendo time log <REF> --minutes 30 --notes "Code review"
kendo time log <REF> --minutes 45 --date 2026-03-16
kendo time list
kendo time list --from 2026-03-01 --to 2026-03-31
kendo time list <REF>
time list defaults to the current week (Monday through today). Pass --from and --to
(YYYY-MM-DD) for a custom range. Pass an issue ref to see all time logged on that issue
regardless of date. Output includes a total time summary (hours:minutes).
Update
kendo update
kendo update --check
Utility
kendo version
kendo commands --json
kendo completion bash
kendo completion zsh
kendo completion fish
kendo completion powershell
Common Workflows
Find and view an issue
kendo issue view PROJ-0255
kendo search "translation error" --json
Create a bug report
kendo issue create \
--title "Button not responding on mobile" \
--type bug \
--priority high \
--description "The submit button on the login form does not respond to tap events on iOS Safari."
Move an issue through the board
kendo lane list
kendo issue move PROJ-0255 2
Link current branch to an issue
kendo issue link-branch PROJ-0255
Daily standup overview
kendo board
kendo issue my
kendo sprint todo
Board overview for current sprint
kendo board
kendo board --json
Quick cross-project lookup
kendo issue list --project OTHER --type bug
kendo search "deploy" --project-id 8
Triage incoming reports
kendo report list
kendo report promote 5 --title "Fix login bug" --description "..." --type bug --priority high
kendo report dismiss 3
Time tracking
kendo time log PROJ-0255 --minutes 90 --notes "Refactored adapter store"
kendo time list
kendo time list --from 2026-03-01 --to 2026-03-31
kendo time list PROJ-0255
Tips for Claude Code Usage
- Table vs JSON: Table output is readable enough for displaying to users. Only use
--json
when you need to programmatically extract a specific field (e.g., getting a sprint ID to use
in a follow-up filter command).
- Error capture: Always append
2>&1 so error messages are visible in the output.
- Command discovery: Run
kendo commands --json to get a machine-readable list of all
commands and their flags — useful if you're unsure about a command's exact syntax.
- Board command: Use
kendo board for a quick sprint overview instead of running multiple
kendo issue list commands with different --lane filters.
- No project needed:
kendo issue my, kendo search, and kendo team list work without
an active project — don't waste a step on kendo project select before using them.
Relation to MCP
The CLI and MCP server access the same backend API. Key differences:
| CLI | MCP |
|---|
| Invocation | Bash tool — single command | MCP tool call — structured params |
| Dependencies | kendo binary + auth token | MCP server running |
| Output | Table or --json | Structured JSON |
| Best for | Quick lookups, scripting, batch ops | Programmatic integration, resource URIs |
Use whichever is available. If both are, the CLI is often simpler for quick reads (one
bash command vs. MCP tool invocation), while MCP is better for writes that benefit from
structured parameter validation.
Issue References
Issues can be referenced by key (e.g., PROJ-0255) or numeric ID (e.g., 390).
The backend accepts both formats. Prefer keys for readability.
User Stories
When creating issues, write descriptions in English following the user story format:
"As a [role], I want [functionality] so that [goal]". See the kendo-mcp skill's
references/issue-templates.md for the full feature + bug templates.