diff --git a/README.md b/README.md
index 5541a858b8..cea39e55c8 100644
--- a/README.md
+++ b/README.md
@@ -67,7 +67,7 @@ It looks like a task manager. Under the hood: org charts, budgets, governance, g
## Paperclip is right for you if
-- ✅ You want to build **autonomous AI companies**
+- ✅ You want to build **autonomous AI organizations**
- ✅ You **coordinate many different agents** (OpenClaw, Codex, Claude, Cursor) toward a common goal
- ✅ You have **20 simultaneous Claude Code terminals** open and lose track of what everyone is doing
- ✅ You want agents running **autonomously 24/7**, but still want to audit work and chime in when needed
@@ -106,7 +106,7 @@ Any agent, any runtime, one org chart. If it can receive a heartbeat, it's hired
🎯 Goal Alignment
-Every task traces back to the company mission. Agents know what to do and why .
+Every task traces back to the organization mission. Agents know what to do and why .
💓 Heartbeats
@@ -119,8 +119,8 @@ Agents wake on a schedule, check work, and act. Delegation flows up and down the
Monthly budgets per agent. When they hit the limit, they stop. No runaway costs.
-🏢 Multi-Company
-One deployment, many companies. Complete data isolation. One control plane for your portfolio.
+🏢 Multi-Organization
+One deployment, many organizations. Complete data isolation. One control plane for your portfolio.
🎫 Ticket System
@@ -170,7 +170,7 @@ Paperclip handles the hard orchestration details correctly.
| **Governance with rollback.** | Approval gates are enforced, config changes are revisioned, and bad changes can be rolled back safely. |
| **Goal-aware execution.** | Tasks carry full goal ancestry so agents consistently see the "why," not just a title. |
| **Portable company templates.** | Export/import orgs, agents, and skills with secret scrubbing and collision handling. |
-| **True multi-company isolation.** | Every entity is company-scoped, so one deployment can run many companies with separate data and audit trails. |
+| **True multi-organization isolation.** | Every entity is company-scoped, so one deployment can run many companies with separate data and audit trails. |
diff --git a/doc/CLI.md b/doc/CLI.md
index f01291b299..aa6a0ad616 100644
--- a/doc/CLI.md
+++ b/doc/CLI.md
@@ -297,7 +297,7 @@ npx paperclipai context set --api-key-env-var-name PAPERCLIP_API_KEY
export PAPERCLIP_API_KEY=...
```
-## Company Commands
+## Organization Commands
```sh
npx paperclipai company list
@@ -633,7 +633,7 @@ npx paperclipai skills install paperclipai:optional:browser:agent-browser --comp
External GitHub, skills.sh, local-path, and URL sources still go through
`skills import`; catalog commands are for the app-shipped catalog only.
-### Company library
+### Organization library
```sh
npx paperclipai skills list --company-id
@@ -762,7 +762,7 @@ bootstrap credentials in Paperclip secrets.
Per-company provider vaults (multiple vault instances per provider, default
vault selection, coming-soon GCP/Vault) can be configured from the board UI under
-`Company Settings → Secrets → Provider vaults` or through the provider-config CLI
+`Organization Settings → Secrets → Provider vaults` or through the provider-config CLI
commands above. See the
[secrets deploy guide](../docs/deploy/secrets.md#provider-vaults) and
[API reference](../docs/api/secrets.md#provider-vaults) for the contract.
diff --git a/docs/deploy/secrets.md b/docs/deploy/secrets.md
index c589eacf2c..3823079578 100644
--- a/docs/deploy/secrets.md
+++ b/docs/deploy/secrets.md
@@ -254,7 +254,7 @@ default provider — no migration is required.
### Where to configure
-Open `Company Settings → Secrets` in the board UI and switch to the
+Open `Organization Settings → Secrets` in the board UI and switch to the
`Provider vaults` tab. From there you can:
- Create a vault for any supported provider family.
diff --git a/docs/start/core-concepts.md b/docs/start/core-concepts.md
index 6709e8a8c2..ad65b6881f 100644
--- a/docs/start/core-concepts.md
+++ b/docs/start/core-concepts.md
@@ -5,9 +5,9 @@ summary: Companies, agents, issues, delegation, heartbeats, and governance
Paperclip organizes autonomous AI work around six key concepts.
-## Company
+## Organization
-A company is the top-level unit of organization. Each company has:
+An organization is the top-level unit in Paperclip. Each organization has:
- A **goal** — the reason it exists (e.g. "Build the #1 AI note-taking app at $1M MRR")
- **Employees** — every employee is an AI agent
diff --git a/tests/e2e/conference-room-typing-intro.spec.ts b/tests/e2e/conference-room-typing-intro.spec.ts
index b69f9a6a16..0935ebc0a2 100644
--- a/tests/e2e/conference-room-typing-intro.spec.ts
+++ b/tests/e2e/conference-room-typing-intro.spec.ts
@@ -69,7 +69,7 @@ async function runOnboardingWizard(page: Page, companyName: string) {
if (await startBtn.count()) await startBtn.first().click();
// Step 0: front door (skipped when the wizard opens on the create path).
- const frontDoor = page.getByText("Build a new company");
+ const frontDoor = page.getByText("Build a new organization");
if (await frontDoor.count()) await frontDoor.first().click();
// Step 1: company name.
diff --git a/tests/e2e/nux-phase4-screenshots.spec.ts b/tests/e2e/nux-phase4-screenshots.spec.ts
index cf3da3e3a6..e18b5a5b8f 100644
--- a/tests/e2e/nux-phase4-screenshots.spec.ts
+++ b/tests/e2e/nux-phase4-screenshots.spec.ts
@@ -33,7 +33,7 @@ function shot(name: string) {
async function openWizard(page: import("@playwright/test").Page) {
await page.goto("/onboarding");
- const startBtn = page.getByRole("button", { name: /Start Onboarding|New Company|Add Agent/ });
+ const startBtn = page.getByRole("button", { name: /Start Onboarding|New Organization|Add Agent/ });
if (await startBtn.count()) {
await startBtn.first().click();
}
@@ -61,7 +61,7 @@ test.describe("NUX Phase 4 visual QA", () => {
await openWizard(page);
// Front door shows when the wizard doesn't open directly on the create
// path (e.g. another spec already created a company on this instance).
- const createCard = page.getByRole("button", { name: /Build a new company/ });
+ const createCard = page.getByRole("button", { name: /Build a new organization/ });
if (await createCard.count()) {
await createCard.first().click();
}
@@ -101,7 +101,7 @@ test.describe("NUX Phase 4 visual QA", () => {
page.getByRole("heading", { name: "Welcome to Paperclip" }),
).toBeVisible({ timeout: 10_000 });
await expect(
- page.getByRole("heading", { name: "Build a new company" }),
+ page.getByRole("heading", { name: "Build a new organization" }),
).toBeVisible();
await expect(
page.getByRole("heading", { name: "Add agents to your org" }),
@@ -131,7 +131,7 @@ test.describe("NUX Phase 4 visual QA", () => {
// Composer renders once a company is selected. (Regression guard for the
// Rules-of-Hooks crash that previously blanked this page — see PAP-50.)
await expect(
- page.getByPlaceholder("Ask anything about your company..."),
+ page.getByPlaceholder("Ask anything about your organization..."),
).toBeVisible({ timeout: 20_000 });
await page.waitForTimeout(2_000); // let welcome bubble + suggestion chips stage in
await page.screenshot({ path: shot("06-board-chat.png") });
diff --git a/tests/e2e/onboarding.spec.ts b/tests/e2e/onboarding.spec.ts
index d7819493fd..0755e6aade 100644
--- a/tests/e2e/onboarding.spec.ts
+++ b/tests/e2e/onboarding.spec.ts
@@ -41,12 +41,12 @@ test.describe("Onboarding wizard", () => {
// The wizard may open on a launcher card or directly on the capsule
// wizard; the front door (step 0) requires a click into the create path.
const startBtn = page.getByRole("button", {
- name: /Start Onboarding|New Company|Add Agent/,
+ name: /Start Onboarding|New Organization|Add Agent/,
});
if (await startBtn.count()) {
await startBtn.first().click();
}
- const createCard = page.getByRole("button", { name: /Build a new company/ });
+ const createCard = page.getByRole("button", { name: /Build a new organization/ });
if (await createCard.count()) {
await createCard.first().click();
}
diff --git a/tests/e2e/planning-mode-visual-verification.spec.ts b/tests/e2e/planning-mode-visual-verification.spec.ts
index 1c8978c2e8..d3a69bf1f8 100644
--- a/tests/e2e/planning-mode-visual-verification.spec.ts
+++ b/tests/e2e/planning-mode-visual-verification.spec.ts
@@ -48,10 +48,10 @@ test("captures planning mode UI for desktop and mobile", async ({ page }) => {
});
await page.goto("/onboarding");
- const startBtn = page.getByRole("button", { name: /Start Onboarding|New Company|Add Agent/ });
+ const startBtn = page.getByRole("button", { name: /Start Onboarding|New Organization|Add Agent/ });
if (await startBtn.count()) await startBtn.first().click();
- const createCard = page.getByRole("button", { name: /Build a new company/ });
+ const createCard = page.getByRole("button", { name: /Build a new organization/ });
if (await createCard.count()) await createCard.first().click();
await expect(page.getByRole("heading", { name: "What is the name of your organization?" })).toBeVisible({ timeout: 15_000 });
diff --git a/ui/src/App.activity-routing.test.tsx b/ui/src/App.activity-routing.test.tsx
index 5a7e5ce7de..55eb7abb30 100644
--- a/ui/src/App.activity-routing.test.tsx
+++ b/ui/src/App.activity-routing.test.tsx
@@ -141,7 +141,7 @@ describe("App Activity routing (PAP-16302)", () => {
it("serves the merged Activity page at /:company/activity", async () => {
const root = renderAppAt(container, "/PAP/activity");
await waitForRoute(container, "ACTIVITY_PAGE@/PAP/activity");
- expect(container.textContent).not.toContain("No company matches prefix");
+ expect(container.textContent).not.toContain("No organization matches prefix");
flushSync(() => root.unmount());
});
@@ -169,7 +169,7 @@ describe("App Activity routing (PAP-16302)", () => {
it("redirects the bare /audit deep link through to the prefixed Activity page", async () => {
const root = renderAppAt(container, "/audit");
await waitForRoute(container, "ACTIVITY_PAGE@/PAP/activity?mode=agents");
- expect(container.textContent).not.toContain("No company matches prefix");
+ expect(container.textContent).not.toContain("No organization matches prefix");
flushSync(() => root.unmount());
});
});
diff --git a/ui/src/App.cases-routing.test.tsx b/ui/src/App.cases-routing.test.tsx
index 7a85e81981..dc110a1307 100644
--- a/ui/src/App.cases-routing.test.tsx
+++ b/ui/src/App.cases-routing.test.tsx
@@ -132,14 +132,14 @@ describe("App Cases routing (PAP-13002)", () => {
it("redirects unprefixed /cases to the company-prefixed list page", async () => {
const root = await renderAppAt(container, "/cases");
await waitForRoute(container, "CASES_LIST_PAGE");
- expect(container.textContent).not.toContain("No company matches prefix");
+ expect(container.textContent).not.toContain("No organization matches prefix");
flushSync(() => root.unmount());
});
it("redirects unprefixed /cases/:id to the company-prefixed detail page", async () => {
const root = await renderAppAt(container, "/cases/PAP-C5");
await waitForRoute(container, "CASE_DETAIL_PAGE");
- expect(container.textContent).not.toContain("No company matches prefix");
+ expect(container.textContent).not.toContain("No organization matches prefix");
flushSync(() => root.unmount());
});
});
diff --git a/ui/src/App.test.tsx b/ui/src/App.test.tsx
index 920f192baf..020c2c0eb2 100644
--- a/ui/src/App.test.tsx
+++ b/ui/src/App.test.tsx
@@ -115,9 +115,9 @@ describe("CloudAccessGate", () => {
});
const root = renderGate(container);
- await waitForText(container, "No company access");
+ await waitForText(container, "No organization access");
- expect(container.textContent).toContain("No company access");
+ expect(container.textContent).toContain("No organization access");
expect(container.textContent).not.toContain("Outlet content");
unmountRoot(root);
@@ -141,7 +141,7 @@ describe("CloudAccessGate", () => {
await waitForText(container, "Outlet content");
expect(container.textContent).toContain("Outlet content");
- expect(container.textContent).not.toContain("No company access");
+ expect(container.textContent).not.toContain("No organization access");
unmountRoot(root);
});
diff --git a/ui/src/App.tsx b/ui/src/App.tsx
index 4e9d9fcee9..5e6b326c48 100644
--- a/ui/src/App.tsx
+++ b/ui/src/App.tsx
@@ -463,13 +463,13 @@ export function OnboardingRoutePage() {
const title = matchedCompany
? `Add another agent to ${matchedCompany.name}`
: companies.length > 0
- ? "Create another company"
- : "Create your first company";
+ ? "Create another organization"
+ : "Create your first organization";
const description = matchedCompany
- ? "Run onboarding again to add an agent and a starter task for this company."
+ ? "Run onboarding again to add an agent and a starter task for this organization."
: companies.length > 0
- ? "Run onboarding again to create another company and seed its first agent."
- : "Get started by creating a company and your first agent.";
+ ? "Run onboarding again to create another organization and seed its first agent."
+ : "Get started by creating an organization and your first agent.";
return (
@@ -588,10 +588,10 @@ function NoCompaniesStartPage() {
- {t("app.noCompanies.title", { defaultValue: "Create your first company" })}
+ {t("app.noCompanies.title", { defaultValue: "Create your first organization" })}
- {t("app.noCompanies.description", { defaultValue: "Get started by creating a company." })}
+ {t("app.noCompanies.description", { defaultValue: "Get started by creating an organization." })}
{/* Same as the onboarding route: no Cloud origin means nowhere to
@@ -611,7 +611,7 @@ function NoCompaniesStartPage() {
: openOnboarding()
}
>
- {t("app.noCompanies.newCompany", { defaultValue: "New Company" })}
+ {t("app.noCompanies.newCompany", { defaultValue: "New Organization" })}
)}
diff --git a/ui/src/adapters/claude-local/config-fields.tsx b/ui/src/adapters/claude-local/config-fields.tsx
index ab546ebbb5..d0604b79ab 100644
--- a/ui/src/adapters/claude-local/config-fields.tsx
+++ b/ui/src/adapters/claude-local/config-fields.tsx
@@ -167,7 +167,7 @@ export function ClaudeLocalAdvancedFields({
{
- if (!selectedCompanyId) throw new Error("Select a company to create secrets");
+ if (!selectedCompanyId) throw new Error("Select an organization to create secrets");
return secretsApi.create(selectedCompanyId, input);
},
onSuccess: () => {
@@ -334,7 +334,7 @@ export function AgentConfigForm(props: AgentConfigFormProps) {
const uploadMarkdownImage = useMutation({
mutationFn: async ({ file, namespace }: { file: File; namespace: string }) => {
- if (!selectedCompanyId) throw new Error("Select a company to upload images");
+ if (!selectedCompanyId) throw new Error("Select an organization to upload images");
return assetsApi.uploadImage(selectedCompanyId, file, namespace);
},
});
@@ -711,7 +711,7 @@ export function AgentConfigForm(props: AgentConfigFormProps) {
: ["agents", "none", "detect-model", adapterType],
queryFn: () => {
if (!selectedCompanyId) {
- throw new Error("Select a company to detect the model");
+ throw new Error("Select an organization to detect the model");
}
return agentsApi.detectModel(selectedCompanyId, adapterType);
},
@@ -867,7 +867,7 @@ export function AgentConfigForm(props: AgentConfigFormProps) {
const testEnvironment = useMutation({
mutationFn: async () => {
if (!selectedCompanyId) {
- throw new Error("Select a company to test adapter environment");
+ throw new Error("Select an organization to test adapter environment");
}
const flushedEnv = flushEnvironmentDraft();
const adapterConfigPatch = flushedEnv ? { env: flushedEnv } : undefined;
@@ -1052,7 +1052,7 @@ export function AgentConfigForm(props: AgentConfigFormProps) {
(!loginNeedsPty || providerSupportsLoginPty);
const runEnvironmentTest = useCallback(async () => {
if (!selectedCompanyId) {
- throw new Error("Select a company to test adapter environment");
+ throw new Error("Select an organization to test adapter environment");
}
setTestActionPending(true);
setTestActionError(null);
@@ -1454,7 +1454,7 @@ export function AgentConfigForm(props: AgentConfigFormProps) {
) : (
This instance requires the Kubernetes sandbox, but no managed Kubernetes
- environment is available for this company yet. Configure one before creating
+ environment is available for this organization yet. Configure one before creating
agents; execution will not fall back to local.
)}
diff --git a/ui/src/components/AppsSidebar.tsx b/ui/src/components/AppsSidebar.tsx
index f339f8e9bc..882e969b7a 100644
--- a/ui/src/components/AppsSidebar.tsx
+++ b/ui/src/components/AppsSidebar.tsx
@@ -57,7 +57,7 @@ export function AppsSidebar() {
className="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground"
>
- {selectedCompany?.name ?? "Company"}
+ {selectedCompany?.name ?? "Organization"}
diff --git a/ui/src/components/BootstrapPendingPage.tsx b/ui/src/components/BootstrapPendingPage.tsx
index 6724a5dff0..b2d4885267 100644
--- a/ui/src/components/BootstrapPendingPage.tsx
+++ b/ui/src/components/BootstrapPendingPage.tsx
@@ -100,7 +100,7 @@ export function BootstrapPendingPage({
You're the instance admin
- Setup is complete. Taking you to onboarding to create your first company...
+ Setup is complete. Taking you to onboarding to create your first organization...
diff --git a/ui/src/components/CloudAccessGate.tsx b/ui/src/components/CloudAccessGate.tsx
index 960533875a..7b47cb854c 100644
--- a/ui/src/components/CloudAccessGate.tsx
+++ b/ui/src/components/CloudAccessGate.tsx
@@ -13,13 +13,13 @@ function NoBoardAccessPage() {
return (
- No company access
+ No organization access
- This account is signed in, but it does not have an active company membership or instance-admin access on
+ This account is signed in, but it does not have an active organization membership or instance-admin access on
this Paperclip instance.
- Use a company invite or sign in with an account that already belongs to this org.
+ Use an organization invite or sign in with an account that already belongs to this org.
diff --git a/ui/src/components/CompanySettingsSidebar.tsx b/ui/src/components/CompanySettingsSidebar.tsx
index 2f9e7abaaa..368715fcb4 100644
--- a/ui/src/components/CompanySettingsSidebar.tsx
+++ b/ui/src/components/CompanySettingsSidebar.tsx
@@ -94,7 +94,7 @@ export function CompanySettingsSidebar() {
className="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground"
>
- {selectedCompany?.name ?? "Company"}
+ {selectedCompany?.name ?? "Organization"}
diff --git a/ui/src/components/CompanySwitcher.tsx b/ui/src/components/CompanySwitcher.tsx
index 9882d53be2..64fbe7d245 100644
--- a/ui/src/components/CompanySwitcher.tsx
+++ b/ui/src/components/CompanySwitcher.tsx
@@ -50,14 +50,14 @@ export function CompanySwitcher({ open: controlledOpen, onOpenChange }: CompanyS
)}
- {selectedCompany?.name ?? "Select company"}
+ {selectedCompany?.name ?? "Select organization"}
- Companies
+ Organizations
{sidebarCompanies.map((company) => (
- Couldn't load companies
+ Couldn't load organizations
{
// Keep the menu open so the result of the retry is visible.
@@ -88,7 +88,7 @@ export function CompanySwitcher({ open: controlledOpen, onOpenChange }: CompanyS
>
) : (
- No companies
+ No organizations
)
)}
@@ -101,7 +101,7 @@ export function CompanySwitcher({ open: controlledOpen, onOpenChange }: CompanyS
- Manage Companies
+ Manage Organizations
diff --git a/ui/src/components/ConfigureBuiltInAgentModal.tsx b/ui/src/components/ConfigureBuiltInAgentModal.tsx
index 3931474e47..79e29131f8 100644
--- a/ui/src/components/ConfigureBuiltInAgentModal.tsx
+++ b/ui/src/components/ConfigureBuiltInAgentModal.tsx
@@ -158,7 +158,7 @@ export function ConfigureBuiltInAgentModal({
Creates {definition.displayName} in your roster, badged{" "}
- Built-in . Companies that require hire approval will queue this for the
+ Built-in . Organizations that require hire approval will queue this for the
board.
diff --git a/ui/src/components/FeedCard.tsx b/ui/src/components/FeedCard.tsx
index 099071969a..614f299b34 100644
--- a/ui/src/components/FeedCard.tsx
+++ b/ui/src/components/FeedCard.tsx
@@ -115,13 +115,13 @@ function formatVerb(
case "goal.deleted":
return "deleted goal";
case "company.created":
- return "created company";
+ return "created organization";
case "company.updated":
- return "updated company";
+ return "updated organization";
case "company.archived":
- return "archived company";
+ return "archived organization";
case "company.budget_updated":
- return "updated company budget";
+ return "updated organization budget";
default:
return action.replace(/[._]/g, " ");
diff --git a/ui/src/components/FrontDoor.tsx b/ui/src/components/FrontDoor.tsx
index 24345fa7f9..9986ed2bdf 100644
--- a/ui/src/components/FrontDoor.tsx
+++ b/ui/src/components/FrontDoor.tsx
@@ -30,7 +30,7 @@ export function FrontDoor({ onChoose }: FrontDoorProps) {
-
Build a new company
+
Build a new organization
Begin with a mission, bring on a lead agent, and grow a team of agents to do the work.
diff --git a/ui/src/components/InteractionGovernancePanel.tsx b/ui/src/components/InteractionGovernancePanel.tsx
index 358a57a8a7..d697b1f094 100644
--- a/ui/src/components/InteractionGovernancePanel.tsx
+++ b/ui/src/components/InteractionGovernancePanel.tsx
@@ -243,7 +243,7 @@ export function InteractionGovernancePanel({
Thread interactions are open by default:{" "}
- Anyone in the company — the
+ Anyone in the organization — the
board or any agent, including the one that asked — can respond. Narrow a kind
only when you need to.{" "}
Default policy is the
diff --git a/ui/src/components/IssueChatThread.test.tsx b/ui/src/components/IssueChatThread.test.tsx
index 0fbc3a1a14..757dd7ad94 100644
--- a/ui/src/components/IssueChatThread.test.tsx
+++ b/ui/src/components/IssueChatThread.test.tsx
@@ -3948,7 +3948,7 @@ describe("IssueAssigneePausedNotice", () => {
);
});
- expect(container.textContent).toContain("arrived paused from a company import");
+ expect(container.textContent).toContain("arrived paused from an organization import");
const resumeButton = container.querySelector(
'[data-testid="issue-assignee-paused-resume"]',
) as HTMLButtonElement | null;
diff --git a/ui/src/components/IssueChatThread.tsx b/ui/src/components/IssueChatThread.tsx
index 71862484c1..cf4b0baf8e 100644
--- a/ui/src/components/IssueChatThread.tsx
+++ b/ui/src/components/IssueChatThread.tsx
@@ -644,7 +644,7 @@ export function IssueAssigneePausedNotice({
agent.pauseReason === "budget"
? "It was paused by a budget hard stop."
: agent.pauseReason === "import"
- ? "It arrived paused from a company import — imported agents stay parked until you resume them."
+ ? "It arrived paused from an organization import — imported agents stay parked until you resume them."
: agent.pauseReason === "system"
? "It was paused by the system."
: "It was paused manually.";
diff --git a/ui/src/components/IssueThreadInteractionCard.test.tsx b/ui/src/components/IssueThreadInteractionCard.test.tsx
index 3995a58cdf..2b27093e8f 100644
--- a/ui/src/components/IssueThreadInteractionCard.test.tsx
+++ b/ui/src/components/IssueThreadInteractionCard.test.tsx
@@ -1276,7 +1276,7 @@ describe("IssueThreadInteractionCard resolver audience", () => {
expect(audience?.getAttribute("data-audience-policy")).toBe("human_only");
expect(
host.querySelector('[data-testid="interaction-audience-note"]')?.textContent,
- ).toBe("Company interaction governance narrowed this from Anyone to Human only.");
+ ).toBe("Organization interaction governance narrowed this from Anyone to Human only.");
});
it("explains a legacy card that predates the open default", () => {
diff --git a/ui/src/components/IssueThreadInteractionCard.tsx b/ui/src/components/IssueThreadInteractionCard.tsx
index 747ccb378a..a7b7f2ac2a 100644
--- a/ui/src/components/IssueThreadInteractionCard.tsx
+++ b/ui/src/components/IssueThreadInteractionCard.tsx
@@ -3682,7 +3682,7 @@ export function IssueThreadInteractionCard({
- Directed to {addresseeLabel}. Agent-addressed interactions are owned by that agent and are kept out of the open company attention feed.
+ Directed to {addresseeLabel}. Agent-addressed interactions are owned by that agent and are kept out of the open organization attention feed.
) : null}
@@ -3853,7 +3853,7 @@ function ResolvedByAgentChip() {
- Resolved by an agent under the company's interaction governance policy — audit-distinct from a human board resolution.
+ Resolved by an agent under the organization's interaction governance policy — audit-distinct from a human board resolution.
);
diff --git a/ui/src/components/JsonSchemaForm.tsx b/ui/src/components/JsonSchemaForm.tsx
index 5668665854..d1466eb8fc 100644
--- a/ui/src/components/JsonSchemaForm.tsx
+++ b/ui/src/components/JsonSchemaForm.tsx
@@ -699,7 +699,7 @@ const SecretField = React.memo(({
label={label}
description={
description ||
- "Pick an existing company secret, or paste a raw value (Paperclip will store it as a secret on save)."
+ "Pick an existing organization secret, or paste a raw value (Paperclip will store it as a secret on save)."
}
required={isRequired}
error={error}
diff --git a/ui/src/components/NewAgentDialog.test.tsx b/ui/src/components/NewAgentDialog.test.tsx
index b1c63b9e1c..5fc729d9cb 100644
--- a/ui/src/components/NewAgentDialog.test.tsx
+++ b/ui/src/components/NewAgentDialog.test.tsx
@@ -160,7 +160,7 @@ describe("NewAgentDialog", () => {
});
expect(container.textContent).toContain("Generate a one-time onboarding prompt");
- expect(container.textContent).not.toContain("Company Invites");
+ expect(container.textContent).not.toContain("Organization Invites");
const generateButton = Array.from(container.querySelectorAll("button")).find(
(button) => button.textContent === "Generate onboarding prompt",
diff --git a/ui/src/components/NewAgentDialog.tsx b/ui/src/components/NewAgentDialog.tsx
index 1324b84c2a..73bd9e3b6a 100644
--- a/ui/src/components/NewAgentDialog.tsx
+++ b/ui/src/components/NewAgentDialog.tsx
@@ -352,7 +352,7 @@ export function NewAgentDialog() {
- Agent invites create a join request first. A company admin still approves the request before the agent can claim its API key.
+ Agent invites create a join request first. An organization admin still approves the request before the agent can claim its API key.
@@ -385,7 +385,7 @@ export function NewAgentDialog() {
) : null}
- Send this prompt to the external agent that should join this company.
+ Send this prompt to the external agent that should join this organization.
diff --git a/ui/src/components/NewGoalDialog.tsx b/ui/src/components/NewGoalDialog.tsx
index a41ea3e4e5..f842015452 100644
--- a/ui/src/components/NewGoalDialog.tsx
+++ b/ui/src/components/NewGoalDialog.tsx
@@ -27,7 +27,7 @@ import { MarkdownEditor, type MarkdownEditorRef } from "./MarkdownEditor";
import { StatusBadge } from "./StatusBadge";
const levelLabels: Record = {
- company: "Company",
+ company: "Organization",
team: "Team",
agent: "Agent",
task: "Task",
@@ -70,7 +70,7 @@ export function NewGoalDialog() {
const uploadDescriptionImage = useMutation({
mutationFn: async (file: File) => {
- if (!selectedCompanyId) throw new Error("No company selected");
+ if (!selectedCompanyId) throw new Error("No organization selected");
return assetsApi.uploadImage(selectedCompanyId, file, "goals/drafts");
},
});
diff --git a/ui/src/components/NewIssueDialog.test.tsx b/ui/src/components/NewIssueDialog.test.tsx
index 2a6c778a7a..8e9275f83c 100644
--- a/ui/src/components/NewIssueDialog.test.tsx
+++ b/ui/src/components/NewIssueDialog.test.tsx
@@ -570,7 +570,7 @@ describe("NewIssueDialog", () => {
await waitForAssertion(() => {
expect(container.querySelector('[data-testid="new-issue-paused-assignee-note"]')).not.toBeNull();
});
- expect(container.textContent).toContain("arrived paused from a company import");
+ expect(container.textContent).toContain("arrived paused from an organization import");
act(() => root.unmount());
});
diff --git a/ui/src/components/NewIssueDialog.tsx b/ui/src/components/NewIssueDialog.tsx
index a382b7c13a..8de5329688 100644
--- a/ui/src/components/NewIssueDialog.tsx
+++ b/ui/src/components/NewIssueDialog.tsx
@@ -688,7 +688,7 @@ export function NewIssueDialog() {
const uploadDescriptionImage = useMutation({
mutationFn: async (file: File) => {
- if (!effectiveCompanyId) throw new Error("No company selected");
+ if (!effectiveCompanyId) throw new Error("No organization selected");
return assetsApi.uploadImage(effectiveCompanyId, file, "issues/drafts");
},
});
@@ -2341,7 +2341,7 @@ export function NewIssueDialog() {
{selectedAssigneeAgent.name} is paused and will not start work on this task until it is resumed
- {selectedAssigneeAgent.pauseReason === "import" ? " — it arrived paused from a company import" : ""}. You can resume it from the task page after creating the task.
+ {selectedAssigneeAgent.pauseReason === "import" ? " — it arrived paused from an organization import" : ""}. You can resume it from the task page after creating the task.
) : null}
diff --git a/ui/src/components/NewProjectDialog.tsx b/ui/src/components/NewProjectDialog.tsx
index 7bb3158f7d..a041a72a65 100644
--- a/ui/src/components/NewProjectDialog.tsx
+++ b/ui/src/components/NewProjectDialog.tsx
@@ -96,7 +96,7 @@ export function NewProjectDialog() {
const uploadDescriptionImage = useMutation({
mutationFn: async (file: File) => {
- if (!selectedCompanyId) throw new Error("No company selected");
+ if (!selectedCompanyId) throw new Error("No organization selected");
return assetsApi.uploadImage(selectedCompanyId, file, "projects/drafts");
},
});
diff --git a/ui/src/components/OnboardingWizard.step.test.tsx b/ui/src/components/OnboardingWizard.step.test.tsx
index 66304ba1a6..fb4cb0170c 100644
--- a/ui/src/components/OnboardingWizard.step.test.tsx
+++ b/ui/src/components/OnboardingWizard.step.test.tsx
@@ -961,7 +961,7 @@ describe("OnboardingWizard — which step it lands on", () => {
expect(segments.every((segment) => segment.disabled)).toBe(true);
// And company creation is genuinely unreachable, not merely unlinked.
- expect(document.body.textContent).not.toContain("Name your company");
+ expect(document.body.textContent).not.toContain("Name your organization");
});
});
});
diff --git a/ui/src/components/OnboardingWizard.tsx b/ui/src/components/OnboardingWizard.tsx
index 55a6880b69..138f100c23 100644
--- a/ui/src/components/OnboardingWizard.tsx
+++ b/ui/src/components/OnboardingWizard.tsx
@@ -1025,7 +1025,7 @@ function OnboardingWizardInner({
): Promise {
if (!createdCompanyId) {
setAdapterEnvError(
- "Create or select a company before testing adapter environment."
+ "Create or select an organization before testing adapter environment."
);
return null;
}
@@ -1209,7 +1209,7 @@ function OnboardingWizardInner({
setStep(3); // → Create your team lead
} catch (err) {
- setError(err instanceof Error ? err.message : "Failed to create company");
+ setError(err instanceof Error ? err.message : "Failed to create organization");
} finally {
setLoading(false);
}
@@ -1255,7 +1255,7 @@ function OnboardingWizardInner({
setSelectedCompanyId(company.id);
setStep(3);
} catch (err) {
- setError(err instanceof Error ? err.message : "Failed to create company");
+ setError(err instanceof Error ? err.message : "Failed to create organization");
} finally {
creatingCompanyRef.current = false;
setLoading(false);
diff --git a/ui/src/components/ProjectProperties.tsx b/ui/src/components/ProjectProperties.tsx
index d4f890772a..7a4cde1df5 100644
--- a/ui/src/components/ProjectProperties.tsx
+++ b/ui/src/components/ProjectProperties.tsx
@@ -293,7 +293,7 @@ export function ProjectProperties({ project, onUpdate, onFieldUpdate, getFieldSa
});
const createSecret = useMutation({
mutationFn: (input: { name: string; value: string }) => {
- if (!selectedCompanyId) throw new Error("Select a company to create secrets");
+ if (!selectedCompanyId) throw new Error("Select an organization to create secrets");
return secretsApi.create(selectedCompanyId, input);
},
onSuccess: () => {
diff --git a/ui/src/components/ReportsToPicker.tsx b/ui/src/components/ReportsToPicker.tsx
index 3c279f7881..d3a4bf0d0b 100644
--- a/ui/src/components/ReportsToPicker.tsx
+++ b/ui/src/components/ReportsToPicker.tsx
@@ -99,7 +99,7 @@ export function ReportsToPicker({
)}
{unknownManager && (
- Saved manager is missing from this company. Choose a new manager or clear.
+ Saved manager is missing from this organization. Choose a new manager or clear.
)}
{rows.map((a) => (
diff --git a/ui/src/components/SecretBindingPicker.test.tsx b/ui/src/components/SecretBindingPicker.test.tsx
index 476ab5b5d3..787e3b1af0 100644
--- a/ui/src/components/SecretBindingPicker.test.tsx
+++ b/ui/src/components/SecretBindingPicker.test.tsx
@@ -88,7 +88,7 @@ describe("SecretBindingPicker", () => {
await render(readyContext("active"));
expect(container.textContent).toContain("DAYTONA_API_KEY — Other Team");
- expect(container.textContent).toContain("Owned by the Other Team company");
+ expect(container.textContent).toContain("Owned by the Other Team organization");
expect(container.textContent).not.toContain("Missing secret");
expect(container.querySelector("select")?.className).not.toContain("border-destructive");
});
diff --git a/ui/src/components/SecretBindingPicker.tsx b/ui/src/components/SecretBindingPicker.tsx
index a25891f0a4..f04033ae54 100644
--- a/ui/src/components/SecretBindingPicker.tsx
+++ b/ui/src/components/SecretBindingPicker.tsx
@@ -197,7 +197,7 @@ export function SecretBindingPicker({
{selectedMissing && value ? (
{missingHint
- ? `${missingHint.name} — ${missingHint.companyName ?? "another company"}`
+ ? `${missingHint.name} — ${missingHint.companyName ?? "another organization"}`
: hintsPending
? `Secret (${value.secretId.slice(0, 8)}…)`
: `Missing secret (${value.secretId.slice(0, 8)}…)`}
@@ -257,7 +257,7 @@ export function SecretBindingPicker({
) : crossCompanyHint ? (
- Owned by {crossCompanyHint.companyName ? `the ${crossCompanyHint.companyName} company` : "another company"}. The binding keeps working; selecting a secret from this list re-points it here.
+ Owned by {crossCompanyHint.companyName ? `the ${crossCompanyHint.companyName} organization` : "another organization"}. The binding keeps working; selecting a secret from this list re-points it here.
) : missingHint ? (
diff --git a/ui/src/components/Sidebar.test.tsx b/ui/src/components/Sidebar.test.tsx
index 16b816428b..84c2bac08b 100644
--- a/ui/src/components/Sidebar.test.tsx
+++ b/ui/src/components/Sidebar.test.tsx
@@ -352,7 +352,7 @@ describe("Sidebar", () => {
const sections = [...container.querySelectorAll("nav > div")];
const workSection = sections.find((section) => section.textContent?.startsWith("Work"));
- const companySection = sections.find((section) => section.textContent?.startsWith("Company"));
+ const companySection = sections.find((section) => section.textContent?.startsWith("Organization"));
expect(workSection?.textContent).toContain("Skills");
expect(companySection?.textContent).not.toContain("Skills");
@@ -411,7 +411,7 @@ describe("Sidebar", () => {
const sections = [...container.querySelectorAll("nav > div")];
const workSection = sections.find((section) => section.textContent?.startsWith("Work"));
- const companySection = sections.find((section) => section.textContent?.startsWith("Company"));
+ const companySection = sections.find((section) => section.textContent?.startsWith("Organization"));
expect(workSection?.textContent).not.toContain("Timeline");
expect(companySection?.textContent).toContain("Timeline");
diff --git a/ui/src/components/Sidebar.tsx b/ui/src/components/Sidebar.tsx
index c40d0b27af..f54b3dec79 100644
--- a/ui/src/components/Sidebar.tsx
+++ b/ui/src/components/Sidebar.tsx
@@ -273,7 +273,7 @@ export function Sidebar() {
-
+
{showApps ? : null}
diff --git a/ui/src/components/SidebarCompanyMenu.test.tsx b/ui/src/components/SidebarCompanyMenu.test.tsx
index 4f57fae617..52bb357074 100644
--- a/ui/src/components/SidebarCompanyMenu.test.tsx
+++ b/ui/src/components/SidebarCompanyMenu.test.tsx
@@ -240,10 +240,10 @@ describe("SidebarCompanyMenu", () => {
const { root } = renderMenu();
await flushReact();
- await openMenu("Open Acme Labs company switcher");
+ await openMenu("Open Acme Labs organization switcher");
- expect(document.body.textContent).toContain("Couldn't load companies");
- expect(document.body.textContent).not.toContain("No companies");
+ expect(document.body.textContent).toContain("Couldn't load organizations");
+ expect(document.body.textContent).not.toContain("No organizations");
const retryItem = Array.from(document.body.querySelectorAll('[role="menuitem"]')).find(
(item) => item.textContent?.includes("Try again"),
@@ -269,10 +269,10 @@ describe("SidebarCompanyMenu", () => {
const { root } = renderMenu();
await flushReact();
- await openMenu("Open Acme Labs company switcher");
+ await openMenu("Open Acme Labs organization switcher");
- expect(document.body.textContent).toContain("No companies");
- expect(document.body.textContent).not.toContain("Couldn't load companies");
+ expect(document.body.textContent).toContain("No organizations");
+ expect(document.body.textContent).not.toContain("Couldn't load organizations");
act(() => {
root.unmount();
@@ -295,7 +295,7 @@ describe("SidebarCompanyMenu", () => {
await flushReact();
await flushReact();
- const trigger = container.querySelector('button[aria-label="Open Acme Labs company switcher"]');
+ const trigger = container.querySelector('button[aria-label="Open Acme Labs organization switcher"]');
expect(trigger).not.toBeNull();
act(() => {
trigger?.dispatchEvent(new PointerEvent("pointerdown", { bubbles: true, button: 0 }));
@@ -329,7 +329,7 @@ describe("SidebarCompanyMenu", () => {
expect(container.textContent).toContain("Acme Labs");
- const trigger = container.querySelector('button[aria-label="Open Acme Labs company switcher"]');
+ const trigger = container.querySelector('button[aria-label="Open Acme Labs organization switcher"]');
expect(trigger).not.toBeNull();
act(() => {
@@ -338,7 +338,7 @@ describe("SidebarCompanyMenu", () => {
});
await flushReact();
- expect(document.body.textContent).toContain("Switch company");
+ expect(document.body.textContent).toContain("Switch organization");
expect(document.body.textContent).toContain("Edit");
expect(document.body.textContent).toContain("Strata");
expect(document.body.textContent).toContain("ANA");
@@ -359,7 +359,7 @@ describe("SidebarCompanyMenu", () => {
expect(mockAuthApi.signOut).toHaveBeenCalledTimes(1);
expect(mockNavigateTopLevel).not.toHaveBeenCalled();
expect(queryClient.getQueryState(queryKeys.health)?.isInvalidated).toBe(true);
- expect(document.body.textContent).not.toContain("Switch company");
+ expect(document.body.textContent).not.toContain("Switch organization");
act(() => {
root.unmount();
@@ -382,7 +382,7 @@ describe("SidebarCompanyMenu", () => {
await flushReact();
await flushReact();
- const trigger = container.querySelector('button[aria-label="Open Acme Labs company switcher"]');
+ const trigger = container.querySelector('button[aria-label="Open Acme Labs organization switcher"]');
expect(trigger).not.toBeNull();
act(() => {
@@ -439,7 +439,7 @@ describe("SidebarCompanyMenu", () => {
await flushReact();
await flushReact();
- const trigger = container.querySelector('button[aria-label="Open Acme Labs company switcher"]');
+ const trigger = container.querySelector('button[aria-label="Open Acme Labs organization switcher"]');
expect(trigger).not.toBeNull();
act(() => {
@@ -470,7 +470,7 @@ describe("SidebarCompanyMenu", () => {
await flushReact();
await flushReact();
- await openMenu("Open Acme Labs company switcher");
+ await openMenu("Open Acme Labs organization switcher");
const createItem = Array.from(document.body.querySelectorAll('[data-slot="dropdown-menu-item"]'))
.find((element) => element.textContent?.includes("Create new organization..."));
@@ -500,7 +500,7 @@ describe("SidebarCompanyMenu", () => {
const { root } = renderMenu();
await flushReact();
- const trigger = container.querySelector('button[aria-label="Open Acme Labs company switcher"]');
+ const trigger = container.querySelector('button[aria-label="Open Acme Labs organization switcher"]');
expect(trigger).not.toBeNull();
expect(trigger?.className).toContain("min-w-0");
diff --git a/ui/src/components/SidebarCompanyMenu.tsx b/ui/src/components/SidebarCompanyMenu.tsx
index 5b193a214c..ec5728afd7 100644
--- a/ui/src/components/SidebarCompanyMenu.tsx
+++ b/ui/src/components/SidebarCompanyMenu.tsx
@@ -251,7 +251,7 @@ export function SidebarCompanyMenu({ open: controlledOpen, onOpenChange }: Sideb
?? null
: null;
const createStackUrl = isCloud ? cloudStackCreateUrl(cloudBaseUrl) : null;
- const switcherNoun = isCloud ? "organization" : "company";
+ const switcherNoun = "organization";
// The one name the chrome shows for "where am I": the stack in cloud, the
// company when self-hosted.
const currentName = isCloud
@@ -368,7 +368,7 @@ export function SidebarCompanyMenu({ open: controlledOpen, onOpenChange }: Sideb
)}
title={currentName ?? undefined}
>
- {currentName ?? (isCloud ? "Select organization" : "Select company")}
+ {currentName ?? `Select ${switcherNoun}`}
{!rail && }
@@ -377,7 +377,7 @@ export function SidebarCompanyMenu({ open: controlledOpen, onOpenChange }: Sideb
- {isCloud ? "Switch organization" : "Switch company"}
+ {`Switch ${switcherNoun}`}
{/* Stack order is owned by cloud's own portfolio in v1, so the
drag-to-reorder affordance stays self-hosted-only. */}
@@ -445,7 +445,7 @@ export function SidebarCompanyMenu({ open: controlledOpen, onOpenChange }: Sideb
// offer the way back.
companyListUnavailable ? (
<>
- Couldn't load companies
+ Couldn't load organizations
{
// Keep the menu open so the result of the retry is visible.
@@ -458,7 +458,7 @@ export function SidebarCompanyMenu({ open: controlledOpen, onOpenChange }: Sideb
>
) : (
- No companies
+ No organizations
)
) : null}
>
diff --git a/ui/src/components/TrustPresetSection.tsx b/ui/src/components/TrustPresetSection.tsx
index e7c60b679d..a5bcd86a78 100644
--- a/ui/src/components/TrustPresetSection.tsx
+++ b/ui/src/components/TrustPresetSection.tsx
@@ -185,7 +185,7 @@ export function TrustPresetSection({
- CE saves one containment boundary at a time. Saved policies include this company id.
+ CE saves one containment boundary at a time. Saved policies include this organization id.
{boundaryTarget ? (
}
- title="No company selected"
- body="Choose a company before browsing another project workspace."
+ title="No organization selected"
+ body="Choose an organization before browsing another project workspace."
/>
);
} else if (source === "other" && projectsQuery.isFetching && projectsWithWorkspaces.length === 0) {
@@ -1004,7 +1004,7 @@ export function WorkspaceFileBrowser({
}
title="No project workspaces"
- body="No same-company project has a registered workspace to browse."
+ body="No same-organization project has a registered workspace to browse."
/>
);
} else if (listQuery.isFetching && !data) {
diff --git a/ui/src/components/environment-variables-editor/CreateSecretPopover.tsx b/ui/src/components/environment-variables-editor/CreateSecretPopover.tsx
index 9d829bda0c..047c6f5345 100644
--- a/ui/src/components/environment-variables-editor/CreateSecretPopover.tsx
+++ b/ui/src/components/environment-variables-editor/CreateSecretPopover.tsx
@@ -76,7 +76,7 @@ export function SecretPopoverForm({
{heading}
{mode === "store" ? (
- Moves the typed value into an encrypted company secret and binds{" "}
+ Moves the typed value into an encrypted organization secret and binds{" "}
{initialName || "this variable"} to it.
) : null}
diff --git a/ui/src/components/environment-variables-editor/EnvironmentVariablesEditor.test.tsx b/ui/src/components/environment-variables-editor/EnvironmentVariablesEditor.test.tsx
index 5f367ddf5c..a18d4f9378 100644
--- a/ui/src/components/environment-variables-editor/EnvironmentVariablesEditor.test.tsx
+++ b/ui/src/components/environment-variables-editor/EnvironmentVariablesEditor.test.tsx
@@ -806,9 +806,9 @@ describe("EnvironmentVariablesEditor", () => {
pointerClick(sourceButton!);
settleFakeTimers();
const secretItem = [...document.querySelectorAll
('[role="menuitem"]')].find((el) =>
- el.textContent?.includes("Company secret"),
+ el.textContent?.includes("Organization secret"),
);
- expect(secretItem, "Company secret menu item should be present").toBeTruthy();
+ expect(secretItem, "Organization secret menu item should be present").toBeTruthy();
pointerClick(secretItem!);
settleFakeTimers();
// The store popover is open (heading rendered) and stays open — it must not
diff --git a/ui/src/components/environment-variables-editor/Row.tsx b/ui/src/components/environment-variables-editor/Row.tsx
index f2f9f317a3..e31c187f16 100644
--- a/ui/src/components/environment-variables-editor/Row.tsx
+++ b/ui/src/components/environment-variables-editor/Row.tsx
@@ -186,7 +186,7 @@ export function EnvironmentVariableRow({
row.source === "text"
? "Text value"
: row.source === "secret"
- ? "Company secret reference"
+ ? "Organization secret reference"
: "User secret reference";
const nameErrorId = `${row.id}-name-error`;
const healthId = `${row.id}-health`;
@@ -284,8 +284,8 @@ export function EnvironmentVariableRow({
Store the value inline as plain text.
switchSource("secret")}>
- Company secret
- Resolve a stored company secret at run start.
+ Organization secret
+ Resolve a stored organization secret at run start.
switchSource("user_secret")}>
User secret
diff --git a/ui/src/components/folders/FolderControls.test.tsx b/ui/src/components/folders/FolderControls.test.tsx
index d68324b2cd..6940e0840a 100644
--- a/ui/src/components/folders/FolderControls.test.tsx
+++ b/ui/src/components/folders/FolderControls.test.tsx
@@ -426,8 +426,8 @@ describe("FolderControls", () => {
});
const body = document.body.textContent ?? "";
- expect(body.indexOf("My Skills")).toBeLessThan(body.indexOf("Company"));
- expect(body.indexOf("Company")).toBeLessThan(body.indexOf("Engineering"));
+ expect(body.indexOf("My Skills")).toBeLessThan(body.indexOf("Organization"));
+ expect(body.indexOf("Organization")).toBeLessThan(body.indexOf("Engineering"));
expect(body.indexOf("Engineering")).toBeLessThan(body.indexOf("Code Review"));
expect(body.indexOf("Code Review")).toBeLessThan(body.indexOf("Projects"));
expect(body.indexOf("Projects")).toBeLessThan(body.indexOf("Bundled"));
diff --git a/ui/src/components/folders/FolderControls.tsx b/ui/src/components/folders/FolderControls.tsx
index 2262769fc5..47a773ad81 100644
--- a/ui/src/components/folders/FolderControls.tsx
+++ b/ui/src/components/folders/FolderControls.tsx
@@ -466,7 +466,7 @@ export function MobileFolderSheet({
<>
{model.my ? renderBranch(model.my, "My Skills") : null}
- Company
+ Organization
{model.company.map((node) => renderBranch(node))}
{model.projects ? renderBranch(model.projects, "Projects") : null}
@@ -637,7 +637,7 @@ export function FolderFormDialog({
{isEdit ? "Edit folder" : "Create folder"}
- {kind === "routine" ? "Organize routines in this company." : "Organize installed company skills."}
+ {kind === "routine" ? "Organize routines in this organization." : "Organize installed organization skills."}
diff --git a/ui/src/components/folders/SkillFolderTree.tsx b/ui/src/components/folders/SkillFolderTree.tsx
index 7673299c17..6761c170bc 100644
--- a/ui/src/components/folders/SkillFolderTree.tsx
+++ b/ui/src/components/folders/SkillFolderTree.tsx
@@ -311,7 +311,7 @@ export function SkillFolderRail({
) : null}
{/* Company — plain top-level company folders */}
-
onCreateFolder(null)} />
+ onCreateFolder(null)} />
{model.company.length > 0 ? (
model.company.map((node) => (
))
) : (
- No company folders yet.
+ No organization folders yet.
)}
{/* Projects — auto-managed, read-only structure */}
@@ -649,7 +649,7 @@ function TreeBranch({
onEditFolder(folder)}>Edit color
onMoveFolder(folder, isInMySkills ? "company" : "my")}>
- Move to {isInMySkills ? "Company" : "My Skills"}
+ Move to {isInMySkills ? "Organization" : "My Skills"}
onDeleteFolder(folder)}>
diff --git a/ui/src/components/folders/skill-folder-tree.test.ts b/ui/src/components/folders/skill-folder-tree.test.ts
index 2a8ebdffba..5ed98ceec0 100644
--- a/ui/src/components/folders/skill-folder-tree.test.ts
+++ b/ui/src/components/folders/skill-folder-tree.test.ts
@@ -101,7 +101,7 @@ describe("reservedRootLabel", () => {
describe("skillFolderDisplayPath", () => {
it("prefixes company folders and preserves reserved-root labels", () => {
const model = buildSkillFolderTree(folders);
- expect(skillFolderDisplayPath(model, "eng-review")).toBe("Company / Engineering / Review");
+ expect(skillFolderDisplayPath(model, "eng-review")).toBe("Organization / Engineering / Review");
expect(skillFolderDisplayPath(model, "mine")).toBe("My Skills / dotta");
expect(skillFolderDisplayPath(model, "bundled-git")).toBe("Bundled / git");
expect(skillFolderDisplayPath(model, null)).toBeNull();
@@ -110,7 +110,7 @@ describe("skillFolderDisplayPath", () => {
describe("skillFolderPathDisplayFallback", () => {
it("humanizes cold detail paths before folder metadata loads", () => {
- expect(skillFolderPathDisplayFallback("engineering/code-review")).toBe("Company / Engineering / Code Review");
+ expect(skillFolderPathDisplayFallback("engineering/code-review")).toBe("Organization / Engineering / Code Review");
expect(skillFolderPathDisplayFallback("my/local-board/drafts")).toBe("My Skills / Local Board / Drafts");
expect(skillFolderPathDisplayFallback("bundled/review-pr")).toBe("Bundled / Review Pr");
expect(skillFolderPathDisplayFallback(null)).toBeNull();
diff --git a/ui/src/components/folders/skill-folder-tree.ts b/ui/src/components/folders/skill-folder-tree.ts
index e7ba740fe4..ca6258d038 100644
--- a/ui/src/components/folders/skill-folder-tree.ts
+++ b/ui/src/components/folders/skill-folder-tree.ts
@@ -167,7 +167,7 @@ export function skillFolderDisplayPath(
const trail = folderBreadcrumbTrail(model, folderId);
if (trail.length === 0) return null;
const labels = trail.map((folder) => reservedRootLabel(folder));
- if (!trail[0]?.systemKey) labels.unshift("Company");
+ if (!trail[0]?.systemKey) labels.unshift("Organization");
return labels.join(" / ");
}
@@ -189,7 +189,7 @@ export function skillFolderPathDisplayFallback(folderPath: string | null | undef
if (root === "my") labels[0] = "My Skills";
else if (root === "projects") labels[0] = "Projects";
else if (root === "bundled") labels[0] = "Bundled";
- else labels.unshift("Company");
+ else labels.unshift("Organization");
return labels.join(" / ");
}
diff --git a/ui/src/components/routine-sections/editable-sections.tsx b/ui/src/components/routine-sections/editable-sections.tsx
index 49e79c2522..a80ff3d4ba 100644
--- a/ui/src/components/routine-sections/editable-sections.tsx
+++ b/ui/src/components/routine-sections/editable-sections.tsx
@@ -85,8 +85,8 @@ const activityGatePolicyOptions = [
const activityGateScopeOptions = [
{
value: "company",
- title: "Company-wide",
- description: "Any activity across the company counts as a reason to run.",
+ title: "Organization-wide",
+ description: "Any activity across the organization counts as a reason to run.",
},
{
value: "project",
diff --git a/ui/src/components/skill-studio/SkillPolicySurfaces.test.tsx b/ui/src/components/skill-studio/SkillPolicySurfaces.test.tsx
index 472c2d370f..92e9cc0617 100644
--- a/ui/src/components/skill-studio/SkillPolicySurfaces.test.tsx
+++ b/ui/src/components/skill-studio/SkillPolicySurfaces.test.tsx
@@ -64,7 +64,7 @@ function platformDenial() {
describe("SkillPolicyDenialNotice", () => {
it("renders a State B policy denial with title and remediation", () => {
const el = render( );
- expect(el.textContent).toContain("restricted by your company policy");
+ expect(el.textContent).toContain("restricted by your organization policy");
expect(el.textContent).toContain("administrator can change the skill policy");
});
diff --git a/ui/src/fixtures/issueThreadInteractionFixtures.ts b/ui/src/fixtures/issueThreadInteractionFixtures.ts
index 7d7e3b0f4f..deb4d2485b 100644
--- a/ui/src/fixtures/issueThreadInteractionFixtures.ts
+++ b/ui/src/fixtures/issueThreadInteractionFixtures.ts
@@ -967,7 +967,7 @@ export const humanOnlyRequestConfirmationInteraction =
createRequestConfirmationInteraction({
id: "interaction-confirmation-human-only",
title: "Approve the customer-facing announcement",
- summary: "Reserved for a human on the board because it commits the company publicly.",
+ summary: "Reserved for a human on the board because it commits the organization publicly.",
requestedResolverPolicy: "human_only",
});
@@ -976,7 +976,7 @@ export const companyCappedRequestConfirmationInteraction =
createRequestConfirmationInteraction({
id: "interaction-confirmation-company-capped",
title: "Confirm the data retention change",
- summary: "Asked for an open audience; the company caps this kind at a human decision.",
+ summary: "Asked for an open audience; the organization caps this kind at a human decision.",
requestedResolverPolicy: "anyone",
effectiveResolverPolicy: "human_only",
effectiveResolverPolicySource: "company_cap",
diff --git a/ui/src/hooks/useResourceMemberships.ts b/ui/src/hooks/useResourceMemberships.ts
index db0d2a8c93..cfc3318524 100644
--- a/ui/src/hooks/useResourceMemberships.ts
+++ b/ui/src/hooks/useResourceMemberships.ts
@@ -151,7 +151,7 @@ export function useResourceMembershipMutation(companyId: string | null | undefin
return useMutation({
mutationFn: (variables: MutationVariables) => {
- if (!companyId) throw new Error("Select a company first.");
+ if (!companyId) throw new Error("Select an organization first.");
const body = { state: variables.state, starred: variables.starred };
return variables.resourceType === "project"
? resourceMembershipsApi.updateProject(companyId, variables.resourceId, body)
diff --git a/ui/src/i18n/locales/en.json b/ui/src/i18n/locales/en.json
index 9e50199bb4..de0aba03a2 100644
--- a/ui/src/i18n/locales/en.json
+++ b/ui/src/i18n/locales/en.json
@@ -1,9 +1,9 @@
{
"app": {
"noCompanies": {
- "title": "Create your first company",
- "description": "Get started by creating a company.",
- "newCompany": "New Company"
+ "title": "Create your first organization",
+ "description": "Get started by creating an organization.",
+ "newCompany": "New Organization"
}
}
}
diff --git a/ui/src/lib/activity-format.ts b/ui/src/lib/activity-format.ts
index 0d4f015de6..52552d1c29 100644
--- a/ui/src/lib/activity-format.ts
+++ b/ui/src/lib/activity-format.ts
@@ -91,8 +91,8 @@ const ACTIVITY_ROW_VERBS: Record = {
"goal.deleted": "deleted",
"cost.reported": "reported cost for",
"cost.recorded": "recorded cost for",
- "company.created": "created company",
- "company.updated": "updated company",
+ "company.created": "created organization",
+ "company.updated": "updated organization",
"company.archived": "archived",
"company.reactivated": "reactivated",
"company.budget_updated": "updated budget for",
diff --git a/ui/src/lib/interaction-audience.test.ts b/ui/src/lib/interaction-audience.test.ts
index 36d7ef8bf5..8dc1a7bb65 100644
--- a/ui/src/lib/interaction-audience.test.ts
+++ b/ui/src/lib/interaction-audience.test.ts
@@ -79,14 +79,14 @@ describe("describeInteractionAudience", () => {
expect(audience.narrowedBy).toBeNull();
expect(audience.narrowedNote).toBeNull();
expect(audience.summary).toBe(
- "Anyone in the company can respond — the board or any agent, including the one that asked.",
+ "Anyone in the organization can respond — the board or any agent, including the one that asked.",
);
});
it("does not present an open card as board-required", () => {
const audience = describeInteractionAudience({ interaction: confirmation() });
expect(audience.summary).not.toMatch(/only .*board/i);
- expect(audience.summary).toMatch(/anyone in the company/i);
+ expect(audience.summary).toMatch(/anyone in the organization/i);
});
it("names the excluded creator for an explicit not_creator restriction", () => {
@@ -102,7 +102,7 @@ describe("describeInteractionAudience", () => {
expect(audience.isOpen).toBe(false);
expect(audience.label).toBe("Anyone except creator");
expect(audience.narrowedBy).toBe("requested");
- expect(audience.summary).toBe("Anyone in the company except ClaudeCoder can respond.");
+ expect(audience.summary).toBe("Anyone in the organization except ClaudeCoder can respond.");
// An explicitly requested restriction needs no extra explanation.
expect(audience.narrowedNote).toBeNull();
});
@@ -116,7 +116,7 @@ describe("describeInteractionAudience", () => {
}),
});
expect(audience.summary).toBe(
- "Anyone in the company except the agent that created it can respond.",
+ "Anyone in the organization except the agent that created it can respond.",
);
});
@@ -189,7 +189,7 @@ describe("describeInteractionAudience", () => {
});
expect(audience.narrowedBy).toBe("company_cap");
expect(audience.narrowedNote).toBe(
- "Company interaction governance narrowed this from Anyone to Human only.",
+ "Organization interaction governance narrowed this from Anyone to Human only.",
);
});
@@ -206,7 +206,7 @@ describe("describeInteractionAudience", () => {
expect(audience.narrowedNote).toBe(
"Created before Anyone became the default, so it stays restricted. A new card would be open.",
);
- expect(audience.summary).toBe("Anyone in the company except ClaudeCoder can respond.");
+ expect(audience.summary).toBe("Anyone in the organization except ClaudeCoder can respond.");
});
});
@@ -294,7 +294,7 @@ describe("describeAttentionResolverAudience", () => {
})));
expect(audience?.narrowedBy).toBe("company_cap");
expect(audience?.narrowedNote).toBe(
- "Company interaction governance narrowed this from Anyone to Human only.",
+ "Organization interaction governance narrowed this from Anyone to Human only.",
);
});
diff --git a/ui/src/lib/interaction-audience.ts b/ui/src/lib/interaction-audience.ts
index 456b975eb3..044ec13e23 100644
--- a/ui/src/lib/interaction-audience.ts
+++ b/ui/src/lib/interaction-audience.ts
@@ -50,9 +50,9 @@ const RESOLVER_POLICY_LABELS: Record = {
anyone:
- "Anyone in the company can respond — the board or any agent, including the one that asked.",
+ "Anyone in the organization can respond — the board or any agent, including the one that asked.",
not_creator:
- "Anyone in the company except the agent that created the card, and its run. Use this when the answer has to come from someone else.",
+ "Anyone in the organization except the agent that created the card, and its run. Use this when the answer has to come from someone else.",
human_only: "Only a person on the board can respond. Agents are turned away.",
};
@@ -184,8 +184,8 @@ export function describeResolverAudience({
: hasAddressee
? `Only ${addressee} or a person on the board can respond.`
: policy === "not_creator"
- ? `Anyone in the company except ${creator} can respond.`
- : "Anyone in the company can respond — the board or any agent, including the one that asked.";
+ ? `Anyone in the organization except ${creator} can respond.`
+ : "Anyone in the organization can respond — the board or any agent, including the one that asked.";
// Same fact, fewer words: a collapsed row has to answer "is this mine to
// decide?" in one glance, next to the buttons that act on the answer.
@@ -207,7 +207,7 @@ export function describeResolverAudience({
const narrowedNote = source === "governed_action"
? "This card runs a governed action, so it stays human-only whatever audience was requested."
: source === "company_cap"
- ? `Company interaction governance narrowed this from ${RESOLVER_POLICY_LABELS[requestedPolicy]} to ${RESOLVER_POLICY_LABELS[policy]}.`
+ ? `Organization interaction governance narrowed this from ${RESOLVER_POLICY_LABELS[requestedPolicy]} to ${RESOLVER_POLICY_LABELS[policy]}.`
: provenance === "legacy_inherited_restriction"
? "Created before Anyone became the default, so it stays restricted. A new card would be open."
: null;
diff --git a/ui/src/lib/skill-policy-denial.test.ts b/ui/src/lib/skill-policy-denial.test.ts
index b0a8d805e7..71c33b6ddb 100644
--- a/ui/src/lib/skill-policy-denial.test.ts
+++ b/ui/src/lib/skill-policy-denial.test.ts
@@ -37,14 +37,14 @@ describe("classifySkillDenial", () => {
);
expect(denial).not.toBeNull();
expect(denial?.state).toBe("policy");
- expect(denial?.title).toBe("Installing external skills is restricted by your company policy.");
+ expect(denial?.title).toBe("Installing external skills is restricted by your organization policy.");
expect(denial?.remediation).toBe("Contact a company administrator to change the skill policy.");
});
it("recognises a policy denial from reason alone (policy_default) and falls back to default remediation", () => {
const denial = classifySkillDenial(apiError(403, { reason: "policy_default" }));
expect(denial?.state).toBe("policy");
- expect(denial?.title).toBe("This action is restricted by your company policy.");
+ expect(denial?.title).toBe("This action is restricted by your organization policy.");
expect(denial?.remediation).toContain("administrator can change the skill policy");
});
diff --git a/ui/src/lib/skill-policy-denial.ts b/ui/src/lib/skill-policy-denial.ts
index 4f2f489ab2..06f37e5700 100644
--- a/ui/src/lib/skill-policy-denial.ts
+++ b/ui/src/lib/skill-policy-denial.ts
@@ -59,14 +59,14 @@ export interface SkillDenial {
}
const DEFAULT_POLICY_REMEDIATION =
- "A company administrator can change the skill policy to allow this.";
+ "An organization administrator can change the skill policy to allow this.";
const DEFAULT_ADMIN_REMEDIATION =
- "This requires company administration access. Ask an administrator to make this change.";
+ "This requires organization administration access. Ask an administrator to make this change.";
/** Human-readable titles for the platform-invariant codes (State C). */
const PLATFORM_TITLES: Record = {
skill_authentication_required: "Sign in to manage skills.",
- skill_company_boundary_denied: "This skill belongs to another company.",
+ skill_company_boundary_denied: "This skill belongs to another organization.",
skill_workspace_boundary_denied: "This skill source is outside an allowed workspace.",
skill_source_validation_failed: "This skill source failed validation.",
skill_unsafe_content_blocked: "This skill contains unsafe content.",
@@ -77,9 +77,9 @@ const PLATFORM_TITLES: Record = {
/** Default remediation copy per platform-invariant code — framed as a fix, never a grant. */
const PLATFORM_REMEDIATIONS: Record = {
skill_authentication_required: "Sign in and try again.",
- skill_company_boundary_denied: "Open the skill from the company that owns it.",
+ skill_company_boundary_denied: "Open the skill from the organization that owns it.",
skill_workspace_boundary_denied:
- "Import from a configured Paperclip workspace or the company managed-skill directory.",
+ "Import from a configured Paperclip workspace or the organization managed-skill directory.",
skill_source_validation_failed: "Fix the flagged source and retry.",
skill_unsafe_content_blocked:
"Remove the fetch-and-execute or unsafe pattern before saving.",
@@ -119,8 +119,8 @@ export function classifySkillDenial(
|| reason === "policy_default";
if (isPolicyDenial) {
const title = actionLabel
- ? `${actionLabel} is restricted by your company policy.`
- : "This action is restricted by your company policy.";
+ ? `${actionLabel} is restricted by your organization policy.`
+ : "This action is restricted by your organization policy.";
return {
state: "policy",
code,
diff --git a/ui/src/lib/trust-policy-ui.ts b/ui/src/lib/trust-policy-ui.ts
index c46cbdc344..f2442435d8 100644
--- a/ui/src/lib/trust-policy-ui.ts
+++ b/ui/src/lib/trust-policy-ui.ts
@@ -21,7 +21,7 @@ export const TRUST_PRESET_LABELS: Record = {
};
export const TRUST_PRESET_DESCRIPTIONS: Record = {
- standard: "Company-visible collaboration. This is the default for normal work.",
+ standard: "Organization-visible collaboration. This is the default for normal work.",
low_trust_review:
"Contained for hostile or untrusted input. Narrow Paperclip API, quarantined output. Use for PR review and external-content triage.",
};
diff --git a/ui/src/lib/workspace-access-state.test.ts b/ui/src/lib/workspace-access-state.test.ts
index 594a2feb5a..bc48c39ae4 100644
--- a/ui/src/lib/workspace-access-state.test.ts
+++ b/ui/src/lib/workspace-access-state.test.ts
@@ -298,7 +298,7 @@ describe("resolveWorkspaceAccessState", () => {
},
});
expect(access).toMatchObject({ state: "validating", action: { kind: "wait" } });
- expect(access.description).toContain("restored no company or issue rows");
+ expect(access.description).toContain("restored no organization or issue rows");
});
it("degrades a verified clone whose database regressed and offers one repair", () => {
@@ -398,7 +398,7 @@ describe("describeWorkspaceReadinessCause", () => {
failurePhase: "cloned_membership_missing",
},
}),
- ).toBe("No cloned user has an active company membership.");
+ ).toBe("No cloned user has an active organization membership.");
});
it("falls back to the reason and finally to null", () => {
diff --git a/ui/src/lib/workspace-access-state.ts b/ui/src/lib/workspace-access-state.ts
index 049974e7a2..7326338425 100644
--- a/ui/src/lib/workspace-access-state.ts
+++ b/ui/src/lib/workspace-access-state.ts
@@ -106,9 +106,9 @@ const HANDOFF_REASON_COPY: Record = {
const READINESS_FAILURE_COPY: Record = {
database_unreachable: "The isolated database is not answering.",
- clone_data_missing: "The clone restored no company or issue rows.",
+ clone_data_missing: "The clone restored no organization or issue rows.",
clone_data_unreadable: "The cloned product tables could not be read.",
- cloned_membership_missing: "No cloned user has an active company membership.",
+ cloned_membership_missing: "No cloned user has an active organization membership.",
cloned_identity_unreadable: "The cloned identity tables could not be read.",
auth_handoff_not_configured: "The workspace was started without a login handoff key.",
seed_manifest_unreadable: "The seed manifest is unreadable, so the restore cannot be trusted.",
diff --git a/ui/src/pages/AdapterManager.tsx b/ui/src/pages/AdapterManager.tsx
index 57ab9fa336..d9f643ef80 100644
--- a/ui/src/pages/AdapterManager.tsx
+++ b/ui/src/pages/AdapterManager.tsx
@@ -269,7 +269,7 @@ export function AdapterManager() {
useEffect(() => {
setBreadcrumbs([
- { label: selectedCompany?.name ?? "Company", href: "/dashboard" },
+ { label: selectedCompany?.name ?? "Organization", href: "/dashboard" },
{ label: "Settings", href: "/company/settings" },
{ label: "Adapters" },
]);
diff --git a/ui/src/pages/AgentDetail.tsx b/ui/src/pages/AgentDetail.tsx
index 1f247223b4..962969cb2d 100644
--- a/ui/src/pages/AgentDetail.tsx
+++ b/ui/src/pages/AgentDetail.tsx
@@ -2166,9 +2166,9 @@ function ConfigurationTab({
: taskAssignSource === "agent_creator"
? "Enabled automatically while this agent can create new agents."
: taskAssignSource === "explicit_grant"
- ? "Enabled via explicit company permission grant."
+ ? "Enabled via explicit organization permission grant."
: taskAssignSource === "simple_default"
- ? "Enabled by simple company-wide task assignment defaults."
+ ? "Enabled by simple organization-wide task assignment defaults."
: "Disabled unless explicitly granted.";
return (
@@ -2243,7 +2243,7 @@ function ConfigurationTab({
Can create/import skills
- Lets this agent install, import, create, and scan company skills without creating agents.
+ Lets this agent install, import, create, and scan organization skills without creating agents.
{
- if (!selectedCompanyId) throw new Error("Select a company to upload images");
+ if (!selectedCompanyId) throw new Error("Select an organization to upload images");
return assetsApi.uploadImage(selectedCompanyId, file, namespace);
},
});
diff --git a/ui/src/pages/AgentToolsTab.test.tsx b/ui/src/pages/AgentToolsTab.test.tsx
index 5ba996769b..9fd3320d83 100644
--- a/ui/src/pages/AgentToolsTab.test.tsx
+++ b/ui/src/pages/AgentToolsTab.test.tsx
@@ -240,7 +240,7 @@ describe("AgentToolsTab", () => {
expect(text).toContain("Production GitHub");
expect(text).toContain("GitHub safe");
expect(text).toContain("Access profiles");
- expect(text).toContain("Company default");
+ expect(text).toContain("Organization default");
expect(container.querySelector('a[href="/apps/advanced/profiles/prof-1"]')?.textContent).toBe("GitHub safe");
expect(container.querySelector('a[href="/apps/advanced/profiles?check=1"]')?.textContent).toBe("Check access");
// Governing policy #1 is the company-wide require_approval rule.
diff --git a/ui/src/pages/AgentToolsTab.tsx b/ui/src/pages/AgentToolsTab.tsx
index 3b22837d7e..7e4099510c 100644
--- a/ui/src/pages/AgentToolsTab.tsx
+++ b/ui/src/pages/AgentToolsTab.tsx
@@ -549,7 +549,7 @@ export function AgentToolsTab({ agent, companyId }: { agent: AgentDetailRecord;
{profile.summary.isCompanyDefault ? (
- Company default
+ Organization default
) : null}
diff --git a/ui/src/pages/Agents.tsx b/ui/src/pages/Agents.tsx
index 8e519f538b..01c90c944f 100644
--- a/ui/src/pages/Agents.tsx
+++ b/ui/src/pages/Agents.tsx
@@ -328,7 +328,7 @@ export function Agents() {
}, [builtInAgentsEnabled, instanceSettings, navigate, requestedTab, selectedCompanyId]);
if (!selectedCompanyId) {
- return ;
+ return ;
}
if (isLoading) {
diff --git a/ui/src/pages/Approvals.tsx b/ui/src/pages/Approvals.tsx
index 597e48e1eb..10ac21c855 100644
--- a/ui/src/pages/Approvals.tsx
+++ b/ui/src/pages/Approvals.tsx
@@ -76,7 +76,7 @@ export function Approvals() {
).length;
if (!selectedCompanyId) {
- return Select a company first.
;
+ return Select an organization first.
;
}
if (isLoading) {
diff --git a/ui/src/pages/Artifacts.tsx b/ui/src/pages/Artifacts.tsx
index 8d09e459dc..4bb04e8cda 100644
--- a/ui/src/pages/Artifacts.tsx
+++ b/ui/src/pages/Artifacts.tsx
@@ -227,7 +227,7 @@ export function Artifacts() {
}, [setBreadcrumbs, viewingSelectedStack, selectedGroup]);
if (!selectedCompanyId) {
- return ;
+ return ;
}
const showGroupCards = viewingStackList;
diff --git a/ui/src/pages/BoardChat.test.tsx b/ui/src/pages/BoardChat.test.tsx
index 77faf5f11a..a18800ddd1 100644
--- a/ui/src/pages/BoardChat.test.tsx
+++ b/ui/src/pages/BoardChat.test.tsx
@@ -110,7 +110,7 @@ function hasWelcome(container: HTMLElement) {
}
function hasChips(container: HTMLElement) {
- return (container.textContent ?? "").includes("Draft a Company Brief");
+ return (container.textContent ?? "").includes("Draft an Organization Brief");
}
describe("BoardChat staged typing intro", () => {
diff --git a/ui/src/pages/BoardChat.tsx b/ui/src/pages/BoardChat.tsx
index 0faafa9cc8..caf067fbe2 100644
--- a/ui/src/pages/BoardChat.tsx
+++ b/ui/src/pages/BoardChat.tsx
@@ -658,9 +658,9 @@ export function BoardChat() {
return (
-
No company selected
+
No organization selected
- Select a company to start chatting with your board concierge.
+ Select an organization to start chatting with your board concierge.
@@ -692,7 +692,7 @@ export function BoardChat() {
{ceoAgent?.name ?? "Conference Room"}
- {selectedCompany?.name ?? "Your company"}
+ {selectedCompany?.name ?? "Your organization"}
@@ -756,8 +756,8 @@ export function BoardChat() {
const chips: Array<{ label: string; prompt: string }> = [
{
- label: "Draft a Company Brief",
- prompt: `Draft a one-page Company Brief for ${companyName} — include our mission, team roster, and first priorities.`,
+ label: "Draft an Organization Brief",
+ prompt: `Draft a one-page Organization Brief for ${companyName} — include our mission, team roster, and first priorities.`,
},
{
label: "Create a hiring plan",
@@ -967,7 +967,7 @@ export function BoardChat() {
value={input}
onChange={setInput}
onSubmit={handleSend}
- placeholder="Ask anything about your company..."
+ placeholder="Ask anything about your organization..."
submitKey="enter"
surface="translucent"
submitting={sending}
diff --git a/ui/src/pages/BoardClaim.tsx b/ui/src/pages/BoardClaim.tsx
index 0af36cb35f..4645edafcd 100644
--- a/ui/src/pages/BoardClaim.tsx
+++ b/ui/src/pages/BoardClaim.tsx
@@ -104,7 +104,7 @@ export function BoardClaimPage() {
Claim Board ownership
- This will promote your user to instance admin and migrate company ownership access from local trusted mode.
+ This will promote your user to instance admin and migrate organization ownership access from local trusted mode.
{claimMutation.error && (
diff --git a/ui/src/pages/BootstrapSetupUxLab.tsx b/ui/src/pages/BootstrapSetupUxLab.tsx
index 4d20299c7f..3e7c0003e0 100644
--- a/ui/src/pages/BootstrapSetupUxLab.tsx
+++ b/ui/src/pages/BootstrapSetupUxLab.tsx
@@ -162,7 +162,7 @@ function ClaimSuccess() {
You’re the instance admin
- Setup is complete. Taking you to onboarding to create your first company…
+ Setup is complete. Taking you to onboarding to create your first organization…
diff --git a/ui/src/pages/CliAuth.tsx b/ui/src/pages/CliAuth.tsx
index cb40bc6958..ae706db6be 100644
--- a/ui/src/pages/CliAuth.tsx
+++ b/ui/src/pages/CliAuth.tsx
@@ -143,7 +143,7 @@ export function CliAuthPage() {
{challenge.requestedCompanyName && (
-
Requested company
+
Requested organization
{challenge.requestedCompanyName}
)}
diff --git a/ui/src/pages/Companies.test.tsx b/ui/src/pages/Companies.test.tsx
index e80c305a8c..6ee7c306b8 100644
--- a/ui/src/pages/Companies.test.tsx
+++ b/ui/src/pages/Companies.test.tsx
@@ -103,7 +103,7 @@ describe("Companies page", () => {
it("offers the company wizard when self-hosted", async () => {
const root = await renderPage();
- expect(container.textContent).toContain("New Company");
+ expect(container.textContent).toContain("New Organization");
act(() => {
root.unmount();
@@ -115,7 +115,7 @@ describe("Companies page", () => {
// Cloud stacks hold exactly one company and POST /companies is a 403 floor,
// so the entry point must not be offered at all.
- expect(container.textContent).not.toContain("New Company");
+ expect(container.textContent).not.toContain("New Organization");
expect(container.textContent).toContain("Acme Labs");
expect(mockOpenOnboarding).not.toHaveBeenCalled();
diff --git a/ui/src/pages/Companies.tsx b/ui/src/pages/Companies.tsx
index 8e307201c4..fea4d97a34 100644
--- a/ui/src/pages/Companies.tsx
+++ b/ui/src/pages/Companies.tsx
@@ -89,7 +89,7 @@ export function Companies() {
});
useEffect(() => {
- setBreadcrumbs([{ label: "Companies" }]);
+ setBreadcrumbs([{ label: "Organizations" }]);
}, [setBreadcrumbs]);
function startEdit(companyId: string, currentName: string) {
@@ -113,13 +113,13 @@ export function Companies() {
{isCloud ? null : (
openOnboarding()}>
- New Company
+ New Organization
)}
- {loading &&
Loading companies...
}
+ {loading &&
Loading organizations...
}
{error &&
{error.message}
}
@@ -253,7 +253,7 @@ export function Companies() {
onClick={() => setConfirmDeleteId(company.id)}
>
- Delete Company
+ Delete Organization
@@ -296,7 +296,7 @@ export function Companies() {
onClick={(e) => e.stopPropagation()}
>
- Delete this company and all its data? This cannot be undone.
+ Delete this organization and all its data? This cannot be undone.
{
});
await flushReact();
- expect(document.body.textContent).toContain("Update company role and membership status");
+ expect(document.body.textContent).toContain("Update organization role and membership status");
expect(document.body.textContent).not.toContain("Implicit grants from role");
expect(document.body.textContent).not.toContain("permissionKey");
diff --git a/ui/src/pages/CompanyAccess.tsx b/ui/src/pages/CompanyAccess.tsx
index 4208713552..9f7e71da87 100644
--- a/ui/src/pages/CompanyAccess.tsx
+++ b/ui/src/pages/CompanyAccess.tsx
@@ -43,7 +43,7 @@ export function CompanyAccess() {
useEffect(() => {
setBreadcrumbs([
- { label: selectedCompany?.name ?? "Company", href: "/dashboard" },
+ { label: selectedCompany?.name ?? "Organization", href: "/dashboard" },
{ label: "Settings", href: "/company/settings" },
{ label: "Members" },
]);
@@ -202,20 +202,20 @@ export function CompanyAccess() {
}, [removingMember]);
if (!selectedCompanyId) {
- return Select a company to manage access.
;
+ return Select an organization to manage access.
;
}
if (membersQuery.isLoading) {
- return Loading company access…
;
+ return Loading organization access…
;
}
if (membersQuery.error) {
const message =
membersQuery.error instanceof ApiError && membersQuery.error.status === 403
- ? "You do not have permission to manage company members."
+ ? "You do not have permission to manage organization members."
: membersQuery.error instanceof Error
? membersQuery.error.message
- : "Failed to load company members.";
+ : "Failed to load organization members.";
return {message}
;
}
@@ -238,12 +238,12 @@ export function CompanyAccess() {
-
Company Members
+ Organization Members
{access && !access.currentUserRole && (
- This account can manage access here through instance-admin privileges, but it does not currently hold an active company membership.
+ This account can manage access here through instance-admin privileges, but it does not currently hold an active organization membership.
)}
@@ -254,7 +254,7 @@ export function CompanyAccess() {
Pending human joins
- Review pending join requests before they become active company members.
+ Review pending join requests before they become active organization members.
{pendingHumanJoinRequests.length} pending
@@ -307,7 +307,7 @@ export function CompanyAccess() {
{members.length === 0 ? (
- No user memberships found for this company yet.
+ No user memberships found for this organization yet.
) : members.map((member) => {
@@ -373,14 +373,14 @@ export function CompanyAccess() {
Edit member
- Update company role and membership status for {editingMember?.user?.name || editingMember?.user?.email || editingMember?.principalId}.
+ Update organization role and membership status for {editingMember?.user?.name || editingMember?.user?.email || editingMember?.principalId}.
{editingMember && (
- Company role
+ Organization role
Advanced Permissions
- Advanced access, scoped assignment, and explicit grant controls are provided by installed company settings extensions.
+ Advanced access, scoped assignment, and explicit grant controls are provided by installed organization settings extensions.
@@ -564,7 +564,7 @@ export function CompanyAccessLegacyRoute() {
Advanced permissions unavailable
- Core Paperclip keeps enforcing company boundaries and any existing restrictive policy data, but editing advanced permissions requires an installed extension.
+ Core Paperclip keeps enforcing organization boundaries and any existing restrictive policy data, but editing advanced permissions requires an installed extension.
{errorMessage ? (
Plugin extensions unavailable: {errorMessage}
diff --git a/ui/src/pages/CompanyEnvironments.tsx b/ui/src/pages/CompanyEnvironments.tsx
index c4ffc09646..8600b40b9e 100644
--- a/ui/src/pages/CompanyEnvironments.tsx
+++ b/ui/src/pages/CompanyEnvironments.tsx
@@ -1409,7 +1409,7 @@ export function CompanyEnvironments({ mode = "list" }: CompanyEnvironmentsProps)
});
const createSecret = useMutation({
mutationFn: (input: { name: string; value: string }) => {
- if (!selectedCompanyId) throw new Error("Select a company to create secrets");
+ if (!selectedCompanyId) throw new Error("Select an organization to create secrets");
return secretsApi.create(selectedCompanyId, input);
},
onSuccess: async () => {
@@ -1888,7 +1888,7 @@ export function CompanyEnvironments({ mode = "list" }: CompanyEnvironmentsProps)
if (deleteBlastRadius && !deleteBlockMessage) {
if (deleteBlastRadius.staticReferences.agentDefaultCount > agentsUsingEnvironment.length) {
deleteImpactNotes.push(
- "Other references to this environment (agents in other companies or terminated agents) fall back to the instance default.",
+ "Other references to this environment (agents in other organizations or terminated agents) fall back to the instance default.",
);
}
const selectionCount =
@@ -1940,7 +1940,7 @@ export function CompanyEnvironments({ mode = "list" }: CompanyEnvironmentsProps)
})();
if (!selectedCompanyId) {
- return
Select a company context to manage environment secrets and bindings.
;
+ return
Select an organization context to manage environment secrets and bindings.
;
}
if (!environmentsEnabled) {
@@ -2102,7 +2102,7 @@ export function CompanyEnvironments({ mode = "list" }: CompanyEnvironmentsProps)
{isEnvironmentFormPage && mode === "edit" && environments !== undefined && !editingEnvironment ? (
Environment not found
-
The environment may have been removed or is not available in this company.
+
The environment may have been removed or is not available in this organization.
Back to environments
@@ -2139,7 +2139,7 @@ export function CompanyEnvironments({ mode = "list" }: CompanyEnvironmentsProps)
{
setBreadcrumbs([
- { label: selectedCompany?.name ?? "Company", href: "/dashboard" },
+ { label: selectedCompany?.name ?? "Organization", href: "/dashboard" },
{ label: "Settings", href: "/company/settings" },
{ label: "Export" },
]);
@@ -1024,7 +1024,7 @@ export function CompanyExport() {
}
if (!selectedCompanyId) {
- return ;
+ return ;
}
if (exportPreviewMutation.isPending && !exportData) {
@@ -1084,7 +1084,7 @@ export function CompanyExport() {
- {selectedCompany?.name ?? "Company"} export
+ {selectedCompany?.name ?? "Organization"} export
Exporting {selectedCount.toLocaleString()} of {totalFiles.toLocaleString()} file{totalFiles === 1 ? "" : "s"}
diff --git a/ui/src/pages/CompanyImport.test.tsx b/ui/src/pages/CompanyImport.test.tsx
index 272a924705..66a6e871ba 100644
--- a/ui/src/pages/CompanyImport.test.tsx
+++ b/ui/src/pages/CompanyImport.test.tsx
@@ -714,7 +714,7 @@ describe("CompanyImport", () => {
// Config edits while the import is in flight must not detach it from
// the UI: the progress panel keeps reporting it until it settles.
const midFlightNameInput = container.querySelector(
- 'input[placeholder="Imported Company"]',
+ 'input[placeholder="Imported Organization"]',
);
expect(midFlightNameInput).toBeTruthy();
await act(async () => {
@@ -738,7 +738,7 @@ describe("CompanyImport", () => {
// The new-company name feeds the request payload too: editing it clears
// the stale error panel without discarding the rendered preview.
- const nameInput = container.querySelector('input[placeholder="Imported Company"]');
+ const nameInput = container.querySelector('input[placeholder="Imported Organization"]');
expect(nameInput).toBeTruthy();
await act(async () => {
const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")!.set!;
@@ -950,7 +950,7 @@ describe("CompanyImport", () => {
await renderPageAndImport();
expect(container.textContent).toContain("Import completed");
- expect(container.textContent).toContain("select it from the company switcher");
+ expect(container.textContent).toContain("select it from the organization switcher");
// No readable company, so no dashboard CTA — the switcher guidance stands in.
expect(container.querySelector('[data-testid="import-expired-open-company"]')).toBeNull();
});
diff --git a/ui/src/pages/CompanyImport.tsx b/ui/src/pages/CompanyImport.tsx
index 21b57eb9d4..fa3787d7b7 100644
--- a/ui/src/pages/CompanyImport.tsx
+++ b/ui/src/pages/CompanyImport.tsx
@@ -697,7 +697,7 @@ async function readLocalPackageZip(file: File): Promise<{
files: Record;
}> {
if (!/\.zip$/i.test(file.name)) {
- throw new Error("Select a .zip company package.");
+ throw new Error("Select a .zip organization package.");
}
const archive = await readZipArchive(await file.arrayBuffer());
if (Object.keys(archive.files).length === 0) {
@@ -1273,7 +1273,7 @@ export function CompanyImport() {
pushToast({
tone: "success",
title: "Import completed",
- body: "Open the company to view it.",
+ body: "Open the organization to view it.",
});
return;
}
@@ -1643,7 +1643,7 @@ export function CompanyImport() {
{importOutcome.companyName
? <>The import finished and {importOutcome.companyName} is ready. Its detailed summary is no longer available.>
- : "The import finished and your company is ready. Its detailed summary is no longer available, but the company has been added — select it from the company switcher to view it."}
+ : "The import finished and your organization is ready. Its detailed summary is no longer available, but the organization has been added — select it from the organization switcher to view it."}
{importOutcome.pausedAutomations ? (
@@ -1661,7 +1661,7 @@ export function CompanyImport() {
// immediately visible (same reason as the full-outcome CTA).
onClick={() => window.location.assign(importOutcome.dashboardPath!)}
>
- Open company dashboard
+ Open organization dashboard
) : null}
@@ -1809,7 +1809,7 @@ export function CompanyImport() {
}
if (!selectedCompanyId) {
- return
;
+ return
;
}
return (
@@ -1906,7 +1906,7 @@ export function CompanyImport() {
)}
-
+
- Create new company
+ Create new organization
Existing company: {selectedCompany?.name}
@@ -1925,7 +1925,7 @@ export function CompanyImport() {
{targetMode === "new" && (
)}
{
await flushReact();
await flushReact();
- expect(container.textContent).toContain("Company Invites");
+ expect(container.textContent).toContain("Organization Invites");
expect(container.textContent).toContain("Invite a person");
expect(container.textContent).not.toContain("Invite an agent");
expect(container.textContent).not.toContain("Generate agent onboarding prompt");
diff --git a/ui/src/pages/CompanyInvites.tsx b/ui/src/pages/CompanyInvites.tsx
index 291ba8181a..8540cf784d 100644
--- a/ui/src/pages/CompanyInvites.tsx
+++ b/ui/src/pages/CompanyInvites.tsx
@@ -16,8 +16,8 @@ const inviteRoleOptions = [
{
value: "viewer",
label: "Viewer",
- description: "Can view company work and follow along.",
- gets: "View-only company membership.",
+ description: "Can view organization work and follow along.",
+ gets: "View-only organization membership.",
},
{
value: "operator",
@@ -34,7 +34,7 @@ const inviteRoleOptions = [
{
value: "owner",
label: "Owner",
- description: "Full company access, including membership management.",
+ description: "Full organization access, including membership management.",
gets: "Everything in Admin, plus managing members.",
},
] as const;
@@ -90,7 +90,7 @@ export function CompanyInvites() {
useEffect(() => {
setBreadcrumbs([
- { label: selectedCompany?.name ?? "Company", href: "/dashboard" },
+ { label: selectedCompany?.name ?? "Organization", href: "/dashboard" },
{ label: "Settings", href: "/company/settings" },
{ label: "Invites" },
]);
@@ -160,7 +160,7 @@ export function CompanyInvites() {
});
if (!selectedCompanyId) {
- return Select a company to manage invites.
;
+ return Select an organization to manage invites.
;
}
if (invitesQuery.isLoading) {
@@ -170,7 +170,7 @@ export function CompanyInvites() {
if (invitesQuery.error) {
const message =
invitesQuery.error instanceof ApiError && invitesQuery.error.status === 403
- ? "You do not have permission to manage company invites."
+ ? "You do not have permission to manage organization invites."
: invitesQuery.error instanceof Error
? invitesQuery.error.message
: "Failed to load invites.";
@@ -182,10 +182,10 @@ export function CompanyInvites() {
-
Company Invites
+ Organization Invites
- Invite people to request access to this company. New invite links are copied to your clipboard when they are generated.
+ Invite people to request access to this organization. New invite links are copied to your clipboard when they are generated.
@@ -311,7 +311,7 @@ export function CompanyInvites() {
{inviteHistory.length === 0 ? (
- No invites have been created for this company yet.
+ No invites have been created for this organization yet.
) : (
diff --git a/ui/src/pages/CompanySettings.tsx b/ui/src/pages/CompanySettings.tsx
index f7e280dd6d..d78cc89c21 100644
--- a/ui/src/pages/CompanySettings.tsx
+++ b/ui/src/pages/CompanySettings.tsx
@@ -180,7 +180,7 @@ export function CompanySettings() {
if (!selectedCompany) {
return (
- No company selected. Select a company from the switcher above.
+ No organization selected. Select an organization from the switcher above.
);
}
@@ -207,7 +207,7 @@ export function CompanySettings() {
General
-
+
setDescription(e.target.value)}
/>
@@ -289,7 +289,7 @@ export function CompanySettings() {
{/* token-extraction: allowlisted — value must be a real hex string, not a var() reference. */}
@@ -414,7 +414,7 @@ export function CompanySettings() {
- Archive this company to hide it from the sidebar. This persists in
+ Archive this organization to hide it from the sidebar. This persists in
the database.
@@ -428,7 +428,7 @@ export function CompanySettings() {
onClick={() => {
if (!selectedCompanyId) return;
const confirmed = window.confirm(
- `Archive company "${selectedCompany.name}"? It will be hidden from the sidebar.`
+ `Archive organization "${selectedCompany.name}"? It will be hidden from the sidebar.`
);
if (!confirmed) return;
const nextCompanyId =
@@ -447,13 +447,13 @@ export function CompanySettings() {
? "Archiving..."
: selectedCompany.status === "archived"
? "Already archived"
- : "Archive company"}
+ : "Archive organization"}
{archiveMutation.isError && (
{archiveMutation.error instanceof Error
? archiveMutation.error.message
- : "Failed to archive company"}
+ : "Failed to archive organization"}
)}
diff --git a/ui/src/pages/CompanySettingsPluginPage.tsx b/ui/src/pages/CompanySettingsPluginPage.tsx
index 2ad5ba5193..091c7d6830 100644
--- a/ui/src/pages/CompanySettingsPluginPage.tsx
+++ b/ui/src/pages/CompanySettingsPluginPage.tsx
@@ -50,7 +50,7 @@ export function CompanySettingsPluginPage() {
if (hasInvalidCompanyPrefix) {
return
;
}
- return
Select a company to view this page.
;
+ return
Select an organization to view this page.
;
}
if (!settingsRoutePath || isLoading) {
diff --git a/ui/src/pages/CompanySkills.test.tsx b/ui/src/pages/CompanySkills.test.tsx
index ff565fdf9a..cabcb1a4c6 100644
--- a/ui/src/pages/CompanySkills.test.tsx
+++ b/ui/src/pages/CompanySkills.test.tsx
@@ -655,7 +655,7 @@ describe("SkillDetailPage settings", () => {
detail: makeDetail(v1, { folderPath: "engineering/code-review" }),
});
- expect(node.textContent).toContain("Company / Engineering / Code Review");
+ expect(node.textContent).toContain("Organization / Engineering / Code Review");
});
it("shows a direct fork action for read-only skills", async () => {
diff --git a/ui/src/pages/CompanySkills.tsx b/ui/src/pages/CompanySkills.tsx
index 0f9e67ddb7..6440e73a9c 100644
--- a/ui/src/pages/CompanySkills.tsx
+++ b/ui/src/pages/CompanySkills.tsx
@@ -321,7 +321,7 @@ type SourceFilter = "all" | "company" | "bundled" | "optional" | "external";
const SOURCE_FILTER_LABELS: Record
= {
all: "All",
- company: "Company",
+ company: "Organization",
bundled: "Bundled",
optional: "Optional",
external: "External",
@@ -654,7 +654,7 @@ function categorySetKey(categories: string[]) {
}
function skillSettingsToastBody(skill: Pick) {
- const sharing = skill.sharingScope === "private" ? "Sharing: private" : "Sharing: company";
+ const sharing = skill.sharingScope === "private" ? "Sharing: private" : "Sharing: organization";
const categories = skill.categories.length ? `Categories: ${skill.categories.join(", ")}` : "Categories: none";
return `${sharing} | ${categories}`;
}
@@ -1644,7 +1644,7 @@ function NewSkillWizard({
Slug
{effectiveSlug || "skill"}
Scope
- {draft.sharingScope === "private" ? "Private" : "Company"}
+ {draft.sharingScope === "private" ? "Private" : "Organization"}
Categories
{draft.categories.length ? draft.categories.join(", ") : "none"}
@@ -1661,9 +1661,9 @@ function NewSkillWizard({
draft.sharingScope === scope ? "border-foreground bg-accent/50" : "border-border",
)}
>
- {scope === "company" ? "Company" : "Private"}
+ {scope === "company" ? "Organization" : "Private"}
- {scope === "company" ? "Visible inside this company." : "Only visible in your library."}
+ {scope === "company" ? "Visible inside this organization." : "Only visible in your library."}
))}
@@ -2175,7 +2175,7 @@ export function InstallPreviewDialog({
Enable for agents
- Installing adds the skill to the company library. Agents can only use it once it is enabled for them.
+ Installing adds the skill to the organization library. Agents can only use it once it is enabled for them.
{
const option = agent as AttachAgentOption;
return option.required || !option.supportsSkills;
@@ -2315,7 +2315,7 @@ function AttachAgentsPopover({
) : null}
- emptyMessage={eligible.length === 0 ? "No agents in this company support skills yet." : "No agents yet."}
+ emptyMessage={eligible.length === 0 ? "No agents in this organization support skills yet." : "No agents yet."}
isAgentDisabled={(agent) => {
const option = agent as AttachAgentOption;
return option.required || !option.supportsSkills;
@@ -3367,7 +3367,7 @@ export function SkillDetailPage({
{detail.attachedAgentCount === 1 ? "install" : "installs"}
- Agents in this company that currently have this skill installed.
+ Agents in this organization that currently have this skill installed.
- Company — visible inside this company
+ Organization — visible inside this organization
Private — only visible in your library
Public link sharing is coming later.
@@ -3656,7 +3656,7 @@ export function SkillDetailPage({
Danger zone
-
Remove this skill from the company library.
+
Remove this skill from the organization library.
{
@@ -5107,7 +5107,7 @@ export function CompanySkills() {
);
if (!selectedCompanyId) {
- return ;
+ return ;
}
function handleAddSkillSource() {
@@ -5147,8 +5147,8 @@ export function CompanySkills() {
const studioBackHref = studioForkDetailQuery.data ? routeForSkill(studioForkDetailQuery.data) : "/skills";
const studioTitle = studioForkFromId ? "Fork skill" : "Create a new skill";
const studioDescription = studioForkFromId
- ? "Review the fork metadata and create an editable company copy."
- : "Create an editable company skill in the Paperclip workspace.";
+ ? "Review the fork metadata and create an editable organization copy."
+ : "Create an editable organization skill in the Paperclip workspace.";
return (
<>
{policyDenial.denial ? (
@@ -5161,7 +5161,7 @@ export function CompanySkills() {
Remove skill
- Remove this skill from the company library. If any agents still use it, removal will be blocked until it is detached.
+ Remove this skill from the organization library. If any agents still use it, removal will be blocked until it is detached.
@@ -5275,7 +5275,7 @@ export function CompanySkills() {
Import a skill
- Paste a local path, GitHub URL, or `skills.sh` command to import a skill into this company.
+ Paste a local path, GitHub URL, or `skills.sh` command to import a skill into this organization.
diff --git a/ui/src/pages/Costs.tsx b/ui/src/pages/Costs.tsx
index a314c5ffb6..44206e50fa 100644
--- a/ui/src/pages/Costs.tsx
+++ b/ui/src/pages/Costs.tsx
@@ -529,7 +529,7 @@ export function Costs() {
}), [budgetPolicies]);
if (!selectedCompanyId) {
- return
;
+ return
;
}
const showCustomPrompt = preset === "custom" && !customReady;
@@ -908,10 +908,10 @@ export function Costs() {
return (
-
{scopeType} budgets
+
{scopeType === "company" ? "organization" : scopeType} budgets
{scopeType === "company"
- ? "Company-wide monthly policy."
+ ? "Organization-wide monthly policy."
: scopeType === "agent"
? "Recurring monthly spend policies for individual agents."
: "Lifetime spend policies for execution-bound projects."}
@@ -940,7 +940,7 @@ export function Costs() {
{budgetPolicies.length === 0 ? (
- No budget policies yet. Set agent and project budgets from their detail pages, or use the existing company monthly budget control.
+ No budget policies yet. Set agent and project budgets from their detail pages, or use the existing organization monthly budget control.
) : null}
diff --git a/ui/src/pages/Dashboard.tsx b/ui/src/pages/Dashboard.tsx
index 75b24dbe89..3b0e7e04b5 100644
--- a/ui/src/pages/Dashboard.tsx
+++ b/ui/src/pages/Dashboard.tsx
@@ -293,14 +293,14 @@ export function Dashboard() {
return (
);
}
return (
-
+
);
}
@@ -333,13 +333,13 @@ export function Dashboard() {
}
>
- Agents from a company import arrive paused as a safety default. Resume them so assigned tasks can start.
+ Agents from an organization import arrive paused as a safety default. Resume them so assigned tasks can start.
) : pausedBanner?.kind === "all-paused" ? (
Review agents
diff --git a/ui/src/pages/DashboardLive.tsx b/ui/src/pages/DashboardLive.tsx
index 8c50ae09d4..a7a4323068 100644
--- a/ui/src/pages/DashboardLive.tsx
+++ b/ui/src/pages/DashboardLive.tsx
@@ -23,7 +23,7 @@ export function DashboardLive() {
return (
);
}
diff --git a/ui/src/pages/DecisionQueuePage.tsx b/ui/src/pages/DecisionQueuePage.tsx
index 71c960f7a1..b442fd02bf 100644
--- a/ui/src/pages/DecisionQueuePage.tsx
+++ b/ui/src/pages/DecisionQueuePage.tsx
@@ -212,7 +212,7 @@ export function DecisionQueuePage() {
});
if (!selectedCompanyId) {
- return Select a company first.
;
+ return Select an organization first.
;
}
if (isLoading) {
return ;
diff --git a/ui/src/pages/GoalDetail.tsx b/ui/src/pages/GoalDetail.tsx
index f22ce4604b..e922a6e700 100644
--- a/ui/src/pages/GoalDetail.tsx
+++ b/ui/src/pages/GoalDetail.tsx
@@ -99,7 +99,7 @@ export function GoalDetail() {
const uploadImage = useMutation({
mutationFn: async (file: File) => {
- if (!resolvedCompanyId) throw new Error("No company selected");
+ if (!resolvedCompanyId) throw new Error("No organization selected");
return assetsApi.uploadImage(
resolvedCompanyId,
file,
diff --git a/ui/src/pages/Goals.tsx b/ui/src/pages/Goals.tsx
index 7dca9e18dd..3c58263375 100644
--- a/ui/src/pages/Goals.tsx
+++ b/ui/src/pages/Goals.tsx
@@ -27,7 +27,7 @@ export function Goals() {
});
if (!selectedCompanyId) {
- return ;
+ return ;
}
if (isLoading) {
diff --git a/ui/src/pages/Inbox.tsx b/ui/src/pages/Inbox.tsx
index 1d2fa37c62..60799b7c4c 100644
--- a/ui/src/pages/Inbox.tsx
+++ b/ui/src/pages/Inbox.tsx
@@ -2210,7 +2210,7 @@ export function Inbox() {
}, [selectedIndex]);
if (!selectedCompanyId) {
- return ;
+ return ;
}
const hasRunFailures = failedRuns.length > 0;
diff --git a/ui/src/pages/InstanceAccess.tsx b/ui/src/pages/InstanceAccess.tsx
index 0dadd26d1e..ddfa8b1f3c 100644
--- a/ui/src/pages/InstanceAccess.tsx
+++ b/ui/src/pages/InstanceAccess.tsx
@@ -66,7 +66,7 @@ export function InstanceAccess() {
onSuccess: async () => {
await queryClient.invalidateQueries({ queryKey: queryKeys.access.userCompanyAccess(selectedUserId!) });
await queryClient.invalidateQueries({ queryKey: queryKeys.access.adminUsers(search) });
- pushToast({ title: "Company access updated", tone: "success" });
+ pushToast({ title: "Organization access updated", tone: "success" });
},
});
@@ -107,7 +107,7 @@ export function InstanceAccess() {
Instance Access
- Search users, manage instance-admin status, and control which companies they can access.
+ Search users, manage instance-admin status, and control which organizations they can access.
@@ -144,7 +144,7 @@ export function InstanceAccess() {
) : null}
- {user.activeCompanyMembershipCount} active company memberships
+ {user.activeCompanyMembershipCount} active organization memberships
))}
@@ -182,9 +182,9 @@ export function InstanceAccess() {
-
Company access
+
Organization access
- Toggle company membership for this user. New access defaults to an active operator membership.
+ Toggle organization membership for this user. New access defaults to an active operator membership.
@@ -216,7 +216,7 @@ export function InstanceAccess() {
onClick={() => updateCompanyAccessMutation.mutate()}
disabled={updateCompanyAccessMutation.isPending}
>
- {updateCompanyAccessMutation.isPending ? "Saving…" : "Save company access"}
+ {updateCompanyAccessMutation.isPending ? "Saving…" : "Save organization access"}
diff --git a/ui/src/pages/InstanceSettings.tsx b/ui/src/pages/InstanceSettings.tsx
index 77d371a731..c6ef6c4013 100644
--- a/ui/src/pages/InstanceSettings.tsx
+++ b/ui/src/pages/InstanceSettings.tsx
@@ -171,14 +171,14 @@ export function InstanceSettings() {
Scheduler Heartbeats
- Agents with a timer heartbeat enabled across all of your companies.
+ Agents with a timer heartbeat enabled across all of your organizations.
{activeCount} active
{disabledCount} disabled
-
{grouped.length} {grouped.length === 1 ? "company" : "companies"}
+
{grouped.length} {grouped.length === 1 ? "organization" : "organizations"}
{anyEnabled && (
{
expect(acceptInviteMock).toHaveBeenCalledWith("pcp_invite_test", { requestType: "human" });
expect(container.textContent).toContain("Request to join Acme Robotics");
- expect(container.textContent).toContain("A company admin must approve your request to join.");
+ expect(container.textContent).toContain("An organization admin must approve your request to join.");
expect(container.textContent).toContain(
"Ask them to visit Settings → Members to approve your request.",
);
@@ -918,7 +918,7 @@ describe("InviteLandingPage", () => {
await flushReact();
expect(listCompaniesMock).toHaveBeenCalled();
- expect(container.textContent).not.toContain("Already in this company");
+ expect(container.textContent).not.toContain("Already in this organization");
expect(acceptInviteMock).toHaveBeenCalledWith("pcp_invite_test", { requestType: "human" });
expect(container.textContent).toContain("Request to join Acme Robotics");
@@ -983,7 +983,7 @@ describe("InviteLandingPage", () => {
await flushReact();
await flushReact();
- expect(container.textContent).toContain("Already in this company");
+ expect(container.textContent).toContain("Already in this organization");
expect(acceptInviteMock).not.toHaveBeenCalled();
await act(async () => {
@@ -1024,12 +1024,12 @@ describe("InviteLandingPage", () => {
await flushReact();
expect(container.textContent).toContain("Join Acme Robotics");
- expect(container.textContent).toContain("Already in this company");
+ expect(container.textContent).toContain("Already in this organization");
expect(container.textContent).toContain("This account already belongs to Acme Robotics.");
expect(acceptInviteMock).not.toHaveBeenCalled();
const openButton = Array.from(container.querySelectorAll("button")).find(
- (button) => button.textContent === "Open company",
+ (button) => button.textContent === "Open organization",
);
expect(openButton).not.toBeNull();
@@ -1173,7 +1173,7 @@ describe("InviteLandingPage", () => {
await flushReact();
expect(container.textContent).toContain("Checking your access...");
- expect(container.textContent).not.toContain("Accept company invite");
+ expect(container.textContent).not.toContain("Accept organization invite");
expect(acceptInviteMock).not.toHaveBeenCalled();
await act(async () => {
diff --git a/ui/src/pages/InviteLanding.tsx b/ui/src/pages/InviteLanding.tsx
index 3ac1e9ca26..99d07e1d4b 100644
--- a/ui/src/pages/InviteLanding.tsx
+++ b/ui/src/pages/InviteLanding.tsx
@@ -161,7 +161,7 @@ function AwaitingJoinApprovalPanel({
claimApiKeyPath = null,
onboardingTextUrl = null,
}: AwaitingJoinApprovalPanelProps) {
- const approverLabel = invitedByUserName ?? "A company admin";
+ const approverLabel = invitedByUserName ?? "An organization admin";
return (
@@ -334,10 +334,10 @@ export function InviteLandingPage() {
mutationFn: async () => {
if (!invite) throw new Error("Invite not found");
if (isCheckingExistingMembership) {
- throw new Error("Checking your company access. Try again in a moment.");
+ throw new Error("Checking your organization access. Try again in a moment.");
}
if (isCurrentMember) {
- throw new Error("This account already belongs to the company.");
+ throw new Error("This account already belongs to the organization.");
}
if (invite.inviteType === "bootstrap_ceo" || invite.allowedJoinTypes !== "agent") {
return accessApi.acceptInvite(token, { requestType: "human" });
@@ -431,7 +431,7 @@ export function InviteLandingPage() {
const joinButtonLabel = useMemo(() => {
if (!invite) return "Continue";
- if (isCurrentMember) return "Open company";
+ if (isCurrentMember) return "Open organization";
if (invite.inviteType === "bootstrap_ceo") return "Accept invite";
if (showsAgentForm) return "Submit request";
return sessionQuery.data ? "Accept invite" : "Continue";
@@ -467,7 +467,7 @@ export function InviteLandingPage() {
inviteJoinRequestType === "human" &&
isCurrentMember
) {
- return
Opening company...
;
+ return
Opening organization...
;
}
if (inviteJoinRequestStatus === "pending_approval" && !canCompleteAcceptedHumanInvite) {
@@ -533,7 +533,7 @@ export function InviteLandingPage() {
companyBrandColor={companyBrandColor}
className="h-12 w-12 border border-zinc-800 rounded-none"
/>
-
You joined the company
+
You joined the organization
@@ -587,7 +587,7 @@ export function InviteLandingPage() {
-
Company
+
Organization
{companyDisplayName}
@@ -597,7 +597,7 @@ export function InviteLandingPage() {
Requested access
- {showsAgentForm ? "Agent join request" : requestedHumanRole ?? "Company access"}
+ {showsAgentForm ? "Agent join request" : requestedHumanRole ?? "Organization access"}
@@ -824,12 +824,12 @@ export function InviteLandingPage() {
{isCurrentMember
- ? "Already in this company"
+ ? "Already in this organization"
: shouldAutoAcceptHumanInvite
- ? "Completing company access"
+ ? "Completing organization access"
: invite.inviteType === "bootstrap_ceo"
? "Accept bootstrap invite"
- : "Accept company invite"}
+ : "Accept organization invite"}
{shouldAutoAcceptHumanInvite
diff --git a/ui/src/pages/InviteUxLab.test.tsx b/ui/src/pages/InviteUxLab.test.tsx
index 0eb7e8d85e..092baadf3b 100644
--- a/ui/src/pages/InviteUxLab.test.tsx
+++ b/ui/src/pages/InviteUxLab.test.tsx
@@ -41,7 +41,7 @@ describe("InviteUxLab", () => {
expect(container.textContent).toContain("Split-screen invite flows");
expect(container.textContent).toContain("Approval and completion screens");
expect(container.textContent).toContain("Auth page states");
- expect(container.textContent).toContain("Company invite management");
+ expect(container.textContent).toContain("Organization invite management");
expect(container.textContent).toContain("Create your account");
expect(container.textContent).toContain("Invite history");
diff --git a/ui/src/pages/InviteUxLab.tsx b/ui/src/pages/InviteUxLab.tsx
index b1a6f2747f..a48e866414 100644
--- a/ui/src/pages/InviteUxLab.tsx
+++ b/ui/src/pages/InviteUxLab.tsx
@@ -27,8 +27,8 @@ const inviteRoleOptions = [
{
value: "viewer",
label: "Viewer",
- description: "Can view company work and follow along.",
- gets: "View-only company membership.",
+ description: "Can view organization work and follow along.",
+ gets: "View-only organization membership.",
},
{
value: "operator",
@@ -45,7 +45,7 @@ const inviteRoleOptions = [
{
value: "owner",
label: "Owner",
- description: "Full company access, including membership management.",
+ description: "Full organization access, including membership management.",
gets: "Everything in Admin, plus managing members.",
},
] as const;
@@ -212,7 +212,7 @@ function InviteSummaryPanel({
-
+
@@ -373,7 +373,7 @@ function AcceptInvitePreview({
return (
-
Accept company invite
+
Accept organization invite
{autoAccept
? "Granting your access to Acme Robotics."
@@ -535,7 +535,7 @@ function CompanyInvitesPreview() {
- Company Invites
+ Organization Invites
Create invite
@@ -683,13 +683,13 @@ function CompanyInvitesPreview() {
Empty history state
- No invites have been created for this company yet.
+ No invites have been created for this organization yet.
Permission error
- You do not have permission to manage company invites.
+ You do not have permission to manage organization invites.
@@ -711,7 +711,7 @@ export function InviteUxLab() {
Invite and signup UX review surface
- This page collects the current invite landing, signup, approval-result, and company invite-management states in one place so styling changes can be reviewed without recreating each backend condition by hand.
+ This page collects the current invite landing, signup, approval-result, and organization invite-management states in one place so styling changes can be reviewed without recreating each backend condition by hand.
@@ -737,7 +737,7 @@ export function InviteUxLab() {
"Inline account creation and sign-in variants, including feedback/error copy",
"Human accept, agent request, and auto-accept transitions",
"Pending approval, joined-now, claim secret, and onboarding result screens",
- "Company invite creation, copied-link, history, empty, and permission-error states",
+ "Organization invite creation, copied-link, history, empty, and permission-error states",
].map((highlight) => (
}
title="Checking your access"
- body="Shown after sign-in while the app verifies whether the current user already belongs to the invited company."
+ body="Shown after sign-in while the app verifies whether the current user already belongs to the invited organization."
/>
}
@@ -794,7 +794,7 @@ export function InviteUxLab() {
}
title="Already a member"
- body="Acceptance stays disabled and the page redirects into the company once membership is confirmed."
+ body="Acceptance stays disabled and the page redirects into the organization once membership is confirmed."
/>
}
@@ -877,7 +877,7 @@ export function InviteUxLab() {
signedInLabel="Jane Example"
/>
}
- right={
}
+ right={
}
/>
@@ -896,7 +896,7 @@ export function InviteUxLab() {
onboardingTextUrl="/api/invites/pcp_invite_test/onboarding.txt"
/>
@@ -921,7 +921,7 @@ export function InviteUxLab() {
diff --git a/ui/src/pages/IssueDetail.tsx b/ui/src/pages/IssueDetail.tsx
index 6d7b5e8aa2..fcc4afa846 100644
--- a/ui/src/pages/IssueDetail.tsx
+++ b/ui/src/pages/IssueDetail.tsx
@@ -3340,7 +3340,7 @@ export function IssueDetail() {
const uploadAttachment = useMutation({
mutationFn: async (file: File) => {
- if (!selectedCompanyId) throw new Error("No company selected");
+ if (!selectedCompanyId) throw new Error("No organization selected");
return issuesApi.uploadAttachment(selectedCompanyId, issueId!, file);
},
onSuccess: () => {
diff --git a/ui/src/pages/Issues.tsx b/ui/src/pages/Issues.tsx
index 02bcddd5f1..86fca351c1 100644
--- a/ui/src/pages/Issues.tsx
+++ b/ui/src/pages/Issues.tsx
@@ -187,7 +187,7 @@ export function Issues() {
});
if (!selectedCompanyId) {
- return ;
+ return ;
}
return (
diff --git a/ui/src/pages/JoinRequestQueue.tsx b/ui/src/pages/JoinRequestQueue.tsx
index ab4c1a20cc..7941324315 100644
--- a/ui/src/pages/JoinRequestQueue.tsx
+++ b/ui/src/pages/JoinRequestQueue.tsx
@@ -21,7 +21,7 @@ export function JoinRequestQueue() {
useEffect(() => {
setBreadcrumbs([
- { label: selectedCompany?.name ?? "Company", href: "/dashboard" },
+ { label: selectedCompany?.name ?? "Organization", href: "/dashboard" },
{ label: "Inbox", href: "/inbox" },
{ label: "Join Requests" },
]);
@@ -57,7 +57,7 @@ export function JoinRequestQueue() {
});
if (!selectedCompanyId) {
- return Select a company to review join requests.
;
+ return Select an organization to review join requests.
;
}
if (requestsQuery.isLoading) {
@@ -67,7 +67,7 @@ export function JoinRequestQueue() {
if (requestsQuery.error) {
const message =
requestsQuery.error instanceof ApiError && requestsQuery.error.status === 403
- ? "You do not have permission to review join requests for this company."
+ ? "You do not have permission to review join requests for this organization."
: requestsQuery.error instanceof Error
? requestsQuery.error.message
: "Failed to load join requests.";
diff --git a/ui/src/pages/MyIssues.tsx b/ui/src/pages/MyIssues.tsx
index 6fd9b1a056..0388ba11c9 100644
--- a/ui/src/pages/MyIssues.tsx
+++ b/ui/src/pages/MyIssues.tsx
@@ -27,7 +27,7 @@ export function MyIssues() {
});
if (!selectedCompanyId) {
- return ;
+ return ;
}
if (isLoading) {
diff --git a/ui/src/pages/NewAgent.tsx b/ui/src/pages/NewAgent.tsx
index 8fcc815865..ba1c2326dd 100644
--- a/ui/src/pages/NewAgent.tsx
+++ b/ui/src/pages/NewAgent.tsx
@@ -351,14 +351,14 @@ export function NewAgent() {
-
Company skills
+
Organization skills
- Optional skills from the company library. Built-in Paperclip runtime skills are added automatically.
+ Optional skills from the organization library. Built-in Paperclip runtime skills are added automatically.
{availableSkills.length === 0 ? (
- No optional company skills installed yet.
+ No optional organization skills installed yet.
) : (
diff --git a/ui/src/pages/NotFound.tsx b/ui/src/pages/NotFound.tsx
index d9054c87d0..606dc58bd1 100644
--- a/ui/src/pages/NotFound.tsx
+++ b/ui/src/pages/NotFound.tsx
@@ -27,10 +27,10 @@ export function NotFoundPage({ scope = "global", requestedPrefix }: NotFoundPage
const currentPath = `${location.pathname}${location.search}${location.hash}`;
const normalizedPrefix = requestedPrefix?.toUpperCase();
- const title = scope === "invalid_company_prefix" ? "Company not found" : "Page not found";
+ const title = scope === "invalid_company_prefix" ? "Organization not found" : "Page not found";
const description =
scope === "invalid_company_prefix"
- ? `No company matches prefix "${normalizedPrefix ?? "unknown"}".`
+ ? `No organization matches prefix "${normalizedPrefix ?? "unknown"}".`
: "This route does not exist.";
return (
diff --git a/ui/src/pages/Org.tsx b/ui/src/pages/Org.tsx
index 1cd2b8a974..8a3c860048 100644
--- a/ui/src/pages/Org.tsx
+++ b/ui/src/pages/Org.tsx
@@ -99,7 +99,7 @@ export function Org() {
});
if (!selectedCompanyId) {
- return
;
+ return
;
}
if (isLoading) {
diff --git a/ui/src/pages/OrgChart.test.tsx b/ui/src/pages/OrgChart.test.tsx
index d76f32ae70..36e8238c54 100644
--- a/ui/src/pages/OrgChart.test.tsx
+++ b/ui/src/pages/OrgChart.test.tsx
@@ -267,15 +267,15 @@ describe("OrgChart mobile gestures", () => {
it("shows both portability buttons on self-hosted instances", async () => {
await renderOrgChart();
- expect(container.textContent).toContain("Import company");
- expect(container.textContent).toContain("Export company");
+ expect(container.textContent).toContain("Import organization");
+ expect(container.textContent).toContain("Export organization");
});
it("hides the Import button but keeps Export on a Cloud-managed instance", async () => {
queryClient.setQueryData(queryKeys.health, { status: "ok", cloud: { managed: true } });
await renderOrgChart();
- expect(container.textContent).not.toContain("Import company");
- expect(container.textContent).toContain("Export company");
+ expect(container.textContent).not.toContain("Import organization");
+ expect(container.textContent).toContain("Export organization");
});
});
diff --git a/ui/src/pages/OrgChart.tsx b/ui/src/pages/OrgChart.tsx
index d394489b43..b5c8b47546 100644
--- a/ui/src/pages/OrgChart.tsx
+++ b/ui/src/pages/OrgChart.tsx
@@ -439,7 +439,7 @@ export function OrgChart() {
}, [pan, zoom]);
if (!selectedCompanyId) {
- return
;
+ return
;
}
if (isLoading) {
@@ -457,7 +457,7 @@ export function OrgChart() {
- Import company
+ Import organization
)}
@@ -465,7 +465,7 @@ export function OrgChart() {
- Export company
+ Export organization
)}
diff --git a/ui/src/pages/PipelineSettings.tsx b/ui/src/pages/PipelineSettings.tsx
index eec8bacb6b..5e53515a63 100644
--- a/ui/src/pages/PipelineSettings.tsx
+++ b/ui/src/pages/PipelineSettings.tsx
@@ -1391,7 +1391,7 @@ export function PipelineSettings() {
const createSecret = useMutation({
mutationFn: (input: { name: string; value: string }) => {
- if (!selectedCompanyId) throw new Error("Select a company to create secrets");
+ if (!selectedCompanyId) throw new Error("Select an organization to create secrets");
return secretsApi.create(selectedCompanyId, input);
},
onSuccess: () => {
@@ -2119,7 +2119,7 @@ export function PipelineSettings() {
};
if (!selectedCompanyId) {
- return
;
+ return
;
}
if (!pipelineId) {
diff --git a/ui/src/pages/Pipelines.tsx b/ui/src/pages/Pipelines.tsx
index 66b411bf84..3589753b0d 100644
--- a/ui/src/pages/Pipelines.tsx
+++ b/ui/src/pages/Pipelines.tsx
@@ -941,7 +941,7 @@ function PipelinesIndex() {
});
if (!selectedCompanyId) {
- return
Select a company to view pipelines.
;
+ return
Select an organization to view pipelines.
;
}
if (pipelinesQuery.isLoading) return
;
@@ -4941,7 +4941,7 @@ export function ReviewQueue() {
const bulkApprove = useMutation({
mutationFn: async (targetRows: ReviewQueueRow[]) => {
- if (!selectedCompanyId) throw new Error("Select a company first.");
+ if (!selectedCompanyId) throw new Error("Select an organization first.");
const reviewRows = targetRows.filter((row) => row.kind === "review");
const suggestionRows = targetRows.filter((row) => row.kind === "suggestion" && row.suggestionId);
const tasks: Promise
[] = [];
@@ -5046,7 +5046,7 @@ export function ReviewQueue() {
}, [activeRowId, decideRow, openItem, visibleRows]);
if (!selectedCompanyId) {
- return ;
+ return ;
}
if (attentionQuery.isLoading || reviewCasesQuery.isLoading) {
@@ -5170,7 +5170,7 @@ export function Learnings() {
});
if (!selectedCompanyId) {
- return ;
+ return ;
}
if (learningsQuery.isLoading && !learningsQuery.data) {
diff --git a/ui/src/pages/PluginManager.tsx b/ui/src/pages/PluginManager.tsx
index e13ab4ce28..e1cccb4060 100644
--- a/ui/src/pages/PluginManager.tsx
+++ b/ui/src/pages/PluginManager.tsx
@@ -99,7 +99,7 @@ export function PluginManager() {
useEffect(() => {
setBreadcrumbs([
- { label: selectedCompany?.name ?? "Company", href: "/dashboard" },
+ { label: selectedCompany?.name ?? "Organization", href: "/dashboard" },
{ label: "Settings", href: "/company/settings" },
{ label: "Plugins" },
]);
diff --git a/ui/src/pages/PluginPage.tsx b/ui/src/pages/PluginPage.tsx
index f22ee4a930..1a8b9a2269 100644
--- a/ui/src/pages/PluginPage.tsx
+++ b/ui/src/pages/PluginPage.tsx
@@ -130,7 +130,7 @@ export function PluginPage() {
}
return (
-
Select a company to view this page.
+
Select an organization to view this page.
);
}
diff --git a/ui/src/pages/PluginSettings.test.tsx b/ui/src/pages/PluginSettings.test.tsx
index b1a6c047e6..2b631e4d5d 100644
--- a/ui/src/pages/PluginSettings.test.tsx
+++ b/ui/src/pages/PluginSettings.test.tsx
@@ -165,7 +165,7 @@ describe("PluginSettings", () => {
const root = await renderSettings(container);
expect(container.textContent).toContain("Configure this plugin from Settings → Environments.");
- expect(container.textContent).toContain("secret bindings still resolve through the selected company context");
+ expect(container.textContent).toContain("secret bindings still resolve through the selected organization context");
const link = container.querySelector('a[href="/company/settings/instance/environments"]');
expect(link?.textContent).toContain("Open Environments");
diff --git a/ui/src/pages/PluginSettings.tsx b/ui/src/pages/PluginSettings.tsx
index 4985765efc..2aeab483bb 100644
--- a/ui/src/pages/PluginSettings.tsx
+++ b/ui/src/pages/PluginSettings.tsx
@@ -120,7 +120,7 @@ export function PluginSettings() {
useEffect(() => {
setBreadcrumbs([
- { label: selectedCompany?.name ?? "Company", href: "/dashboard" },
+ { label: selectedCompany?.name ?? "Organization", href: "/dashboard" },
{ label: "Settings", href: "/company/settings" },
{ label: "Plugins", href: "/company/settings/instance/plugins" },
{ label: plugin?.manifestJson?.displayName ?? plugin?.packageName ?? "Plugin Details" },
@@ -261,7 +261,7 @@ export function PluginSettings() {
Configure this plugin from Settings → Environments.
{driverLabel || "This plugin"} registers environment runtime settings there so the execution target
- stays instance-scoped while secret bindings still resolve through the selected company context.
+ stays instance-scoped while secret bindings still resolve through the selected organization context.
@@ -598,7 +598,7 @@ function PluginLocalFoldersSettings({ pluginId, companyId, declarations }: Plugi
if (!companyId) {
return (
- Select a company to configure this plugin's local folders.
+ Select an organization to configure this plugin's local folders.
);
}
@@ -982,7 +982,7 @@ function PluginConfigForm({ pluginId, companyId, schema, initialValues, isLoadin
// Save mutation
const saveMutation = useMutation({
mutationFn: (configJson: Record
) => {
- if (!companyId) throw new Error("Select a company before saving plugin configuration.");
+ if (!companyId) throw new Error("Select an organization before saving plugin configuration.");
return pluginsApi.saveConfig(pluginId, companyId, configJson);
},
onSuccess: () => {
@@ -1002,7 +1002,7 @@ function PluginConfigForm({ pluginId, companyId, schema, initialValues, isLoadin
// Test configuration mutation
const testMutation = useMutation({
mutationFn: (configJson: Record) => {
- if (!companyId) throw new Error("Select a company before testing plugin configuration.");
+ if (!companyId) throw new Error("Select an organization before testing plugin configuration.");
return pluginsApi.testConfig(pluginId, companyId, configJson);
},
onSuccess: (result) => {
diff --git a/ui/src/pages/ProfileSettings.tsx b/ui/src/pages/ProfileSettings.tsx
index 8dbd86cd62..1b7717c5ac 100644
--- a/ui/src/pages/ProfileSettings.tsx
+++ b/ui/src/pages/ProfileSettings.tsx
@@ -87,7 +87,7 @@ export function ProfileSettings() {
const uploadAvatarMutation = useMutation({
mutationFn: async (file: File) => {
if (!selectedCompanyId) {
- throw new Error("Select a company before uploading a profile avatar.");
+ throw new Error("Select an organization before uploading a profile avatar.");
}
const asset = await assetsApi.uploadImage(
@@ -137,7 +137,7 @@ export function ProfileSettings() {
const isSavingProfile = updateMutation.isPending || uploadAvatarMutation.isPending || removeAvatarMutation.isPending;
const uploadHint = selectedCompany
? `Stored in Paperclip file storage for ${selectedCompany.name}.`
- : "Select a company to upload an avatar into Paperclip storage.";
+ : "Select an organization to upload an avatar into Paperclip storage.";
return (
diff --git a/ui/src/pages/ProjectDetail.tsx b/ui/src/pages/ProjectDetail.tsx
index db612c6ce0..8d9a64df7e 100644
--- a/ui/src/pages/ProjectDetail.tsx
+++ b/ui/src/pages/ProjectDetail.tsx
@@ -514,7 +514,7 @@ export function ProjectDetail() {
const uploadImage = useMutation({
mutationFn: async (file: File) => {
- if (!resolvedCompanyId) throw new Error("No company selected");
+ if (!resolvedCompanyId) throw new Error("No organization selected");
return assetsApi.uploadImage(resolvedCompanyId, file, `projects/${projectLookupRef || "draft"}`);
},
});
diff --git a/ui/src/pages/Projects.tsx b/ui/src/pages/Projects.tsx
index 50c5133c82..02006e0f28 100644
--- a/ui/src/pages/Projects.tsx
+++ b/ui/src/pages/Projects.tsx
@@ -119,7 +119,7 @@ export function Projects() {
const sortLabel = PROJECT_SORT_OPTIONS.find((option) => option.field === sortField)?.label ?? "Name";
if (!selectedCompanyId) {
- return
;
+ return
;
}
if (isLoading) {
diff --git a/ui/src/pages/RoutineDetail.tsx b/ui/src/pages/RoutineDetail.tsx
index 88d4443bef..ffaca21049 100644
--- a/ui/src/pages/RoutineDetail.tsx
+++ b/ui/src/pages/RoutineDetail.tsx
@@ -251,7 +251,7 @@ export function RoutineDetail() {
});
const createSecret = useMutation({
mutationFn: (input: { name: string; value: string }) => {
- if (!selectedCompanyId) throw new Error("Select a company to create secrets");
+ if (!selectedCompanyId) throw new Error("Select an organization to create secrets");
return secretsApi.create(selectedCompanyId, input);
},
onSuccess: () => {
@@ -674,7 +674,7 @@ export function RoutineDetail() {
);
if (!selectedCompanyId) {
- return
;
+ return
;
}
// Back-compat redirect: `?tab=x` → `/routines/:id/x`.
diff --git a/ui/src/pages/Routines.tsx b/ui/src/pages/Routines.tsx
index 4ec6f10503..1c93762451 100644
--- a/ui/src/pages/Routines.tsx
+++ b/ui/src/pages/Routines.tsx
@@ -796,7 +796,7 @@ export function Routines() {
}
if (!selectedCompanyId) {
- return
;
+ return
;
}
if (isLoading) {
diff --git a/ui/src/pages/Search.tsx b/ui/src/pages/Search.tsx
index 51625bd02b..3f528a50f9 100644
--- a/ui/src/pages/Search.tsx
+++ b/ui/src/pages/Search.tsx
@@ -805,7 +805,7 @@ function SearchTabContent({
return (
-
Type to search company memory.
+
Type to search organization memory.
Tasks, comments, plan documents, artifacts, agents, projects — same surface, ranked by relevance.
diff --git a/ui/src/pages/Secrets.render.test.tsx b/ui/src/pages/Secrets.render.test.tsx
index bd4b62ba11..9e945ba3ba 100644
--- a/ui/src/pages/Secrets.render.test.tsx
+++ b/ui/src/pages/Secrets.render.test.tsx
@@ -771,7 +771,7 @@ describe("Secrets page layout", () => {
expect(container.textContent).toContain("OPENAI_API_KEY");
expect(container.textContent).toContain("Personal GitHub token");
- expect(container.textContent).toContain("Company");
+ expect(container.textContent).toContain("Organization");
expect(container.textContent).toContain("Each user");
expect(container.textContent).toContain("3/5 set");
expect(container.textContent).not.toContain("User secret definitions");
diff --git a/ui/src/pages/Secrets.tsx b/ui/src/pages/Secrets.tsx
index b385b0276d..7d4698d79a 100644
--- a/ui/src/pages/Secrets.tsx
+++ b/ui/src/pages/Secrets.tsx
@@ -1787,7 +1787,7 @@ export function Secrets() {
if (!selectedCompanyId) {
return (
-
Select a company to manage secrets.
+
Select an organization to manage secrets.
);
}
@@ -1958,7 +1958,7 @@ export function Secrets() {
!(showFolderView && folderPath) ? (
@@ -2076,7 +2076,7 @@ export function Secrets() {
{row.kind === "company" ? (
- Company
+ Organization
) : (
@@ -2141,7 +2141,7 @@ export function Secrets() {
{row.kind === "company" ? (
<>
- Company
+ Organization
- Company
+ Organization
{modeLabel(selectedSecret.managedMode)}
{providerLabel(providers, selectedSecret.provider)}
@@ -2581,12 +2581,12 @@ export function Secrets() {
}}
>
- Company
+ Organization
Each user
- Company stores one shared value. Each user lets every member supply their own value under My secrets.
+ Organization stores one shared value. Each user lets every member supply their own value under My secrets.
) : null}
@@ -3182,7 +3182,7 @@ export function Secrets() {
Delete user-provided secret
- Permanently removes {definitionDeleteConfirm?.name} for the whole company.
+ Permanently removes {definitionDeleteConfirm?.name} for the whole organization.
Existing member values become unreferenced and active bindings must be remapped.
@@ -3351,7 +3351,7 @@ function SecretsFiltersPopover({
{[
{ value: "all" as const, label: "All sources" },
- { value: "company" as const, label: "Company" },
+ { value: "company" as const, label: "Organization" },
{ value: "user" as const, label: "Each user" },
].map((option) => (
@@ -3585,7 +3585,7 @@ export function ProviderVaultsTab({
{isComingSoonFamily
? "Not yet supported."
- : "No company-specific vaults yet. Secrets can still use the deployment default provider settings."}
+ : "No organization-specific vaults yet. Secrets can still use the deployment default provider settings."}
) : (
@@ -4619,7 +4619,7 @@ function SecretDetailsTab({
{secret.description ?? — }
-
Company
+
Organization
{modeLabel(secret.managedMode)}
{providerLabel(providers, secret.provider)}
{providerVaultLabel(providerConfigs, secret.providerConfigId)}
diff --git a/ui/src/pages/SkillStudio.tsx b/ui/src/pages/SkillStudio.tsx
index eb211b2894..36dfee3ac3 100644
--- a/ui/src/pages/SkillStudio.tsx
+++ b/ui/src/pages/SkillStudio.tsx
@@ -328,7 +328,7 @@ export function SkillStudio() {
}, [skill?.id]);
if (!companyId) {
- return
;
+ return
;
}
if (isCreateMode) {
return (
@@ -518,7 +518,7 @@ function StudioNewSkillPanel({
{draft.forkedFromSkillId ? "Fork skill" : "Create a new skill"}
- Create an editable company skill and open it directly in Studio.
+ Create an editable organization skill and open it directly in Studio.
@@ -657,9 +657,9 @@ function StudioNewSkillPanel({
draft.sharingScope === scope ? "border-foreground bg-accent/50" : "border-border",
)}
>
- {scope === "company" ? "Company" : "Private"}
+ {scope === "company" ? "Organization" : "Private"}
- {scope === "company" ? "Visible inside this company." : "Only visible in your library."}
+ {scope === "company" ? "Visible inside this organization." : "Only visible in your library."}
))}
diff --git a/ui/src/pages/TeamCatalog.tsx b/ui/src/pages/TeamCatalog.tsx
index 44218cfc88..40ade4b773 100644
--- a/ui/src/pages/TeamCatalog.tsx
+++ b/ui/src/pages/TeamCatalog.tsx
@@ -1299,7 +1299,7 @@ function TeamInstallerDialog({
Install failed
{applyError}
- Partial state is not rolled back. Review the company activity log before retrying.
+ Partial state is not rolled back. Review the organization activity log before retrying.
@@ -1407,7 +1407,7 @@ export function StepTargetManager({
className="rounded-md border border-blue-500/30 bg-blue-500/10 px-3 py-2.5 text-sm text-blue-700 dark:text-blue-300"
id="target-manager-help"
>
- This team's root agents need a manager in your company. Pick the agent who will become
+ This team's root agents need a manager in your organization. Pick the agent who will become
their parent. Internal team hierarchy is preserved.
@@ -1461,7 +1461,7 @@ export function StepTargetManager({
checked={fullCompany}
onChange={(e) => onToggleFullCompany(e.target.checked)}
/>
- Use this team as a full-company package (no target manager)
+ Use this team as a full-organization package (no target manager)
)}
@@ -1998,7 +1998,7 @@ export function ApplySuccess({
Team installed
- {team.name} was imported into your company. Imported entities are stamped with catalog provenance.
+ {team.name} was imported into your organization. Imported entities are stamped with catalog provenance.
{result && (
@@ -607,7 +607,7 @@ export function AuditFeed({
? "Try a wider date range or different filters."
: resolvedMode === "agents"
? "As soon as your agents start doing things, their actions show up here."
- : "As soon as anyone in your company does something, it shows up here."}
+ : "As soon as anyone in your organization does something, it shows up here."}
{hasActiveFilters ? (
diff --git a/ui/src/pages/audit/CompanyActivity.tsx b/ui/src/pages/audit/CompanyActivity.tsx
index 8bde7c66b8..c986ef58c0 100644
--- a/ui/src/pages/audit/CompanyActivity.tsx
+++ b/ui/src/pages/audit/CompanyActivity.tsx
@@ -42,7 +42,7 @@ export function CompanyActivity() {
);
if (!selectedCompanyId) {
- return
;
+ return
;
}
return
;
diff --git a/ui/src/pages/secrets/MyUserSecretsTab.tsx b/ui/src/pages/secrets/MyUserSecretsTab.tsx
index 53d7935971..04686763b9 100644
--- a/ui/src/pages/secrets/MyUserSecretsTab.tsx
+++ b/ui/src/pages/secrets/MyUserSecretsTab.tsx
@@ -81,7 +81,7 @@ export function MyUserSecretsTab({ companyId }: { companyId: string }) {
) : entries.length === 0 && !mySecretsQuery.isPending ? (
) : (
) : totalProjects === 0 ? (
-
+
) : projects.length === 0 ? (
) : (
@@ -955,7 +955,7 @@ function SelectStep({
{grant
- ? "Your account doesn't have permission to add skills to this company. Ask an owner to grant the skills permission, then try again."
+ ? "Your account doesn't have permission to add skills to this organization. Ask an owner to grant the skills permission, then try again."
: readableErrorMessage(scanError)}
{!grant && (
diff --git a/ui/src/pages/tools/ProfilesTab.tsx b/ui/src/pages/tools/ProfilesTab.tsx
index 6b58e00806..ca8d312eef 100644
--- a/ui/src/pages/tools/ProfilesTab.tsx
+++ b/ui/src/pages/tools/ProfilesTab.tsx
@@ -538,7 +538,7 @@ export function EffectiveAgentPanel({ companyId, agentOptions }: { companyId: st
{profile.name}
{profile.summary.isCompanyDefault ? (
- Company default
+ Organization default
) : null}
))}
@@ -935,7 +935,7 @@ export function ProfilesTab({ companyId }: { companyId: string }) {
setCreateOpen(true)}
/>
diff --git a/ui/src/pages/tools/RunYourOwnTab.tsx b/ui/src/pages/tools/RunYourOwnTab.tsx
index a2aac5a266..418cb8491a 100644
--- a/ui/src/pages/tools/RunYourOwnTab.tsx
+++ b/ui/src/pages/tools/RunYourOwnTab.tsx
@@ -94,7 +94,7 @@ export function RunYourOwnTab({ companyId }: { companyId: string }) {
return (
- For a tool that runs from a command. Paperclip runs it in your company's own isolated workspace.
+ For a tool that runs from a command. Paperclip runs it in your organization's own isolated workspace.
Administrators only.
diff --git a/ui/src/pages/tools/RuntimeTab.tsx b/ui/src/pages/tools/RuntimeTab.tsx
index 3af13ae8c9..8687fee11f 100644
--- a/ui/src/pages/tools/RuntimeTab.tsx
+++ b/ui/src/pages/tools/RuntimeTab.tsx
@@ -94,7 +94,7 @@ function howItRuns(slot: ToolRuntimeSlot): string {
function scopeLabel(scope: string | null | undefined): string {
switch (scope) {
case "company":
- return "Whole company";
+ return "Whole organization";
case "project":
case "project_workspace":
return "This project";
diff --git a/ui/src/pages/tools/ToolsAccess.tsx b/ui/src/pages/tools/ToolsAccess.tsx
index 1ffeff8049..e9c0aa781e 100644
--- a/ui/src/pages/tools/ToolsAccess.tsx
+++ b/ui/src/pages/tools/ToolsAccess.tsx
@@ -65,7 +65,7 @@ export function ToolsAccess() {
}, [setBreadcrumbs, selectedCompany?.name, advanced, tabLabel]);
if (!selectedCompanyId) {
- return
Select a company to open advanced setup.
;
+ return
Select an organization to open advanced setup.
;
}
// Retired developer tabs (PAP-10915/PAP-10928) — keep old links working.
diff --git a/ui/src/pages/tools/profiles/ProfileActionDialog.tsx b/ui/src/pages/tools/profiles/ProfileActionDialog.tsx
index 20a4dc7582..2142332b62 100644
--- a/ui/src/pages/tools/profiles/ProfileActionDialog.tsx
+++ b/ui/src/pages/tools/profiles/ProfileActionDialog.tsx
@@ -48,7 +48,7 @@ export function ProfileActionDialog({
delete: {
title: "Delete profile",
body: defaultDeleteBlocked
- ? "This profile is the company default. Reassign the company default to another profile before deleting it."
+ ? "This profile is the organization default. Reassign the organization default to another profile before deleting it."
: `This permanently deletes the profile and removes ${profile.summary.assignmentCount} ${profile.summary.assignmentCount === 1 ? "assignment" : "assignments"}.`,
confirm: "Delete",
action: onDelete,
@@ -65,7 +65,7 @@ export function ProfileActionDialog({
{defaultDeleteBlocked ? (
-
Choose another access profile and make it the company default first.
+
Choose another access profile and make it the organization default first.
) : null}
diff --git a/ui/src/pages/tools/profiles/ProfileDetail.test.tsx b/ui/src/pages/tools/profiles/ProfileDetail.test.tsx
index e86f006be4..7d1958b063 100644
--- a/ui/src/pages/tools/profiles/ProfileDetail.test.tsx
+++ b/ui/src/pages/tools/profiles/ProfileDetail.test.tsx
@@ -339,7 +339,7 @@ describe("ProfileDetail", () => {
});
await Promise.resolve();
- expect(document.body.textContent).toContain("Reassign the company default to another profile before deleting it.");
+ expect(document.body.textContent).toContain("Reassign the organization default to another profile before deleting it.");
const dialogDelete = [...document.body.querySelectorAll('[role="dialog"] button')].find((b) => b.textContent?.trim() === "Delete") as HTMLButtonElement | undefined;
expect(dialogDelete?.disabled).toBe(true);
expect(api.deleteProfile).not.toHaveBeenCalled();
diff --git a/ui/src/pages/tools/profiles/ProfileDetail.tsx b/ui/src/pages/tools/profiles/ProfileDetail.tsx
index be4b3c4321..f3a04bf454 100644
--- a/ui/src/pages/tools/profiles/ProfileDetail.tsx
+++ b/ui/src/pages/tools/profiles/ProfileDetail.tsx
@@ -534,7 +534,7 @@ function Assignments({
- {binding.targetType === "company" ? "Co" : binding.targetType.slice(0, 2).toUpperCase()}
+ {binding.targetType === "company" ? "Or" : binding.targetType.slice(0, 2).toUpperCase()}
{assignmentLabel(binding, companyId, maps)}
@@ -730,7 +730,7 @@ function RemoveAssignmentDialog({
Remove assignment
{binding?.targetType === "company"
- ? "Removing the company default changes access for every agent that relies on it."
+ ? "Removing the organization default changes access for every agent that relies on it."
: `Remove this profile from ${label}.`}
@@ -831,16 +831,16 @@ function assignmentLabel(
companyId: string,
maps: ReturnType
["maps"],
): string {
- if (binding.targetType === "company") return "Company default";
+ if (binding.targetType === "company") return "Organization default";
if (binding.targetType === "agent") return maps.agentsById.get(binding.targetId) ?? "Unknown agent";
if (binding.targetType === "project") return maps.projectsById.get(binding.targetId) ?? "Unknown project";
if (binding.targetType === "routine") return maps.routinesById.get(binding.targetId) ?? "Unknown routine";
- if (binding.targetId === companyId) return "Company";
+ if (binding.targetId === companyId) return "Organization";
return binding.targetId;
}
function assignmentTypeLabel(type: ToolProfileBinding["targetType"]): string {
- if (type === "company") return "Company default";
+ if (type === "company") return "Organization default";
if (type === "agent") return "Agent";
if (type === "project") return "Project";
if (type === "routine") return "Routine";
diff --git a/ui/src/pages/tools/profiles/ProfileDetailRoute.tsx b/ui/src/pages/tools/profiles/ProfileDetailRoute.tsx
index ec1d695946..28c684462d 100644
--- a/ui/src/pages/tools/profiles/ProfileDetailRoute.tsx
+++ b/ui/src/pages/tools/profiles/ProfileDetailRoute.tsx
@@ -22,7 +22,7 @@ export function ProfileDetailRoute() {
}, [setBreadcrumbs, selectedCompany?.name]);
if (!selectedCompanyId || !params.profileId) {
- return Select a company and profile.
;
+ return Select an organization and profile.
;
}
return (
diff --git a/ui/src/pages/tools/profiles/ProfileWizard.tsx b/ui/src/pages/tools/profiles/ProfileWizard.tsx
index eebfbcbd87..704be38582 100644
--- a/ui/src/pages/tools/profiles/ProfileWizard.tsx
+++ b/ui/src/pages/tools/profiles/ProfileWizard.tsx
@@ -609,7 +609,7 @@ export function StepAssign({
onChange={(e) => onCompanyDefault(e.target.checked)}
/>
- Make this the company default
+ Make this the organization default
Every agent without its own profile uses this one.
{defaultProfileName ? ` Replaces “${defaultProfileName}”.` : ""}
@@ -630,7 +630,7 @@ export function StepAssign({
getDescription={(agent) => {
const context = contextByAgent.get(agent.id) ?? [];
const bits = [...context];
- if (defaultProfileName) bits.push("company default");
+ if (defaultProfileName) bits.push("organization default");
return bits.length > 0 ? `already has: ${bits.join(" · ")}` : "no profiles yet";
}}
/>
diff --git a/ui/src/pages/tools/profiles/ProfileWizardRoute.tsx b/ui/src/pages/tools/profiles/ProfileWizardRoute.tsx
index 9b6b34a77b..12a7e51bc9 100644
--- a/ui/src/pages/tools/profiles/ProfileWizardRoute.tsx
+++ b/ui/src/pages/tools/profiles/ProfileWizardRoute.tsx
@@ -28,7 +28,7 @@ export function ProfileWizardRoute({ mode }: { mode: "new" | "edit" }) {
useEffect(() => {
setBreadcrumbs([
- { label: selectedCompany?.name ?? "Company", href: "/dashboard" },
+ { label: selectedCompany?.name ?? "Organization", href: "/dashboard" },
{ label: "Apps", href: "/apps" },
{ label: "Access profiles", href: advancedTabHref("profiles") },
{ label: mode === "edit" ? "Resume draft" : "New profile" },
@@ -37,7 +37,7 @@ export function ProfileWizardRoute({ mode }: { mode: "new" | "edit" }) {
}, [setBreadcrumbs, selectedCompany?.name, mode]);
if (!selectedCompanyId) {
- return Select a company to create a profile.
;
+ return Select an organization to create a profile.
;
}
return (
diff --git a/ui/src/pages/tools/profiles/ProfilesIndex.test.tsx b/ui/src/pages/tools/profiles/ProfilesIndex.test.tsx
index 70744341cc..73052caa3d 100644
--- a/ui/src/pages/tools/profiles/ProfilesIndex.test.tsx
+++ b/ui/src/pages/tools/profiles/ProfilesIndex.test.tsx
@@ -140,7 +140,7 @@ describe("ProfilesIndex", () => {
expect(container.textContent).toContain("9 tools · 3 apps");
expect(container.textContent).toContain("2 agents");
expect(container.textContent).toContain("All except 2 tools");
- expect(container.textContent).toContain("Company default");
+ expect(container.textContent).toContain("Organization default");
});
it("shows a new-tools chip in the Allows column", async () => {
@@ -266,7 +266,7 @@ describe("ProfilesIndex", () => {
await Promise.resolve();
expect(confirm).not.toHaveBeenCalled();
- expect(document.body.textContent).toContain("Reassign the company default to another profile before deleting it.");
+ expect(document.body.textContent).toContain("Reassign the organization default to another profile before deleting it.");
const dialogDelete = [...document.body.querySelectorAll('[role="dialog"] button')].find((b) => b.textContent?.trim() === "Delete") as HTMLButtonElement | undefined;
expect(dialogDelete?.disabled).toBe(true);
expect(api.deleteProfile).not.toHaveBeenCalled();
diff --git a/ui/src/pages/tools/profiles/profile-summary.test.ts b/ui/src/pages/tools/profiles/profile-summary.test.ts
index c22859ebde..01ed6c98c0 100644
--- a/ui/src/pages/tools/profiles/profile-summary.test.ts
+++ b/ui/src/pages/tools/profiles/profile-summary.test.ts
@@ -37,7 +37,7 @@ describe("allowsLabel", () => {
describe("assignedLabel", () => {
it("prefers the company-default label", () => {
expect(assignedLabel(summary({ isCompanyDefault: true, appliesToAgentCount: 4 }))).toEqual({
- text: "Company default",
+ text: "Organization default",
unassigned: false,
});
});
diff --git a/ui/src/pages/tools/profiles/profile-summary.ts b/ui/src/pages/tools/profiles/profile-summary.ts
index 3f9fe33a5e..978839f6e6 100644
--- a/ui/src/pages/tools/profiles/profile-summary.ts
+++ b/ui/src/pages/tools/profiles/profile-summary.ts
@@ -31,9 +31,9 @@ export interface AssignedLabel {
unassigned: boolean;
}
-/** "Company default" / "2 agents" / "Not assigned yet". */
+/** "Organization default" / "2 agents" / "Not assigned yet". */
export function assignedLabel(summary: ToolProfileSummary): AssignedLabel {
- if (summary.isCompanyDefault) return { text: "Company default", unassigned: false };
+ if (summary.isCompanyDefault) return { text: "Organization default", unassigned: false };
if (summary.appliesToAgentCount > 0) {
return { text: plural(summary.appliesToAgentCount, "agent"), unassigned: false };
}
diff --git a/ui/src/plugins/bridge-init.ts b/ui/src/plugins/bridge-init.ts
index 5cccc7769b..e94a3e880c 100644
--- a/ui/src/plugins/bridge-init.ts
+++ b/ui/src/plugins/bridge-init.ts
@@ -324,7 +324,7 @@ function PluginSdkIssuesList({
});
if (!companyId) {
- return createElement("div", { className: "text-sm text-muted-foreground" }, "Select a company to view tasks.");
+ return createElement("div", { className: "text-sm text-muted-foreground" }, "Select an organization to view tasks.");
}
return createElement(HostIssuesList, {