Skip to content

Changelog

What's new in kendo, in reverse chronological order.

Epics get a Goal, Done when, an assignee and comments

Most of this release is the epic. An epic now says what it delivers, which customer wishes make it done, who owns it, and holds its own discussion.

New ​

  • Epic Goal. An epic can carry a Goal of up to 500 characters: what the epic delivers, shown first on the epic page and in the drawer.
  • Done when. List the customer's wishes under Done when and tick each one when it is delivered; the epic shows who ticked it and when. A wish can link issues of the same epic, but a link never ticks it.
  • Done when decides Closed. An epic with wishes is Closed once every wish is ticked, even with issues still open, and stays Open while one wish is open. An epic without wishes keeps the old rule: Closed when it has issues and every one is in the last lane.
  • Progress shows wishes and issues. The Epics table, the timeline, the epic page and the drawer count wishes and issues apart, for example "1/4 wishes · 8/11 issues".
  • What done looks like. A second list on an epic holds plain-text checks that an agent verifies its work against. Checks are not ticked.
  • Epic assignee. Set an epic's Assignee on Create and Edit, on the epic page or in the drawer. The new assignee gets an in-app notification, and an email when their assignment emails are on. An assignee who leaves the project is unassigned. The Epics table adds an Assignee column and filter, with Unassigned.
  • Epic comments. The epic page and drawer have a Comments section with replies, mentions, likes, pins and attachments, as on issues. Mentions and replies notify; other comments notify nobody.
  • Blocked tag. An issue in an epic's issue list shows a red Blocked tag; hover or tap it to see its open blockers.
  • Automatic sprint cycle. Switch it on under Settings → Sprint Settings, and kendo checks once an hour: it completes an active sprint whose end date has passed (judged in UTC) and starts the planned sprint whose dates include today. The Unfinished issues setting sends leftover issues to the next sprint or the backlog. The Sprints guide has the details.
  • Bulk-assign from the Backlog. The Backlog selection bar has an Assignee mode next to Sprint and Epic, with Unassigned at the top. Issues you may not edit are skipped.
  • kendo CLI v0.16.0. New kendo epic view, kendo epic tick and kendo epic untick, and epic comments with kendo epic comments, comment, update-comment and delete-comment. epic create and epic update take --goal, --assignee, --wish and --check, --reply-to answers a comment, and epic list adds STATUS and DONE WHEN columns, with ISSUES now reading done/total. Upgrade to get them.

Improved ​

  • Epic page like the issue page. The epic page and the epic Create and Edit form use the issue page's layout: content on the left, and a sidebar with Planning and Progress on the right.
  • Longer, folded descriptions. Epic descriptions take up to 65,535 characters (was 10,000). A long one folds behind Show more on the epic page and Read the full description in the drawer.
  • Pick an epic's issues. Add issues on the epic form opens a searchable picker, and an issue already in another epic says so.
  • Epic link on the issue page. The Epic field on an issue's page is a link: a click opens the epic drawer, and a Ctrl/Cmd-click opens the epic page.
  • Comment button in the drawer. The issue drawer's button for a new comment reads Comment instead of "Reply".
  • Board cards in narrow lanes. A card's details move to their own line before the issue key gets cut off.
  • Backlog columns. A Columns menu in the Backlog's filter bar picks the columns a row shows, and replaces the labels button. Labels and Time now start hidden. The epic gets its own column, and on a narrow Backlog the title keeps its room.
  • Feedback button out of the way. The floating feedback button no longer covers a page's last rows, the Backlog selection bar on phones, or the issue form's Save bar.
  • Keyboard and screen readers. Menus such as Move to lane show the keyboard highlight and take Home and End. Filter search fields keep their name for screen readers after you type, and the signup subdomain field announces when it is required or invalid.
  • Promoted report link. A report's "Promoted to issue" link opens in a new tab with Ctrl/Cmd-click or middle-click.
  • MCP: whole epics. create-epic-tool and update-epic-tool take goal, assignee_id, checks and wishes; tick-epic-wish-tool and untick-epic-wish-tool tick a wish; add-comment-tool, update-comment-tool and delete-comment-tool take epic_id, and add-comment-tool takes parent_id for a reply. Epic color accepts 0–9.
  • MCP: projects, my issues and time entries. Projects include their avatar, and kendo://projects says which ones you pinned. get-my-issues-tool returns up to 500 issues (was 25). get-time-entries-tool dates, groups and sorts an entry by when its work started. blocked_by_ids, blocks_ids and label_ids take at most 500 ids.
  • Epic and comment API changes. Epic lists over REST, get-epics-tool without epic_id and kendo://projects/{id}/epics no longer include description; read one epic for its full text. REST comments replace issue_id with commentable_type and commentable_id. A PUT on an epic that leaves out goal or assignee_id keeps the stored value.

Fixed ​

  • Durations kendo cannot read. A duration such as "2 hours" now shows "Invalid format. Use e.g. 2h 30m" and saves nothing, instead of closing and keeping the old value. This covers Set Estimate, Log Time and the issue form.
  • Backlog reorder with a selection. Dragging a card within its own Backlog section while other issues are selected now saves the new order.
  • Command palette Enter. Enter opens the row you highlighted, even when more results arrive.
  • Bulk epic changes show live. A bulk epic change shows at once on teammates' open Backlog, Board and Overview.
  • Sprint completion with tied lanes. When two lanes share the last position, completing a sprint counts only one as done; issues in the other move on as unfinished.
  • Controls follow permissions. Members who cannot update reports no longer see the report checkboxes, Dismiss, AI Generation or Create Issue. Members who cannot select Backlog rows open the issue with a plain click.
  • Selects lock while saving. The Sprint, Epic and Assignee fields in the drawer and on the issue page are locked while their change saves.
  • Watch bells stay current. The watch bell on a report or an error stays correct after a change elsewhere, or after you leave the page and come back.
  • Notifications from a removed account. A notification whose sender's account is gone shows "Unknown user" on both the Inbox and the Dashboard.
  • Inbox selection on release. Ctrl/Cmd/Shift-click selects an Inbox row when you release the mouse, so dragging off the row cancels it. On a Mac, Cmd-click selects, as on the Backlog.
  • Team lead change. Changing a team's lead no longer puts the old lead back in the member list.
  • Long issue templates. A template with a lot of emoji or non-Latin text that is over 65,535 bytes now gets a validation error instead of a server error.
  • Long error messages kept. An error event whose message is over 65,535 bytes is kept, cut to that length, instead of refused.

Error tracking drawer, bulk status and token logging

Most of this release is error tracking. The new detail on an error needs kendo-error-tracker ^0.2; an error reported by an older version says so.

New ​

  • Error drawer. Click an error's message on Error Tracking or a project's Errors page to open it in a side drawer, with Prev and Next through the list. Change its status, create an issue, or open its tracked issue without leaving the list.
  • Bulk Resolve, Ignore and Reopen. Tick errors on either error page, or tick the header to select every error your search and filters leave, then change them all at once.
  • Regressed errors. A resolved error that occurs again reopens and shows Regressed, along with who resolved it and how often it reopened. An event from the release it was resolved in keeps it resolved. An issue created from the error shows the same status in its Issue Source section.
  • What happened. An error's page and drawer list the exception and each exception that caused it, with a one-line summary of how often it was seen, by how many users, where it ran, and in which releases.
  • Token usage from every member. Members can now record an agent session's AI token usage on an issue: with the record-token-usage MCP tool, kendo tokens log, or the token events API, naming the issue by key or id. Every existing non-admin role may now send it. Send the same session id again (external_event_id, or --id in the CLI) and its totals are replaced instead of added to.
  • Token Usage guide. The new Token Usage guide includes a Claude Code hook that sends a session's usage to the issue named in its branch when the session ends.
  • kendo CLI v0.15.0. kendo tokens log records a session's token usage on an issue, and kendo issue view shows the issue's AI token total. Upgrade to get both.

Improved ​

  • One error table, more columns. Both error pages share one table with a column picker and "is" / "is not" filters on Status, Environment, Release and, on Error Tracking, Project. New columns: Trend (14 daily bars), Users, Status, First seen, Release, First release, Context (the route, job or command the error ran in) and Resolved by; search also matches the context.
  • Readable stack traces. The error page folds vendor frames under App frames, with All frames one click away, and shows each Caused by trace in its own collapsed section.
  • Release and runtime panels. The error page adds By release and Runtime (memory and hosts) beside Details. Details gains Affected users, and its Release field is now First release.
  • Per-tenant affected users. In an app with one database per tenant, kendo-error-tracker ^0.2.1 can count each tenant's users apart; the error tracking guide has the one-line setup.
  • Error APIs. POST /api/projects/{projectId}/error-events accepts the cause chain, exception code, runtime, framework, memory use, context, host and a keyed user hash, all optional. POST /api/error-groups/bulk-status changes the status of up to 500 errors in one call.
  • Sprints in date order over MCP. The kendo://projects/{id}/sprints resource lists sprints by start date, oldest first.

Fixed ​

  • Oversized uploads skipped up front. Files over 20 MB on issues, epics and comments are skipped with a note before uploading, instead of uploading in full and then failing with "Upload failed". A pasted image over 20 MB is not sent either; the editor shows "Image upload failed".
  • Failed downloads say why. A failed download, preview or export now shows the server's error message, instead of nothing or "Kendo is updating".

Choose your table columns, and issue form shortcuts

New ​

  • Choose which columns you see. The filter bar on My Issues and a project's Issues overview has a Columns button. Hide or show any column except Key and Title. Your choice is kept in this browser.
  • More columns on the issue tables. The Issues overview adds Type, Lane, Creator, Epic and Label columns. My Issues adds Type, Epic and Creator. You can sort by each new column.
  • See which columns are filtered. While a filter narrows a table, the matching column header shows a funnel icon, and the Columns picker marks that column "filtered". Filters still apply to columns you hide.
  • Issue form shortcuts. Assign to me under the assignee sets you as the assignee, and Unassign in the same place clears it. Quick picks under the estimate fill in 15m, 30m, 1h, 2h or 4h. The sprint picker marks the active sprint "(active)".

Improved ​

  • Save button stays in reach. On long issue forms, including promoting a report, the bar with the save button stays pinned to the bottom of the screen.
  • Tables keep their column widths. Columns keep a fixed width. On a narrow screen a table scrolls sideways instead of squeezing its columns.
  • More time for go-to shortcuts. After pressing G, you have 3.5 seconds to press the second key, up from 1.5. In the light theme, the waiting keycap is now clearly highlighted.
  • Faster first load. When you open Kendo in a new tab, the page's code downloads while Kendo checks your session, instead of after it.

Fixed ​

  • Board cards drag again. Cards on the board can be dragged between lanes again.
  • Existing project tokens work again. Project tokens created before the access-level change were refused on every request. They work again, and you do not need to create new ones.
  • Shared epic links open the epic. A link to an epic opened in a new tab now shows that epic, instead of the Epics overview.

Dashboard reports follow your project filter

Improved ​

  • Reports follow the dashboard filter. The Latest reports section on the Dashboard now follows the All, Pinned or With my issues choice at the top of the page. With no pinned projects, Pinned links you to the projects page to pin some.

Fixed ​

  • Next button no longer hidden. On tables that end in page controls, such as Issues, My Issues and Users, the feedback button no longer covers the Next button.
  • No empty scroll on phones. On a phone, tables with page controls no longer scroll into blank space below the table.

Project token access levels, and drafts that survive sign-in

New ​

  • Project tokens have an access level. When you create a project token under the project's Settings → API Tokens, you choose Read or Read & write. The token reaches its own project's API endpoints and no other project. Creating a token over the API takes access (0 Read, 1 Read & write) and no longer accepts abilities. See Project Tokens.
  • Existing project tokens converted. Tokens created with abilities now have an access level: Reports, Error tracking and Token events tokens are Read & write, Project read tokens are Read. They now reach their whole project's API as their creator, so review any token that sits where people outside your team can read it. The /read endpoints are gone; use the project's normal endpoints.
  • Log time from the issue drawer. The drawer's Logged field has a Log time button for members who may log time in the project. It opens the same form as the issue page.
  • Unsaved work survives an expired session. If your session ends while you type, your unsaved comment or issue edits come back when you sign in again in the same tab, with a notice. If a teammate changed the issue in the meantime, Kendo warns you before your save overwrites it. Signing out discards these drafts; replies to a comment are not kept.
  • List a project's members over the API. GET /api/projects/{projectId}/members returns each member's id, name and email, ordered by name. See Members.

