Manage project tasks in a local SQLite DB (~/.claude/kanban-dbs/{project}.db).

MITAuto-check passedProductivity & Automation

Install Kanban

skills CLI
$ npx skills add cyanluna-git/cyanluna.skills --skill kanban -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cyanluna-git/cyanluna.skills kanban --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/cyanluna-git/cyanluna.skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/kanban .claude/skills/kanban && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
kanban
GitHub stars
183
Token cost
~3.6k tokens
SKILL.md length
627 words
Files
12 (incl. scripts)
Skills in repo
16
Repo updated
First seen
Licence
MIT

At a glance

Manage project tasks in a local SQLite DB (~/.claude/kanban-dbs/{project}.db).

  • Works in 6 steps: Saved at: timestamp + branch → In Progress: tasks currently in impl /… → Pending Review: tasks in plan_review or… → …
  • Tasks that involve Task management
  • SKILL.md covers Commands and Setup
  • Runs Python scripts from its folder; calls sqlite3, python3 and git

What it does

Kanban is an agent skill from cyanluna-git/cyanluna.skills. Manage project tasks in a local SQLite DB (~/.claude/kanban-dbs/{project}.db). Supports task CRUD (add, edit, move, remove), board viewing, session context persistence, and statistics. For pipeline orchestration use /kanban-run, for requirements refinement use /kanban-refine. Run /kanban-init first to create the local DB.

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including scripts (for example `models.json`, `principles.md` and `schema.md`).

It sits in Productivity & Automation, covering Task management. It works with SQLite. The licence is MIT.

When your agent uses it

  • Tasks that involve Task management

Example prompts

  • “/kanban”

Requirements

  • Python 3

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Saved at: timestamp + branch
  2. In Progress: tasks currently in impl / impl_review / test columns (ID, title, status)
  3. Pending Review: tasks in plan_review or impl_review (needs human decision)
  4. Next Todo: first task in todo column
  5. Git State: branch name, dirty working tree summary ($DIRTY)
  6. Decisions this session: ask user "Any decisions to note before saving?" and append their answer verbatim

What it can do on your machine

Read from SKILL.md and the folder at commit df5be37. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • sqlite3
    • python3
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Kanban loads about 3.6k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 627 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~83
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from cyanluna-git/cyanluna.skills at commit df5be37, republished under its MIT licence (© cyanluna-git). 627 words, ~3,619 tokens.

