Kanban
iii-hq/workers
File-backed kanban board: create, read, move and comment on tickets by key or uuid, assign agent profiles, and wake on comments through the kanban:comment trigger instead of polling.
Scan kanban boards for stagnant tasks and optionally mark them.
$ npx skills add cyanluna-git/cyanluna.skills --skill kanban-heartbeat -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cyanluna-git/cyanluna.skills kanban-heartbeat --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cyanluna-git/cyanluna.skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/kanban-heartbeat .claude/skills/kanban-heartbeat && rm -rf skills-srcUse ~/.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/
Install the "kanban-heartbeat" agent skill from https://github.com/cyanluna-git/cyanluna.skills/tree/main/kanban-heartbeat into .claude/skills/kanban-heartbeat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kanban-heartbeat", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cyanluna-git/cyanluna.skills/tree/main/kanban-heartbeatType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cyanluna-git/cyanluna.skills --skill kanban-heartbeat -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cyanluna-git/cyanluna.skills kanban-heartbeat --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cyanluna-git/cyanluna.skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/kanban-heartbeat .agents/skills/kanban-heartbeat && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "kanban-heartbeat" agent skill from https://github.com/cyanluna-git/cyanluna.skills/tree/main/kanban-heartbeat into .agents/skills/kanban-heartbeat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kanban-heartbeat", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cyanluna-git/cyanluna.skills --skill kanban-heartbeat -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cyanluna-git/cyanluna.skills kanban-heartbeat --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cyanluna-git/cyanluna.skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/kanban-heartbeat .cursor/skills/kanban-heartbeat && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "kanban-heartbeat" agent skill from https://github.com/cyanluna-git/cyanluna.skills/tree/main/kanban-heartbeat into .cursor/skills/kanban-heartbeat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kanban-heartbeat", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cyanluna-git/cyanluna.skills.git --path kanban-heartbeat--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cyanluna-git/cyanluna.skills --skill kanban-heartbeat -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cyanluna-git/cyanluna.skills kanban-heartbeat --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cyanluna-git/cyanluna.skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/kanban-heartbeat .gemini/skills/kanban-heartbeat && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "kanban-heartbeat" agent skill from https://github.com/cyanluna-git/cyanluna.skills/tree/main/kanban-heartbeat into .gemini/skills/kanban-heartbeat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kanban-heartbeat", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cyanluna-git/cyanluna.skills kanban-heartbeatInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cyanluna-git/cyanluna.skills --skill kanban-heartbeat -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cyanluna-git/cyanluna.skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/kanban-heartbeat .github/skills/kanban-heartbeat && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "kanban-heartbeat" agent skill from https://github.com/cyanluna-git/cyanluna.skills/tree/main/kanban-heartbeat into .github/skills/kanban-heartbeat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kanban-heartbeat", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cyanluna-git/cyanluna.skills --skill kanban-heartbeat -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cyanluna-git/cyanluna.skills kanban-heartbeat --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cyanluna-git/cyanluna.skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/kanban-heartbeat .opencode/skills/kanban-heartbeat && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "kanban-heartbeat" agent skill from https://github.com/cyanluna-git/cyanluna.skills/tree/main/kanban-heartbeat into .opencode/skills/kanban-heartbeat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kanban-heartbeat", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
kanban-heartbeatScan kanban boards for stagnant tasks and optionally mark them.
Kanban Heartbeat is an agent skill from cyanluna-git/cyanluna.skills. Scan kanban boards for stagnant tasks and optionally mark them. Detects tasks with no agent activity for N days (default 3), outputs a markdown report table, and appends Heartbeat entries to agentlog unless --dry-run.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Productivity & Automation, covering Task management and Sprint planning and agile. The licence is MIT.
Read from SKILL.md and the folder at commit df5be37. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
python3sqlite3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Kanban Heartbeat loads about 2.7k tokens when it runs. Until then it costs about 59 tokens; SKILL.md has 111 words of instructions outside code blocks.
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.
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); files beside SKILL.md are not scanned.
The full file from cyanluna-git/cyanluna.skills at commit df5be37, republished under its MIT licence (© cyanluna-git). 111 words, ~2,738 tokens.
.claude/skills/kanban-heartbeat/SKILL.md (or your agent's skills folder).Shared context: read
../kanban/shared.mdfor DB path, pipeline levels, status transitions, DB operations, error handling, and agent context flow. Schema: read../kanban/schema.mdfor full DB schema, column descriptions, and JSON field formats.
/kanban-heartbeat [--project X] [--days N] [--dry-run] -- Stagnant Task DetectionScan all active projects (or a single project) for tasks that have had no agent activity for N days. Output a markdown table of stagnant tasks and optionally append a Heartbeat warning entry to each task's agent_log.
Defaults: --days 3, all active projects, writes to agent_log.
--dry-run: report only, no agent_log modifications.
① DB Setup & Argument Parsing
Read project config and DB path:
CONFIG=$(cat .claude/kanban.json 2>/dev/null || cat .codex/kanban.json 2>/dev/null)
PROJECT=$(echo "$CONFIG" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['project'])" 2>/dev/null || basename "$(pwd)")
DB="$HOME/.claude/kanban-dbs/${PROJECT}.db"
Parse CLI arguments:
- --project X → scan only project X (override PROJECT)
- --days N → stagnation threshold in days (default: 3)
- --dry-run → report only, do not write agent_log entries
② Fetch Projects
If --project X specified:
Validate project exists:
sqlite3 "$DB" "SELECT id FROM projects WHERE id='$X'"
If empty → print error "Project '$X' not found." and exit.
PROJECTS=("$X")
Else:
PROJECTS = sqlite3 "$DB" "SELECT id FROM projects WHERE status='active'"
If no active projects → scan using PROJECT from config
③ Fetch Tasks per Project (active columns only)
For each project P in PROJECTS:
sqlite3 -json "$DB" "SELECT id, title, status, agent_log, created_at FROM tasks
WHERE project='$P' AND status IN ('todo','plan','plan_review','impl','impl_review','test')
ORDER BY id"
If project has 0 tasks → skip silently, continue.
④ Extract Last Activity Timestamp per Task
For each task, use Python for safe JSON parsing of agent_log:
python3 -c "
import json, sys
task = json.loads(sys.stdin.read())
agent_log_raw = task.get('agent_log') or '[]'
try:
log = json.loads(agent_log_raw)
if isinstance(log, list) and len(log) > 0:
timestamps = [e.get('timestamp', '') for e in log if isinstance(e, dict)]
timestamps = [t for t in timestamps if t]
if timestamps:
print(max(timestamps))
sys.exit(0)
except (json.JSONDecodeError, TypeError):
print('PARSE_ERROR', file=sys.stderr)
# Fallback to created_at
print(task.get('created_at', ''))
"
Store: task ID, project, status, title, last_activity_ts
⑤ Compute Stagnation
NOW = current UTC timestamp
THRESHOLD = NOW - N days
For each task:
Parse last_activity_ts as datetime
days_stagnant = (NOW - last_activity_ts).days
If days_stagnant >= N → mark as stagnant
If no stagnant tasks across all projects:
Print "No stagnant tasks found."
Exit.
⑥ Output Markdown Table
Sort stagnant tasks by days_stagnant descending.
Print:
| ID | Project | Status | Days | Title |
|----|---------|--------|------|-------|
| 2100 | cpet.db | impl | 12 | Add export feature |
| 2055 | today.bike | plan | 5 | Refactor route module |
Print summary line:
"**Heartbeat: X stagnant tasks found across Y projects.**"
If --dry-run: append " (dry-run, no agent_log entries written)"
⑦ Write agent_log Entries (skip if --dry-run)
For each stagnant task, append a Heartbeat entry using sqlite3 json_insert:
NEW_ENTRY=$(python3 -c "
import json, datetime
entry = {
'agent': 'Heartbeat',
'model': 'system',
'message': f'⚠️ Stagnant {DAYS} days in {STATUS}. Last activity: {LAST_TS}',
'timestamp': datetime.datetime.utcnow().isoformat() + 'Z'
}
print(json.dumps(entry))
")
sqlite3 "$DB" "UPDATE tasks SET agent_log=json_insert(COALESCE(agent_log,'[]'), '\$[#]', json('$NEW_ENTRY')), updated_at=datetime('now') WHERE id=$TASK_ID AND project='$PROJECT'"
echo " Heartbeat written to task #$TASK_ID"
Print: "agent_log entries written for X tasks."The executing agent should run this as a single Python script for reliability:
python3 - "$@" <<'PYEOF'
import sqlite3 as sq, json, sys, datetime, re, os, pathlib
# ── Parse arguments ──────────────────────────────────────────────
args = sys.argv[1:]
project_filter = None
days_threshold = 3
dry_run = False
i = 0
while i < len(args):
if args[i] == "--project" and i + 1 < len(args):
project_filter = args[i + 1]; i += 2
elif args[i] == "--days" and i + 1 < len(args):
days_threshold = int(args[i + 1]); i += 2
elif args[i] == "--dry-run":
dry_run = True; i += 1
else:
i += 1
# ── DB Setup ─────────────────────────────────────────────────────
import subprocess
config_paths = [".claude/kanban.json", ".codex/kanban.json"]
project_name = None
for p in config_paths:
if os.path.exists(p):
try:
d = json.loads(open(p).read())
project_name = d.get("project")
break
except Exception:
pass
if not project_name:
project_name = os.path.basename(os.getcwd())
db_path = str(pathlib.Path.home() / ".claude" / "kanban-dbs" / f"{project_name}.db")
if not os.path.exists(db_path):
print(f"Error: DB not found at {db_path}. Run /kanban-init first.")
sys.exit(1)
conn = sq.connect(db_path)
conn.row_factory = sq.Row
# ── Fetch projects ───────────────────────────────────────────────
if project_filter:
row = conn.execute("SELECT id FROM projects WHERE id=?", (project_filter,)).fetchone()
if not row:
# Fall back: check if project has tasks even without projects table entry
count = conn.execute("SELECT count(*) FROM tasks WHERE project=?", (project_filter,)).fetchone()[0]
if count == 0:
print(f"Error: Project '{project_filter}' not found.")
sys.exit(1)
projects = [project_filter]
else:
rows = conn.execute("SELECT id FROM projects WHERE status='active'").fetchall()
projects = [r["id"] for r in rows]
if not projects:
# Fall back to the project from config
projects = [project_name]
if not projects:
print("No active projects found.")
sys.exit(0)
# ── Scan tasks ───────────────────────────────────────────────────
now = datetime.datetime.utcnow()
active_columns = ("todo", "plan", "plan_review", "impl", "impl_review", "test")
stagnant_tasks = []
for proj in projects:
rows = conn.execute(
"SELECT id, title, status, agent_log, created_at FROM tasks WHERE project=? AND status IN ({})".format(
",".join("?" * len(active_columns))
),
(proj, *active_columns)
).fetchall()
for task in rows:
task_id = task["id"]
title = task["title"] or "(untitled)"
status = task["status"]
created_at = task["created_at"] or ""
agent_log_raw = task["agent_log"]
# Extract last activity timestamp
last_ts = None
parse_error = False
if agent_log_raw:
try:
log = json.loads(agent_log_raw) if isinstance(agent_log_raw, str) else agent_log_raw
if isinstance(log, list) and len(log) > 0:
timestamps = [e.get("timestamp", "") for e in log if isinstance(e, dict)]
timestamps = [t for t in timestamps if t]
if timestamps:
last_ts = max(timestamps)
except (json.JSONDecodeError, TypeError):
parse_error = True
if last_ts is None:
last_ts = created_at
if parse_error:
print(f"Warning: task #{task_id} has malformed agent_log, falling back to created_at", file=sys.stderr)
if not last_ts:
print(f"Warning: task #{task_id} has no timestamp, skipping", file=sys.stderr)
continue
# Parse timestamp
try:
clean_ts = re.sub(r"\.\d+", "", last_ts.replace("Z", "").replace("+00:00", ""))
ts_dt = datetime.datetime.fromisoformat(clean_ts)
except (ValueError, AttributeError):
print(f"Warning: task #{task_id} has unparseable timestamp '{last_ts}', skipping", file=sys.stderr)
continue
days_stagnant = (now - ts_dt).days
if days_stagnant >= days_threshold:
stagnant_tasks.append({
"id": task_id,
"project": proj,
"status": status,
"days": days_stagnant,
"title": title,
"last_ts": last_ts,
})
# ── Output ───────────────────────────────────────────────────────
if not stagnant_tasks:
print("No stagnant tasks found.")
sys.exit(0)
stagnant_tasks.sort(key=lambda t: t["days"], reverse=True)
print("")
print("| ID | Project | Status | Days | Title |")
print("|----|---------|--------|------|-------|")
for t in stagnant_tasks:
print(f"| {t['id']} | {t['project']} | {t['status']} | {t['days']} | {t['title']} |")
print("")
project_set = set(t["project"] for t in stagnant_tasks)
summary = f"**Heartbeat: {len(stagnant_tasks)} stagnant tasks found across {len(project_set)} projects.**"
if dry_run:
summary += " (dry-run, no agent_log entries written)"
print(summary)
# ── Write agent_log entries ──────────────────────────────────────
if dry_run:
sys.exit(0)
print("")
written = 0
for t in stagnant_tasks:
try:
row = conn.execute("SELECT agent_log FROM tasks WHERE id=? AND project=?", (t["id"], t["project"])).fetchone()
try:
log = json.loads(row["agent_log"] or "[]")
except (json.JSONDecodeError, TypeError):
log = []
log.append({
"agent": "Heartbeat",
"model": "system",
"message": f"⚠️ Stagnant {t['days']} days in {t['status']}. Last activity: {t['last_ts']}",
"timestamp": now.isoformat() + "Z",
})
conn.execute(
"UPDATE tasks SET agent_log=?, updated_at=datetime('now') WHERE id=? AND project=?",
(json.dumps(log), t["id"], t["project"])
)
conn.commit()
print(f" Heartbeat written to task #{t['id']}")
written += 1
except Exception as e:
print(f" Error writing to task #{t['id']}: {e}", file=sys.stderr)
print(f"\nagent_log entries written for {written} tasks.")
conn.close()
PYEOF© 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
Just SKILL.md in kanban-heartbeat of cyanluna-git/cyanluna.skills.
Open the folder on GitHubat commit df5be37
Kanban Heartbeat 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Kanban Heartbeat this skillcyanluna-git/cyanluna.skills | 183 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Kanbaniii-hq/workers | 113 | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Frappe Impl UI ComponentsImpertio-Studio/Frappe_Claude_Skill_Package | 189 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Wrongstack KanbanWrongStack/WrongStack | 371 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Kanban Mdantopolskiy/kanban-md | 223 | — | ~4k | Automated safety check: Pass | MIT | |
| Herdr BoardnelsonPires5/herdr-board | 173 | — | ~4.6k | Automated safety check: Pass | None |
iii-hq/workers
File-backed kanban board: create, read, move and comment on tickets by key or uuid, assign agent profiles, and wake on comments through the kanban:comment trigger instead of polling.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when building custom dialogs, extending List View, creating Page controllers, or adding Kanban/Calendar views and realtime updates.
WrongStack/WrongStack
Record substantial project work on WrongStack's IPC-backed Kanban board so it survives the session and other agents can see it.
antopolskiy/kanban-md
Manage project tasks using kanban-md, a file-based kanban board CLI.
nelsonPires5/herdr-board
Interact with the herdr-board kanban from inside an agent run or an interactive session.
Owl-Listener/designer-skills
Design the team's operating rhythm — task management, collaboration rituals, and tooling.
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.
cyanluna-git/cyanluna.skills
Manage project tasks in a local SQLite DB (~/.claude/kanban-dbs/{project}.db).
cyanluna-git/cyanluna.skills
Codebase exploration skill for uncertain implementation direction.
cyanluna-git/cyanluna.skills
Local markdown-file kanban for toy and personal projects. An agent skill from cyanluna-git/cyanluna.skills.
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.
cyanluna-git/cyanluna.skills
Turn vague intent into a precise, executable spec through 5 structured phases, then optionally create a kanban task.
Categories
Scan kanban boards for stagnant tasks and optionally mark them. skills. Scan kanban boards for stagnant tasks and optionally mark them.
Kanban Heartbeat fits situations like: tasks that involve Task management; tasks that involve Sprint planning and agile.
Run `npx skills add cyanluna-git/cyanluna.skills --skill kanban-heartbeat -a claude-code`. Or copy the skill folder (kanban-heartbeat in cyanluna-git/cyanluna.skills) into .claude/skills/kanban-heartbeat in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cyanluna-git/cyanluna.skills --skill kanban-heartbeat -a codex`. Or copy the skill folder (kanban-heartbeat in cyanluna-git/cyanluna.skills) into .agents/skills/kanban-heartbeat in your project. Codex loads it when a task matches its description.
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-heartbeat -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-heartbeat, .gemini/skills/kanban-heartbeat, .github/skills/kanban-heartbeat and .opencode/skills/kanban-heartbeat in your project.
Going by SKILL.md and its folder, Kanban Heartbeat needs the command-line tools its instructions call (python3 and sqlite3). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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. Review the folder before installing.
Kanban Heartbeat is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Kanban Heartbeat: Kanban (iii-hq/workers, 113 stars), Frappe Impl UI Components (Impertio-Studio/Frappe_Claude_Skill_Package, 189 stars), Wrongstack Kanban (WrongStack/WrongStack, 371 stars) and Kanban Md (antopolskiy/kanban-md, 223 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.