diff --git a/desktop/src/features/agents/lib/resolvePersonaRuntime.ts b/desktop/src/features/agents/lib/resolvePersonaRuntime.ts index be0e93689..f59f963ab 100644 --- a/desktop/src/features/agents/lib/resolvePersonaRuntime.ts +++ b/desktop/src/features/agents/lib/resolvePersonaRuntime.ts @@ -73,7 +73,7 @@ export function resolvePersonaRuntime( return { runtime: defaultRuntime, warnings: [ - `Persona is configured for runtime "${personaRuntimeId}" but it is not available. Using ${defaultRuntime.label} instead.`, + `This agent is configured for runtime "${personaRuntimeId}" but it is not available. Using ${defaultRuntime.label} instead.`, ], isOverridden: true, }; @@ -82,7 +82,7 @@ export function resolvePersonaRuntime( return { runtime: null, warnings: [ - `Persona is configured for runtime "${personaRuntimeId}" but it is not available, and no other runtimes were found.`, + `This agent is configured for runtime "${personaRuntimeId}" but it is not available, and no other runtimes were found.`, ], isOverridden: false, }; diff --git a/desktop/src/features/agents/ui/AgentConfigPanel.tsx b/desktop/src/features/agents/ui/AgentConfigPanel.tsx index 7492d7893..b2f3e9480 100644 --- a/desktop/src/features/agents/ui/AgentConfigPanel.tsx +++ b/desktop/src/features/agents/ui/AgentConfigPanel.tsx @@ -115,7 +115,7 @@ function provenanceSentence( case "buzzExplicit": return "Set in Buzz"; case "personaDefault": - return "Inherited from persona"; + return "Inherited from template"; case "runtimeOverride": return "Live override (this session only)"; case "harnessConstraint": diff --git a/desktop/src/features/agents/ui/AgentInstanceEditDialog.tsx b/desktop/src/features/agents/ui/AgentInstanceEditDialog.tsx index b1f40938e..4cc84e509 100644 --- a/desktop/src/features/agents/ui/AgentInstanceEditDialog.tsx +++ b/desktop/src/features/agents/ui/AgentInstanceEditDialog.tsx @@ -235,7 +235,7 @@ export function AgentInstanceEditDialog({ // The runtime id that will actually be active after submit. When inheriting, // resolve from the LINKED PERSONA's runtime — that is what will run once the // override is cleared. Deriving from agent.agentCommand here is wrong for a - // pinned agent that just toggled "Inherit runtime from persona": the override + // pinned agent that just toggled "Inherit runtime from template": the override // (e.g. a Claude pin) is still present on the record, so it would resolve to // the old pin instead of the persona's runtime, hiding required credentials. // Fall back to the agent.agentCommand dual-match (command path, then id) only diff --git a/desktop/src/features/agents/ui/BatchImportDialog.tsx b/desktop/src/features/agents/ui/BatchImportDialog.tsx index 1644bd8e0..8981896bf 100644 --- a/desktop/src/features/agents/ui/BatchImportDialog.tsx +++ b/desktop/src/features/agents/ui/BatchImportDialog.tsx @@ -131,7 +131,7 @@ export function BatchImportDialog({
- Import Personas + Import Agents Found {personas.length} persona {personas.length !== 1 ? "s" : ""} in {fileName || "archive"}. diff --git a/desktop/src/features/agents/ui/CreateAgentDialog.tsx b/desktop/src/features/agents/ui/CreateAgentDialog.tsx index 4c630ac3b..2a638ef78 100644 --- a/desktop/src/features/agents/ui/CreateAgentDialog.tsx +++ b/desktop/src/features/agents/ui/CreateAgentDialog.tsx @@ -828,7 +828,7 @@ export function CreateAgentDialog({ - {/* Inherit runtime from persona */} + {/* Inherit runtime from template */} {linkedPersona ? (

{inheritHarness - ? `Uses the ${linkedPersona.displayName} persona's runtime${ + ? `Uses the ${linkedPersona.displayName} template's runtime${ linkedPersona.runtime ? ` (${linkedPersona.runtime})` : "" - }. Editing the persona and respawning propagates the new runtime.` - : "Pins this agent to a specific runtime command, overriding the persona's runtime."} + }. Editing the template and respawning propagates the new runtime.` + : "Pins this agent to a specific runtime command, overriding the template's runtime."}

) : null} @@ -366,9 +366,9 @@ export function EditAgentAdvancedFields({ Type

-

Built-in persona

+

Built-in agent

diff --git a/desktop/src/features/agents/ui/PersonaCatalogDialog.tsx b/desktop/src/features/agents/ui/PersonaCatalogDialog.tsx index 4aeb2b278..0d6b5583f 100644 --- a/desktop/src/features/agents/ui/PersonaCatalogDialog.tsx +++ b/desktop/src/features/agents/ui/PersonaCatalogDialog.tsx @@ -282,7 +282,7 @@ function PersonaCatalogDetail({ persona }: { persona: AgentPersona }) { items={[ { label: "Type", - value: persona.isBuiltIn ? "Built-in persona" : "Custom persona", + value: persona.isBuiltIn ? "Built-in agent" : "Custom agent", }, { label: "Preferred model", diff --git a/desktop/src/features/agents/ui/PersonaDeleteDialog.tsx b/desktop/src/features/agents/ui/PersonaDeleteDialog.tsx index 567bc0788..537b1900f 100644 --- a/desktop/src/features/agents/ui/PersonaDeleteDialog.tsx +++ b/desktop/src/features/agents/ui/PersonaDeleteDialog.tsx @@ -28,11 +28,11 @@ export function PersonaDeleteDialog({ - Delete persona? + Delete agent? {persona ? `Delete ${persona.displayName}. Existing agents keep their copied settings, but this template will no longer be available for new deployments.` - : "Delete this persona."} + : "Delete this agent."} diff --git a/desktop/src/features/agents/ui/PersonaImportUpdateDialog.tsx b/desktop/src/features/agents/ui/PersonaImportUpdateDialog.tsx index 3064ee3b0..5409f417b 100644 --- a/desktop/src/features/agents/ui/PersonaImportUpdateDialog.tsx +++ b/desktop/src/features/agents/ui/PersonaImportUpdateDialog.tsx @@ -131,7 +131,7 @@ export function PersonaImportUpdateDialog({

- Import persona + Import agent
diff --git a/desktop/src/features/agents/ui/TeamDialog.tsx b/desktop/src/features/agents/ui/TeamDialog.tsx index f91e537e1..efe7af028 100644 --- a/desktop/src/features/agents/ui/TeamDialog.tsx +++ b/desktop/src/features/agents/ui/TeamDialog.tsx @@ -363,7 +363,7 @@ export function TeamDialog({
- Personas + Agents

Select the personas to include in this team.

@@ -384,7 +384,7 @@ export function TeamDialog({
{orderedPersonas.map((persona) => { diff --git a/desktop/src/features/agents/ui/TeamImportDialog.tsx b/desktop/src/features/agents/ui/TeamImportDialog.tsx index 021548ea5..41019ef70 100644 --- a/desktop/src/features/agents/ui/TeamImportDialog.tsx +++ b/desktop/src/features/agents/ui/TeamImportDialog.tsx @@ -148,7 +148,7 @@ export function TeamImportDialog({
-

Personas to import

+

Agents to import

Each persona will be created, then grouped into a new team.

diff --git a/desktop/src/features/agents/ui/UnifiedAgentsSection.tsx b/desktop/src/features/agents/ui/UnifiedAgentsSection.tsx index 0b900e3cf..a72fdced0 100644 --- a/desktop/src/features/agents/ui/UnifiedAgentsSection.tsx +++ b/desktop/src/features/agents/ui/UnifiedAgentsSection.tsx @@ -232,7 +232,7 @@ export function UnifiedAgentsSection(props: UnifiedAgentsSectionProps) { agents={unknown} collapsed={collapsed} groupKey="__unknown__" - label="Unknown Persona" + label="Unknown Agent" startingAgentPubkey={startingAgentPubkey} onToggle={toggle} onOpenAgentProfile={onOpenAgentProfile} diff --git a/desktop/src/features/agents/ui/personaLibraryCopy.ts b/desktop/src/features/agents/ui/personaLibraryCopy.ts index e68d704dc..293e05bff 100644 --- a/desktop/src/features/agents/ui/personaLibraryCopy.ts +++ b/desktop/src/features/agents/ui/personaLibraryCopy.ts @@ -1,14 +1,14 @@ export const personaLibraryCopy = { title: "My agents", description: - "The personas you have chosen for this app. Use them to create teams and launch agents.", + "The agents you have chosen for this app. Use them to create teams and launch agents.", chooseFromCatalog: "Choose from catalog", createNew: "New agent", customAgent: "Custom agent", import: "Import", emptyTitle: "No agents yet", emptyDescription: - "Choose one from Agent Catalog, add your own persona, or import one to get started.", + "Choose one from Agent Catalog, create your own, or import one to get started.", emptyImportHint: "Or drop a .persona.md, .persona.json, .persona.png, or .zip file here to import.", } as const; @@ -30,14 +30,14 @@ export const personaCatalogCopy = { availableState: "Available", detailSelectedTitle: "Selected for My Agents", detailSelectedDescription: - "Turn this off to remove the persona from teams and agent creation in this app.", + "Turn this off to remove the agent from teams and agent creation in this app.", detailAvailableTitle: "Available in Agent Catalog", detailAvailableDescription: - "Turn this on to make the persona available for teams and agent creation.", + "Turn this on to make the agent available for teams and agent creation.", useAction: "Add agent", addedAction: "Added to My Agents", teamEmptyState: - "No personas in My Agents yet. Create one or choose one from Agent Catalog first.", + "No agents in My Agents yet. Create one or choose one from Agent Catalog first.", } as const; export function getPersonaCatalogSelectionActionCopy(isActive: boolean) { diff --git a/desktop/src/features/agents/ui/personaRuntimeModel.ts b/desktop/src/features/agents/ui/personaRuntimeModel.ts index 68c42d07d..64e83b43f 100644 --- a/desktop/src/features/agents/ui/personaRuntimeModel.ts +++ b/desktop/src/features/agents/ui/personaRuntimeModel.ts @@ -119,7 +119,7 @@ export function hasMissingRequiredEnvKey( * The ONE exception is the inherit-TRANSITION-from-a-harness-pin: a previously * harness-pinned agent (e.g. Claude — `agent.agentCommandOverride != null` at * dialog open) has its `provider` cleared and carries no persona credential, - * then the user checks "Inherit runtime from persona" for a provider-backed + * then the user checks "Inherit runtime from template" for a provider-backed * persona (e.g. buzz-agent/Anthropic). Persisting the local (empty) provider + * credential-less env would save an agent that fails readiness on next start. * Only in that case — inheriting AND the local provider is empty AND the agent diff --git a/desktop/src/features/agents/ui/usePersonaActions.ts b/desktop/src/features/agents/ui/usePersonaActions.ts index 3a9b8c885..e58de363f 100644 --- a/desktop/src/features/agents/ui/usePersonaActions.ts +++ b/desktop/src/features/agents/ui/usePersonaActions.ts @@ -232,7 +232,7 @@ export function usePersonaActions() { return true; } catch (error) { setPersonaErrorMessage( - error instanceof Error ? error.message : "Failed to save persona.", + error instanceof Error ? error.message : "Failed to save agent.", ); return false; } finally { @@ -248,7 +248,7 @@ export function usePersonaActions() { setPersonaToDelete(null); } catch (error) { setPersonaErrorMessage( - error instanceof Error ? error.message : "Failed to delete persona.", + error instanceof Error ? error.message : "Failed to delete agent.", ); } } @@ -271,8 +271,8 @@ export function usePersonaActions() { error instanceof Error ? error.message : active - ? "Failed to select persona for My Agents." - : "Failed to deselect persona from My Agents.", + ? "Failed to select agent for My Agents." + : "Failed to deselect agent from My Agents.", ); } } @@ -291,11 +291,11 @@ export function usePersonaActions() { setBatchImportResult(result); setBatchImportFileName(fileName); } else { - setPersonaErrorMessage("No valid personas found in file."); + setPersonaErrorMessage("No valid agents found in file."); } } catch (err) { setPersonaErrorMessage( - err instanceof Error ? err.message : "Failed to parse persona file.", + err instanceof Error ? err.message : "Failed to parse agent file.", ); } } @@ -310,7 +310,7 @@ export function usePersonaActions() { }, onError: (error) => { setPersonaErrorMessage( - error instanceof Error ? error.message : "Failed to export persona.", + error instanceof Error ? error.message : "Failed to export agent.", ); }, }); diff --git a/desktop/src/features/agents/ui/usePersonaImportActions.ts b/desktop/src/features/agents/ui/usePersonaImportActions.ts index 436cd2df8..945e4efaf 100644 --- a/desktop/src/features/agents/ui/usePersonaImportActions.ts +++ b/desktop/src/features/agents/ui/usePersonaImportActions.ts @@ -48,7 +48,7 @@ export function usePersonaImportActions( (candidate) => candidate.id === personaId, ); if (!persona) { - const message = "Persona not found. Refresh and try again."; + const message = "Agent not found. Refresh and try again."; feedback.setPersonaErrorMessage(message); throw new Error(message); } @@ -56,7 +56,7 @@ export function usePersonaImportActions( try { const result = await parsePersonaFiles(fileBytes, fileName); if (result.personas.length === 0) { - const message = "No valid personas found in file."; + const message = "No valid agents found in file."; feedback.setPersonaErrorMessage(message); throw new Error(message); } @@ -66,7 +66,7 @@ export function usePersonaImportActions( feedback.setPersonaDialogState(null); } catch (err) { const message = - err instanceof Error ? err.message : "Failed to parse persona file."; + err instanceof Error ? err.message : "Failed to parse agent file."; feedback.setPersonaErrorMessage(message); throw err instanceof Error ? err : new Error(message); } diff --git a/desktop/src/features/agents/ui/useTeamActions.ts b/desktop/src/features/agents/ui/useTeamActions.ts index ffc4024ba..cf313f192 100644 --- a/desktop/src/features/agents/ui/useTeamActions.ts +++ b/desktop/src/features/agents/ui/useTeamActions.ts @@ -158,7 +158,7 @@ export function useTeamActions( actions.setActionErrorMessage(null); setTeamDialogState({ title: "Create team", - description: "Group personas together for quick deployment to channels.", + description: "Group agents together for quick deployment to channels.", submitLabel: "Create team", initialValues: { name: "", diff --git a/desktop/src/features/channels/ui/AddChannelBotDialog.tsx b/desktop/src/features/channels/ui/AddChannelBotDialog.tsx index 924a95adc..97e0fd871 100644 --- a/desktop/src/features/channels/ui/AddChannelBotDialog.tsx +++ b/desktop/src/features/channels/ui/AddChannelBotDialog.tsx @@ -433,7 +433,7 @@ export function AddChannelBotDialog({ ? "Loading runtimes..." : providers.length === 0 ? "No runtimes found" - : (selectedRuntime?.label ?? "Use persona defaults"); + : (selectedRuntime?.label ?? "Use agent defaults"); const addButtonLabel = createBotsMutation.isPending ? selectedCount > 1 ? `Adding ${selectedCount}...` @@ -447,7 +447,7 @@ export function AddChannelBotDialog({
diff --git a/desktop/src/features/channels/ui/AddChannelBotPersonasSection.tsx b/desktop/src/features/channels/ui/AddChannelBotPersonasSection.tsx index b33840b6b..6fb82fa17 100644 --- a/desktop/src/features/channels/ui/AddChannelBotPersonasSection.tsx +++ b/desktop/src/features/channels/ui/AddChannelBotPersonasSection.tsx @@ -118,7 +118,7 @@ export function AddChannelBotPersonasSection({
-
Personas
+
Agents

Toggle as many as you want. Each selected persona is added as its own agent. Hover a persona to preview its role. @@ -215,7 +215,7 @@ export function AddChannelBotPersonasSection({ {isLoading ? ( -

Loading personas...

+

Loading agents...

) : null}
diff --git a/desktop/src/features/onboarding/welcomeGuide.ts b/desktop/src/features/onboarding/welcomeGuide.ts index 4ce2b4969..6cc2394d2 100644 --- a/desktop/src/features/onboarding/welcomeGuide.ts +++ b/desktop/src/features/onboarding/welcomeGuide.ts @@ -96,7 +96,7 @@ async function ensureWelcomeGuidePersonaActive() { (persona) => persona.id === WELCOME_GUIDE_PERSONA_ID, ); if (!guidePersona) { - throw new Error(`${WELCOME_GUIDE_AGENT_NAME} persona not found.`); + throw new Error(`${WELCOME_GUIDE_AGENT_NAME} agent not found.`); } if (!guidePersona.isActive) { await setPersonaActive(WELCOME_GUIDE_PERSONA_ID, true); diff --git a/desktop/src/testing/e2eBridge.ts b/desktop/src/testing/e2eBridge.ts index 953b3de40..3c267d45c 100644 --- a/desktop/src/testing/e2eBridge.ts +++ b/desktop/src/testing/e2eBridge.ts @@ -1445,7 +1445,7 @@ function buildMockConfigSurface(pubkey: string): { // Mixed-provenance showcase — top-level rows carry different origins so the // panel witnesses distinct provenance labels in one frame: "Set in Buzz", - // "Inherited from persona", "From config file (...)" and + // "Inherited from template", "From config file (...)" and // "From environment variable (...)". const multiOriginSurface = { runtimeId: "goose", diff --git a/desktop/tests/e2e/agents.spec.ts b/desktop/tests/e2e/agents.spec.ts index bf704f57f..cf9573afe 100644 --- a/desktop/tests/e2e/agents.spec.ts +++ b/desktop/tests/e2e/agents.spec.ts @@ -336,7 +336,7 @@ test("catalog detail pane shows the full persona details", async ({ page }) => { "You are Fizz.", ); await expect(page.getByTestId("persona-catalog-detail-pane")).toContainText( - "Built-in persona", + "Built-in agent", ); await expect(page.getByTestId("persona-catalog-detail-pane")).toContainText( "Preferred model", @@ -409,7 +409,7 @@ test("custom personas can be shown in the agent catalog", async ({ page }) => { ).toContainText("Analyst"); await selectCatalogPersona(page, analystPersonaId); await expect(page.getByTestId("persona-catalog-detail-pane")).toContainText( - "Custom persona", + "Custom agent", ); await expect( page.getByTestId(`persona-catalog-use-agent-target-${analystPersonaId}`), diff --git a/desktop/tests/e2e/config-bridge-screenshots.spec.ts b/desktop/tests/e2e/config-bridge-screenshots.spec.ts index 170244ccb..415d55a7f 100644 --- a/desktop/tests/e2e/config-bridge-screenshots.spec.ts +++ b/desktop/tests/e2e/config-bridge-screenshots.spec.ts @@ -210,7 +210,7 @@ test.describe("config bridge screenshots", () => { // Multiple distinct provenance origins visible at once. await expect(panel.getByText("Set in Buzz").first()).toBeVisible(); - await expect(panel.getByText("Inherited from persona")).toBeVisible(); + await expect(panel.getByText("Inherited from template")).toBeVisible(); await expect( panel.getByText("From environment variable (GOOSE_MODE)"), ).toBeVisible();