Improved ​

  • Logged time stays current. An issue's Logged total updates on open pages as soon as anyone logs, edits or deletes time on it, without a reload.
  • Search reports by reporter name. The search on the Reports page also matches the reporter's name.

Fixed ​

  • Comment kept across the Activity tab. On the issue page, switching to Activity and back to Comments no longer discards a comment you were writing.
  • Very long comments prompt a refresh. When a new comment is too large to send live, teammates with comments open see Some data may be out of date with a Refresh button, instead of silently missing it.
  • Failed uploads show an error. When storage refuses an attachment, the upload now fails with "The file could not be stored. Please try again." instead of listing an attachment whose file was never stored.
  • "Copied!" after a second copy. Copying a link twice in quick succession keeps the second Copied! confirmation for its full duration.

See who liked a comment, and a tidier Backlog lane

New ​

  • See who liked a comment. Next to a comment's like count you see the name of someone who liked it. A +N button lists everyone, with you last. Root comments and replies work the same, on the issue page and in the issue drawer.

Improved ​

  • Backlog lane hides finished work. On the Backlog page, an issue with no sprint that sits in the project's last lane, usually Done, no longer shows in the Backlog lane. Done issues in an active or planned sprint stay visible.
  • One notice while Kendo updates. A server error that comes without a message now shows one "Kendo is updating. Try again in a moment." notice, however many requests fail at once. A failed board move no longer adds a second notice.
  • Tabs reload when your access changes. When your project permissions change, your open Kendo tabs reload so they pick up your new access.

Fixed ​

  • Deleting items with AI-read attachments. Deleting an issue (one or several at once), a comment, a report or an epic, or removing all of its attachments, no longer fails when AI story generation had read one of those attachments.
  • Escape on a confirm dialog. Pressing Escape on a confirm dialog now counts as Cancel. On Discard changes? it keeps you editing, and the next time you leave the page it asks again.
  • MCP assignees follow the web app's rules. MCP assignee checks follow the same rules as the web app: a team member, a direct member of the project, or an admin.

Navigate the board by keyboard, and a stricter MCP contract

New ​

  • Navigate the board by keyboard. The board is one Tab stop. Arrow keys move between issues and lanes, Home/End jump to the ends of a lane, and Ctrl/Cmd+Home/End to the ends of the board. On a focused issue, Enter opens it, M opens Move to lane, C copies its key and A assigns it to you. The issues guide lists every key.

Improved ​

  • Clearer validation messages. Errors name the field instead of its id: "The lane id field is required." now reads "The lane field is required." Sprint and epic dates get whole sentences, such as "A sprint needs a start date."
  • Reordering reports saves one move. Dragging a report on the Reports page saves only that report's new place, so two people reordering at the same time no longer undo each other's moves.
  • Report reorder API takes one move. POST /api/projects/{projectId}/reports/reorder takes report_id with rank_before_id and rank_after_id instead of the whole list. Reports carry rank instead of order, and the MCP report tools no longer return order.
  • MCP enum fields send the number. Sprint status, epic status, report source, branch-link status, and issue priority and type in get-my-issues-tool send the number under the field's own name, with the label beside it as status_name, source_name, priority_name or type_name. The status_value, source_value, priority_value and type_value fields are gone.
  • MCP schemas describe every field. Input schemas list each field's maximum length and size and whether it accepts null. Output schemas describe every list item and nested object, and which keys a tool always sends.
  • MCP arguments are cleaned like REST. MCP tools trim spaces around text and treat an empty string as no value, as the REST API does. update-issue-tool and update-sprint-tool reject null for the fields the REST API requires.
  • Complete llms-full.txt. kendo.dev/llms-full.txt is built from the docs on every site release, so it holds every docs page. It was missing 21 of 43.
  • kendo CLI v0.14.1. kendo report list --json and kendo report view --json show each report's rank. Older CLI versions show "order": 0 for every report once this release is live, so upgrade.

Fixed ​

  • Opening a project no longer fails at random. Opening a project could answer with a server error when several of its requests arrived at once.
  • Parallel MCP sessions keep their answers. Several AI sessions calling MCP tools at the same moment no longer lose a tool call's result.
  • New workspaces finish setting up. A new workspace whose certificate took a while to issue no longer stays stuck in setup.
  • Removed members keep their name. Time entries and comments by a removed member still show who wrote them. get-time-entries-tool, update-comment-tool and the time-entry CSV export no longer fail on them.
  • Promote reports in a project without lanes. Promoting now answers "Project has no lanes configured" instead of a generic error.
  • Board moves only for members who can make them. Members who can't edit issues no longer see the move control or drag issues on the board, where every attempt failed.
  • New issues appear at the top. An issue someone else creates appears at the top of the Issues list, My Issues (when it is assigned to you), the epic page and drawer, and its epic's group on the epic board, instead of at the bottom.
  • Notification bulk actions. Bulk mark read, mark unread and delete no longer fail when a selected notification was removed in another tab. Mark all as read is disabled while a bulk delete runs.
  • Time tracking shows the range you picked. Switching the date range quickly no longer shows an earlier range's entries. A range that is too wide clears the table.
  • Filter popovers. Enter and Space act on the same option after you mix Tab and arrow keys.
  • Screen readers announce invalid multi-selects. Multi-select and grouped select fields announce a validation error.
  • One notice when your session expires. The page no longer flashes "Unauthenticated." before it reloads. You see one Session expired notice.
  • Link cards on the issue page. A long title in the Blocked By, Blocks or Issue Source cards no longer pushes its link icon against the status.

Copy drawer links and list every assigned issue

New ​

  • Copy link in the drawers. The issue and epic drawers have a Copy link button in their header. It copies the issue's or epic's full-page address, without the page or filters behind the drawer.
  • See who created an issue. The issue drawer shows a Created by field beside Priority, with the creator's avatar and name.

Improved ​

  • kendo CLI v0.14.0. kendo issue my lists every issue assigned to you, instead of stopping at the first 500. With --json and nothing assigned, it prints []. Upgrade to get the full list.

Fixed ​

  • Reports sent at the same moment go through. Two reports created on one project at the same time no longer make one of them fail.
  • My issues keeps a change made during a refresh. An assignment or removal that arrives while your assigned issues are refreshing is no longer overwritten when the refresh finishes. The sidebar count and the dashboard's My issues widget both show it.
  • MCP tools match their declared output. get-report-tool works for pending reports in MCP clients that check tool output strictly, and so does assign-issues-to-sprint-tool when it moves issues back to the backlog.

Open issues and epics in a side drawer

Clicking an issue or an epic now opens it in a drawer beside the page, so you can read it, and edit an issue, without leaving the list you are working through.

New ​

  • The issue drawer. Clicking an issue on the Board, the Backlog, the Issues page, My Issues, the dashboard's My issues widget, an epic page's issue list or an epic's expanded row in the Epics table opens it in a drawer. The page address carries ?issue=, so a copied link opens the same issue in the drawer.
  • Edit an issue from the drawer. Change its status, assignee, priority, sprint, epic, labels and estimate. An empty assignee can be clicked to assign yourself.
  • Description, attachments and comments in the drawer. Read the description, see and upload attachments, and read, like, reply to and add comments. Comments show newest first, five at a time, with a button that loads older ones.
  • Step through the list. Previous and next buttons in the drawer header, or the ↑ and ↓ keys, move through the list on the page behind it. Open full page keeps that list, so Previous and Next on the full page step through it too.
  • Dock, float or resize the drawer. Dock it beside the page or let it float over it, and drag its left edge to change its width. This browser remembers both. Esc closes it.
  • The epic drawer. Clicking an epic's title in the Epics table, or its title or bar on the timeline, opens it in a drawer with its status, color, date range, progress, AI tokens, description, attachments and assigned issues. Files can be uploaded from it.
  • Drag the board sideways. In a narrow window, press on empty board or lane background and drag to scroll through the lanes. Cards still drag as before.
  • A reason for every dismissed report. Dismissing a report asks for a reason (Not planned, Duplicate, Already shipped or Invalid) and an optional note. The report then shows "Dismissed as …". The dashboard's reports widget uses the same dialog, and dismiss-report-tool requires a category.
  • kendo CLI v0.13.0. kendo report dismiss requires --category and takes an optional --note. kendo report view shows a dismissed report's reason and note. Upgrade: older CLI versions can no longer dismiss reports.

Improved ​

  • Project read tokens return more of an issue. The issue lookup now includes the description, its 100 most recent comments and a comments_truncated flag.
  • Epic issue lists show more. Each issue shows its type icon, and its status badge takes the lane's color.
  • Open issues stay current. The drawer and the full issue page follow another member's board move and bulk delete. A deleted issue says "This issue was deleted." in the drawer.

Fixed ​

  • Saving one field leaves the others alone. A save from the drawer or the issue sidebar sends only the field you changed, so it no longer undoes another member's change to a different field.
  • Large bulk moves go through. Moving many selected issues to the top of a list could fail well short of the limit, sometimes with only a handful selected. The full 500 now fits.
  • Create branch reports success. Creating a branch from an issue no longer shows an error when the branch was created and linked.
  • Time entries keep their time. A started_at sent through MCP or the CLI with a time zone offset is stored at the right moment, instead of shifted by the offset.
  • A failed epic date drag says why. The bar snaps back with a message, and cannot be dragged again until the save finishes.
  • Failed copies are reported. A copy the browser refuses shows "Could not copy to clipboard".
  • The Profile page survives a token load failure. It shows "Could not load API tokens. Reload the page to try again." instead of going blank.
  • Blocker reload failures are reported. The issue page shows its dependency failure notice when it cannot reload the issues blocking it.
  • Self-assign after sign-out explains itself. Clicking to assign yourself after your session ended shows an error instead of doing nothing.
  • Backlog checkboxes for every issue you can move. Members who can only edit their own issues see the selection checkbox on every issue they are allowed to bulk-move.
  • Tooltips place better. They keep clear of the issue page's Previous and Next buttons and of a neighbour at the window's edge, and a tap-opened tooltip closes on a tap outside it.
  • Two-factor sign-in is hardened.

Move board cards without dragging; three features retired

Hand to Claude, the Kendo Today widget and the VS Code extension are retired, and the privacy policy and terms no longer describe Hand to Claude.

New ​

  • Move a card without dragging. Every board card has a Move to lane menu that works by click and by keyboard; on mobile it is how a card moves. The card lands at the top of the chosen lane, also when a filter hides that lane's cards, and keyboard focus follows it there.
  • Epic ids on the Epics page. The timeline shows each epic's #id before its title, and the table has a sortable ID column.

Improved ​

  • Connection failures are reported. A request that gets no answer, because you are offline or the server cannot be reached, shows "Could not reach the server. Check your connection and try again." Several failures at once show one toast.
  • Back to your page after a session expires. Signing in again returns you to the page you were on.
  • Signing out starts clean. Signing out reloads the app, so nothing loaded for the previous account stays in the tab.
  • Images over 30 megapixels are refused at upload. Attachments, reports and feedback reject them with a message naming the file.
  • Epic MCP tools validate like the web app. create-epic-tool rejects an issue_ids entry that is not an issue in the project instead of dropping it, and takes at most 500 ids. Both epic tools cap description at 10,000 characters.
  • kendo-today-tool returns data only. It still returns your active sprints, your open issues and today's logged minutes; the Claude Desktop widget is gone.
  • Two fields leave issue responses. handed_to_claude_at and token_capture_complete are removed with Hand to Claude.
  • Line spacing in wrapped text. Paragraphs that had no line spacing of their own, such as the project ownership transfer dialog's description, now wrap with room between lines.

Fixed ​

  • Report notifications open the report. A new-report notification on the Notifications page or the dashboard opens the Reports page on that report, in its status tab, highlighted.
  • Project actions you cannot perform are hidden. Someone who is not a member of a project, and whose role lacks Access All Projects, is no longer offered its controls only to be refused on click.
  • Editing an issue leaves its mentions alone. Saving an issue without changing its description no longer re-resolves the @Name mentions in it, records a description change or emails the person a name now points to.
  • New-error notifications follow read access. A watcher whose role no longer lets them see Error Groups gets neither the notification nor the email.
  • One pinned comment per issue. Pinning a comment unpins every other pinned comment on that issue, where an issue could show two.
  • Notifications that arrive while the list loads stay. They no longer disappear when the load finishes.
  • The attachment size check matches the server. Files between 20,480,000 and 20,971,520 bytes are skipped before upload with the "over 20MB" message, instead of uploading and then being rejected.
  • get-my-issues-tool rejects unknown filters. An unknown priority or type code returns an error listing the valid codes, instead of every assigned issue.
  • Tooltips keep clear of neighbouring buttons. A tooltip on one icon button in a row no longer covers the button beside it.
  • The Reports list scrolls on its own. On desktop the list scrolls inside its pane instead of scrolling the whole page.
  • The reports search field keeps its name for screen readers while you type.

