Appearance
Kanban API
DieselEngine includes a built-in Kanban system for managing boards, columns, and ideas. Columns can optionally trigger autonomous agent runs when ideas are added to them.
Getting the Service
javascript
const kanban = diesel.getKanbanService();Boards
Create a Board
New boards come with four default columns: Backlog, Planned, Working, and Done.
javascript
kanban.createBoard("Sprint 1");List All Boards
Returns lightweight board objects (columns are not populated).
javascript
const boards = kanban.listBoards();
for (const board of boards) {
console.log(board.uuid, board.name);
}Find a Board
Returns the board with its columns populated.
javascript
const board = kanban.findBoard(boardUUID);
console.log(board.name);
console.log(board.columns.length, "columns");Update a Board
javascript
kanban.updateBoard(boardUUID, "Sprint 2");Delete a Board
Cascade-deletes all columns and ideas in the board.
javascript
kanban.deleteBoard(boardUUID);Columns
List Columns
Returns columns ordered by position, with idea UUIDs populated.
javascript
const columns = kanban.listColumns(boardUUID);
for (const col of columns) {
console.log(col.name, "->", col.ideas.length, "ideas");
}Create a Column
javascript
const DieselKanbanColumn = Java.type(
'com.dieselengine.diesel.models.kanban.DieselKanbanColumn'
);
const col = new DieselKanbanColumn();
col.name = "Review";
kanban.createColumn(boardUUID, col);Agent-Triggered Columns
Set onIdeaAddedNotifyAgent to true to trigger an agent run whenever an idea is added to the column. Use __IDEA_UUID__ as a placeholder in the system prompt.
javascript
const col = new DieselKanbanColumn();
col.name = "Working";
col.onIdeaAddedNotifyAgent = true;
col.onIdeaAddedSystemPrompt = `
An idea has been added to the Working column.
Read the idea at __IDEA_UUID__ and implement the feature described.
When done, move the idea to the Done column and add a comment with a summary.
`;
kanban.createColumn(boardUUID, col);When an idea is dropped into this column, an autonomous agent run starts with the configured system prompt (with __IDEA_UUID__ replaced by the actual idea UUID). The agent has access to all MCP tools.
Find a Column
javascript
const column = kanban.findColumn(columnUUID);
console.log(column.name, column.ideas.length, "ideas");Update a Column
javascript
const column = kanban.findColumn(columnUUID);
column.name = "In Review";
column.onIdeaAddedNotifyAgent = false;
kanban.updateColumn(columnUUID, column);Delete a Column
Ideas in the column are not deleted.
javascript
kanban.deleteColumn(columnUUID);Ideas
Create an Idea
javascript
const DieselKanbanIdea = Java.type(
'com.dieselengine.diesel.models.kanban.DieselKanbanIdea'
);
const idea = new DieselKanbanIdea();
idea.title = "Implement user search endpoint";
idea.description = `
Create a GET endpoint at /api/users/search that accepts
a 'q' query parameter and returns matching users.
`;
kanban.createIdea(columnUUID, idea);Find an Idea
javascript
const idea = kanban.findIdea(ideaUUID);
console.log(idea.title);
console.log(idea.description);
console.log("Created at:", new Date(idea.createdAt));
console.log("Comments:", idea.comments.length);Update an Idea
javascript
const idea = kanban.findIdea(ideaUUID);
idea.title = "Implement user search endpoint (v2)";
idea.description += "\n\nAlso support filtering by role.";
kanban.updateIdea(ideaUUID, idea);Move an Idea
javascript
kanban.moveIdeaToColumn(ideaUUID, targetColumnUUID);Find Which Column an Idea Is In
javascript
const column = kanban.findColumnOfIdea(ideaUUID);
console.log("Idea is in column:", column.name);List Ideas in a Column
Returns ideas ordered by position.
javascript
const ideas = kanban.listIdeas(columnUUID);
for (const idea of ideas) {
console.log(`- ${idea.title} (${idea.uuid})`);
}Delete an Idea
javascript
kanban.deleteIdea(ideaUUID);Data Types
KanbanBoard
| Property | Type | Description |
|---|---|---|
id | number | Auto-increment ID |
uuid | string | Unique identifier |
name | string | Board name |
columns | KanbanColumn[] | Columns (populated by findBoard) |
KanbanColumn
| Property | Type | Description |
|---|---|---|
uuid | string | Unique identifier |
name | string | Column name |
onIdeaAddedNotifyAgent | boolean | Trigger agent on idea add |
onIdeaAddedSystemPrompt | string | null | System prompt template |
ideas | string[] | Idea UUIDs (ordered by position) |
KanbanIdea
| Property | Type | Description |
|---|---|---|
id | number | Auto-increment ID |
uuid | string | Unique identifier |
title | string | Idea title |
description | string | null | Markdown description |
createdAt | number | Creation timestamp (epoch millis) |
lastModifiedAt | number | Last modified timestamp |
agentRunUUID | string | null | Associated agent run UUID |
createdById | number | User ID (0 = agent) |
comments | KanbanIdeaComment[] | Comments on the idea |
KanbanIdeaComment
| Property | Type | Description |
|---|---|---|
id | number | Comment ID |
commentedBy | number | User ID (0 = agent) |
commentedAt | number | Timestamp (epoch millis) |
comment | string | Comment text |
Full API Reference
| Method | Description |
|---|---|
kanban.createBoard(name) | Create a board with default columns |
kanban.listBoards() | List all boards (lightweight) |
kanban.findBoard(uuid) | Get board with columns |
kanban.updateBoard(uuid, name) | Update board name |
kanban.deleteBoard(uuid) | Delete board (cascades) |
kanban.createColumn(boardUUID, column) | Add column to board |
kanban.listColumns(boardUUID) | List columns for board |
kanban.findColumn(uuid) | Get column with idea UUIDs |
kanban.updateColumn(uuid, column) | Update column properties |
kanban.deleteColumn(uuid) | Delete column |
kanban.createIdea(columnUUID, idea) | Add idea to column |
kanban.listIdeas(columnUUID) | List ideas in column |
kanban.findIdea(uuid) | Get idea with comments |
kanban.updateIdea(uuid, idea) | Update idea |
kanban.moveIdeaToColumn(ideaUUID, columnUUID) | Move idea |
kanban.findColumnOfIdea(ideaUUID) | Find column of idea |
kanban.deleteIdea(uuid) | Delete idea |