fix: rename user-facing 'chats' to 'Coder Agents' (#23905)

Refs #23897

- Rename user-facing "chats" to "Coder Agents" (feature name) or
"conversations" (individual instances)
- Covers UI strings, docs prose, Storybook stories, and aria labels
- API paths, internal code identifiers, and the "Chats API" docs page
name are intentionally left unchanged
- TaskPage / AI Tasks are out of scope

> 🤖 Written by a Coder Agent. Will be reviewed by a human.
This commit is contained in:
Cian Johnston
2026-04-01 14:30:04 +01:00
committed by GitHub
parent ddafdbcbce
commit 7198f9040d
18 changed files with 54 additions and 51 deletions
+12 -12
View File
@@ -1,7 +1,7 @@
# Getting Started
This guide walks platform teams and administrators through enabling Coder
Agents, preparing your deployment, and running your first chat.
Agents, preparing your deployment, and running your first Coder Agent.
> [!NOTE]
> Coder Agents is in [Early Access](./early-access.md). Deploy to a
@@ -24,7 +24,7 @@ Before you begin, confirm the following:
for the agent to select when provisioning workspaces.
- **Admin access** to the Coder deployment for enabling the experiment and
configuring providers.
- **Coder Agents User role** assigned to each user who needs to create or use chats.
- **Coder Agents User role** assigned to each user who needs to interact with Coder Agents.
Owners can assign this from **Admin** > **Users**. See
[Grant Coder Agents User](#step-3-grant-coder-agents-user) below.
@@ -74,7 +74,7 @@ Detailed instructions for each provider and model option are in the
## Step 3: Grant Coder Agents User
The **Coder Agents User** role controls which users can create and use chats.
The **Coder Agents User** role controls which users can interact with Coder Agents.
Members do not have Coder Agents User by default.
1. Go to **Admin** > **Users** in the Coder dashboard.
@@ -85,10 +85,10 @@ Repeat for each user who needs access. Owners always have full access
and do not need the role.
> [!NOTE]
> Users who created chats before this role was introduced are
> Users who created conversations before this role was introduced are
> automatically granted the role during upgrade.
## Step 4: Start your first chat
## Step 4: Start your first Coder Agent
1. Go to the **Agents** page in the Coder dashboard.
1. Select a model from the dropdown (your default will be pre-selected).
@@ -144,7 +144,7 @@ set of expectations and limitations.
### Set a deployment-wide system prompt
Administrators can set a system prompt that applies to all chats across the
Administrators can set a system prompt that applies to all Coder Agents across the
deployment. Use this to encode organizational conventions:
- Coding standards and style guidelines.
@@ -177,7 +177,7 @@ with tighter network policies.
### Plan for LLM costs
Every chat turn sends tokens to your LLM provider. Long-running tasks,
Every conversation turn sends tokens to your LLM provider. Long-running tasks,
sub-agent delegation, and complex multi-step work can consume significant
token volume. Consider:
@@ -207,12 +207,12 @@ multiplier, not a replacement for developer judgment.
The [Chats API](./chats-api.md) enables programmatic access to Coder Agents.
This is useful for building automations such as:
- Triggering chats from CI/CD pipelines when builds fail.
- Creating chats from GitHub webhooks on new issues or PRs.
- Triggering Coder Agents from CI/CD pipelines when builds fail.
- Creating Coder Agents from GitHub webhooks on new issues or PRs.
- Building internal tools or dashboards on top of the API.
- Scripting batch operations across repositories.
**Quick example — create a chat via the API:**
**Quick example — create a Coder Agent via the API:**
```sh
curl -X POST https://coder.example.com/api/experimental/chats \
@@ -245,7 +245,7 @@ narrowly scoped.
Create an `AGENTS.md` file in the home directory (`~/.coder/AGENTS.md`) or
the workspace agent's working directory to provide persistent context to the
agent. This file is automatically read and included in the system prompt
for every chat that uses that workspace.
for every conversation with a Coder Agent that uses that workspace.
Use it for:
@@ -275,7 +275,7 @@ Good feedback includes:
- **What you tried** — the prompt, the template, and the model.
- **What happened** — the agent's behavior, any errors, unexpected results.
- **What you expected** — the outcome you were looking for.
- **Context** — screenshots, chat IDs, or links to the Agents page help
- **Context** — screenshots, `chat_id` values, or links to the Agents page help
the team investigate quickly.
Your input directly influences product direction during Early Access.
+1 -1
View File
@@ -1204,7 +1204,7 @@
"children": [
{
"title": "Getting Started",
"description": "Enable Coder Agents, prepare your deployment, and run your first chat",
"description": "Enable Coder Agents, prepare your deployment, and run your first Coder Agent",
"path": "./ai-coder/agents/getting-started.md",
"state": ["early access"]
},
@@ -24,7 +24,7 @@ export const AgentAnalyticsPageView: FC<AgentAnalyticsPageViewProps> = ({
<div className="mx-auto w-full max-w-3xl">
<SectionHeader
label="Analytics"
description="Review your personal chat usage and cost breakdowns."
description="Review your personal Coder Agents usage and cost breakdowns."
action={
<div className="flex items-center gap-2 text-xs text-content-secondary">
<BarChart3Icon className="h-4 w-4" />
@@ -249,7 +249,7 @@ export const AgentSettingsBehaviorPageView: FC<
<>
<SectionHeader
label="Behavior"
description="Custom instructions that shape how the agent responds in your chats."
description="Custom instructions that shape how the agent responds in your conversations."
/>
{/* ── Personal prompt (always visible) ── */}
<form
@@ -260,7 +260,7 @@ export const AgentSettingsBehaviorPageView: FC<
Personal Instructions
</h3>
<p className="!mt-0.5 m-0 text-xs text-content-secondary">
Applied to all your chats. Only visible to you.
Applied to all your conversations. Only visible to you.
</p>
<TextareaAutosize
className={cn(
@@ -462,8 +462,8 @@ export const AgentSettingsBehaviorPageView: FC<
<p className="!mt-0.5 m-0 flex-1 text-xs text-content-secondary">
Set a default autostop for agent-created workspaces that don't
have one defined in their template. Template-defined autostop
rules always take precedence. Active chats will extend the stop
time.
rules always take precedence. Active conversations will extend
the stop time.
</p>
<Switch
checked={isAutostopEnabled}
@@ -25,7 +25,7 @@ const AgentSettingsMCPServersPage: FC = () => {
<RequirePermission isFeatureVisible={permissions.editDeploymentConfig}>
<MCPServerAdminPanel
sectionLabel="MCP Servers"
sectionDescription="Configure external MCP servers that provide additional tools for AI chat sessions."
sectionDescription="Configure external MCP servers that provide additional tools for Coder Agents."
sectionBadge={<AdminBadge />}
serversData={serversQuery.data}
isLoadingServers={serversQuery.isLoading}
@@ -45,7 +45,7 @@ const AgentSettingsProvidersPage: FC = () => {
<ChatModelAdminPanel
section="providers"
sectionLabel="Providers"
sectionDescription="Connect third-party LLM services like OpenAI, Anthropic, or Google. Each provider supplies models that users can select for their chats."
sectionDescription="Connect third-party LLM services like OpenAI, Anthropic, or Google. Each provider supplies models that users can select for their conversations."
sectionBadge={<AdminBadge />}
providerConfigsData={providerConfigsQuery.data}
modelConfigsData={modelConfigsQuery.data}
@@ -188,8 +188,8 @@ export const AgentSettingsUsagePageView: FC<
label="Usage"
description={
selectedUserId
? "Review deployment chat usage for a specific user."
: "Review deployment chat usage and drill into individual users."
? "Review deployment Coder Agents usage for a specific user."
: "Review deployment Coder Agents usage and drill into individual users."
}
badge={<AdminBadge />}
action={
@@ -611,7 +611,7 @@ export const OpensAnalyticsForAdmins: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Review your personal chat usage and cost breakdowns.",
"Review your personal Coder Agents usage and cost breakdowns.",
),
).toBeInTheDocument();
});
@@ -633,7 +633,7 @@ export const OpensAnalyticsForNonAdmins: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Review your personal chat usage and cost breakdowns.",
"Review your personal Coder Agents usage and cost breakdowns.",
),
).toBeInTheDocument();
});
@@ -650,7 +650,7 @@ export const OpensSettingsForAdmins: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Custom instructions that shape how the agent responds in your chats.",
"Custom instructions that shape how the agent responds in your conversations.",
),
).toBeInTheDocument();
});
@@ -670,7 +670,7 @@ export const OpensSettingsForNonAdmins: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Custom instructions that shape how the agent responds in your chats.",
"Custom instructions that shape how the agent responds in your conversations.",
),
).toBeInTheDocument();
});
@@ -688,7 +688,7 @@ export const SettingsViewResets: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Custom instructions that shape how the agent responds in your chats.",
"Custom instructions that shape how the agent responds in your conversations.",
),
).toBeInTheDocument();
});
@@ -698,13 +698,13 @@ export const SettingsViewResets: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Review deployment chat usage and drill into individual users.",
"Review deployment Coder Agents usage and drill into individual users.",
),
).toBeInTheDocument();
});
// Go back to chats
const backButton = screen.getByLabelText("Back to chats");
// Go back to conversations
const backButton = screen.getByLabelText("Back to Agents");
await userEvent.click(backButton);
// Re-open settings, should reset to Behavior
@@ -712,7 +712,7 @@ export const SettingsViewResets: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Custom instructions that shape how the agent responds in your chats.",
"Custom instructions that shape how the agent responds in your conversations.",
),
).toBeInTheDocument();
});
@@ -24,7 +24,7 @@ const mock403Error = Object.assign(
statusText: "Forbidden",
data: {
message: "Forbidden.",
detail: "Insufficient permissions to create chat.",
detail: "Insufficient permissions to use Coder Agents.",
},
headers: {},
config: {},
@@ -30,7 +30,7 @@ export const ChatAccessDeniedAlert: FC = () => {
>
<p className="m-0 font-medium">Permission required</p>
<p className="m-0 mt-1 text-sm text-content-secondary">
You don't have permission to create chats. Contact your Coder
You don't have permission to use Coder Agents. Contact your Coder
administrator for access. Refresh this page after access has been
granted.
</p>
@@ -298,10 +298,13 @@ export const ChatCostSummaryView: FC<ChatCostSummaryViewProps> = ({
</div>
<div className="overflow-x-auto rounded-lg border border-border-default">
<Table className="text-sm" aria-label="Cost breakdown by chat">
<Table
className="text-sm"
aria-label="Cost breakdown by conversation"
>
<TableHeader>
<TableRow className="text-left text-xs font-medium uppercase tracking-wide text-content-secondary">
<TableHead className="px-4 py-3">Chat</TableHead>
<TableHead className="px-4 py-3">Conversation</TableHead>
<TableHead className="px-4 py-3 text-right">Cost</TableHead>
<TableHead className="px-4 py-3 text-right">
Messages
@@ -325,7 +328,7 @@ export const ChatCostSummaryView: FC<ChatCostSummaryViewProps> = ({
<TableCell className="px-4 py-3">
{chat.chat_title || (
<span className="italic text-content-secondary">
Untitled chat
Untitled conversation
</span>
)}
</TableCell>
@@ -39,7 +39,7 @@ export const ChatSummarizedTool: React.FC<{
<TriangleAlertIcon className="h-3.5 w-3.5 shrink-0 text-content-secondary" />
</TooltipTrigger>
<TooltipContent>
{errorMessage || "Failed to summarize chat"}
{errorMessage || "Failed to summarize conversation"}
</TooltipContent>
</Tooltip>
)}
@@ -341,8 +341,8 @@ export const ModelsSection: FC<ModelsSectionProps> = ({
{!modelConfig.enabled
? "Cannot set a disabled model as default"
: modelConfig.is_default
? "Pinned as default for new chats"
: "Pin as default for new chats"}
? "Pinned as default for new conversations"
: "Pin as default for new conversations"}
</TooltipContent>
</Tooltip>
<ChevronRightIcon className="h-5 w-5 shrink-0 text-content-secondary" />
@@ -64,7 +64,7 @@ const AVAILABILITY_OPTIONS = [
{
value: "force_on",
label: "Force On",
description: "Always injected into every chat session.",
description: "Always injected into every conversation.",
},
{
value: "default_on",
@@ -158,7 +158,7 @@ const ServerList: FC<ServerListProps> = ({
label={sectionLabel ?? "MCP Servers"}
description={
sectionDescription ??
"Configure external MCP servers that provide additional tools for AI chat sessions."
"Configure external MCP servers that provide additional tools for Coder Agents."
}
badge={sectionBadge}
action={
@@ -744,7 +744,7 @@ const ServerForm: FC<ServerFormProps> = ({
<Field
label="Availability"
htmlFor={`${formId}-availability`}
description="Controls how this server appears in new chats."
description="Controls how this server appears in new conversations."
>
<Select
value={form.values.availability}
@@ -1221,7 +1221,7 @@ export const AgentsSidebar: FC<AgentsSidebarProps> = (props) => {
asChild
variant="subtle"
size="icon"
aria-label="Back to chats"
aria-label="Back to Agents"
className="relative z-10 h-7 w-7 min-w-0 text-content-secondary hover:text-content-primary"
>
<Link
@@ -182,8 +182,8 @@ export const UserCompactionThresholdSettings: FC<
Context Compaction
</h3>
<p className="!mt-0.5 m-0 text-xs text-content-secondary">
Control when chat context is automatically summarized for each model.
Setting 100% means the chat will never auto-compact.
Control when conversation context is automatically summarized for each
model. Setting 100% means the conversation will never auto-compact.
</p>
<div className="flex items-center gap-2 text-sm text-content-secondary">
<Spinner loading className="h-4 w-4" />
@@ -200,8 +200,8 @@ export const UserCompactionThresholdSettings: FC<
Context Compaction
</h3>
<p className="!mt-0.5 m-0 text-xs text-content-secondary">
Control when chat context is automatically summarized for each model.
Setting 100% means the chat will never auto-compact.
Control when conversation context is automatically summarized for each
model. Setting 100% means the conversation will never auto-compact.
</p>
<p className="m-0 text-xs text-content-destructive">
{getErrorMessage(
@@ -219,8 +219,8 @@ export const UserCompactionThresholdSettings: FC<
Context Compaction
</h3>
<p className="!mt-0.5 m-0 text-xs text-content-secondary">
Control when chat context is automatically summarized for each model.
Setting 100% means the chat will never auto-compact.
Control when conversation context is automatically summarized for each
model. Setting 100% means the conversation will never auto-compact.
</p>
{isLoadingModelConfigs ? (
<div className="flex items-center gap-2 text-sm text-content-secondary">
@@ -29,7 +29,7 @@ const roleDescriptions: Record<string, string> = {
"user-admin": "User admin can manage all users and groups.",
"template-admin": "Template admin can manage all templates and workspaces.",
auditor: "Auditor can access the audit logs.",
"agents-access": "Coder Agents User allows creating and using AI chats.",
"agents-access": "Coder Agents User allows creating and using Coder Agents.",
member:
"Everybody is a member. This is a shared and default role for all users.",
};
@@ -227,7 +227,7 @@ export const WorkspacesTable: FC<WorkspacesTableProps> = ({
<Link
to={`/agents/${chatsByWorkspace[workspace.id]}`}
onClick={(e) => e.stopPropagation()}
aria-label={`View agent chat for ${workspace.name}`}
aria-label={`View agent conversation for ${workspace.name}`}
>
Agent
</Link>