A dashboard at the front door, a table view for epics

Signing in now opens a dashboard instead of the projects list, and the four big issue lists walk past their 500-issue page.

New ​

  • A dashboard at /. Signing in opens a dashboard with a card per project, your issues, the latest pending reports, your notifications and your logged time this week. G then D jumps to it from anywhere, and the sidebar carries the entry.
  • Project cards with sprint progress. Each card names the active sprint and how far it has run, your open issues in that project, its pending reports and when the project last moved. All, Pinned and With my issues narrow the grid, and the choice is remembered per browser.
  • My issues on the dashboard. The first ten assigned issues as a flat Table, or Grouped under their lane with a count per lane. The section header counts everything assigned, not just the ten shown.
  • Latest reports on the dashboard. The newest pending reports across the projects you can read, each with Dismiss and Promote.
  • Time this week. Your logged time per weekday against your contract hours, with today highlighted and the percentage beside the total. A weekend day appears only when you logged time on it.
  • Contract hours per week. Set on your profile, edited inline on the dashboard's Time card, and used as the denominator for that percentage.
  • Notifications on the dashboard, with Mark all read.
  • A table view for epics. The Epics page has a Timeline | Table toggle. A table row expands to show that epic's issues, each with the backlog's self-assign avatar, and the epic title opens the epic. The expanded epics and your view choice come back on the next visit.
  • Load more past the 500-issue page. The project Overview, Backlog, My Issues and an epic's issue list now walk the whole scope a page at a time. Each footer reads "Showing 500 of 3,214 issues".
  • Reports as an inbox. The project Reports page is a two-column inbox: status tabs with a count each on the left, the selected report on the right, expandable to its full description and screenshots. New reports are filed from a modal on the same page.

Improved ​

  • Four issue listings page in the API. /backlog, /epic-issues/{epicId}, /overview and /api/issues/my return meta.next_cursor on every response and meta.total for the whole scope. Follow the cursor until it is null to read a project of any size.
  • /recent is now /overview. GET /api/projects/{projectId}/issues/overview returns every issue in the project; the old path and its date floor are gone.
  • Every list of ids in the API has a cap. label_ids, blocked_by_ids, blocks_ids, project_ids, team_ids, direct_member_ids and user_ids take at most 500 ids; role_ids and notification_ids at most 200. A longer list returns 422 naming the field, and the ids in a list are checked against the database in one query.
  • Names next to ids in get-my-issues-tool. Each row carries its lane, project, sprint and epic as names beside their ids, and its labels as {id, name} next to label_ids.
  • Pagination sits in the table footer, attached to the table rather than floating below it. Paging is Previous / Next with a page / pages counter and the rows-per-page select; the numbered page buttons are gone.
  • The breadcrumb strip holds still while the page scrolls, and Skip to content now lands past it.

Fixed ​

  • search-issues-tool names its row count count. Without group_by the returned-row count was called total, which read as the number of matches. total is now only present with group_by, where it is the uncapped match count.
  • prepare-issue-context-tool and prepare-project-context-tool declare their empty cases. epic and active_sprint are advertised as nullable, so a client that validates the output schema accepts an issue with no epic and a project with no active sprint.
  • Issues with no creation date. The Overview and Backlog rows show a dash instead of a 1970 date.

Issue search with several values, exclusions and counts

One question such as "open issues per lane, without Tasks" now takes one call in the API, the MCP server and the CLI.

New ​

  • Several values per filter in issue search. GET /api/projects/{id}/issues/search takes lane_ids[], assignee_ids[], sprint_ids[], epic_ids[], priorities[] and types[], and an issue matches any value in a list. 0 in the assignee, sprint or epic list means unassigned, backlog or no epic. The single-value parameters such as lane_id still work.
  • Exclusions in issue search. Every filter has an exclude_ twin, such as exclude_lane_ids[] or exclude_types[]. An exclusion keeps issues without a value unless 0 is in the list, and it wins over an inclusion of the same value.
  • Issue counts in the API. GET /api/projects/{id}/issues/count?group_by= returns total and one {key, label, count} group per lane, assignee, sprint, epic, priority, type or label. It takes the same filters as search, and the count is not capped.
  • The same in search-issues-tool. The MCP tool takes the list and exclude_ filters, and group_by returns counts instead of issues. include_description: false leaves description out of each issue.
  • CLI v0.12.0 adds kendo issue count. kendo issue count --group-by lane prints one row per group, largest first, and the total. --json prints { total, groups }.
  • CLI v0.12.0 filter flags. issue list, issue search and issue count share --lane, --sprint, --type, --priority, --label, --assignee and --epic. Each flag can be repeated, each has an --exclude- twin, and none selects unassigned, backlog or no epic. --assignee takes a user id or a full name, and --epic an id or a title.

Improved ​

  • Newer MCP clients connect. The MCP endpoint serves clients on the 2026-07-28 protocol version next to the clients that connect today, from the same URL.
  • Cacheable MCP lists. Clients can cache the tool and resource lists for one hour. Every resource read stays uncached.
  • Names next to ids in search-issues-tool results. Each issue now carries its labels as {id, name} in labels, its epic as epic and epic_id, and priority_name and type_name next to the numeric priority and type. An assistant no longer needs a second call to name an issue's labels. The existing fields are unchanged.
  • CLI names that match twice. A name shared by two members or two epics stops the command and lists the candidates with their ids. A name that matches nothing stops it before any issue is fetched.
  • kendo issue list warns about labels. When the labels cannot be fetched, it says so instead of dropping the LABELS column silently.

Fixed ​

  • Label filter limits. label_id[] in issue search accepts at most 100 ids, like every other id list, and rejects a repeated id. Its 422 error key is label_id.

An issue form sidebar, PATCH updates and accurate epic progress

New ​

  • A sidebar on the issue form. Creating or editing an issue, and promoting a report, puts Type, Priority, Epic, Status, Assignee, Sprint, Estimate and Labels in collapsible Classification, Planning and Labels groups. It replaces Advanced options, so Blocked By and Blocks are always visible, and you can pick the Status when you create an issue.
  • PATCH updates in the API. PATCH on issues, epics, labels and sprints changes only the fields you send, and an explicit null still clears one. A PATCH naming no writable field returns 422, and an epic's start and end must be cleared together. PUT still replaces every field.
  • One epic's issues in the API. GET /api/projects/{id}/issues/epic-issues/{epicId} lists an epic's issues, up to 500, and replaces the project-wide epic-issues list. Epic responses gain completed_issues_count.
  • Timestamps on MCP responses. MCP tools and resources return created_at and updated_at for every stored record, and so do epics in the API. In get-time-entries-tool, each entry's date gives way to created_at.
  • CLI v0.11.1 shows epic timestamps. kendo epic list --json and epic update --json include each epic's created_at and updated_at.

Improved ​

  • A regrouped issue sidebar. On the issue page, Classification holds Type, Priority and Epic, and Planning holds Status, Assignee, Sprint and Estimate. The header shows who opened the issue and when.
  • The command palette. It closes when you click outside it, and the arrow keys keep the highlighted result in view. Typing a project's exact name or code lists that project first, so Enter opens it.
  • Project changes are on the audit trail. Creating, editing, archiving, restoring or deleting a project, and transferring its ownership, record who did it and what changed.
  • Visible focus on primary buttons. Keyboard focus on a primary button now shows a ring. It used the button's own red and could not be seen.

Fixed ​

  • Epic progress counts every issue. In a project with more than 500 issues in epics, the Epics page left out older Done issues, so an epic could read 1/5 and Open with all five Done. Expanding an epic, the epic page and its edit form now show every issue.
  • Assigning an issue. It failed with a server error after the 2026-09-16 release, and was fixed the same day.
  • Pull requests in a project's other repositories. When a project has several GitHub repositories, a pull request in a different one than the branch was linked to now updates the branch's status and runs the lane's GitHub triggers.
  • update-epic-tool keeps issues on null. Passing issue_ids: null no longer removes every issue from the epic; only [] does. Issue ids outside the project are rejected instead of dropped, and a call accepts at most 500.

A command palette, project sections in the sidebar, and go-to shortcuts

New ​

  • A command palette. Press Cmd/Ctrl+K or / to search issues by key or title, jump to a project or page, or start an action. With an empty query it shows your three most recent issues and the last three pages you visited.
  • Project sections live in the sidebar. The active project's Backlog, Board, Issues, Epics, Reports, Errors, Information and Settings sit at the top of the sidebar. A breadcrumb strip replaces the tab bars above each page, and the issue page's Previous and Next controls now sit in that strip.
  • Go-to shortcuts. Press G and then the letter shown beside a sidebar link to jump there, such as G B for Board or G M for My Issues. G W opens the Workspace menu.
  • A regrouped sidebar. Teams, Roles, User Management and Workspace settings move into one Workspace menu. Profile, What's new, Docs, the theme choice and Logout share one user menu. The Projects list is gone from the sidebar, so open a project from All Projects, the palette, or your pinned projects. A collapsed sidebar shows a dot on Inbox and My Issues when either has something waiting.
  • Labels on backlog rows. Each row shows its first label plus a +N badge that lists the rest on hover. A toolbar button hides or shows the column, remembered per project.
  • Reports read can be switched off per role. The role editor now offers a Reports read checkbox, and a new custom role starts without it. A member without it can't see reports, their attachments or their notifications. Reordering the report queue requires Reports update.
  • A paginated issue listing in the API. GET /api/projects/{id}/issues returns a {data, meta} envelope of up to 500 issues per page and accepts limit, cursor and updated_since. Follow meta.next_cursor until it is null. A limit outside 1–500 returns 422.
  • Richer issues in the API. Issue responses include lane, sprint, epic, labels, blocked_by and blocks as objects, next to the existing id fields.
  • Rate limits for MCP writes. The delete-* tools share a limit of 20 calls per minute, and bulk-create-issues-tool allows 6. The 60-per-minute limit on all tools still applies.
  • MCP tools describe themselves. Every tool declares whether it is read-only or destructive, so a client no longer treats create-issue-tool like delete-issue-tool.
  • CLI v0.11.0 reads every issue. kendo board, issue list and sprint todo page through the whole project. Upgrade: older versions see only the first 500 issues of a larger project after this release.
  • More detail in CLI v0.11.0. kendo issue comments lists each comment's attachments. Issues in --json output carry lane, sprint, epic, labels, blocked_by and blocks objects, and sprint list --json prints what each status number means when run in a terminal.

Improved ​

  • Issue pages open faster. The page appears after one request and the rest fills in. The Activity tab loads when you first open it and no longer shows a count.
  • Large items update live. Changes to issues, reports, comments, epics and projects now send only the fields that changed. Editing an issue with a long description no longer asks everyone viewing it to reload, and dismissing or promoting a report with large images reaches other viewers. When one field is still too large to send, the issue page names it and offers Reload issue.
  • The Filters shortcut is Ctrl/⌘ + /. Plain / now opens the palette. A checkbox in the Filters popover turns the shortcut off.
  • Every issue a bulk change moves is on the audit trail. Deleting a lane, sprint, user or GitHub repository, and creating, editing or deleting an epic, record an audit entry for each issue moved, unassigned or detached.
  • Accessibility. Every page has one top-level heading with no skipped levels. Selection checkboxes and icon-only buttons have names, and custom controls respond to Enter and Space. Form fields announce when they are required or invalid, and date-range errors are read with the date control. Hover tooltips stay open while you move onto them, and the Today card honours reduced motion.
  • Fonts come from kendo. The app, kendo.dev and emails no longer load fonts from Google.
  • New workspaces finish setting up. Signup no longer gives up while a new workspace's certificate is still being issued, and a setup that stalls is picked up again automatically.
  • Updating a time entry keeps what you leave out. Sending only some fields keeps the others instead of clearing them or failing, so kendo time update with just --started-at or --minutes works.
  • Id lists are capped. Team, project, issue and epic requests, and report promote and reorder, accept at most 500 ids per list. Validation errors name the list, not a position in it.
  • Policy pages refreshed. The privacy policy, terms and cookie policy on kendo.dev list every provider kendo uses and where each one processes data.

