Claude Board uses Tauri’s event system for real-time communication between the Rust backend and the frontend. All board updates, terminal logs, and usage metrics are delivered through Tauri events.
Listening for Events
Subscribe to events on the frontend using the Tauri events API:
import { listen } from "@tauri-apps/api/event";
const unlisten = await listen("task:updated", (event) => {
console.log("Task updated:", event.payload);
});
// Call unlisten() to unsubscribe when no longer needed
Task Events
task:created
Emitted when a new task is added to any project.
{
"task": { "id": 1, "title": "Add login", "status": "backlog", "projectId": 1 }
}
task:updated
Emitted when a task’s fields or status change.
{
"task": { "id": 1, "title": "Add login", "status": "in_progress", "projectId": 1 }
}
task:deleted
Emitted when a task is removed.
{ "taskId": 1, "projectId": 1 }
Agent Events
task:log
Streamed in real-time as the Claude agent produces output.
{
"taskId": 1,
"type": "tool",
"content": "Reading file: src/app.ts",
"timestamp": "2025-01-15T10:30:00Z"
}
Log types: claude, tool, tool_result, system, error
task:usage
Periodic token usage updates for a running task.
{
"taskId": 1,
"inputTokens": 5000,
"outputTokens": 1200,
"cacheRead": 800,
"cacheCreation": 200,
"cost": 0.45
}
claude:limits
Emitted when the agent encounters API rate limits.
{
"taskId": 1,
"retryAfter": 30,
"message": "Rate limit reached, retrying in 30s"
}
claude:finished
Emitted when the Claude agent process exits.
{
"taskId": 1,
"exitCode": 0,
"duration": 45000
}
All events are emitted globally. Filter by projectId or taskId on the frontend to show only relevant updates.