本文へ移動
cccskills
無料GitHub で公開

fancy-kanban

Generate valid fancy-kanban boards — markdown-embedded kanban boards with typed fields, swimlanes, workflow rules, and card face configuration for Obsidian and compatible tools

インストール方法を見る

含まれるファイル(146)

  • SKILL.md14.0 KB
  • .github/FUNDING.yml70 B
  • .github/workflows/ci.yml467 B
  • .github/workflows/e2e.yml1.6 KB
  • .github/workflows/release.yml2.3 KB
  • .gitignore680 B
  • CHANGELOG.md10.7 KB
  • codecov.yml286 B
  • docs/css-customization.md4.1 KB
  • docs/deprecations.md1.3 KB
  • docs/schema.md13.8 KB
  • esbuild.config.mjs1.2 KB
  • images/demo-board-settings.png320.3 KB
  • images/demo-board.png228.3 KB
  • images/demo-edit-card.png262.3 KB
  • images/demo-markdown.png327.3 KB
  • images/demo-swim-lanes.png264.7 KB
  • images/fancy-kanban-demo-source.png529.7 KB
  • images/fancy-kanban-demo.png404.1 KB
  • images/fancy-kanban.png4.0 KB
  • LICENSE1.0 KB
  • main.js77.8 KB
  • main.ts4.4 KB
  • manifest.json362 B
  • package-lock.json413.2 KB
  • package.json1.7 KB
  • README.md8.1 KB
  • samples/.obsidian/.gitignore170 B
  • samples/.obsidian/community-plugins.json20 B
  • samples/all-fields.md1.5 KB
  • samples/basic.md565 B
  • samples/card-limit.md1.3 KB
  • samples/checklist.md1.0 KB
  • samples/colored-select.md970 B
  • samples/content-pipeline.md1.4 KB
  • samples/demo-screenshot.md2.9 KB
  • samples/demo.md944 B
  • samples/multilingual.md1.2 KB
  • samples/multiple-boards.md1.3 KB
  • samples/obsidian-kanban-fk.md854 B
  • samples/obsidian-kanban.md270 B
  • samples/reading-list.md1.4 KB
  • samples/software-project.md1.1 KB
  • scripts/instrument.mjs624 B
  • scripts/lint-obsidian.mjs3.0 KB
  • scripts/lint-rules.mjs1.3 KB
  • src/data/deprecations.ts459 B
  • src/data/link.ts1.6 KB
  • src/data/parser.ts4.8 KB
  • src/data/schema.ts5.5 KB
  • src/data/serializer.ts3.2 KB
  • src/data/workflow.ts774 B
  • src/fields/registry.ts590 B
  • src/import/kanban-converter.ts1.5 KB
  • src/import/kanban-parser.ts3.2 KB
  • src/integration/postprocessor.ts3.4 KB
  • src/integration/standalone-view.ts2.4 KB
  • src/integration/write-back.ts1.2 KB
  • src/model/board.ts961 B
  • src/model/mutations.ts2.4 KB
  • src/render/board-config-modal.ts19.3 KB
  • src/render/board-view.ts526 B
  • src/render/board.ts2.2 KB
  • src/render/card-modal.ts7.3 KB
  • src/render/card.ts4.9 KB
  • src/render/column.ts1.5 KB
  • src/render/drag-drop.ts522 B
  • src/render/inline.ts899 B
  • src/render/lanes.ts1.3 KB
  • src/render/mount.ts8.4 KB
  • styles.css13.4 KB
  • test/specs/board-settings.e2e.ts8.2 KB
  • test/specs/card-click.e2e.ts1.4 KB
  • test/specs/card-editor.e2e.ts2.8 KB
  • test/specs/card-face.e2e.ts6.7 KB
  • test/specs/card-limit.e2e.ts4.3 KB
  • test/specs/checklist.e2e.ts4.6 KB
  • test/specs/colored-select.e2e.ts2.6 KB
  • test/specs/cyrillic-fields.e2e.ts4.3 KB
  • test/specs/data-roundtrip.e2e.ts4.9 KB
  • test/specs/drag-drop.e2e.ts5.4 KB
  • test/specs/error-ui.e2e.ts4.9 KB
  • test/specs/kanban-import.e2e.ts3.4 KB
  • test/specs/link-field.e2e.ts7.6 KB
  • test/specs/multilingual.e2e.ts3.3 KB
  • test/specs/rename-column.e2e.ts4.9 KB
  • test/specs/smoke.e2e.ts436 B
  • test/specs/swimlane.e2e.ts10.3 KB
  • test/vaults/simple/.obsidian/app.json27 B
  • test/vaults/simple/.obsidian/community-plugins.json17 B
  • test/vaults/simple/backslash-board.md323 B
  • test/vaults/simple/board.md346 B
  • test/vaults/simple/card-face-board.md680 B
  • test/vaults/simple/card-face-no-labels-board.md498 B
  • test/vaults/simple/card-face-no-title-board.md473 B
  • test/vaults/simple/card-limit-board.md467 B
  • test/vaults/simple/card-title-duplicate-board.md335 B
  • test/vaults/simple/checklist-board.md498 B
  • test/vaults/simple/colored-select-board.md578 B
  • test/vaults/simple/cyrillic-board.md279 B
  • test/vaults/simple/error-board.md165 B
  • test/vaults/simple/file-deprecated-board.md336 B
  • test/vaults/simple/kanban-import-source.md405 B
  • test/vaults/simple/link-board.md573 B
  • test/vaults/simple/multilingual-board.md992 B
  • test/vaults/simple/notes/target.md64 B
  • test/vaults/simple/readonly-board.md200 B
  • test/vaults/simple/rename-column-board.md392 B
  • test/vaults/simple/settings-board.md284 B
  • test/vaults/simple/swimlane-board.md521 B
  • test/vaults/simple/warning-board.md273 B
  • test/vaults/simple/workflow-board.md366 B
  • tests/__mocks__/obsidian.ts3.1 KB
  • tests/data/link.test.ts5.5 KB
  • tests/data/parser-block.test.ts10.2 KB
  • tests/data/parser-cells.test.ts2.5 KB
  • tests/data/parser-table.test.ts5.7 KB
  • tests/data/schema.test.ts12.1 KB
  • tests/data/serializer.test.ts16.4 KB
  • tests/data/workflow.test.ts4.1 KB
  • tests/import/kanban-converter.test.ts7.4 KB
  • tests/import/kanban-parser.test.ts6.5 KB
  • tests/integration/postprocessor.test.ts11.2 KB
  • tests/integration/standalone-view.test.ts4.4 KB
  • tests/integration/write-back-locator.test.ts3.3 KB
  • tests/integration/write-back-patcher.test.ts4.8 KB
  • tests/integration/write-back.test.ts3.5 KB
  • tests/model/mutations.test.ts10.8 KB
  • tests/render/board-config-modal.test.ts19.9 KB
  • tests/render/board.test.ts8.3 KB
  • tests/render/card-actions.test.ts3.8 KB
  • tests/render/card-modal.test.ts17.7 KB
  • tests/render/card.test.ts19.9 KB
  • tests/render/checklist.test.ts2.9 KB
  • tests/render/column.test.ts8.4 KB
  • tests/render/drag-drop.test.ts5.7 KB
  • tests/render/inline.test.ts3.1 KB
  • tests/render/lanes.test.ts5.4 KB
  • tests/render/mount.test.ts8.1 KB
  • tests/scripts/lint-rules.test.ts4.6 KB
  • tests/setup.ts3.2 KB
  • tests/smoke.test.ts94 B
  • tsconfig.json505 B
  • versions.json303 B
  • vitest.config.ts420 B
  • wdio.conf.mts1.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Fancy Kanban Board Schema