Fixed ​

  • Dropping a card at the bottom of a lane works. It failed with "Another drag landed in the same gap", and retrying could never succeed.
  • A broken attachment no longer breaks the issue page. A thumbnail that fails to load shows a file icon, and an issue with many images no longer trips a rate limit into "Could not load page." A file that is gone answers 404 with "This attachment is no longer available."
  • Attachment previews recover. A preview that fails shows "This preview could not be loaded." instead of spinning forever, with Try again when a retry can help. PDF previews render instead of showing a blank frame.
  • "Could not load page." no longer follows you. Leaving a page before it finished loading could put that error, or a blank page, on the next one.
  • GitHub settings leave the spinner. When loading the connection or the repository list fails, project settings show a banner with Retry.
  • Stray scrollbars and hidden menus. A second vertical scrollbar on the backlog and issue pages and a horizontal one in the sidebar are gone. The Workspace and user menus no longer open behind table rows.
  • Cmd/Ctrl+Enter in a comment. Submitting no longer inserts a line break first.
  • Dropdowns close when you click beside them. Multi-select pickers such as Labels on the issue form stayed open after a click in the space next to them.
  • Tooltips let clicks through. A click on content under an open tooltip reaches it the first time, and the priority icon's tooltip on backlog rows shows again.
  • Status colours in light mode. Warning, success, danger and info colours used their dark-theme shades.
  • Deleting a user unassigns the right issues. It cleared the assignee on issues that user had created and left their own assignments in place.
  • Email changes. Requesting a change to the address you already use is rejected before any email goes out.
  • Today card links open your workspace. They pointed at kendo.dev.
  • CLI commands that always failed now work. In CLI v0.11.0, kendo epic update, sprint complete, label create and label update no longer fail validation on every call.
  • CLI updates keep what you didn't change. In CLI v0.11.0, kendo issue update and issue move keep the issue's prompt, estimate and linked repository, and issue move keeps its epic.
  • kendo auth status spots an expired session. It showed a session the server had rejected as logged in. It now reads "session expired: run kendo auth login", and --json gains a state field.

Issue navigation, a System theme, and a rebuilt sidebar

New ​

  • Step through issues without going back to the list. The issue detail page gains Previous and Next controls with an "Issue 3 of 24" counter. It picks up the order from wherever you opened the issue — Board, Backlog, Overview, My Issues, or an epic — so Next follows the sorting and filtering you were already looking at. The controls stay usable even when an issue fails to load.
  • A System theme that follows your device. The theme control now offers Light, Dark, and System, and System tracks your operating system's preference live rather than only at page load. The first time you open the app after this update you land on System, so pick Light or Dark again if you want a fixed theme.
  • The sidebar Projects list is one flat, deduped list. A project that reached you through several teams used to appear once per team. It now appears once, ordered by how recently you visited it, with never-visited projects sorted alphabetically below. Pinned projects keep the order you pinned them in.
  • A project Information tab. Any project member can now open Information and see the project's basic details plus every reason they have access to it — direct membership, a team, or workspace-wide access — without needing project-update permission.
  • Blocked issues are flagged on the board. A board card whose blockers aren't resolved yet shows a badge with the count, and the badge updates as blockers move or get deleted without needing a refresh.
  • Token totals on sprints and epics. A sprint header now reads alongside its existing metadata — "12 issues · 4h est. · 1.2M tokens" — and an epic shows its total in the sidebar next to Status and Date Range.
  • You're told you're at your plan limit before filling in the form. The project create page and the Invite User dialog both check your limit on load and show an upgrade panel instead of a form you can't submit.
  • An overflow menu on comments. Comment actions move into a ⋯ menu with full keyboard support, announced correctly and dismissed when focus leaves.
  • New CLI commands and flags. kendo user list and kendo user me expose the numeric user id that search --assignee needs. kendo issue unlink-branch detaches a linked branch and lists candidates rather than guessing when a name is ambiguous, and issue view now lists linked branches. kendo report view reads a single report instead of downloading the whole project's reports to print one. time log and time update gain --started-at (RFC3339), which replaces the misleadingly named --date, and time list shows the time of day. auth status honours --json.
  • Cap the MCP report list. list-reports takes a limit (default 20, max 500) and returns a truncated flag so an agent knows more reports exist.

Improved ​

  • Reports get the rich-text editor. The report form uses the same editor as issues, mentions included, and report descriptions now render as formatted text on report cards and in the detail view — headings and bold no longer show up as literal # and **. The compact list preview stays plain text on purpose.
  • The feedback modal keeps your draft. Closing the modal to grab a screenshot no longer discards what you typed. The draft survives a failed submit, clears on a successful one, and the button now reads Close rather than Cancel.
  • Signing in returns you to the page you asked for. Following a link while signed out now lands you on that page after login, including when you pass through two-factor verification, instead of dropping you on the dashboard.
  • Open an issue from the time-tracking overview. The issue key in each row is a link now, and it resolves correctly even when the overview spans several projects.
  • Colour pickers show the colour. Label, lane, and epic colour options render as real tinted chips, and the closed picker shows a dot of the selected colour.
  • Tooltips open on tap. The explanation of why a token total reads "at least" is now reachable on a touch device and by keyboard, on issues, sprints, and epics alike.
  • Filter counts only count filters that actually narrow anything. Adding a filter chip before picking a value no longer inflates the active-filter badge.
  • Completing a sprint is recorded per issue. Reassigning incomplete issues to another sprint now writes an audit entry for each issue moved, and the app validates the completion target consistently across every surface — the app, the API, the CLI, and MCP.

Fixed ​

  • Toasts are announced to screen readers. Save-success and error toasts now reach assistive technology, and the auto-dismiss timer pauses while a toast is hovered or holds keyboard focus. Hovering during the toast's entrance no longer freezes it half-faded.
  • Attach only appears on a comment when you can attach. Members without attachment permission saw an Attach action and a drop target that were guaranteed to fail. Both paths are now hidden, and the row no longer invites a drop it would discard.
  • Backlog selection commits when you release, not when you press. A Ctrl/Cmd- or Shift-click landing on the wrong row can be aborted by sliding off before letting go.
  • Icon buttons in the attachment preview have names. The download and close buttons were unnamed for screen readers, the Claude agent tab's placeholder referred to a screen position instead of the section, and six components still carried Dutch text on English pages.
  • Typing with an IME no longer commits half a composition. The Enter that confirms a character composition was being read as a submit, saving the pre-composition text.
  • Epic status stays right after a GitHub-triggered move. An issue moved into Done by a branch or pull-request trigger left its epic's completion state stale. The same applied after reordering a project's lanes.
  • Closing a modal returns keyboard focus to whatever opened it. Cancel, the X button, and submitting all dropped focus to the top of the page, losing a keyboard or screen-reader user's place after every dialog. Escape already behaved correctly.
  • Project owners can see Delete on their own project. Under the default Member role, the projects overview hid the Delete button from owners the server would have allowed through.
  • Live updates work on a page opened while already signed in. Components that subscribe on load could miss the connection and stop receiving real-time changes for the rest of the session.

Project archive, comment likes, and exclusion filters

New ​

  • Archive a project instead of deleting it. The Projects overview gains an Active/Archived switch, with Archive and Restore on each row for anyone who can update the project. An archived project keeps its Archived badge and archive date, and drops out of every list and picker elsewhere in the app. Open one anyway and a banner offers to restore it in place.
  • Reach the archive from the CLI and MCP too. kendo project list --include-archived returns archived projects alongside active ones, and MCP serves the archive at its own separate resource so an agent never picks up an archived project by accident.
  • Like a comment. Comments and their replies now carry a like toggle with a count.
  • Filters can say "is not". On the Board, Backlog, Overview, and My Issues, a filter value cycles through include, then exclude, then off — so you can hide every issue carrying a label instead of only showing the ones that do. Click the operator on a filter chip to flip its polarity. This works on every filter dimension, not just labels.
  • AI token usage on an issue. The issue detail sidebar shows a token total under Total logged. When the capture for that issue is incomplete, it reads "at least 1,234 tokens" rather than a bare figure, so a partial number is never presented as a final one. A measured zero shows as "0 tokens".
  • Create many issues in one MCP call. The new bulk-create-issues tool files a batch of issues at once and reports per-row outcomes, so a row that fails doesn't sink the rest of the batch.
  • One switch for all email. User Settings gains a master email toggle above the per-category rows. Turning it off suppresses every notification email and hides the category list; turning it back on restores the individual choices you had before.

Improved ​

  • Avatars and project logos load from a CDN. Image bytes no longer travel through the application server on every request.
  • Select a notification from anywhere in its checkbox cell. The whole cell is a hit target now, and Ctrl/Cmd-click and Shift-click select rows the same way the backlog already did. A plain click still opens the notification and marks it read.
  • Projects overview search matches the project code. Searching for a code such as KD finds the project, not just its name.
  • Sprint lists load faster. A project's sprint list resolves its incomplete-issue counts in one batch instead of two queries per sprint — six sprints went from 15 queries to 4.
  • Date-filtered time reports are much faster on long histories. Filtering time entries by a date window went from a 45ms full table scan to a 2.4ms indexed lookup, measured over 200,000 rows.
  • The projects list returns a smaller payload. /api/projects no longer hydrates relations the list view never displayed.
  • Error-tracking lists load much faster. List rows no longer carry the full stack trace — measured on production groups that was about 96% of each row, for a column the list never displayed and search never looked at. The per-project error-group list now loads at most 500 groups and tells you when there are more.

Fixed ​

  • The issue detail page keeps up with other people's changes. Edits made by someone else — including changes to blocking and blocked-by dependencies — now appear on the issue detail and edit pages without a reload. Your unsaved edits are no longer silently discarded when someone else's update lands while you're editing, and a failed save's retry can no longer overwrite a change that arrived in the meantime.
  • New issues land at the bottom of their section. A newly created issue was being dropped at an arbitrary position in the Backlog or Board. It now appends beneath the last issue in the same project and sprint.
  • Editing a comment no longer jumps the page. Switching a fully visible comment into edit mode scrolled the page under you.
  • A board card's avatar shows the person's name again. The tooltip worked on initials but not on an uploaded picture, because the card's click overlay swallowed the hover.
  • Avatar uploads reach the right storage region. Avatar storage now targets its EU data-residency endpoint. Uploads had been failing against the wrong region on staging, and would have failed in production.
  • The AI-keys edit pencil is hidden without update permission. A create-only role saw a working-looking pencil that opened the scope picker and then refused to save.
  • Pressing Hand to Claude twice starts one session. The session slot is claimed before the paid call goes out, and a session left stranded by a crashed start is now recovered and recorded rather than blocking the issue indefinitely.
  • Repository linking verifies your access. Linking a GitHub repository now confirms you have access to it before the link takes effect, and a denied request is reported as a permission error.
  • Bulk create over MCP reports a plain reason for a failed row. A row that fails comes back with a fixed, generic message rather than raw error detail.

Threaded replies, audit logs, and multi-ability project tokens

New ​

  • Reply to a comment. Comments now have threaded replies — a thread shows its latest reply and expands to show the rest, with the reply form right below it. The author of the comment you reply to gets an in-app notification and an email.
  • Audit Logs in central admin. A new Audit Logs page lists who changed what and when across workspaces, domains, billing, GitHub installations, and admin accounts — including admin security events like enabling 2FA, regenerating recovery codes, and password changes. The table is paginated and read-only.
  • A deleted workspace can be restored for 30 days. Deleting a workspace from central admin now starts a 30-day grace period instead of removing it immediately. The workspace list shows a countdown badge, the detail page swaps Edit and Delete for a Restore button, and restoring stops working once the window has passed.
  • Rename your workspace. Workspace admins can change the workspace name from Settings, and the new name is picked up everywhere it appears — sidebar, browser tab title, and settings.
  • One project token, several abilities. A project token can now carry any combination of Reports, Error tracking, and Project read, so an integration that does more than one of these needs a single secret instead of one token per capability. The token list shows a badge per ability.
  • Read project data with a token. The new Project read ability unlocks GET /api/projects/{projectId}/read and GET /api/projects/{projectId}/read/issues/{issueKey}, for reading stable project meta and looking up an issue by its key.
  • Get told when your project access changes. When someone changes your role, your team, a project you're on, or hands over ownership, you now get a notification naming the affected project — so you find out before you hit an "unauthorized" wall.
  • Strikethrough in the editor. The rich-text toolbar gains a strikethrough button alongside Bold and Italic, in descriptions and comments.
  • Search and page through the central tables. The Tenants and Central Users tables in central admin now have search, filters, sorting, and pagination, and your sort choice survives navigating away and back.
  • Pin a project from All Projects. Every row of the All Projects table has a Pin toggle, so you can pin a project you can see but aren't a member of — previously pinning only worked from the sidebar's own list.

