Skip to content

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

PropertyTypeDescription
idnumberAuto-increment ID
uuidstringUnique identifier
namestringBoard name
columnsKanbanColumn[]Columns (populated by findBoard)

KanbanColumn

PropertyTypeDescription
uuidstringUnique identifier
namestringColumn name
onIdeaAddedNotifyAgentbooleanTrigger agent on idea add
onIdeaAddedSystemPromptstring | nullSystem prompt template
ideasstring[]Idea UUIDs (ordered by position)

KanbanIdea

PropertyTypeDescription
idnumberAuto-increment ID
uuidstringUnique identifier
titlestringIdea title
descriptionstring | nullMarkdown description
createdAtnumberCreation timestamp (epoch millis)
lastModifiedAtnumberLast modified timestamp
agentRunUUIDstring | nullAssociated agent run UUID
createdByIdnumberUser ID (0 = agent)
commentsKanbanIdeaComment[]Comments on the idea

KanbanIdeaComment

PropertyTypeDescription
idnumberComment ID
commentedBynumberUser ID (0 = agent)
commentedAtnumberTimestamp (epoch millis)
commentstringComment text

Full API Reference

MethodDescription
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

DieselEngine Scripting Documentation