A self-contained specification for the markdown-based kanban board format. Any app that reads and writes files following this schema will produce compatible boards.

Overview

Each board lives inside a fenced code block with the identifier fancy-kanban. This means:

  • A board can be embedded anywhere in a note, alongside prose, links, and other content
  • A note may contain zero, one, or multiple boards
  • A file consisting of a single board block is a standalone board file
  • Without the plugin installed, the block renders as an unstyled code block — the raw text remains fully human-readable

The block contains two sections separated by ---:

  1. A config section (YAML-like) defining fields, workflow, and view options
  2. A markdown table containing the data rows

Complete Example

```fancy-kanban
---
title: My Board
fields:
  - name: title,       type: Text,     label: Title
  - name: status,      type: Select,   options: inbox|doing|done, label: Status, default: inbox
  - name: responsible, type: Text,     label: Responsible
  - name: start_date,  type: Date,     label: Start Date
  - name: notes,       type: Textarea, label: Notes
  - name: effort,      type: Number,   label: Effort
  - name: docs,        type: Link,     label: Docs
  - name: team,        type: Select,   options: frontend|backend, label: Team
card_fields: responsible, effort
lanes: team
workflow: inbox→doing, inbox→done, doing→done, doing→inbox, done→doing, done→inbox
---

| _id    | Title          | Status | Responsible | Start Date | Notes                      | Effort | Docs                  | Team     |
|--------|----------------|--------|-------------|------------|----------------------------|--------|-----------------------|----------|
| x7k2a1 | Fix login bug  | inbox  | Alice       | 2026-01-15 | Needs investigation        | 3      |                       | backend  |
| m3p9b2 | Refactor auth  | doing  | Bob         |            | Multi-line\<br\>content here | 5      | design.md             | backend  |
| q1r4c3 | Setup CI       | done   |             | 2026-01-01 |                            | 1      | setup.md\|guide.md    | frontend |
```

