Read and write the user's real Kanban boards — the SAME store the built-in Kanban section uses, so your changes show up live there and its changes show up in your app. Capability: boards (declared, never prompts; works headless). You have full parity with the built-in, including creating and deleting boards — an app never needs to send the user off to the built-in Kanban to do something.
// app.json: "capabilities": ["boards"]
const boards = await window.chatoss.boards.list(); // → [{ id, name }]
const board = await window.chatoss.boards.get(boards[0].id);
// → { id, name, columns: [{ id, name }], cards: [{ id, title, description?, columnId, done?,
// subtasks?, labels?, comments?, attachments? }], labels? }
const boardId = await window.chatoss.boards.createBoard('Launch plan'); // → new board id
await window.chatoss.boards.deleteBoard(boardId); // board + everything in it
The full method list
- Boards:
list()→[{ id, name }]·get(boardId)→ the whole board ·createBoard(name?, folderId?)→ id ·deleteBoard(boardId). - Cards:
createCard(boardId, { title, description?, columnId })→ id ·updateCard(boardId, cardId, { title?, description?, done? })(donealso moves it to the board's Done column) ·moveCard(boardId, cardId, toColumnId, toIndex?)(appends unlesstoIndexis given) ·deleteCard(boardId, cardId). - Columns:
createColumn(boardId, { name })→ id ·renameColumn(boardId, columnId, name)·deleteColumn(boardId, columnId)(and every card in it) ·reorderColumns(boardId, orderedColumnIds)(must list EVERY column id). - Subtasks:
addSubtask(boardId, cardId, title)→ id ·updateSubtask(boardId, cardId, subtaskId, { title?, completed? })·deleteSubtask(boardId, cardId, subtaskId). - Labels:
createLabel(boardId, name)→ id ·renameLabel(boardId, labelId, name)·deleteLabel(boardId, labelId)·addLabelOption(boardId, labelId, name, color?)→ id ·updateLabelOption(boardId, labelId, optionId, { name?, color? })·deleteLabelOption(boardId, labelId, optionId)·setCardLabel(boardId, cardId, labelId, optionId)·clearCardLabel(boardId, cardId, labelId). - Comments:
addComment(boardId, cardId, text, author?)→ id (author defaults to'agent') ·updateComment(boardId, cardId, commentId, text)·deleteComment(boardId, cardId, commentId). - Attachments:
addAttachment(boardId, cardId, { name, dataUrl })→ id ·removeAttachment(boardId, cardId, attachmentId).
🔴 If your app has an AI agent, give it a tool for every one of these that its UI exposes — including
createBoard/deleteBoard. A board app whose agent can move cards but not create a board is the exact defect this list exists to prevent.