/install flux-kanban-agent
Flux
Flux is a kanban board management platform. Use this skill to build automations, manage cards, and organize work through the Flux REST API.
Setup
FLUX_API_KEY(required) — an API key beginning withflux_. Every request is authenticated with it.FLUX_BASE_URL(optional) — the origin of the Flux instance, e.g.https://flux.umin.ai. Defaults tohttps://flux.umin.ai.
Authentication
Send the key as a Bearer token on every request:
Authorization: Bearer flux_YOUR_KEY
API keys carry granular scopes, so a request may succeed for reads but be rejected for
writes if the key lacks the scope. A 401 means the key is missing or invalid; a 403
means the key is valid but not permitted for that action.
Core concepts
- Active workspace — most board/card endpoints operate on the active workspace tied
to the key. List workspaces with
GET /api/workspaces, change it withPOST /api/workspaces/switch. - Two ID formats — boards accept either a UUID or a short URL id (
shortId, e.g.av-tX6qQ). Cards have an internal UUID and a human id (humanId, e.g.TB-1) used in URLs. Use the UUID for write operations unless an endpoint says otherwise. - Cache key gotcha — a board is keyed by its
shortId, not bycard.boardId(which is a UUID). Don't assume the two are interchangeable when matching a card to its board. - Soft deletes — every
DELETEis reversible. Deleted records are hidden, not destroyed, and can be restored viaPOST /api/undo. - Idempotency — include
X-Idempotency-Key: \x3Cuuid>on every write (POST/PATCH/PUT/ DELETE). On retry, Flux returns the original result instead of duplicating the action. - Dates — all timestamps are ISO 8601.
Endpoints
Workspaces
| Method | Path | Body / Query | Notes |
|---|---|---|---|
| GET | /api/workspaces |
— | List your workspaces → { workspaces: [{ id, name, slug }] } |
| POST | /api/workspaces |
{ name } |
Create a workspace |
| POST | /api/workspaces/switch |
{ workspaceId } |
Set the active workspace |
Boards
| Method | Path | Body / Query | Notes |
|---|---|---|---|
| GET | /api/boards |
— | Boards in the active workspace → { boards: [{ id, shortId, title, columns }] } |
| GET | /api/boards/all |
— | Boards across all workspaces |
| POST | /api/boards |
{ title, workspaceId? } |
Create a board |
| GET | /api/boards/{boardId} |
accepts shortId or UUID | Full board → { board, cards: { [cardId]: card }, boardLabels, members } |
| PATCH | /api/boards/{boardId} |
{ title?, settings?, doneColumnId? } |
Update a board |
| DELETE | /api/boards/{boardId} |
— | Soft-delete a board |
Columns
| Method | Path | Body / Query | Notes |
|---|---|---|---|
| POST | /api/columns |
{ boardId, title } |
Create a column |
| PATCH | /api/columns |
{ columnId, title?, isDone? } |
Update a column |
| DELETE | /api/columns?columnId={id} |
— | Delete a column |
| PUT | /api/columns/reorder |
{ boardId, columnIds: [ordered UUIDs] } |
Reorder columns |
Cards
| Method | Path | Body / Query | Notes |
|---|---|---|---|
| POST | /api/cards |
{ boardId, columnId, title, description? } |
Create a card |
| PATCH | /api/cards |
{ cardId, title?, description?, columnId?, assignees?, dueDate?, coverUrl?, archivedAt? } |
Update a card. assignees is an array of user IDs and replaces the whole set. |
| DELETE | /api/cards?cardId={id} |
— | Soft-delete a card |
| GET | /api/cards/{cardId} |
— | Full detail: checklist, comments, attachments, labels, assignees |
| PUT | /api/cards/reorder |
{ boardId, moves: [{ cardId, columnId, position }] } |
Move/reorder cards |
Card sub-resources
Checklist
| Method | Path | Body / Query |
|---|---|---|
| POST | /api/cards/{cardId}/checklist |
{ text } |
| PATCH | /api/cards/{cardId}/checklist |
{ itemId, text?, done?, position? } |
| DELETE | /api/cards/{cardId}/checklist?itemId={id} |
— |
Comments
| Method | Path | Body / Query |
|---|---|---|
| POST | /api/cards/{cardId}/comments |
{ content, parentId? } |
| PATCH | /api/cards/{cardId}/comments |
{ commentId, content } |
| DELETE | /api/cards/{cardId}/comments?commentId={id} |
— |
Labels on a card (toggle a board-level label onto the card)
| Method | Path | Body / Query |
|---|---|---|
| POST | /api/cards/{cardId}/labels |
{ labelId } |
| DELETE | /api/cards/{cardId}/labels?labelId={id} |
— |
Attachments
| Method | Path | Body / Query | Notes |
|---|---|---|---|
| POST | /api/cards/{cardId}/attachments/upload-url |
{ fileName, mimeType } |
Returns a presigned S3 upload URL |
| POST | /api/cards/{cardId}/attachments |
{ fileName, fileUrl, s3Key?, mimeType? } |
Register the attachment after uploading |
| DELETE | /api/cards/{cardId}/attachments?attachmentId={id} |
— | Delete an attachment |
Labels (board-level definitions)
| Method | Path | Body / Query |
|---|---|---|
| POST | /api/boards/{boardId}/labels |
{ text, color } |
| PATCH | /api/boards/{boardId}/labels |
{ labelId, text?, color? } |
| DELETE | /api/boards/{boardId}/labels?labelId={id} |
— |
Search & undo
| Method | Path | Body / Query | Notes |
|---|---|---|---|
| GET | /api/search?q={query}&workspaceId={id?}&type={card|board?} |
— | Full-text search |
| POST | /api/undo |
{ boardId } |
Undo the last action on a board |
Common workflows
Create a card on a board
GET /api/boards— find the board by title, note itsshortId.GET /api/boards/{shortId}— readboard.columnsto pick the targetcolumnId.POST /api/cardswith{ boardId, columnId, title }.
Move a card to another column
GET /api/boards/{shortId}— find the source/targetcolumnIds and the card.PUT /api/cards/reorderwith{ boardId, moves: [{ cardId, columnId, position: 0 }] }(position: 0drops it at the top of the target column).
Assign members to a card
GET /api/boards/{shortId}— the responsemembersarray lists user IDs.PATCH /api/cardswith{ cardId, assignees: [userId1, userId2] }. Assignees are replaced wholesale — send the full desired list, not a delta. Note: the write field isassignees; board reads expose the same data asassigneeIds. SendingassigneeIdsto PATCH is silently ignored and returns422 "No updates provided".
Add a label to a card
GET /api/boards/{shortId}— the responseboardLabelsarray lists label IDs. (Create the label first withPOST /api/boards/{boardId}/labelsif it doesn't exist.)POST /api/cards/{cardId}/labelswith{ labelId }.
Notes & gotchas
- Always send
X-Idempotency-Key: \x3Cuuid>on writes to make retries safe. - All deletes are soft and reversible via
POST /api/undo. - Board IDs accept both UUID and
shortId; card IDs have a UUID and ahumanId(TB-1). - Resolve a board's columns and labels before creating or moving cards — you need their
IDs from
GET /api/boards/{shortId}. - A
403on a write usually means the API key lacks the required scope, not that the resource is missing.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install flux-kanban-agent - 安装完成后,直接呼叫该 Skill 的名称或使用
/flux-kanban-agent触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Flux Board 是什么?
Manage Flux kanban boards, cards, columns, and labels through the Flux REST API. Create and move cards, assign members, toggle labels, search, and build boar... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 33 次。
如何安装 Flux Board?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install flux-kanban-agent」即可一键安装,无需额外配置。
Flux Board 是免费的吗?
是的,Flux Board 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Flux Board 支持哪些平台?
Flux Board 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Flux Board?
由 uminai(@uminai-dev)开发并维护,当前版本 v1.0.0。