Block Structure

The fenced block contains exactly two sections divided by a --- line:

```fancy-kanban
---
{config}
---

{markdown table}

Everything before the first `---` is ignored (reserved for future use). Everything between the two `---` lines is the config. Everything after the second `---` is the table.

## Config Section

YAML-like key-value pairs. Parsed line-by-line.

### Keys

| Key | Required | Default | Description |
|-----|----------|---------|-------------|
| `title` | yes | — | Human-readable board name |
| `fields` | yes | — | List of field definitions (see below) |
| `version` | no | `1` | Format version written by the plugin; boards with a version higher than the current plugin supports open in read-only mode |
| `workflow` | no | all transitions allowed | Comma-separated `from→to` pairs |
| `lanes` | no | none | Field name to use as the swimlane grouping dimension |
| `card_title` | no | auto-detect | Field name to use as the card heading; set to empty string to show no heading |
| `card_fields` | no | none | Ordered comma-separated list of secondary fields to display below the card heading |
| `card_labels` | no | `true` | Set to `false` to hide the label prefix on secondary card fields |
| `card_limit` | no | `0` (no limit) | Maximum number of cards shown per column; cards beyond this count are hidden behind a "Show more" button |

### `card_title`

```yaml
card_title: summary

Controls which field is rendered as the card heading:

  • Absent (default): the first non-_id, non-column field is used automatically
  • Set to a field name: that field's value appears as the heading
  • Set to empty string (card_title: ): no heading is shown; the card displays only secondary fields

card_fields

card_fields: priority, due, docs

An ordered, comma-separated list of secondary field names to display below the card heading. These appear as labelled rows beneath the title.

Default behaviour: when card_fields is absent the card shows only the heading field. Existing boards with no card_fields key are unaffected.

Unknown names: field names that do not match any defined field are silently ignored at render time. Removing a field from fields: automatically hides it from the card face without a parse error.

Link fields: when a Link field is included in card_fields, its items are rendered as a horizontal list of clickable links on the card face. Vault paths open in a new tab; external URIs open in the browser.

card_labels

card_labels: false

When set to false, the label prefix is omitted from secondary field rows on the card face — only the value is shown. Defaults to true (labels visible). The key is only written to the config when its value is false.

card_limit

card_limit: 5

When set to a positive integer, each column shows at most that many cards. Cards beyond the limit are hidden and a Show more (N) button appears at the bottom of the column. Clicking it reveals all remaining cards without reloading the board. Setting card_limit: 0 or omitting the key disables limiting entirely.

This is particularly useful for boards where the done column accumulates many completed cards over time — the most recently added cards remain visible at a glance, while older history collapses out of the way.

lanes

When set to a field name (must be a Select field), the board renders as a matrix:

  • Columns — driven by the status field's options order
  • Swimlane rows — driven by the lanes field's options order

Cards with no value for the lanes field appear in an Unassigned pseudo-lane at the bottom. Changing lanes is a view-config change only — no row data is affected.

Field Definitions

Each entry in the fields list is a comma-separated set of key: value pairs on a single line, prefixed with - :

fields:
  - name: title, type: Text, label: Title
  - name: status, type: Select, options: inbox|doing|done, label: Status, default: inbox

Field ordering convention: list title first, then status, then additional fields. The table column order in the data section mirrors the field definition order, and the auto-detected card heading resolves to the first non-_id, non-column field — so placing title first ensures predictable heading resolution without needing an explicit card_title key.

Field Properties

