From 7c9631c1b9e46ada24e7be01785c28090a720354 Mon Sep 17 00:00:00 2001 From: iliya Date: Sat, 21 Mar 2026 14:01:24 +0200 Subject: [PATCH] feat: enhance README and UI for team management and review processes - Added "Flexible autonomy" feature to README, allowing users to configure agent control levels. - Updated task creation description for clarity in README. - Improved team detail view messaging to better inform users about draft teams and provisioning status. - Enhanced review function to prevent duplicate approval comments and events, ensuring idempotency. - Expanded expected IPC signals to include 'TEAM_DRAFT' for better error handling. --- README.md | 7 ++++--- agent-teams-controller/src/internal/review.js | 5 +++++ src/renderer/components/team/TeamDetailView.tsx | 15 +++++++++++---- src/renderer/utils/unwrapIpc.ts | 2 +- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 8969917f..0b95df3b 100644 --- a/README.md +++ b/README.md @@ -39,12 +39,13 @@ A new approach to task management with AI agent teams. - **Task-specific logs and messages** — clearly see all Claude logs and messages in isolation for each individual task, making it easy to trace what happened for any assignment - **Live process section** — see which agents are running processes and open URLs directly in the browser - **Stay in control** — send a direct message to any agent, drop a comment on a task, or pick a quick action right on the kanban card whenever you want to clarify something or add new work +- **Flexible autonomy** — let agents run fully autonomous, or review and approve each action one by one (you'll get a notification) — configure the level of control that fits your security needs - **Solo mode** — one-member team: a single agent that creates its own tasks and shows live progress. Saves tokens; can expand to a full team anytime
More features -- **Task creation with attachments** — Simply send a message to the team lead with any attached images (planed all files). The lead will automatically create a fully described task and attach your files directly to the task for complete context. +- **Task creation with attachments** — send a message to the team lead with any attached images. The lead will automatically create a fully described task and attach your files directly to the task for complete context. - **Deep session analysis** — detailed breakdown of what happened in each Claude session: bash commands, reasoning, subprocesses @@ -64,7 +65,7 @@ A new approach to task management with AI agent teams. - **Attach code context** — reference files or snippets in messages, like in Cursor. You can also mention tasks using `#task-id`, or refer to another team with `@team-name` in your messages. -- **Notification system** — configurable alerts when tasks complete, agents need attention, or errors occur +- **Notification system** — configurable alerts when tasks complete, agents need your response, new comments arrive, or errors occur - **MCP integration** — supports the built-in `mcp-server` (see [mcp-server folder](./mcp-server)) for integrating external tools and extensible agent plugins out of the box @@ -117,7 +118,7 @@ No prerequisites — Claude Code can be installed and configured directly from t ### Tech stack -Electron, React 18, TypeScript 5, Tailwind CSS 3, Zustand 4. Data from `~/.claude/` (session logs, todos, tasks). No cloud backend — everything runs locally. +Electron 40, React 18, TypeScript 5, Tailwind CSS 3, Zustand 4. Data from `~/.claude/` (session logs, todos, tasks). No cloud backend — everything runs locally. --- diff --git a/agent-teams-controller/src/internal/review.js b/agent-teams-controller/src/internal/review.js index 8e5d4ed2..6349cc48 100644 --- a/agent-teams-controller/src/internal/review.js +++ b/agent-teams-controller/src/internal/review.js @@ -153,6 +153,11 @@ function approveReview(context, taskId, flags = {}) { const leadSessionId = resolveLeadSessionId(context, flags); const prevReviewState = getCurrentReviewState(task); + // Idempotent: already approved → skip duplicate comment/event, only add note if new + if (prevReviewState === 'approved') { + return { ok: true, taskId: task.id, displayId: task.displayId, column: 'approved', alreadyApproved: true }; + } + kanban.setKanbanColumn(context, task.id, 'approved'); // Append review_approved event diff --git a/src/renderer/components/team/TeamDetailView.tsx b/src/renderer/components/team/TeamDetailView.tsx index a29059b8..db91bd1e 100644 --- a/src/renderer/components/team/TeamDetailView.tsx +++ b/src/renderer/components/team/TeamDetailView.tsx @@ -971,8 +971,10 @@ export const TeamDetailView = ({ teamName }: TeamDetailViewProps): React.JSX.Ele

Team not launched yet

- {teamSummary?.displayName || teamName} configuration has been saved. Launch to start - provisioning with CLI. + This is a draft team — {teamSummary?.displayName || teamName} has + been configured with {teamSummary?.memberCount ?? 0} member + {teamSummary?.memberCount === 1 ? '' : 's'} but hasn't been provisioned by CLI + yet. Click Launch to select a model and start the team.