# Ov Kanban

Work through tasks on a kanban board stored in OpenViking...

- Repository: https://github.com/volcengine/OpenViking (41301 stars)
- Category: AI and agents
- License: AGPL-3.0
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add volcengine/OpenViking --skill ov-kanban -g -a claude-code -y`
Codex: `npx skills add volcengine/OpenViking --skill ov-kanban -g -a codex -y`
Cursor: `npx skills add volcengine/OpenViking --skill ov-kanban -g -a cursor -y`
Gemini CLI: `npx skills add volcengine/OpenViking --skill ov-kanban -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add volcengine/OpenViking`

## Description

Work through tasks on a kanban board stored in OpenViking (viking://agent/kanban/<board>/, one markdown file per task). Use when the user says "ov kanban", "kanban", "看板", asks to put a task on the board, hand off the current work, continue a task another agent started, or run an unattended task loop. A board holds many tasks; each task file is the handoff itself - a frontmatter header (id, status, owner, board) plus Goal, Context, Decisions, Progress, Next, Questions, Log - and its process detail is folded into an archive file instead of being summarized away, so any agent with the `ov` CLI can resume it and drill down when needed.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# OV Kanban

A board is a directory in OpenViking that holds many tasks. A task is one
markdown file. The file is both the ticket and the handoff: whoever reads it
can continue the work without the previous conversation. OpenViking stores
it, indexes it (`find`/`grep`), and shares it across every agent and user of
the account. There is no other state.

```text
<root>/<board>/<id>.md            the task: header + current state, rewritten every turn
<root>/<board>/archive/<id>.md    its folded detail: append-only, never rewritten
```

- `<root>` is `viking://agent/kanban`. Probe it once per session with
  `ov stat viking://agent/kanban` (or `ov mkdir` when it does not exist yet);
  if the server answers `PERMISSION_DENIED` (older servers block writes under
  `viking://agent` except skills), use `viking://resources/kanban` instead.
  `$OV_KANBAN_ROOT`, when set, overrides the probe. The protocol is identical,
  only the root changes.
- `<board>` is the isolation unit (a project, repo, or team). It is a plain
  directory: `ov acl` on it decides who may read or take tasks. Create one
  with `ov mkdir <root>/<board>` and `ov mkdir <root>/<board>/archive`
  (`write --mode create` needs the parent directory to exist).
- `<id>` is `YYYY-MM-DD-short-slug`, unique inside the board.

Use the `ov` CLI (works from any agent that has a shell). If the OpenViking
MCP tools `list`, `read`, `write`, `grep` are registered, they are
equivalent; never fall back to raw HTTP. Prefer the CLI for writes: a
`write` that runs into the MCP client timeout has usually still landed, so
`read` the file back before writing again.

## Read in layers

Detail is folded, not compressed: a lower layer holds the full text the
upper layer points to. Read top-down and stop at the first layer that
answers the question.

The rest: https://github.com/volcengine/OpenViking/blob/HEAD/agent-plugins/skills/ov-kanban/SKILL.md