PropertyRequiredDescription
nameyesInternal identifier. Lowercase, underscores for spaces.
typeyesOne of: Text, Textarea, Date, Number, Select, Link
labelyesHuman-readable column header. Must match the markdown table header exactly.
optionsSelect onlyPipe-separated (|) list of allowed values
colorsSelect, optionalPipe-separated name=hex pairs assigning a background color to each option (e.g. High=#e74c3c|Low=#27ae60). Options without an entry render as plain text.
defaultnoDefault value for new cards

Field Types

TypeStorage FormatDescription
TextPlain stringSingle-line text
TextareaString with <br> for newlinesMulti-line text
DateYYYY-MM-DDCalendar date
NumberInteger or decimal stringNumeric value
SelectOne of the options valuesConstrained choice; options may carry hex colors via the colors property
Link<br>-separated list of paths or URIsVault-root-relative paths (notes/doc.pdf) or external URIs (https://…, ftp://…, mailto:…)

Special Field Names

NameRole
titlePrimary display field. Should be listed first in fields:. Used as the auto-detected card heading when card_title is not set.
statusRequired. Kanban column field. Must be type: Select. Cards are grouped into columns by this value. Column order follows options order.

All other fields are secondary — displayed as card metadata when listed in card_fields.

Item Identity

Every card has a stable hidden ID stored in a _id column in the markdown table. The UI never displays this column.

  • Generated on card creation: short random alphanumeric string (e.g. 8 characters: x7k2a1b3)
  • Preserved through all serialization round-trips
  • Survives reordering, drag-and-drop, and field renames
  • Used internally for all card operations (move, edit, delete)

Because identity is ID-based and not derived from content, renaming a card's title has no effect on its identity.

Workflow

Defines which status transitions are allowed in the UI:

workflow: inbox→doing, inbox→done, doing→done, doing→inbox, done→doing, done→inbox
  • Comma-separated list of from→to pairs (arrow: →, U+2192)
  • If workflow is omitted, all transitions between status options are permitted
  • Used to constrain UI choices (e.g. a "Move to" menu only shows valid targets)
  • Hand-edits to the raw table bypass workflow validation by nature of being plain text

Board Templates

When creating a new board, a set of predefined templates provides common status option sets. Templates only pre-fill the status field options and workflow — all other fields are added by the user.

TemplateStatus optionsDefault workflow
Basicinbox | doing | doneAll transitions
Softwarebacklog | todo | in-progress | review | doneForward + one step back
Contentidea | draft | review | publishedForward only
Projectplanning | active | blocked | completeAll except → planning
CustomUser-definedUser-defined

Selecting Custom opens a free-form editor for status options and workflow transitions.

Markdown Table

The table appears immediately after the closing --- of the config section.

Structure

| _id    | Header1 | Header2 |
|--------|---------|---------|
| abc123 | value   | value   |
  1. Header row — first column is always _id; remaining columns are field labels in schema definition order
  2. Separator row — standard markdown table separator
  3. Data rows — one row per card; _id cell contains the card's stable ID

Rules

  • Column order in the table must match field definition order (after _id)
  • Empty cells are valid (field value = empty string)
  • Row order within a status group is the display order
  • An empty table (header + separator, no data rows) is valid
  • The _id column is always first and is never shown in the rendered board

Escaping

Character in valueEscaped as
| (pipe)| (backslash-pipe)
Newline<br>
Carriage return<br>

When reading: \| → |, <br> → newline. When writing: | → \|, any newline → <br>.

Parsing Algorithm

  1. Extract the raw string between the opening and closing fences of the fancy-kanban block
  2. Split on the first --- line to locate the config section start
  3. Split on the second --- line to separate config from table
  4. Parse config line-by-line: extract title, version, fields, workflow, lanes, card_title, card_fields, card_labels, card_limit
  5. For fields, collect lines starting with - and parse each as comma-separated key: value pairs; colors is decoded as pipe-separated name=hex tokens
  6. Find table lines in the body (lines starting with |)
  7. First table line is the header row — extract column labels; _id is always first
  8. Map remaining header labels to field names via case-insensitive label lookup
  9. Parse each data row: split on unescaped |, trim cells, unescape \| and <br>
  10. First cell of each data row is the card's _id
  11. Group cards by status field value, seeding groups in options order

Schema reconciliation (applied after parsing):

  • Fields present in schema but missing from a card's data: backfill with the field's default (or empty string)
  • Fields present in card data but removed from the schema: preserve as orphaned hidden data (not deleted)

Writing Algorithm

  1. Reconstruct the config section from the current schema (preserve original formatting where possible)
  2. Generate header row: _id first, then field labels in schema definition order
  3. Generate separator row
  4. Generate one data row per card: _id first, then field values in schema order, with pipes and newlines escaped
  5. Generate a new card _id using a random alphanumeric string if the card has no existing ID
  6. Reconstruct the full block: opening fence, config, ---, blank line, table, closing fence

Write-back principle: only the text range of the affected block is patched in the source file — surrounding content is never rewritten.

Minimum Viable Board

```fancy-kanban
---
title: My Board
fields:
  - name: title, type: Text, label: Title
  - name: status, type: Select, options: inbox|doing|done, label: Status, default: inbox
workflow: inbox→doing, inbox→done, doing→done, doing→inbox, done→doing, done→inbox
---

| _id | Title | Status |
|-----|-------|--------|

## Compatibility Notes

- Without the plugin, the block renders as a plain code block — all data is still visible as plain text
- The markdown table inside the block is valid markdown and readable in any text editor
- The config section follows YAML conventions familiar to static site generators and note-taking apps
- Removing the plugin leaves all data intact and recoverable

## Deprecated Features

See [docs/deprecations.md](deprecations.md) for the full list of deprecated field types and config keys, their replacements, and planned removal versions.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

このスキルの問題を報告する