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}