Improved ​

  • Filter your errors like everything else. Both error-tracking pages now use the app's standard filter bar — search across the exception and its latest message, filter by environment and status, see active filters as chips, and clear them all at once.
  • Story generation says when it's waiting its turn. Generations run one at a time, so a second one can sit in line for a while. It now shows a waiting state until its turn comes up, instead of giving up and reporting a failure while the generation was still running.
  • Issues carry a last-updated time over the API and CLI. updated_at is now returned alongside created_at on the issues endpoint and in kendo issue list --json / kendo issue view, so you can tell when an issue was last touched rather than only when it was filed.
  • Dropdowns respond to Home and End. Single-select and searchable-select menus jump to the first or last option with Home and End, and announce the highlighted option — and a "no results" state — to screen readers. Reopening a searchable select that already has a value now shows the full option list instead of only the value you picked.
  • Sign-up says which field is wrong. The Subdomain field on the sign-up form now ties its error message to the input, so screen readers read the error out with the field instead of leaving it unannounced.

Fixed ​

  • Project owners can open their own project settings. If you own a project but aren't a workspace admin, the Settings tab showed on your project's board and then bounced you back to the project list when you clicked it — leaving no way to configure a project you had just created.
  • Nested numbered lists keep their nesting. Editing and saving a description or comment containing a numbered list inside a numbered list no longer flattens it into one continuous 1..N sequence. Fixed for epic, issue, and comment descriptions at once.
  • Long report descriptions truncate again. The show-more toggle on a report card never appeared, no matter how long the description was — long descriptions now clamp with a working toggle.
  • Settings controls reachable below 1024px. The Settings profile page overflowed sideways on narrower screens, pushing the API-token copy button and the 2FA buttons off-screen with no way to scroll to them.
  • The error screen clears when you navigate away. The full-page "Could not load page." message used to stick around after you moved to a page that works — it now resets on navigation.
  • The story-generation stepper stops spinning on failure. When a generation failed or timed out, whichever step was in progress kept its spinner forever, until the next generation reset it.
  • One "Discard changes?" prompt, not two. Clicking away from a form with unsaved changes twice in quick succession raised a second discard dialog on top of the first; you now answer once and that answer is honoured.
  • The same report can't be promoted twice. Two people promoting the same report — or the same error group — at the same moment, or one fast double-click, can no longer create two issues from it. The second attempt is rejected as already promoted.
  • The create-token prompt only shows if you can create one. The "Create a project token" button on the error-tracking empty state appeared for every member but did nothing without settings access. It's now hidden when you lack the permission, and the setup steps tell you to ask a project admin instead.
  • Hardened the attachment archive download. Every file inside is now written under a plain, flattened name.

Pinned projects, error triage, and forms that keep your input

New ​

  • Pin favorite projects. Pin the projects you work in most to a dedicated Pinned section at the top of the sidebar, always one click away. A pinned project moves out of its team group so it sits in exactly one place, and unpinning drops it back where it was.
  • Collapse sidebar project groups. Collapse or expand any group in the project sidebar — Pinned, your teams, or direct memberships — from its header, and each group remembers whether you left it open or closed.
  • Give each project an avatar. Upload an avatar for a project in its settings, and it shows next to the project in the list. The project list is now sorted alphabetically too.
  • Resolve, ignore, and reopen error groups. Error groups now have a status you can set — resolve one you've handled or ignore the noise — and a resolved error that happens again automatically reopens itself.
  • Turn an error into a Bug issue. From an error group you can now create a Bug issue in one step, and the error and the new issue stay linked in both directions.
  • Watch a project's errors. Turn on error watching for a project to get an inbox notification whenever a new kind of error first appears, plus an email alert that's on by default and editable from your notification settings.
  • Download all of an issue's attachments. A Download all control zips every attachment on an issue into a single download.
  • Filter the time log to your own entries. The time log gains a "My entries" quick-filter that narrows the list to just the time you logged.
  • Copy an issue key from the board. Hover any board card to reveal a copy button on its issue key — the same gesture the issue page already had.
  • Docs link in the sidebar. A new Docs link under What's New jumps straight to the product documentation.

Improved ​

  • Newest notifications first. Your notifications inbox now opens with the newest at the top and remembers whichever sort order you pick.
  • Time entries read newest-first. The time entries in an issue's side panel are ordered newest-first, matching the rest of the app.
  • Overflowing attachments wrap into view. When an issue has more attachment thumbnails than fit on one row, they now wrap onto additional rows instead of scrolling off-screen, and the section header shows a count.
  • Double-clicks can't fire an action twice. Action buttons across the app — from issues, comments, sprints, and reports to settings and workspace admin — now lock after the first click, so a fast double-click or a slow connection can't run the same change twice.

Fixed ​

  • Forms keep what you typed. When a submission fails validation, the form no longer clears — your input stays put with the errors shown inline, across the app's forms.
  • Reports you promote update right away. Promoting a report now updates your own view immediately, instead of leaving it marked Pending until you refreshed.
  • Notification toggles no longer snap back. Flipping several notification settings in quick succession no longer silently reverts the first one you changed.
  • New profile pictures appear immediately. After you upload an avatar, the new image now shows straight away without needing a hard refresh.
  • Unlink a branch without connecting GitHub. The Remove button on a linked branch now appears even when GitHub isn't connected — unlinking is a kendo-side action that never needed GitHub.
  • Links in issue content open in a new tab. Links in descriptions and comments now open in a new tab, so following one no longer unloads the app or risks logging you out when you navigate back.
  • No stray error when signing in. Opening a protected link while signed out now takes you straight to the sign-in page, without first flashing an "Unauthenticated" error.

Multi-workspace CLI, double-submit guards, and a tidier backlog

New ​

  • Multiple workspaces from the CLI. The kendo CLI now holds a separate login per workspace, switches between them with kendo auth switch, and lets you target one per command with --tenant or the KENDO_TENANT variable — no config editing needed. After updating, existing CLI users sign in once; switching between logged-in workspaces after that needs no re-auth.
  • Read an issue's comments from the CLI. A new kendo issue comments <ref> command prints the full comment thread with author names, or raw JSON with --json.
  • Point an issue at a specific GitHub repo. On projects connected to two or more GitHub repositories, the issue form gains a Target GitHub repo picker — and starting work or linking a branch then targets that repo automatically.
  • Promoted reports show up on the issue. When a report is promoted into an issue, it now appears in a Report(s) section on that issue, each entry linking back to the original report.

Improved ​

  • No more accidental double-submits. Forms and modals across both the workspace and admin apps now lock after the first click, so a double-click or a slow connection can't submit the same form twice.
  • The backlog lines up. Issue rows now sit in aligned columns with each issue's priority shown, regardless of title length — and you can assign an issue to yourself in one click, the same quick self-assign the board already had.
  • Automated changes stand out in activity. When an automated event moves an issue — such as a GitHub branch or pull request — the activity feed now marks it as "System" with a distinct icon, so you can tell automated changes from ones a teammate made.
  • A heads-up when a change is too big to stream live. If a bulk update is too large to push to your screen in real time, the board, backlog, and overview now show a persistent notice with a Refresh button instead of silently leaving you on stale data.
  • Find reports by their number. Reports now show their id in the list and detail views, and you can search the report queue by that number.

Fixed ​

  • The app reliably loads after an update. Previously a page left open across a deploy could fail to load until you manually refreshed; the app now always fetches the current version, and tabs open across an update recover on their own.
  • Resend reaches the right workspace. Resending a workspace verification email now reliably matches the correct workspace, even when its address differs from its internal name.

Tooltips everywhere, dedicated epic pages, and richer editing

New ​

  • Epics open as a page. Viewing an epic now takes you to its own page instead of a cramped modal, with its linked issues listed inline.
  • Delete an issue. The issue page gains a delete button next to edit, with a confirmation step that names the issue first.
  • Links, quotes, and code blocks in the editor. The formatting toolbar adds a link button — with an inline panel to type the URL — plus blockquote and code-block buttons, in issue descriptions and comments.
  • Tenant status at a glance. The tenants console gains a Status column showing whether each workspace is healthy, unverified, overdue on payment, cancelled, setting up its custom domain, or stuck on a domain error — so you can triage without opening each one.
  • Migrate Jira attachments from the CLI. A new kendo migrate jira-attach command streams a single attachment straight from a Jira URL onto a kendo issue.

Improved ​

  • Hover hints on icon buttons. Icon-only buttons across the app now show a label on hover or keyboard focus, and user avatars reveal the person's full name — clearer for everyone and properly announced to screen readers. Collapsed sidebar items show their project name too.
  • Pick blockers from your whole backlog. The Blocks / Blocked By picker now searches your backlog instead of loading every issue in the project, so it opens faster on large projects — and a dependency that has since moved into a completed sprint still shows up.
  • Clear the filter search in one click. The filter bar's search field gains an inline ✕ to reset it.
  • Heads-up before two-factor revokes your tokens. Turning on two-factor authentication — or enforcing it on a role — now tells you how many personal access tokens it will revoke and asks you to confirm first.

Fixed ​

  • The CLI --project flag now works. Passing --project <CODE> now resolves to the right project for that one command — previously it was ignored and every command returned a not-found error. Codes match regardless of letter case, and the override is never saved to your configuration.
  • Clear error when a CLI or extension token expires. A revoked or expired access token used by the CLI, VS Code extension, or feedback balloon now returns a clear 401 error.
  • More reliable workspace-address availability. Picking a workspace name now accounts for every reserved address, so the available/taken result is accurate before you sign up.

Toolbar image uploads, rich epic descriptions, and post-release recovery

New ​

  • Insert images from the toolbar. Issue descriptions, new comments, and comment edits gain an insert-image button in the formatting toolbar — pasting a screenshot still works, but there is now a dedicated button for it too.
  • Formatted epic descriptions. Epic descriptions now use the same rich-text editor as issues, so bold, italic, headings, and lists work there too.
  • Sprints over MCP. AI agents and MCP integrations can list a project's sprints with the new read-only get-sprints tool, filtering by status (Planned, Active, or Completed) or looking up a single sprint by ID. prepare-project-context now returns all Planned and Active sprints in one call, not just the active one.

Improved ​

  • AI story generation runs in the background. Generating a user story no longer cuts off when it runs long — the request returns immediately, progress steps update as they complete, and the result appears when it's ready. A failure now shows an error message instead of nothing.
  • Less refetching inside a project. Sprint, epic, and label lists are now cached and only re-downloaded when something actually changed, so switching between project tabs stops re-requesting the same data.
  • Clearer Git panel without a connection. When your personal GitHub account isn't connected, an issue's Git panel now says so and links to your Profile page to set it up, with the branch-name auto-link hint kept as an alternative.
  • Verified GitHub installation linking. Connecting a GitHub App installation to your workspace now confirms you own the GitHub account — or are an admin of the organization — before the link is made. Organization connections may ask you to reconnect GitHub once to grant organization-read access, and a network hiccup during setup now shows a clear error page asking you to try again.

Fixed ​

  • Open tabs recover after a release. Clicking a link in a tab that stayed open across a kendo update could show a blank pane; the app now detects the outdated build and reloads straight to the page you were heading for.
  • Errors no longer stick to the page. A failed action — like a comment that didn't submit — used to flip the whole page to "Could not load page." and keep it there as you navigated; failures now surface as a normal error message and the next page loads with a clean slate.
  • Epic board stays live. Moves made by teammates now apply on the epic board as they happen, and the open/closed indicator no longer goes stale.

Error tracking, scoped project tokens, and a workspace finder

