diff --git a/src/main/services/team/TeamMemberResolver.ts b/src/main/services/team/TeamMemberResolver.ts index f6c9830d..c5368981 100644 --- a/src/main/services/team/TeamMemberResolver.ts +++ b/src/main/services/team/TeamMemberResolver.ts @@ -150,6 +150,13 @@ export class TeamMemberResolver { // (recipient of SendMessage to "user"). It's not a real AI teammate. names.delete('user'); + // Defense: merge inbox-derived "lead" alias into canonical "team-lead". + // Teammates sometimes address messages to "lead" instead of "team-lead", + // creating a separate inbox file that the resolver picks up as a phantom member. + if (names.has('lead') && names.has('team-lead')) { + names.delete('lead'); + } + // Defense: hide CLI auto-suffixed duplicates (alice-2) when base name (alice) exists. const keepName = createCliAutoSuffixNameGuard(names); // Defense: hide CLI provisioner artifacts (alice-provisioner) when base name (alice) exists. diff --git a/src/main/services/team/TeamProvisioningService.ts b/src/main/services/team/TeamProvisioningService.ts index d038fd53..4686214d 100644 --- a/src/main/services/team/TeamProvisioningService.ts +++ b/src/main/services/team/TeamProvisioningService.ts @@ -461,6 +461,7 @@ Your FIRST action: call MCP tool member_briefing with: { teamName: "${teamName}", memberName: "${member.name}" } Do NOT start work, claim tasks, or improvise workflow/task/process rules before member_briefing succeeds. If member_briefing fails, send a short message to your team lead "${leadName}" explaining that bootstrap failed, then wait. +IMPORTANT: When sending messages to the team lead, always use the exact name "${leadName}" in the \`to\` field of SendMessage. Never abbreviate or shorten it (e.g. do NOT use "lead" instead of "team-lead"). After member_briefing succeeds: - Introduce yourself briefly (name and role) and confirm you are ready. - Then wait for task assignments. @@ -505,6 +506,7 @@ function buildReconnectMemberSpawnPrompt( { teamName: "${teamName}", memberName: "${member.name}" } Do NOT start work, claim tasks, or improvise workflow/task/process rules before member_briefing succeeds. If member_briefing fails, send a short message to your team lead "${leadName}" explaining that bootstrap failed, then wait. + IMPORTANT: When sending messages to the team lead, always use the exact name "${leadName}" in the \`to\` field of SendMessage. Never abbreviate or shorten it (e.g. do NOT use "lead" instead of "team-lead"). ${buildTeammateAgentBlockReminder()} ${actionModeProtocol} diff --git a/src/renderer/components/team/dialogs/CreateTeamDialog.tsx b/src/renderer/components/team/dialogs/CreateTeamDialog.tsx index f2d75f2a..1d5f1bdc 100644 --- a/src/renderer/components/team/dialogs/CreateTeamDialog.tsx +++ b/src/renderer/components/team/dialogs/CreateTeamDialog.tsx @@ -112,9 +112,9 @@ const DEFAULT_MEMBERS: { name: string; roleSelection: string; workflow?: string }, { name: 'tom', - roleSelection: 'reviewer', + roleSelection: 'researcher', workflow: - 'Review every completed task in the project. Read the code changes, check for correctness, style, and potential issues. Approve the task or request changes with clear feedback.', + 'Research topics, gather information, and analyze relevant sources. Investigate questions, explore options, and provide detailed findings with clear summaries for the team.', }, { name: 'bob', roleSelection: 'developer' }, { name: 'jack', roleSelection: 'developer' }, diff --git a/src/renderer/components/team/members/MemberDraftRow.tsx b/src/renderer/components/team/members/MemberDraftRow.tsx index 9341f52a..f27d0055 100644 --- a/src/renderer/components/team/members/MemberDraftRow.tsx +++ b/src/renderer/components/team/members/MemberDraftRow.tsx @@ -170,7 +170,7 @@ export const MemberDraftRow = ({ ) : null}