From 0605c7b90819b3f5bb99557068614222a446e259 Mon Sep 17 00:00:00 2001
From: null
Date: Sun, 24 May 2026 16:48:20 -0500
Subject: [PATCH] feat: add functionality to copy task details as Claude Code
prompt
---
frontend/src/app/boards/[boardId]/page.tsx | 37 ++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/frontend/src/app/boards/[boardId]/page.tsx b/frontend/src/app/boards/[boardId]/page.tsx
index f239136..5ad6322 100644
--- a/frontend/src/app/boards/[boardId]/page.tsx
+++ b/frontend/src/app/boards/[boardId]/page.tsx
@@ -22,6 +22,7 @@ import {
RefreshCcw,
Settings,
ShieldCheck,
+ Terminal,
X,
} from "lucide-react";
@@ -2545,6 +2546,33 @@ export default function BoardDetailPage() {
};
}, [commentIdFromUrl, comments, isDetailOpen]);
+ const handleDispatchToClaudeCode = useCallback(async () => {
+ if (!selectedTask) return;
+ const boardName = board?.name ?? "Unknown board";
+ const parts: string[] = [
+ `You have been assigned a task from Pipeline.\n`,
+ `**Task**: ${selectedTask.title}`,
+ `**Board**: ${boardName}`,
+ `**Status**: ${selectedTask.status}`,
+ `**Priority**: ${selectedTask.priority}`,
+ ];
+ if (selectedTask.due_at) {
+ parts.push(`**Due**: ${new Date(selectedTask.due_at).toLocaleDateString()}`);
+ }
+ if (selectedTask.description?.trim()) {
+ parts.push(`\n**Description**:\n${selectedTask.description.trim()}`);
+ }
+ parts.push(`\n---\nPlease review this task and begin working on it.`);
+ parts.push(`Task ID: ${selectedTask.id}`);
+ const prompt = parts.join("\n");
+ try {
+ await navigator.clipboard.writeText(prompt);
+ pushToast("Task copied — paste into Claude Code in VSCode to dispatch.", "success");
+ } catch {
+ pushToast("Failed to copy to clipboard.", "error");
+ }
+ }, [selectedTask, board, pushToast]);
+
const closeComments = () => {
openedTaskIdFromUrlRef.current = null;
if (searchParams.get("taskId") || searchParams.get("commentId")) {
@@ -3710,6 +3738,15 @@ export default function BoardDetailPage() {
+