New ​

  • Error tracking. Kendo can now collect the runtime errors your app reports and group repeated ones together, so each distinct problem shows once with its stack trace, environments, occurrence count, and first- and last-seen times. Every project gains an Errors tab, and a new Error tracking page in the sidebar surveys error groups across all your projects, filterable by project and environment; opening a group shows a detail view that dims framework frames so your own code stands out, with copy-link and copy-stack-trace buttons.
  • Scoped project tokens. When you create a project token in the Settings tab you now pick its ability — Reports or Error tracking — and the token list shows each token's ability. An Error tracking token is what lets your app post errors to the project's error-events endpoint.
  • Error groups over MCP. A new read-only MCP tool returns your error groups across every accessible project, or scoped to one project or environment, with an optional recent-days window; stack traces are left out unless you ask for them.
  • Find your workspace. A new finder at central.kendo.dev/sign-in takes your workspace subdomain and routes you to the right login when you don't remember the URL, and the kendo.dev landing page now links straight to it and to self-serve signup.

Improved ​

  • More features on by default. Error tracking, project tokens, AI-assisted user stories, bring-your-own AI keys, and the in-app report tool are now on by default for every workspace.
  • Resend cooldown starts on load. On the post-signup screen the resend-verification button is now disabled from the moment the page opens and re-enables after 60 seconds, so it can't be tapped before the email has a chance to arrive.

Pinned comments, label filters, and board refinements

New ​

  • Pinned comments. Pin one comment to the top of an issue so the key note stays above the thread, set apart with a highlighted treatment. Pinning needs issue-edit permission.
  • Filter by label. The board, backlog, and project issues view gain a Label filter — narrow to issues carrying any of the labels you pick, alongside the existing filters.
  • Labels over MCP. Five new MCP tools to list, create, update, delete, and set issue labels. The project- and issue-context tools return full label details; the search and my-issues tools return label IDs, with a new label filter on search.

Improved ​

  • Time at a glance. Board cards and backlog rows now show logged-versus-estimated time, so you can spot what's nearly done without opening each issue.
  • Board scrolls on narrow screens. Between tablet and laptop widths the board scrolls sideways with lanes holding a readable minimum width, instead of squeezing every lane to fit.
  • Epic timeline opens on today. The timeline now lands with today near the left edge, putting current and upcoming work in view first.
  • Post comments from the keyboard. Cmd/Ctrl+Enter submits a comment; plain Enter still adds a newline.
  • Unsaved comment guard. Leaving an issue with a half-written comment now prompts before discarding it.
  • Markdown previews. Markdown attachments now render inline in the attachment preview, alongside images and PDFs.
  • Faster past-date time logging. Today, Yesterday, −2d, and −3d presets under "Started At" set a recent date in one click.
  • Clearer permission messages. Hitting a permission wall now returns a message explaining you lack permission and an administrator can grant it, instead of a generic "unauthorized."

Fixed ​

  • Stuck card drags. Dragging a card to certain spots could fail permanently with no usable error; drops now recover on their own and surface the real reason when they can't.
  • Time summaries follow the work date. Back-dated time entries now count toward the day the work happened, matching the table, instead of the day they were logged.
  • Mention menu placement. The @-mention menu no longer flashes in the far corner on the first @, and stays anchored to your cursor as you scroll.
  • Live status after agent edits. When an issue is moved through MCP or an agent, the My Issues view now updates to the new lane's title and colour live, instead of showing the old one until a manual refresh.
  • Epic bar colours. The epic bar-colour picker now lists colours by name, fixing hues that appeared to shift or swap when selected.
  • Editor links. Links inside the comment and description editor are underlined and no longer navigate away when you click to edit them.
  • Safari row clicks. Clicking a table row now works in Safari instead of the link overlaying the whole page.
  • Honest signup status. The post-signup screen now shows that workspace setup is still in progress; a verification link arrives once your workspace is ready.
  • Deleting handed-off issues. Deleting an issue now clears its Hand-to-Claude data cleanly, and an issue is protected from deletion while a Claude session is still running.

Project labels, automatic epic status, and board polish

New ​

  • Project labels. Create, rename, recolour, and delete labels in project settings, then apply them to issues from the issue sidebar or board cards. Labels show as coloured chips, update live for everyone viewing the project, and are included in the API and MCP issue payloads.
  • Bulk-move backlog issues. Select several issues in the Backlog and move them to another sprint in one action — by dragging the selection or using the Move-to dropdown. Previously a multi-select drag saved only the issue you dragged.
  • Attachment arrow-key navigation. Page through an issue's attachments with the left and right arrow keys in the preview modal.

Improved ​

  • Epics track their issues. An epic's status is now derived automatically — closed only when all of its issues reach the last lane, open otherwise. The manual status selector is gone, and reordering lanes in a way that changes which lane is last now warns you first.
  • Live project updates. Changes to a project's name or other details now appear instantly for everyone viewing it, without a refresh.
  • Sidebar gives content more room. The navigation sidebar auto-collapses on narrower screens; you can still expand it for the rest of your session.
  • Easier to tap and read. Form controls meet a comfortable minimum size on touch devices, file-upload dropzones are larger, and avatar initials are larger and higher-contrast.
  • Keyboard-friendly rich-text editor. Tab now moves past the formatting toolbar in one step to reach the editor; arrow keys move between the formatting buttons.

Fixed ​

  • Markdown tables render properly. Tables in issue descriptions and comments now display with borders, headers, and cell padding instead of appearing as an unstyled block.
  • Accurate complete-sprint count. The complete-sprint prompt could show an outdated number of unfinished issues; it now reflects the current state of the board when you open it.
  • Deleting a project now succeeds. Projects could fail to delete with a server error when they had related activity — Claude sessions, issue watchers, attachment data, or linked AI keys. Deletion now clears these up first.
  • Modals stay on screen. Wide modals could spill past the edge on large screens; they're now kept within the viewport.

Live attachment updates and paginated comment threads

Improved ​

  • Live attachment updates. When someone uploads, replaces, or deletes an attachment on an issue you have open, the attachment grid updates instantly for everyone viewing it — no refresh needed, bulk deletions included.
  • Paginated comment threads. Long comment threads now split into pages of 25, newest first, with a page bar to step through older comments instead of rendering the whole history at once. New comments you or teammates post appear on the first page.

Fixed ​

  • Corrupt images are caught on upload. An image that can't be decoded is now rejected with a clear error at upload time.

Multi-repo branch picker, sidebar redesign, and report watchers

Multi-repo project support lands across the branch picker, MCP tools, and the issue API; the issue sidebar gets a collapsible-bands refresh; and project owners are now notified when new reports come in.

New ​

  • Multi-repo branch picker on the issue sidebar. When a project has more than one GitHub repo linked, the branch picker now lists every linked repo's branches in one grouped picker, disambiguated by repo. Per-repo fetch failures surface as inline retry rows that don't block the healthy repos. The create-branch flow gets a repo dropdown that remembers your last pick per project.
  • Collapsible issue sidebar. Details, Planning, Git, and Time are now collapsible bands that show a digest summary when closed (e.g. "Alice · In Progress" for Details). Open/closed state is remembered per section across visits.
  • Notifications when new reports land. Project owners now auto-watch their projects and receive an in-app and email notification whenever a teammate, the API, or an MCP tool files a new report. A bell toggle on the project's reports overview opts you in or out per project, and a new email-preference row in user settings controls the email channel. Owners on existing projects are watched retroactively. Anonymous reports show as New report "<title>" by <author> in the feed.
  • MCP unlink-branch tool. Mirror of link-branch. Identifies the link by issue + branch name, with an optional repo_full_name hint for multi-repo projects; refuses to delete when the hint contradicts reality and lists the actual candidates.
  • MCP link-branch and start-work-on-issue accept a repo_id hint. Multi-repo projects previously returned a candidate-listing error that agents had no parameter to act on. The optional repo_id closes that gap — agents can look up repo IDs via the project's GitHub-repos resource (kendo://projects/{id}/github-repos) and retry without human escalation.

Improved ​

  • Lane shown as a coloured badge on backlog rows. The plain-text lane on backlog list items is now a coloured badge that picks up the lane's existing colour — matching the chip already used on the board and on the issue detail page.
  • Active sprint label on the Issues and Backlog tabs. The "Sprint: NAME" header that the Board already showed now appears on the Issues and Backlog filter bars as well, so the active sprint context is visible from every project tab.
  • Hand-to-Claude is explicitly disabled on multi-repo projects. The button now carries an explanatory tooltip — "Multi-repo projects can't yet be handed to Claude" — instead of silently showing a disabled button with no explanation. Zero-repo projects show a separate tooltip. The legacy "Set primary repo" control has been removed from project GitHub settings.
  • branch_links on issue resources. Issue API responses, realtime broadcasts, and the MCP get-issue resource now carry a structured branch_links array with per-link id, branch_name, repo_full_name, and status, replacing the previous flat branch_link_statuses enum array. API and MCP consumers will see the new shape on board, list, detail, and broadcast paths.

Fixed ​

  • Clearing one filter no longer hides another active filter. When two filter chips were active in the project filter bar and you cleared the most-recently-edited one from its value popover, the remaining still-active chip disappeared from the bar too. The bar now falls back to the first active filter so the surviving selection stays visible.
  • Filter selections no longer bleed across projects. Assignee, lane, sprint, epic, and creator filters used to share a single storage slot, so navigating from Project A to Project B would carry A's selections to B — and strict ID equality then blanked out the issue list. Each project (and the My Issues page) now owns its own filter slot.
  • Hand-to-Claude pill shows the running state. Sessions used to sit on "Claude is picking up the issue…" until they finished, then jump straight to Completed or Failed. The "Claude is working on the issue…" pill now appears as soon as the session actually starts work, on the issue's Hand-to-Claude tab.
  • Pagination controls stay on one row. Page chevrons and the current-page indicator no longer wrap to a second line in narrow embedded surfaces. On touch, the page indicator now renders as a styled button alongside the chevrons instead of plain text.
  • Snappier navigation between project tabs. Moving between tabs inside a project no longer fires a burst of channel-auth requests; the app now reuses live subscriptions across tab changes instead of tearing them down and re-establishing them.
  • Destructive confirmations say "Delete". Confirmation modals across tenant settings, central admin, attachments, AI keys, comments, and the backlog now label the destructive button "Delete" instead of a generic verb.
  • MCP link-branch returns structured errors. Duplicate-link and cross-project-mismatch errors now come back as readable error messages instead of opaque framework codes. Under parallel agent fan-out, callers can distinguish "already linked" from "wrong project" from infrastructure failures.

Hand-to-Claude visibility, comments redesign, and live time tracking

New ​

  • Claude-handed indicator on issues. When an issue has been handed to Claude, a Claude-orange indicator now appears on its board card, backlog row, and issue detail page — so teammates can see at a glance which issues are running.
  • Hand-to-Claude moved to its own tab. The Hand-to-Claude controls and eligibility check now live in a dedicated tab on the issue page, alongside Comments and Activity, instead of in the sidebar.
  • Automatic hand-to-claude label on Claude-opened PRs. Pull requests opened by a Claude session are now labelled hand-to-claude on GitHub so reviewers can spot them at a glance. The label is painted in Claude's brand orange.
  • Live updates for time entries on the issue sidebar. Starting, editing, or deleting a time entry now reflects on the issue's time-tracking sidebar in every open tab, without a refresh.
  • Date and time on the time tracking overview. The date column on the time tracking overview now shows both the date and the time the entry started, instead of date only.

Improved ​

  • Comments redesigned in a rail layout. Comments on the issue page now use a timeline rail with avatar nodes, an inline header with relative time, and action buttons grouped to the right. The Add Comment button has moved inside the rich-text editor.
  • Richer closing comments from Claude sessions. When a Claude session ends — whether it finished its work, idled out, was terminated, or expired — the closing comment now uses one consistent layout showing status, stop reason, iteration count, duration, total tokens, and grader feedback when the grader returned a failing verdict.
  • More reliable branch auto-linking. Branches named KD-XXX-<slug> now resolve to their issue more reliably. Adds a push-webhook fallback for branches whose create webhook never arrived; fixes two parser gaps — a regex that matched a project code as a substring of a longer code (e.g. project IT matching inside INIT-0001-foo), and a digit-padding mismatch that caused branches like KD-99-foo to silently not link because the parsed key was compared raw against the zero-padded KD-0099 in storage; and warns the server log when the pattern almost matches an issue, so near-misses appear in monitoring instead of being silently dropped.
  • Concurrent Hand-to-Claude runs are blocked. Trying to hand the same issue to Claude while a session is already running or pending now reports a clear error instead of starting a duplicate run.
  • Claude sessions that stop naturally now close cleanly. When a session reaches its natural end or hits a turn limit, it now posts its summary comment and closes out properly, instead of staying in an in-progress state.
  • create-issue and update-issue MCP tools return the issue URL. Both tools previously returned the project URL in the url field; they now return the direct issue URL.