Download SKILL.mdSave it as .claude/skills/kanban/SKILL.md (or your agent's skills folder). This skill also uses 11 other files; get the full folder from GitHub.
name
kanban
description
Manage project tasks in a local SQLite DB (~/.claude/kanban-dbs/{project}.db). Supports task CRUD (add, edit, move, remove), board viewing, session context persistence, and statistics. For pipeline orchestration use /kanban-run, for requirements refinement use /kanban-refine. Run /kanban-init first to create the local DB.
license
MIT

Shared context: read shared.md for DB path, pipeline levels, status transitions, DB operations, error handling, and agent context flow. Safety principles: read principles.md — mandatory, not optional.

Commands

/kanban or /kanban list — View Board
bash
BOARD_JSON=$(sqlite3 -json "$DB" \
  "SELECT id, title, status, priority, level, current_agent FROM tasks WHERE project='$PROJECT' ORDER BY status, rank, id")

Python으로 column별 그룹화 후 markdown table 출력 (ID, Status, Priority, Title).

/kanban context — Session Handoff

Run first when starting a new session. Fetch board and output pipeline state: Implementing / Plan Review / Impl Review / Testing / Recently Done / Next Todo.

bash
BOARD_JSON=$(sqlite3 -json "$DB" \
  "SELECT id, title, status, priority, level, current_agent FROM tasks WHERE project='$PROJECT' ORDER BY status, rank, id")
/kanban context save — Save Session State

Captures current board state + git branch + decisions made this session to .claude/kanban-context.md. Use before ending a session so the next session can resume without context loss.

bash
BOARD_JSON=$(sqlite3 -json "$DB" \
  "SELECT id, title, status, priority, level FROM tasks WHERE project='$PROJECT' ORDER BY status, rank, id")
BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
DIRTY=$(git diff --stat 2>/dev/null | tail -1 || echo "")

Write .claude/kanban-context.md with:

  1. Saved at: timestamp + branch
  2. In Progress: tasks currently in impl / impl_review / test columns (ID, title, status)
  3. Pending Review: tasks in plan_review or impl_review (needs human decision)
  4. Next Todo: first task in todo column
  5. Git State: branch name, dirty working tree summary ($DIRTY)
  6. Decisions this session: ask user "Any decisions to note before saving?" and append their answer verbatim

Add .claude/kanban-context.md to .gitignore if not already present.

/kanban context restore — Restore Session State

Loads .claude/kanban-context.md if it exists, then fetches live board to show what changed since save. Use at session start instead of /kanban context when you were mid-task last session.

bash
SAVED=$(cat .claude/kanban-context.md 2>/dev/null || echo "")
BOARD_JSON=$(sqlite3 -json "$DB" \
  "SELECT id, title, status, priority, level FROM tasks WHERE project='$PROJECT' ORDER BY status, rank, id")

Output:

  1. Show saved state (what was in progress, decisions noted)
  2. Show current live board state
  3. Highlight any status changes since the save (tasks that moved columns)
  4. Suggest: "Resume task #ID [title]?" for the first in-progress task
/kanban add <title> — Add Task
  1. Ask user for priority, level (L1/L2/L3), description, tags (use AskUserQuestion)
  2. Use Python sqlite3 for safe insert with user text (see shared.md → JSON Safety)
  3. Output confirmation with new task ID
/kanban move <ID> <status> — Move Task

반드시 shared.md → Move Protocol 순서를 따를 것. Step 1(현재 status+level 확인) → Step 2(매트릭스 조회) → Step 3(유효성 검사 후 이동 실행). 유효하지 않은 전환 시 오류 출력, 사용자에게 올바른 다음 상태 안내.

/kanban edit <ID> — Edit Task

Ask user which fields to modify, then update via sqlite3 CLI.

/kanban remove <ID> — Delete Task
bash
sqlite3 "$DB" "DELETE FROM tasks WHERE id=$ID AND project='$PROJECT'"
/kanban stats — Statistics
bash
BOARD_JSON=$(sqlite3 -json "$DB" \
  "SELECT id, title, status, priority, level, agent_log FROM tasks WHERE project='$PROJECT' ORDER BY status, rank, id")
python3 << 'PY'
import json, sys
from collections import defaultdict

rows = json.loads(sys.stdin.read())
board = {}
for row in rows:
    board.setdefault(row['status'], []).append(row)

columns = ['todo', 'plan', 'plan_review', 'impl', 'impl_review', 'test', 'done']

# Column counts
counts = {col: len(board.get(col, [])) for col in columns}
counts['total'] = sum(counts.values())
print("## Column Counts\n")
print("| Status | Count |")
print("|--------|-------|")
for col in columns:
    print(f"| {col} | {counts[col]} |")
print(f"| **total** | **{counts['total']}** |")

# Token stats per agent
agent_stats = defaultdict(lambda: {'entries': 0, 'tokens': 0})
for col in columns:
    for task in board.get(col, []):
        raw = task.get('agent_log')
        if not raw:
            continue
        try:
            logs = json.loads(raw) if isinstance(raw, str) else raw
        except (json.JSONDecodeError, TypeError):
            continue
        for entry in logs:
            agent = entry.get('agent', 'unknown')
            agent_stats[agent]['entries'] += 1
            agent_stats[agent]['tokens'] += entry.get('tokens', 0)

total_tokens = sum(v['tokens'] for v in agent_stats.values())
total_entries = sum(v['entries'] for v in agent_stats.values())

print("\n## Agent Token Usage\n")
if total_tokens == 0:
    print("No token data")
else:
    print("| Agent | Entries | Tokens (est.) |")
    print("|-------|---------|---------------|")
    for agent in sorted(agent_stats):
        s = agent_stats[agent]
        print(f"| {agent} | {s['entries']} | {s['tokens']:,} |")
    print(f"| **Total** | **{total_entries}** | **{total_tokens:,}** |")
PY

Pass BOARD_JSON to stdin: echo "$BOARD_JSON" | python3 - <<'PY' ...

/kanban stats health — Code Health Score

Auto-detects available tools and computes a 0–10 composite code health score. Use when: "health check", "코드 품질 확인", "how healthy is this codebase".

bash
python3 - <<'PY'
import subprocess, json, sys

checks = []

def run(cmd, label, parse=None):
    try:
        r = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
        ok = r.returncode == 0
        detail = parse(r) if parse else ""
        checks.append({"label": label, "ok": ok, "detail": detail})
    except FileNotFoundError:
        pass  # tool not installed — skip silently
    except subprocess.TimeoutExpired:
        checks.append({"label": label, "ok": False, "detail": "timeout"})

# TypeScript
run(["npx", "--no", "tsc", "--noEmit", "--pretty", "false"],
    "TypeScript",
    lambda r: f"{r.stdout.count('error TS')} errors" if r.returncode != 0 else "")

# Python type check (pyright preferred, mypy fallback)
if subprocess.run(["which", "pyright"], capture_output=True).returncode == 0:
    run(["pyright", "--outputjson"], "Pyright",
        lambda r: f"{json.loads(r.stdout).get('summary',{}).get('errorCount',0)} errors" if r.stdout else "")
elif subprocess.run(["which", "mypy"], capture_output=True).returncode == 0:
    run(["mypy", ".", "--ignore-missing-imports"], "mypy",
        lambda r: r.stdout.strip().split('\n')[-1] if r.stdout else "")

# Linter
if subprocess.run(["which", "ruff"], capture_output=True).returncode == 0:
    run(["ruff", "check", "--statistics"], "ruff",
        lambda r: r.stdout.strip().split('\n')[0] if r.stdout else "")
elif subprocess.run(["npx", "--no", "eslint", "--version"], capture_output=True).returncode == 0:
    run(["npx", "--no", "eslint", ".", "--max-warnings=0"], "ESLint",
        lambda r: f"{r.stdout.count('warning') + r.stdout.count('error')} issues" if r.returncode != 0 else "")

# Tests
if subprocess.run(["which", "pytest"], capture_output=True).returncode == 0:
    run(["pytest", "--tb=no", "-q"], "pytest",
        lambda r: r.stdout.strip().split('\n')[-1] if r.stdout else "")
elif subprocess.run(["npx", "--no", "jest", "--version"], capture_output=True).returncode == 0:
    run(["npx", "--no", "jest", "--passWithNoTests", "--silent"], "Jest",
        lambda r: r.stderr.strip().split('\n')[-1] if r.stderr else "")

# Rust
run(["cargo", "check", "--quiet"], "cargo check")

# Shell lint
if subprocess.run(["which", "shellcheck"], capture_output=True).returncode == 0:
    sh_files = subprocess.run(["find", ".", "-name", "*.sh", "-not", "-path", "*/.git/*"],
                               capture_output=True, text=True).stdout.strip().split()
    if sh_files:
        run(["shellcheck"] + sh_files[:20], "shellcheck",
            lambda r: f"{r.stdout.count('SC')} warnings" if r.returncode != 0 else "")

# Score
if not checks:
    print("## Code Health\nNo supported tools found (tsc/pyright/ruff/pytest/jest/cargo/shellcheck).")
    sys.exit(0)

passed = sum(1 for c in checks if c["ok"])
score = round(passed / len(checks) * 10, 1)
grade = "🟢" if score >= 8 else "🟡" if score >= 5 else "🔴"

print(f"## Code Health: {grade} {score}/10  ({passed}/{len(checks)} checks passed)\n")
print("| Check | Status | Detail |")
print("|-------|--------|--------|")
for c in checks:
    icon = "✅" if c["ok"] else "❌"
    print(f"| {c['label']} | {icon} | {c['detail'] or ''} |")
PY
Show full SKILL.md (239 more words)Show less
/kanban retro — Retrospective Analysis

Analyzes completed tasks + git history to produce a sprint retrospective report. Use at end of week/sprint: "kanban retro", "주간 회고", "what did we ship this week".

bash
BOARD_JSON=$(sqlite3 -json "$DB" \
  "SELECT id, title, status, priority, level, agent_log, impl_review_count FROM tasks WHERE project='$PROJECT' ORDER BY status, rank, id")
python3 - <<'PY'
import json, sys, subprocess
from collections import defaultdict

rows = json.loads(sys.stdin.read())
board = {}
for row in rows:
    board.setdefault(row['status'], []).append(row)

columns = ['todo', 'plan', 'plan_review', 'impl', 'impl_review', 'test', 'done']
done_tasks = board.get('done', [])

print("## Retrospective\n")

# --- Completed tasks ---
print(f"### Completed: {len(done_tasks)} tasks\n")
if done_tasks:
    print("| ID | Title | Level | Rework |")
    print("|----|-------|-------|--------|")
    for t in done_tasks[-10:]:
        rework = t.get('impl_review_count', 0) or 0
        flag = f"⚠️ {rework}x" if rework > 1 else "✅"
        print(f"| {t.get('id','')} | {t.get('title','')[:45]} | L{t.get('level',1)} | {flag} |")

# --- Rework rate ---
rework_tasks = [t for t in done_tasks if (t.get('impl_review_count') or 0) > 1]
rate = len(rework_tasks) / len(done_tasks) * 100 if done_tasks else 0
print(f"\n**Rework rate**: {rate:.0f}% ({len(rework_tasks)}/{len(done_tasks)} tasks needed re-impl)")

# --- Pipeline snapshot (non-done) ---
snapshot = {col: len(board.get(col, [])) for col in columns[:-1] if board.get(col)}
if snapshot:
    print("\n### Pipeline Snapshot\n")
    print("| Column | Count |")
    print("|--------|-------|")
    for col, count in snapshot.items():
        print(f"| {col} | {count} |")

# --- Agent token spend (done tasks) ---
agent_stats = defaultdict(lambda: {'entries': 0, 'tokens': 0})
for t in done_tasks:
    raw = t.get('agent_log')
    if not raw:
        continue
    try:
        logs = json.loads(raw) if isinstance(raw, str) else raw
    except (json.JSONDecodeError, TypeError):
        continue
    for entry in logs:
        a = entry.get('agent', 'unknown')
        agent_stats[a]['entries'] += 1
        agent_stats[a]['tokens'] += entry.get('tokens', 0)

total = sum(v['tokens'] for v in agent_stats.values())
if total > 0:
    print(f"\n### Token Spend (completed): {total:,} est.\n")
    print("| Agent | Tokens |")
    print("|-------|--------|")
    for a in sorted(agent_stats, key=lambda x: -agent_stats[x]['tokens']):
        print(f"| {a} | {agent_stats[a]['tokens']:,} |")

# --- Git commits ---
git = subprocess.run(
    ['git', 'log', '--oneline', '--since=7 days ago'],
    capture_output=True, text=True
)
commits = [l for l in git.stdout.strip().split('\n') if l]
if commits:
    print(f"\n### Git Activity: {len(commits)} commits (last 7 days)")
PY

Pass BOARD_JSON to stdin. To scope to a custom period (e.g. 14 days), adjust --since=14 days ago in the git subprocess call.

/kanban project — Current Project Context

Fetch the current project's context from the projects table.

bash
sqlite3 -json "$DB" "SELECT * FROM projects WHERE id='$PROJECT'"

Output formatted project context: Purpose, Stack, Brief, Category, task counts by status, linked projects.

If the project is not registered, suggest running /kanban-init to register it.

/kanban project all — Full Project Map
bash
sqlite3 -json "$DB" "SELECT id, name, purpose, status, category FROM projects ORDER BY category, name"

Output: projects grouped by category with names and purposes.

/kanban project brief — View/Update Project Brief

The brief is a compressed context summary (200–500 chars) that agents consume at low token cost.

View current brief:

bash
sqlite3 "$DB" "SELECT brief FROM projects WHERE id='$PROJECT'"

Set brief directly:

bash
sqlite3 "$DB" "UPDATE projects SET brief='...' WHERE id='$PROJECT'"

AI-assisted update (/kanban project brief update):

  1. Fetch current project info + recent done tasks
  2. Analyze: current state, recent completions, active direction
  3. Draft a concise brief (200–500 chars) covering: what exists now, where we're heading, recent key decisions
  4. Present to user for confirmation → sqlite3 UPDATE to save
/kanban project update <field> <value> — Edit Project Metadata
bash
sqlite3 "$DB" "UPDATE projects SET purpose='...' WHERE id='$PROJECT'"
sqlite3 "$DB" "UPDATE projects SET status='archived' WHERE id='$PROJECT'"

Supported fields: name, purpose, stack, brief, status, category, repo_url.

bash
# Add relationship
sqlite3 "$DB" "INSERT OR IGNORE INTO project_links (source_id, target_id, relation) VALUES ('$PROJECT', 'other-project', 'depends_on')"

# Remove relationship
sqlite3 "$DB" "DELETE FROM project_links WHERE source_id='$PROJECT' AND target_id='other-project' AND relation='depends_on'"

# List links
sqlite3 -json "$DB" "SELECT * FROM project_links WHERE source_id='$PROJECT'"

Relations: extends, serves, depends_on, shares_data.

Setup

Run /kanban-init first to create the local SQLite DB and register the project.

Add to .gitignore:

.claude/kanban.json
.codex/kanban.json
.claude/kanban-context.md

DB is stored at ~/.claude/kanban-dbs/<PROJECT>.db — not in the project directory.

© cyanluna-git, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 11 other files (scripts) in kanban of cyanluna-git/cyanluna.skills.

  • SKILL.md
  • models.json
  • principles.md
  • schema.md
  • scripts/render_agent_prompt.py
  • shared.md
  • templates/code-review-agent.md
  • templates/plan-agent.md
  • templates/review-agent.md
  • templates/tdd-tester.md
  • templates/test-runner.md
  • templates/worker-agent.md

Open the folder on GitHubat commit df5be37

Compare with similar skills

Kanban next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Kanban compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Kanban this skillcyanluna-git/cyanluna.skills183—~3.6kAutomated safety check: PassMIT
No Nonsense Taskssundial-org/awesome-openclaw-skills663—~835Automated safety check: PassNone
TaskflowLeoYeAI/openclaw-master-skills2.2k—~6.5kAutomated safety check: PassMIT
Retinuejklthinking/retinue115—~279Automated safety check: PassMIT
Task Backlog Managermp-web3/claude-starter-kit109—~1.2kAutomated safety check: NotesMIT
Superset Agent Standupsuperset-sh/superset15k—~712Automated safety check: PassCustom licence

Similar skills

  • No Nonsense Tasks

    sundial-org/awesome-openclaw-skills

    No-nonsense task manager using SQLite. An agent skill from sundial-org/awesome-openclaw-skills.

    663 GitHub stars~835 tokensUpdated 7 mo ago
    Productivity & AutomationAuto-check passed
  • Taskflow

    LeoYeAI/openclaw-master-skills

    Structured project/task management for OpenClaw agents — markdown-first authoring, SQLite-backed querying, bidirectional sync, CLI, Apple Notes integration.

    2.2k GitHub stars~6.5k tokensUpdated 2 mo ago
    Productivity & AutomationAuto-check passed
  • Retinue

    jklthinking/retinue

    Coordinate work through a local Retinue workspace using its MCP tools.

    115 GitHub stars~279 tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Task Backlog Manager

    mp-web3/claude-starter-kit

    Keeps a personal task backlog in SQLite behind a /tasks command that adds, reviews, completes and measures tasks against a list of long-term problems.

    109 GitHub stars~1.2k tokensUpdated 6 mo ago
    Productivity & AutomationAuto-check: notes
  • Superset Agent Standup

    superset-sh/superset

    Sweeps every Superset workspace, task and agent terminal to report what finished, what needs review and what is blocked, read-only, and can publish the digest as a page.

    15k GitHub stars~712 tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Guides a workspace agent through executing assigned tasks, replying to a remote human operator, and creating sub-tasks, memory and events inside an AgentRQ workspace.

    1.1k GitHub stars~1.9k tokensUpdated today
    Productivity & AutomationAuto-check passed

More from cyanluna-git/cyanluna.skills

All 16 skills in this repo
  • Kanban Batch Run

    cyanluna-git/cyanluna.skills

    Run multiple kanban tasks end-to-end in Rolling Wave order — refine each task based on the prior card's actual implementation, then implement, then verify, then refine the next.

    183 GitHub stars~2.7k tokensUpdated 3 mo ago
    Auto-check passed
  • Kanban Explore

    cyanluna-git/cyanluna.skills

    Codebase exploration skill for uncertain implementation direction.

    183 GitHub stars~3k tokensUpdated 3 mo ago
    Auto-check passed
  • Kanban Local

    cyanluna-git/cyanluna.skills

    Local markdown-file kanban for toy and personal projects. An agent skill from cyanluna-git/cyanluna.skills.

    183 GitHub stars~1.9k tokensUpdated 3 mo ago
    Auto-check passed
  • Kanban Run

    cyanluna-git/cyanluna.skills

    Run the AI team pipeline for kanban tasks — orchestration loop with 6 agents (Planner, Critic, Builder, Shield, Inspector, Ranger), single-step execution, and code review.

    183 GitHub stars~4.3k tokensUpdated 3 mo ago
    Auto-check passed
  • Kanban Spec

    cyanluna-git/cyanluna.skills

    Turn vague intent into a precise, executable spec through 5 structured phases, then optionally create a kanban task.

    183 GitHub stars~1.4k tokensUpdated 3 mo ago
    Auto-check passed
  • Project Kickstart

    cyanluna-git/cyanluna.skills

    Full project pipeline — SRS → Plan → Tasks + TDD → Rolling Wave Execute.

    183 GitHub stars~1.8k tokensUpdated 3 mo ago
    Auto-check passed

Works with

Questions about Kanban

What does Kanban do?

Manage project tasks in a local SQLite DB (~/.claude/kanban-dbs/{project}.db). skills.db).

