Files
kandev/docs/public/feature-status.md
T
João Salavisa 370cee8f7f docs: add plugin system guide, authoring tutorial, and manifest reference (#1774)
* docs: add plugin system guide, authoring tutorial, and manifest reference

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: update plugin docs for host data API, config, and nav additions

Cherry-picked plugin docs (d853b66b8) were written before four follow-up
PRs merged: typed capability-gated Host data API (#1753, ADR 0043),
richer frontend SDK (#1759), per-plugin settings pages (#1761), and
sidebar Integrations nav items (#1767). Re-verify against the merged
code and bring the docs current:

- plugins.md: per-plugin settings/config page, expanded Host RPC list,
  updated capability vocabulary (api_read/api_write), sidebar nav note.
- plugins-authoring.md: GetConfig/GetSecret/SetSecret/DeleteSecret and
  the six Host data readers, registerRoute options/PluginPageChrome,
  NavItem icon/integrations section, host.api.baseUrl/navigate, and the
  full host.ui component list.
- plugins-manifest.md: corrected api_read/api_write semantics (now
  enforced, not reserved), config_schema validation/secret-masking
  behavior, and new Host data API / config-schema sections.
- configuration.md, feature-status.md: document the KANDEV_FEATURES_PLUGINS
  flag alongside the existing Office flag.
- coverage.json: new plugin-system coverage area so the public-docs
  validator accounts for the three new pages.

* docs: fix plugin config route, signing claim, and data-dir layout

Address automated review findings on PR #1774:
- plugins-manifest.md: PATCH route for config is /api/plugins/{id}, not
  /api/plugins/{id}/config (only GET uses the /config suffix).
- plugins-authoring.md: host.store is not read-only — setState is
  genuinely exposed and writable; correct the misleading inline comment.
- plugins.md: signature verification is not currently wired up in
  production (pkgtar.VerifySignature is nil, never assigned outside
  tests), so every package installs and is reported as unsigned today —
  correct the 'kandev verifies it' claim in both the install pipeline
  step and the signed/unsigned section.
- plugins.md: KANDEV_PLUGIN_DATA_DIR is <id>/data, a sibling of the
  <version>/ directory (shared across versions), not nested inside it —
  fix the on-disk layout diagram.

* docs: mark plugin docs as experimental

The plugin system is feature-flagged and off by default in production
(KANDEV_FEATURES_PLUGINS). Mark all three plugin pages with
status: experimental frontmatter, matching the k8s.md convention for a
page that is wholly about an experimental feature.

* docs: add plugin UI screenshots and a capture spec

Embed four operator-facing screenshots in the plugin docs (the Plugins
list, the install dialog, a per-plugin settings page with its manifest
card, and a native plugin route). Captured from an isolated e2e backend
with the kandev-plugin-hello reference example installed.

Add e2e/tests/plugins/plugins-docs-screenshots.spec.ts to regenerate them:
it reuses the plugins e2e harness (isolated backend, plugins flag on) and
is skipped unless CAPTURE_DOCS_MEDIA=1, so it adds no CI cost. Defaults to
the repo's own e2e fixture package; override DOCS_PLUGIN_* to point at the
polished hello example (as the committed captures were taken).

* docs: fix plugin screenshot paths for the landing publisher

The Cloudflare preview build failed because markdown images under
docs/public/media/ compile to build-time module imports that the docs
site can't resolve — media/ is reserved for <DocsVideo> assets. The
landing publisher only rewrites and copies images referenced under
screenshots/ (README convention). Move the four plugin captures to
docs/screenshots/plugin-*.png and reference them as ../screenshots/*.png,
and update the capture spec to write there.

* docs: convert plugin how-it-works diagram to mermaid

The hand-drawn ASCII pipeline rendered with broken alignment and stray
syntax highlighting on the docs site. Replace it with a mermaid flowchart
(same convention as architecture.md), which renders as a clean SVG.

* docs: give plugins its own nav section

* docs: clarify plugin tools are declared/listed, not agent-invocable yet

Plugin tools[] are validated and exposed via GET /api/plugins/tools, and
the gRPC InvokeTool transport is implemented and tested, but nothing in
production calls it — no agent, MCP bridge, or HTTP route. The docs
overstated this as agent-invocable. Correct the Plugin interface comment,
the manifest tools[] rows, the how-it-works diagram, and the example
plugin description, and add a note in both the authoring and manifest
pages that InvokeTool stays unused until the agent-tool wiring ships.

* docs: clarify webhook relay in how-it-works diagram

The diagram collapsed two hops into one node, reading as if the plugin
receives the external HTTP POST directly. Split it: an external caller
POSTs to kandev's webhook route, which relays the request to the plugin
over the gRPC HandleWebhook method (the plugin serves no HTTP itself).
Also label the DeliverEvent/InvokeTool/HandleWebhook edges by their real
proto method names.

* docs: note the plugin backend is any go-plugin gRPC executable, Go SDK only

* docs: remove plugin tools from the docs

Plugin tools[] overlap with MCP (kandev's established agent-tool surface)
and the invocation path was never wired to agents. Rather than document a
half-feature that implies plugins are an alternate MCP, drop it entirely:
the Plugin interface (InvokeTool), the manifest tools[] block and field
rows, the how-it-works diagram branch, and the example-plugin mention.
Removal from the backend code is tracked separately.

* docs: replace how-it-works mermaid with a designed diagram image

The mermaid flowchart rendered poorly. Replace it with a hand-authored
HTML/CSS architecture figure (install pipeline + the runtime gRPC
interactions), rendered to docs/screenshots/plugin-architecture.png. The
diagram source lives in the docs-screenshot capture spec (skipped unless
CAPTURE_DOCS_MEDIA=1) so it regenerates deterministically at 2x.

* docs: make the how-it-works figure a real box-and-arrow diagram

The previous figure read as a list of rows. Replace it with a hand-drawn
SVG architecture diagram: the install pipeline feeds a spawned plugin
subprocess, then kandev and the plugin communicate over one gRPC
connection (DeliverEvent, HandleWebhook, and the plugin's Host API
callbacks), with the external webhook caller and the browser SPA as
edge nodes. Source lives in the capture spec's ARCH_HTML.

* docs: make the how-it-works diagram a clean monochrome flowchart

Drop the multi-color component diagram for a calm top-down flowchart
(mermaid's shape, drawn properly): install → verify → extract → spawn,
branching into event delivery and webhook relay, converging on the Host
API callbacks, with an optional native-UI step. Grayscale, no accent
colors. Source stays in the capture spec's ARCH_HTML.

* docs: dark plugin diagram + space out the two page images

- Make the how-it-works flowchart a dark rounded card (matches the docs
  page in dark mode; reads as an embedded card in light). Rendered with
  omitBackground so the corners are transparent.
- Move the Settings > Plugins list screenshot out of the intro (where it
  sat right before the diagram) down into the "Installing a plugin"
  section, so text separates the two images.

* docs: update install-dialog screenshot for aligned footer actions

Recaptured after fix(plugins): align install-dialog footer actions
(#1780) — Cancel and Install now sit together in one right-aligned
footer row instead of the Install button being stranded under the
dropzone.

* docs: account for /settings/system/storage in coverage.json

The storage settings route (added by #1699) was never recorded in the
public-docs coverage inventory — the docs validator is path-filtered to
docs/public/** so it didn't run for that PR. This docs PR is the first to
trip it. Add the route to system-health-and-maintenance.

* docs: review fixes — remove stale tools refs, tighten accuracy

Review pass against the now-merged main (tools removed in #1776):
- extending-kandev.md: drop "serves agent-invocable tools" from the plugin
  overview (the feature no longer exists).
- plugins-manifest.md: the legacy endpoints block is health/events/webhooks
  only (no tools path); and the `signed` field is always false today since
  signature verification isn't wired.
- plugins.md: install validation covers the categories/UI-surface enums (not
  a "capability vocabulary"); AutoMTLS secures the channel on all platforms,
  not just Windows; and status vs signing are separate badges.

* docs: explain what Host state is (GetState/SetState)

The authoring guide listed the state RPCs but never said what 'state'
means. Add a plain-language explanation: a per-plugin, kandev-persisted
key/value store keyed by (scope, scopeID, key) holding JSON objects,
namespaced per plugin, scoped to instance/workspace/task/agent, and how it
differs from the writable data dir. Make the example a real increment.

* docs: note NavItem section:'settings' is not rendered

A NavItem with section:'settings' is accepted by the type but no sidebar
section renders it (plugin-nav-items renders main/default, the Integrations
sections render 'integrations'); annotate that settings pages use
registerSettingsRoute. Addresses repeated review feedback.

---------

Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 00:56:32 +01:00

19 KiB

title, description
title description
Feature Status Check which Kandev capabilities are supported, dependency-bound, limited, experimental, or still in progress.

Feature Status

This inventory describes the current main branch. A capability counts as shipped only when current backend behavior, a user-facing path, and tests agree. A database field, hidden route, ADR, specification, or mock-only E2E path is not enough.

Released builds can lag this page. Check Settings > System > About or kandev --version and compare the matching GitHub tag when behavior differs.

Status meanings

Status Meaning
Supported Available through the normal product path and backed by maintained implementation and tests.
Dependency-bound Shipped, but useful behavior depends on a provider, agent CLI, executor, platform, credential, or install channel.
Limited Implemented and reachable, but the current UI or operating contract has a material restriction called out here.
Experimental Intentionally unstable or based on a fragile/nonstandard integration contract.
In progress Source, schema, tests, a flag, or a stub exists, but there is no supported production workflow yet.
Internal Development, test, diagnostic, or implementation support rather than an end-user feature.

Tasks, workflows, and coordination

Capability Status Current boundary
Workspaces, local repositories, Kanban board, task list, workflow steps, and task archive Supported A fresh database contains Default Workspace and a Development workflow. Repository settings add existing local Git paths; remote GitHub sources enter through New Task. Archive state is immediate, while runtime/resource cleanup is asynchronous and best-effort.
Workflow templates, custom steps, prompts, per-step agent profiles, WIP/pull controls, and auto-archive Supported Configure under Settings > Workspaces > workspace > Workflows. Imported/synced configuration can still require local profile mapping.
Regular workflow events and actions Supported Current UI covers step entry, turn start/completion, step exit, and direct-child completion, including auto-start, plan mode, reset context, moves, explicit completion gating, and human wait steps. The generic Office triggers and quorum/participant actions are not part of this contract.
Human-gated operation Supported A step can do nothing on turn completion and wait for a user; an optional step_complete_kandev signal can gate auto-advance. Kandev does not bypass repository checks, provider permissions, or branch protection.
One structured plan per regular task Dependency-bound Plan mode, the Plan panel, revisions, compare/revert, and Implement are shipped. Creating/updating the plan from an agent requires task MCP support; passthrough-only sessions do not have the same contract.
Multiple named task documents In progress Storage, revisions, Office UI, and Office MCP tools exist. Regular Kanban has no document panel and its task MCP does not register the document tools.
Task labels and label filters In progress The shared task row stores a JSON label field, but label catalogs, pickers, filters, and maintained E2E coverage are on the feature-flagged Office surface, not regular Kanban.
Named parallel sessions Supported Users can add, name, make primary, stop, resume, delete, and hand off sessions. Blank, copied, or summarized context is available when starting another agent; resume still depends on retained agent/executor state.
Agent-spawned sessions and targeted task messages Dependency-bound spawn_session_kandev and message_task_kandev are task-MCP tools. Queue limits, session IDs, parent/child interrupt rules, and agent MCP capability apply.
One-level subtasks Supported Regular Kanban supports a parent plus direct children through UI and MCP. A child may inherit the parent's materialized workspace or request a new one; inherited/shared files can conflict. Arbitrary-depth Office trees remain in progress.
Blocker/dependency editing In progress Same-workspace storage and cycle checks exist, and related-task MCP can report stored relations. The picker and blocker properties are currently Office UI; regular Kanban has no complete create/edit/filter path.
Multi-repository tasks Limited New Task supports multiple local or remote GitHub rows, and Changes/Review/PR surfaces group by repository. Two or more repositories currently require the Worktree executor.
Additional task branches Limited add_branch_to_task_kandev can attach another branch from the same or another repository only with a Worktree task. There is no equivalent regular after-start UI. Changing Kandev's comparison base does not retarget commits or an existing pull request.
Workflow YAML import/export Supported Available for regular Kanban workflows. Office workflows are deliberately excluded.
GitHub-backed workflow sync Dependency-bound Requires GitHub access. Synced workflows are read-only in Kandev and guarded updates can need local agent/executor mapping.
Coordinator-led teams, participants/quorum, arbitrary task trees, routines, budgets, and heartbeats In progress These belong to Office. Office is disabled in the production profile and remains an evolving, feature-flagged autonomy layer.

Sessions, review, and developer tools

Capability Status Current boundary
Structured chat, tool activity, files, integrated PTYs, and session lifecycle Dependency-bound Panel availability follows the task environment, agent protocol, executor, and viewport. A terminal needs a materialized task environment.
Changes and cumulative Review Supported Supports staged, unstaged, commit, and multi-repository views; persisted reviewed hashes, stale detection, and anchored comments are implemented. Discard is destructive and permanent.
Agent-authored code walkthrough Dependency-bound One saved walkthrough per task is supported through task MCP. A new walkthrough replaces the old one; anchors can drift, and the backend does not prove that referenced file content is still current.
GitHub pull-request review, checks, merge, and CI-fix automation Dependency-bound Requires GitHub credentials and repository permissions. CI automation is opt-in. Azure has a create-PR path only; other Git hosts do not get the full task PR panel.
Share a session snapshot as a secret GitHub Gist Dependency-bound Requires GitHub auth and a structured session outside CREATED/STARTING. The viewing URL is rendered through gist.githack.com; unlisted URLs and heuristic redaction are not access control or exhaustive secret detection. Payloads are capped and shares can be revoked.
Quick Chat Dependency-bound Requires an agent profile. Repository-backed chats use isolated Kandev worktrees; closing deletes the ephemeral task permanently. Chats older than seven days are swept at startup and every 24 hours unless their session is RUNNING or IDLE.
Utility agents and custom one-shot helpers Dependency-bound Require an ACP inference-capable agent and usable model. Passthrough-only agents do not satisfy this path.
Configuration Chat Limited Each workspace currently presents one repository-less configuration conversation. Settings shows it in a tabless floating panel and can move the same session into Quick Chat. Confirmed tab closure deletes its backing task; config-mode tasks are excluded from Quick Chat expiry.
Voice input Dependency-bound Browser Web Speech, a browser-downloaded Whisper model, and server Whisper paths exist. Selection does not retry another engine after a recognition error. Server Whisper requires KANDEV_VOICE_OPENAI_API_KEY (empty by default); without it the transcription route returns 503.
Embedded VS Code Limited code-server runs inside the task runtime with --auth none on 0.0.0.0:<random-port>. It relies on task-runtime and network isolation rather than its own login.
Built-in editors and host editor launch Dependency-bound Built-in editing is shipped. External editors depend on host discovery/custom commands. A multi-worktree session presents a repository/worktree picker before host launch; clients that omit the worktree ID retain a first-worktree fallback. A remote executor path may not work without remote-editor configuration.
Language servers Limited Current built-in mapping covers TypeScript/JavaScript, Go, Rust, and Python. Auto-start/installation default off, and subprocesses run on the backend host rather than inside Docker, SSH, or Sprites runtimes.
Integrated shell terminals Dependency-bound Create, reopen, rename, and terminate are shipped. Shell settings affect new terminals, and executor/task-environment availability controls where the PTY runs.
Prompts, keyboard shortcuts, notifications, appearance, and task actions Supported These are normal settings surfaces. Browser notification permission, custom command validity, and local shell/editor availability still apply to their effects.

Agents, executors, integrations, and automation

Capability Status Current boundary
Built-in ACP agent registry and profiles Dependency-bound The registry supports many CLIs, but installation, authentication, models, modes, configuration options, resume, and usage reporting come from the installed CLI and account.
Bring-your-own TUI/passthrough agent Limited Native PTY interaction is supported. Passthrough does not provide full structured chat, task MCP, resumable ACP state, usage, plans, utility-agent execution, or workspace automation compatibility.
Profile permissions, CLI flags, literal environment values, and encrypted secret references Supported Secret references resolve at launch; a missing/deleted reference omits that variable. Auto-approve and permission-skipping settings enlarge the process trust boundary.
Local and Worktree executors Supported Both are seeded. They execute on the Kandev host; a worktree isolates Git checkouts, not processes, network, credentials, or the rest of the filesystem.
Local Docker and Sprites executors Dependency-bound Require the relevant daemon or provider, compatible host/image, token, platform, and credential-copy configuration.
SSH executor Limited Remote sessions support trusted Linux or macOS hosts on amd64 or arm64, with public-key authentication, SFTP, and TCP forwarding. Kandev does not currently clone/materialize attached repositories there, ignores profile prepare/cleanup scripts, and retains the remote task directory for manual cleanup.
Remote Docker executor In progress The type and legacy/direct settings fields are registered, but runtime create/stop return not yet implemented, and the current Settings > Executors hub does not offer it.
GitHub integration Dependency-bound Workspace repository scope, issue/PR browsing, actions, watches, presets, reviews, checks, and Gists depend on GitHub auth, scopes, rate limits, and repository permissions. Supported Local Docker, Sprites, and SSH launch paths may receive the globally stored token as GITHUB_TOKEN/GH_TOKEN; workspace repository scope does not constrain its privileges.
GitLab integration Limited Global connection plus issue/MR search, browse, and external links are shipped. The current /gitlab page cannot launch tasks, and task surfaces do not expose discussions, reply/resolve, full review feedback, or pipeline actions; watches/presets also lack an end-user settings path.
Jira integration Limited Search/browse, supported transitions, launch presets, task launch, and watches require provider credentials. Launch copies data rather than creating a durable association; each watch poll reads only the first 50 JQL matches.
Linear integration Limited Search/browse, state changes, task launch, and watches require provider credentials. Launch has no preset/durable association; a watch reads 50 matches in provider order or at most 250 with explicit local sorting.
Sentry integration Limited Multi-instance configuration, issue watches, and current-task issue actions are shipped; there is no top-level browser. Watches read only the newest first page, and the status picker allows multiple selections while the backend accepts at most one.
Slack integration Experimental Uses a nonstandard browser-session token/cookie and polling rather than OAuth or a bot installation. A first scan can process up to 30 existing matches, and reactions/replies are best-effort.
Integration Enabled switches Limited Jira/Linear/Sentry/Slack switches are browser-local presentation state; they do not stop backend pollers. Pause/delete watches or remove the Slack/provider configuration when polling must stop.
Manual, preset/@every schedule, authenticated webhook, and GitHub PR-open automations Limited Task and Run modes are shipped, but Run cannot answer permission prompts. PR triggers need explicit repositories and ignore the saved Opened checkbox. Webhooks silently retain only the first 1 MiB. Play remains clickable while disabled but produces no history.
Fixed cron timezone behavior Limited The UI accepts fixed cron and timezone values, but the current interval scheduler does not honor the configured timezone and some fixed cron expressions may never fire. Prefer tested presets or @every intervals.
GitHub push and CI automation triggers In progress Trigger types and UI labels exist as coming-soon/stub paths; they are not working production triggers. GitHub's separate opt-in PR CI-fix automation is shipped.
Automation Run mode Limited Creates a hidden ephemeral task and starts immediately. It cannot require user input. Automatic worktree/branch reaping applies only when a Worktree runtime ID is present; other executors follow their own lifecycle.

MCP, clients, and operation

Capability Status Current boundary
Task-scoped Kandev MCP Dependency-bound Injected into compatible task sessions with scoped task/session, plan, walkthrough, branch, workflow-step, and coordination tools. Available tools vary by MCP mode and task/session context.
Profile-defined external MCP servers Limited Stdio, HTTP, SSE, and streamable HTTP are implemented, but current launch resolution starts from an allow-all baseline and overlays only explicit executor policy. Blank remote policies therefore allow transports instead of applying the separate deny-all remote default. A stdio process is per-session and cannot be shared like a network server.
External Kandev MCP endpoint Supported Settings > External MCP exposes streamable HTTP at /mcp and SSE at /mcp/sse for configuration and task management. It has no Kandev user authentication; keep it on loopback/VPN or place it behind an authenticated proxy. It intentionally lacks live-session question, plan, walkthrough, spawn, and message tools.
External MCP tool preview Limited The endpoint registration is authoritative. The current settings preview omits several registered tools and should not be used as a complete allow-list.
Office MCP and autonomous coordination In progress Office-only document, team, routine, and coordinator behavior is feature-gated and is not part of the supported external or regular task MCP contract.
CLI/browser runtime, Linux/macOS service, Docker deployment, and remote hosting Dependency-bound Platform, filesystem, browser, systemd/launchd, container, reverse-proxy, and network configuration determine availability. The web app, API, WebSocket, and external MCP add no Kandev user-login boundary; protect the whole remotely reachable origin.
Native desktop app Dependency-bound macOS, Windows, and Linux artifacts and a Tauri shell are implemented. Signing trust and update behavior differ by platform and release artifact.
Kubernetes deployment guide Experimental The guide describes one deployment approach; Kandev does not ship a Kubernetes executor or operator.
Statistics and host resource metrics Supported Workspace stats and on-demand CPU/memory/disk display are shipped. Execution-environment metrics depend on executor/runtime support.
SQLite backups, database maintenance, status, and logs Supported Backups use SQLite VACUUM INTO snapshots under the data root. Retention, free space, file permissions, and off-host copies remain operator responsibilities.
Update checking and applying updates Dependency-bound Checking is shipped. Package-manager installs update through their package manager; backend self-update is service-install-specific; desktop updater support varies by artifact/platform.
Feature Toggle settings Supported The page exposes Office, Plugins, and Debug overrides, environment locks, and restart-required state. Debug is high risk because logs/endpoints can expose prompt, file, and tool data. A toggle being present does not promote its target feature to supported.
Office mode In progress Production defaults KANDEV_FEATURES_OFFICE=false; development and E2E enable it for implementation/testing. Its routes, agents, labels, documents, dependencies, routines, skills, routing, costs, and approvals may change between releases.
Plugin system In progress Production defaults KANDEV_FEATURES_PLUGINS=false; development and E2E enable it for implementation/testing. Loaded plugin code runs with backend privileges; manifest schema, capabilities, and host API may change between releases.
Mock providers and E2E-only routes Internal They are selected only by development/test runtime profiles and must not be exposed as product integrations.

Publication boundary

Published user documentation lives in docs/public/**. Files elsewhere under docs/** can be proposed ADRs, draft specifications, implementation plans, test notes, or historical decisions. Their presence does not change a row above.

Before relying on a dependency-bound, limited, or experimental capability:

  1. record the running Kandev version and platform;
  2. inspect its current settings screen and health state;
  3. test the smallest representative workflow with non-production credentials;
  4. verify failure, retry, permission, review, and cleanup behavior;
  5. keep a human gate until the workflow has proved safe for that repository and executor.

When reporting disagreement, include the Kandev version, platform, executor and profile, provider, reproduction steps, expected behavior, logs, and screenshots without secrets.

Related guides: Tasks and workflows, Coordination, Sessions and review, Developer tools, Agents and profiles, Executors, Integrations, Automation and MCP, and Operations.