Fixed ​

  • Successful Claude sessions no longer graded as failures. Two separate bugs caused this. First, the PR-evidence parser rejected the MCP tool's response shape ({id, url}), so sessions that successfully opened a pull request were terminated before the grader ever evaluated them. Second, the grader verdict reader looked for a webhook field that was never populated, so even sessions the grader approved were recorded as failures. Both are now fixed: sessions that open a PR and pass the grader are now recorded as wins.

Hand-to-Claude, AI attachments, and live updates everywhere

New ​

  • Hand to Claude. Admins can now hand an eligible issue to Claude for autonomous execution. Claude scores the issue against an eligibility rubric first; only passing issues proceed. Rolling out tenant-by-tenant.
  • AI story generation reads attachments. When generating a story from a report, the AI now pulls in attached images and text files (screenshots, plain text, CSV, JSON, Markdown) and uses them as prompt context. A per-attachment status panel shows which files were read and which were skipped, with the reason.
  • Live Reports overview. The reports list now updates in real time when teammates create, dismiss, promote, delete, or reorder reports — no refresh.
  • Quick self-assign on board cards. Click the user icon on an unassigned board card to assign yourself. A confirmation toast appears with an Undo action that reverts the assignment.
  • Sprint estimate totals on the planning view. Sprint rows on the backlog now show total estimated hours and an unestimated-issue count. A yellow chip warns when items lack an estimate; a green chip confirms when the sprint is fully sized.
  • Browser tab title reflects the page. The tab title updates to the current issue, project, or page context as you navigate, instead of always reading "kendo".
  • remaining_minutes on the Issue API. Every issue resource now includes remaining_minutes (estimated minutes minus logged minutes, or null if no estimate). Returned by the index, show, create, update, and project-scoped search endpoints.
  • --limit on kendo issue search. The CLI now accepts --limit N (default 25, max 500) on kendo issue search. A latent envelope-parsing bug that silently dropped results was also fixed on kendo issue search and kendo epic issues.

Improved ​

  • Faster project, board, sidebar, and team loads. Project, lane, sprint, and team responses no longer hydrate every related issue or member just to compute counts and IDs. Visible on tenants with thousands of issues — board page loads, sidebar navigation, and team settings no longer fan out a full table read per item.
  • Slimmer user responses. The unused issue_ids array was removed from user and profile resources, so /api/users no longer hydrates every listed user's full Issue rows.
  • Longer descriptions on issues, reports, and teams. Team descriptions now accept up to 5,000 characters (previously capped at 255 by the database column). Issue and report descriptions now store up to 65,535 characters regardless of emoji content.

Fixed ​

  • No duplicate issues from double-clicking Save. The Create, Edit, and Promote-Report forms disable the submit button while a save is in flight, so a fast double-click no longer creates duplicate issues or breaks back-navigation.
  • Issue detail page stays in sync. Issue fields, branch links, and watch status now update live across every open tab — the detail page used to require a manual refresh to see changes from another tab or tool.
  • Spurious "discard unsaved changes?" prompt on Create Issue. Opening the new-issue page and leaving without typing no longer triggers the unsaved-changes confirmation.
  • Tenant deletion now succeeds for billed tenants. Deleting a tenant in the central admin now correctly removes related subscription and GitHub install records before the tenant row. Previously the deletion failed with a database constraint error for tenants with an active Stripe subscription.
  • Issue update API no longer claims to accept attachment_ids. PUT /api/projects/{id}/issues/{slug} has dropped the attachment_ids field — it was silently ignored on update. Use the dedicated attachment endpoints to link or unlink attachments on an existing issue.

Unsaved-changes guard, password modal fix, and MCP project-context tool

New ​

  • prepare-project-context MCP tool. A new gather-phase tool returns the project, board lanes, active sprint, members, member count, and current user in one call. The companion prepare-issue-context tool is now slimmer — issue plus epic only — so flows that need both gather them in parallel instead of fanning out across separate kendo:// resources.

Improved ​

  • Pagination bar fits inside narrow columns. On the Reports overview and other narrow lists, the page navigator no longer overflows past the column edge. At narrow widths the first/last shortcuts collapse so the bar stays on a single row; at very narrow viewports the row wraps as a final fallback.

Fixed ​

  • Leaving an unsaved issue edit prompts before discarding. Editing any field on an issue and then navigating away — by clicking another link, hitting the back button, or closing the tab — now asks before discarding the changes. Saving clears the dirty state, so successful submits don't get a false-positive prompt.
  • Password confirm modal surfaces wrong-password errors. Entering a wrong password in the password confirmation modal now shows the inline error instead of silently closing. Cancel is also disabled while a submit is in flight, matching Confirm.

Per-issue watching and redesigned notification settings

New ​

  • Per-issue Watch toggle. Every issue page shows a bell next to the title — filled when you're watching, outline when you're not. Watching subscribes you to comments and status changes on that issue, even when you're not the creator or assignee.
  • Auto-watch rules. Three toggles under Settings → Notifications: auto-watch issues you create, are assigned to, or comment on. All three are on by default — turn off any you don't want.

Improved ​

  • Notification settings redesigned. Settings → Notifications now has two sections: Auto-watch rules and Email notifications. The email section bundles five toggles — @mentions, Issue assignment, Project membership changes, Team membership changes, and Activity on issues I follow (comments, status changes) — one row per event. The previous lane-based allowlist is gone; to stop getting activity notifications on a specific issue, click the bell on that issue to unwatch it.
  • Notification rows show read state by font weight. Bold = unread, regular = read, with a red dot still marking unread. Team-membership rows display a tooltip ("You were added to team X") and are non-clickable.
  • "Mark all as read" actually marks them all. The button now collects every unread notification when nothing is individually selected, instead of doing nothing.
  • AI Generate uses your latest report selection. Adding more reports to the AI panel after it opens now feeds those new reports into Generate. The panel previously captured only what was selected when it mounted.
  • AI Generate accepts longer merged-report prompts. Combining several sizeable reports into a single Generate request is less likely to hit a length cap — the per-request limit was widened to fit merged payloads.
  • Logged-in user pinned in assignee and creator filters. Your own name floats to the top of the assignee and creator dropdowns on Board, Backlog, Overview, and My Issues — just under Unassigned in the assignee list, and first in the creator list.

Fixed ​

  • Newly created report auto-selects in the detail pane. Submitting "+ Report" leaves the right pane on the new entry, so verify-and-edit is one continuous flow.
  • Promote acts on the report you can see. Checking report A, dismissing it, then clicking B and pressing Promote no longer sends A's id to the server. Dismissed reports are automatically deselected.
  • Dismissed reports leave the Selected pane immediately. No hard refresh required.
  • AI Generate works on the first click again. A wire-format mismatch caused every Generate click on Reports and Issues to surface a "source description field is required" toast; resolved.
  • Login "Remember me" persists sessions across browser restarts.
  • Billing seat count and the upcoming invoice match. The Pro billing page reads seat count from the same source as Stripe, so the displayed number always matches what's invoiced.
  • Lane reorder chevrons redraw the page on click. The up/down arrows in Project Settings → Lanes again move the lane visibly — the new order was being saved but the view wasn't refreshing.

Self-serve signup, inline images, and admin-invite tenants

New ​

  • Self-serve workspace signup. Anyone can sign up at central.kendo.dev/signup, click a verification email to activate the workspace, and sign in. Pricing CTAs now point straight at signup, brand-new workspaces land on an onboarding hero, and signing in before verifying surfaces a resend button with a cooldown.
  • Inline image paste in descriptions and comments. Paste screenshots straight into issue descriptions and comments — including while editing existing comments. Hovering an inline image reveals a toolbar to maximise to a lightbox, download, copy to clipboard, or open in a new tab.
  • Admin invite when central admin provisions a tenant. The tenant-create form now collects the first admin's email, first name, and last name. When the workspace is provisioned, the admin reliably receives a tailored "Your Kendo workspace is ready" welcome email with a one-click claim link.

Improved ​

  • File thumbnails are easier to click. The whole tile previews on click, with download and delete sitting in the footer next to a tooltip-truncated filename. Tiles and icons are also slightly larger.
  • Sidebar collapses on touch devices. Landscape phones and tablets no longer get a desktop-width sidebar squashed into the viewport — touch is detected by pointer/hover capability, not viewport width. Board cards also truncate cleanly at narrow column widths.
  • Project color dots in the sidebar match the Teams overview. The sidebar now reads from the same color source as the Teams page, so a project's accent looks identical wherever it appears.
  • Modal close button is keyboard- and screen-reader-accessible. Keyboard navigation tools and screen readers can now reach and announce the close action.
  • Loading… in English everywhere. A Dutch "Laden…" fallback that survived the April language cutover now reads "Loading…" across every async-mounted modal.

Fixed ​

  • First-time GitHub App install handshake is reliable. Install state is now stored server-side, so the central callback can reliably find it regardless of which tenant context is active.
  • GitHub App install flow is hardened. Stricter callback-state validation, per-user rate limiting on install endpoints, and tighter origin checks on the install popup's postMessage channel.
  • Issue activity enforces the same per-user access as the issue itself. Reaching an issue's activity timeline now requires the same permission as opening the issue.
  • AI story generation no longer leaks validation errors. Short or vague AI input is handled by the pipeline instead of dumping a raw validation error into the issue form.
  • Long project descriptions save reliably. Saving a project description longer than 255 characters used to fail with a server error; descriptions up to 5,000 characters now save as expected.
  • No duplicate "added to project" notification. Linking a team that already shared members with a project no longer fires a second "added you to project X" notification at those existing members.
  • Reports without an author show the creator's name. Reports created from the in-app form previously rendered "Unknown"; they now fall back to the creator's full name.
  • Deleting an issue unlinks promoted reports. Issues created from a promoted report can now be deleted — the linked report returns to Pending so it can be triaged again. Bulk delete handles this too.
  • Epic badge no longer overflows parent containers. Long epic names truncate cleanly within their row.
  • Comment delete confirmation stays a fixed size. The modal no longer renders the comment body inside the dialog, so the cancel/submit buttons remain reachable for long comments at high zoom.

Team-scoped user visibility and steadier real-time updates

New ​

  • Team-scoped user visibility. Members now only see colleagues who share a project or team with them. Workspace admins, and roles granted the new "Access all users" toggle in the role form, retain full visibility.

Improved ​

  • Profile pictures on the activity timeline. Each row's avatar now shows the actor's uploaded picture, falling back to initials when there isn't one.
  • Backlog, Board, and Overview search matches title and key. Description text no longer counts toward results — the placeholder reads "Search by title or key…" to match.

Fixed ​

  • Live updates from queued events. All real-time updates — board drags, issue edits, comments, branch links, AI progress, and more — now reliably reach other open tabs.
  • Real-time updates on long issues. Issue broadcasts now carry a slimmed-down payload, so an issue with a lengthy description no longer fails to deliver live updates to other open tabs.

Self-serve GitHub App, MCP issue intents, and a raw-markdown editor

New ​

  • Self-serve GitHub App connection. Settings → GitHub App now has an "Install GitHub App" button that opens a popup, walks through the install on github.com, and lands you back in kendo with the installation linked to your workspace. Once installed, the page shows the connected account name and type plus a Disconnect button — no manual configuration step.
  • assign-issues-to-sprint MCP tool. Move up to 100 issues into, between, or out of a sprint in a single call. Replaces the per-issue update-issue loop agents were running for sprint planning.
  • start-work-on-issue MCP tool. One call assigns the issue, moves it into a lane, optionally sets its sprint, and links a branch — the multi-step pickup workflow agents were running by hand collapsed into a single intent.
  • prepare-issue-context MCP tool. One call returns the issue, its epic, the project's active sprint, all lanes, and the calling user — replacing four separate kendo:// resource reads.
  • Raw markdown toggle in the rich text editor. A new </> toolbar button swaps the editor for a plain textarea showing the markdown source. Format buttons grey out while in raw mode.
  • H1 / H2 / H3 buttons in the rich text editor. Three new heading buttons in the toolbar, separated from the inline-format buttons by a thin divider. Heading sizes inside the editor now match the rendered description.
  • Backlog tab before Board. Project navigation lists Backlog → Board, matching the issue lifecycle order. The default landing for /projects/:id is unchanged.