When should I use Kanban?

Kanban fits situations like: tasks that involve Task management.

How do I install Kanban in Claude Code?

Run `npx skills add cyanluna-git/cyanluna.skills --skill kanban -a claude-code`. Or copy the skill folder (kanban in cyanluna-git/cyanluna.skills) into .claude/skills/kanban in your project. Claude Code loads it when a task matches its description.

How do I install Kanban in Codex?

Run `npx skills add cyanluna-git/cyanluna.skills --skill kanban -a codex`. Or copy the skill folder (kanban in cyanluna-git/cyanluna.skills) into .agents/skills/kanban in your project. Codex loads it when a task matches its description.

Can I use Kanban in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cyanluna-git/cyanluna.skills --skill kanban -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/kanban, .gemini/skills/kanban, .github/skills/kanban and .opencode/skills/kanban in your project.

What does Kanban need to run?

Going by SKILL.md and its folder, Kanban needs Python for the scripts in its folder and the command-line tools its instructions call (sqlite3, python3 and git). Our summary lists: Python 3.

Does Kanban access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Kanban safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Kanban use?

Kanban is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Kanban use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Kanban?

Skills that share tags, products or a category with Kanban: No Nonsense Tasks (sundial-org/awesome-openclaw-skills, 663 stars), Taskflow (LeoYeAI/openclaw-master-skills, 2.2k stars), Retinue (jklthinking/retinue, 115 stars) and Task Backlog Manager (mp-web3/claude-starter-kit, 109 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Kanban?

cyanluna-git (a GitHub user) maintains it in cyanluna-git/cyanluna.skills, which has 183 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on June 22, 2026.

Source: cyanluna-git/cyanluna.skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.