Improved ​

  • My Issues badge and page update live. The sidebar count and the issue list both reflect newly-assigned, dragged-to-Done, and self-assigned issues without a refresh, including changes made via MCP.
  • Sprint dropdown hides completed sprints. When picking a sprint on an issue, the dropdown only offers active and planned sprints. If the issue is already linked to a completed sprint, that sprint stays visible so saving doesn't silently unlink it.
  • Issue Show page card matches the detail-page pattern. Card padding and corner rounding line up with the rest of the app, and badges no longer stretch to full width inside column layouts. The doubled border under the user profile settings list is gone too.
  • Delete confirms name the action. Confirmation dialogs show "Delete sprint" or "Delete epic" instead of a generic "Confirm".
  • Issue tab labels match section header sizing. Small typographic polish on the issue detail page.

Fixed ​

  • Clearing a title or description no longer drops the save. Form fields cleared by the user now send null instead of an empty string, so the server correctly distinguishes "no value" from "value too short" and the change goes through. Regression from the validator pass two weeks ago.
  • Assignee avatars on the Activity tab. Assignment changes in the activity timeline now render the user's avatar instead of a broken-image placeholder.

Central admin dashboard, issue activity, and a live inbox

New ​

  • Central admin dashboard. A new Overview page on the central admin app with stat cards for tenants, domains, users, and waitlist, a GitHub card showing how many tenants are connected, and drill-down tables for the 5 most recent tenants, tenants without GitHub, and unclaimed installations. Stat cards click through to their detail pages.
  • Issue Activity tab. A read-only timeline on every issue detail page, showing who changed what and when — status pills, priority and type icons, assignee avatars, sprint and epic pills, and expandable word-level diffs for title and description. Newest-first, grouped by day.
  • Live inbox. The notification badge in the navbar and the inbox list now update live across every open tab. No more reloading to see a new notification, and "mark all as read" reflects everywhere instantly.
  • Live sprints, epics, and lanes. Boards, backlogs, and epic overviews now stay in sync across tabs in real time when someone else creates, renames, or deletes a sprint, epic, or lane — no refresh needed.
  • Live branch links. The git branch sidebar on an issue updates live when teammates link, edit, or unlink a branch.
  • Bulk-assign issues to an epic. From the backlog, select multiple issues, switch the action bar to "Epic" mode, and pick an epic (or "No epic" to clear). All selected issues update in one go.
  • Auto-fill start time on the time entry form. Tick the new "Auto-fill start time" box and the start time is computed from the duration as you type. Existing entries are left alone until you edit the duration. Your preference is remembered across sessions.
  • Edit which projects a tenant AI key applies to. Tenant AI key cards now show "Allowed on N projects" or "Allowed on all projects" with an Edit button, so you can change the scope of an existing key without recreating it.
  • Pagination on the Reports overview. Page-size selector (10, 25, 50, 100) below the reports list. The page resets when you change the status filter or search.

Improved ​

  • You float to the top of assignee and creator filters. On the issue list pages, the active user is now pinned at the top of the multi-select dropdowns — no scrolling to filter by yourself.
  • Dropdowns cap at 500px on wide screens. Select dropdowns no longer stretch across the page on big monitors. Inside modals and on mobile they still fill the available width.
  • Consistent text-area sizing. Multi-line text fields are now the same height and padding everywhere; the same field used to look noticeably taller inside modals than on plain pages.
  • Restyled rich text editor toolbar. A compact pill of icons inside the editor instead of a full-width header strip, with subtler buttons and a red focus glow that matches the rest of the form.

Fixed ​

  • Selected values in dropdowns no longer look empty. Picked Epic, Sprint, and Assignee values now render in solid text instead of the muted placeholder color, so a filled field doesn't look unset.
  • Multi-line text fields read more easily. Bumped line spacing so paragraphs in textareas no longer feel cramped, including the Log Time modal where text was rendering noticeably small.
  • Removed the redundant "issue updated" toast. The "Alert: updated by " pop-up was duplicating live updates that the board, backlog, and issue overview already show. It's gone.
  • Board no longer goes blank if a saved filter is in a bad state. Old or hand-edited filter values in browser storage used to crash the page; they now fall back to defaults.
  • Activity tab badge is correct on first paint. The activity count on the tab used to read 0 until you opened it. It now reflects reality immediately.
  • Activity tab error state. When fetching activity fails, the tab now shows a dedicated error message instead of looking like an empty timeline.
  • AI generation no longer fails the whole request when realtime is down. AI progress toasts may lag, but the underlying request completes instead of erroring out.

VS Code extension, Kendo Today MCP widget, and live comments

New ​

  • VS Code extension. A VSC-Kendo sidebar showing the active sprint's issues, browseable by lane via tabs and split within each lane into Assigned to Me, Unassigned, and Assigned to Others. Per-issue actions let you move issues between lanes, create or open a GitHub branch for an issue, and assign or unassign yourself. Sign in with a personal access token stored in VS Code's secret storage.
  • Kendo Today MCP widget. A sandboxed iframe mini-app that renders inline in Claude Desktop. Initial data arrives via the kendo-today-tool result on spawn; users can log time via per-issue quick-log chips and open issue deep-links in the default browser.
  • Live comment updates. Comment create, update, and delete mutations broadcast on the comments channel, so other open tabs see them live without a refresh — the same pattern already powering live issue events.

Improved ​

  • Tighter Stripe outbound timeouts. Billing API calls use explicit 10s total / 5s connect timeouts instead of the SDK's 80s / 30s defaults, so misbehaving upstreams fail fast instead of hanging interactive flows.

My Issues, live boards, timetracking measurements, and MCP polish

New ​

  • My Issues page. Every open issue assigned to you, across every project — with search, six multi-select filters (project, lane, epic, creator, priority, type), and sortable columns.
  • Timetracking measurement switcher. Choose Hours, 7h, 7.5h, or 8h workdays and every duration on the page (summary, totals, per-entry, modal inputs) re-renders in that unit. The choice is saved in your browser and applies across the summary card, time-entry table, and entry form.
  • Live create and delete. Cards appear and disappear across every open tab as they happen.
  • Public changelog at kendo.dev/changelog. A single-page feed of dated entries, newest first.
  • "What's new" sidebar link. New entry in the tenant sidebar opens the changelog in a new tab, with a "new" pill (or a red dot when collapsed) for 4 days after the latest entry ships.
  • Board moves now appear in the audit log. Reorders are recorded alongside other issue changes.
  • Search truncation banner. Board, Backlog, Overview, and My Issues show "Showing first 500 matches. Refine your search to see more." when the server-side cap is hit.
  • fetch_attachment returns image attachments. Image content now comes back inline in the MCP response — the image path was previously broken.

Improved ​

  • Batched board reorders. Multi-card drags fire one UPDATE instead of one per card.
  • Live updates apply instantly. Issue changes from other users now show up in the board, backlog, and overview without a follow-up round-trip — the listening client used to refetch each updated issue.
  • MCP tools no longer show a phantom error on claude.ai web. Successful tool calls were displaying a generic "Error occurred during tool execution" because the response shape didn't match what the spec requires; 28 tools were migrated and now render correctly.
  • MCP search tools surface truncation. search_issues and get_my_issues now return truncated and limit in their response so MCP callers know when the 500-result cap was reached.
  • search_issues is faster and reliable. The tool was throwing on every call on staging and silently making three extra database lookups per result on production; both paths are fixed.
  • Time entries default to newest-first by start date. The All Entries table now sorts by when work happened, not when the entry was recorded. Entries without a start time fall back to creation date.
  • Inline measurement pills on the time summary. The measurement selector on the All Entries page moved from a dropdown with a help icon to a segmented pill control tucked inside the Total card.
  • Admin UI is permission-gated. Teams overview, User Management, and the Roles link are hidden from regular members — they only see admin surfaces their role permissions explicitly grant.
  • Single git-checkout box on issue pages. The "git checkout -b" suggestion box is now hidden whenever a branch is already linked or another branch form is open, so it no longer stacks visually on top of the per-branch checkout boxes.

Fixed ​

  • Hardened Stripe webhook verification. Misconfigured deployments now fail at boot instead of accepting traffic.
  • fetch_attachment error handling. Unexpected errors now return a clean message instead of an internal exception.
  • send_feedback error responses. Returns a clean message when the feedback service is unavailable.
  • OAuth consent screen. MCP connections via Claude Code now go through the standard authorization consent flow on first connection. (Claude Desktop is not yet supported.)
  • VITE_REVERB_HOST example. Corrected the value in .env.example for local dev.

Bigger search results and a status filter for reports

New ​

  • Status filter on list-reports. The MCP tool accepts an optional status integer — 0 (Pending), 1 (Promoted), or 2 (Dismissed) — and the kendo report list CLI accepts --status pending|promoted|dismissed.

Improved ​

  • No more dropped cards on large boards. Board, Backlog, and Issue Overview were silently using the /search endpoint's 25-item default because no limit was passed, dropping cards on bigger projects. The pages now pass limit=500 explicitly, and the endpoint's hard cap was raised from 100 to 500 to match. The 25-item default is kept for CLI and MCP callers.

MCP attachments, deep-linked reports, and a backend proxy for images

New ​

  • fetch_attachment MCP tool. Agents can read image and text attachment content inline via MCP — images up to 5 MB, text up to 500 KB. Binary formats like PDF and video fall back to the existing download URL.
  • send_feedback MCP tool and kendo feedback send CLI. Submit feedback (title + description) straight from an AI assistant or the terminal.
  • Synthesised title in feedback submissions. Feedback sent from the in-app widget is automatically attributed to the authenticated user — no title field to fill in.
  • Deep-linkable reports. Every report now has a hover-revealed copy-link button for sharing, plus a new GetReport MCP tool and kendo://reports/{id} resource so agents can fetch a specific report directly.
  • Backend proxy for images and attachments. Profile pictures and attachments now serve through stable backend routes instead of expiring signed S3 URLs, fixing intermittent broken-image errors.
  • create_task agent intent handled. The frontend now correctly handles the create_task classification from the AI assistant — previously it fell through to a generic handler.

Improved ​

  • Scoped /search on Board, Backlog, and Issue Overview. Listings now fetch a scoped page instead of a full project dump. New filters (sprint_id, include_backlog, sprint_status, since) let each page ask for exactly the slice it renders.
  • Slim update-board response. Board moves return only the changed positions; the frontend merges them in place, skipping a post-drag refetch.
  • Board and Backlog query params. Board was sending sprintStatus[]=ACTIVE and returning every recently-updated issue in the project because the tenant http middleware only snake-cases request bodies, not query params. Board now filters by sprint_id; Backlog switched to include_backlog=1 + snake_case keys.

Fixed ​

  • Password reset clears pending invites. Using the forgot-password flow to reset a password now also wipes any pending invite token, so the "resend invite" button no longer stays visible after the invite is consumed.
  • Notifications are cleaned up on project or team delete. Deleting a project or team now removes associated notifications, keeping the inbox stable.
  • Password-reset link error handling. Expired or invalid password-reset links now return a proper error response instead of a server error.

Stripe billing, tighter AI errors, and an AI-bot cleanup

New ​

  • Stripe billing, end to end. Subscriptions, signature-verified Stripe webhooks, tenant billing pages (status / checkout / portal, gated behind manage-billing for admins), and a central-side admin surface (grant admin-granted Pro, revoke it, or cancel a Stripe subscription). Currency: EUR.
  • Free-tier limits enforced. Inviting a fourth seat, creating a second project, or restoring a soft-deleted user past the 3-seat cap now returns 402 Payment Required. After a downgrade, issue creation in "excess" projects (everything past the single free project, oldest kept) is blocked with 403 Forbidden.
  • User-facing AI error messages. AI provider errors now return the right HTTP status instead of a generic 500: rate-limited → 429, provider overloaded → 503, request too large → 422, generic provider error → 502.

Improved ​

  • Unified select component across forms. Delete-role, pagination, epic, and AI-key forms now use the design-system single-select, replacing the old native-<select> wrapper.
  • My Issues badge refreshes on self-assign. Assigning yourself from an issue detail page immediately updates the sidebar badge — previously it waited until you navigated to My Issues.
  • Profile issue counter matches My Issues. The profile sidebar now excludes Done-lane issues, so the count stays consistent with the My Issues overview.
  • AI agent/bot assignment removed. The entire surface is gone — no more bot-assignable user, AI-run tables, or is_bot flag.
  • Audit log integrity. Audit-log writes enforce hash-chain consistency under concurrent load.

Fixed ​

  • OAuth invite with an already-linked provider. Completing an invite with a provider already linked to another account now returns a provider_already_linked error cleanly, for both invite and link flows.