diff --git a/apps/code/snapshots.yml b/apps/code/snapshots.yml
index 94a33aa7ea..367b3371a3 100644
--- a/apps/code/snapshots.yml
+++ b/apps/code/snapshots.yml
@@ -537,21 +537,17 @@ snapshots:
git-dialogs--sync-success--light:
hash: v1.k4693efd2.8d79d77c9338aeaa73734836f0e17fde987f6d3239914f4013889d3110e5088d.Rq-w2o1uhes_a5hUWqMXeiDkfnoPCZPt932LkEQXCco
loops-loopslistview--comprehensive--dark:
- hash: v1.k4693efd2.c128012b7f910839e65e8eaf14d5456c93f90d77747d0625ca35fddd8d5adf7a.fuugB5Ov6boP7fg6fWP7A7IG2yYnPUAAWLKZLuV8rZ0
+ hash: v1.k4693efd2.25744a9471ec664c70e346ac5cb330c025a031626bc486abe8820b7b6dbc1a19.Shh8Yl7SdombnNc4-uJjlIbx-n4C0MGXxtOGB1bjJTY
loops-loopslistview--comprehensive--light:
- hash: v1.k4693efd2.4d25a48e0bd7e60d3bbb433e246486e4c9ac95979db86e20eb8bf5cb119d1eb2.EzrENjVHwVMyV00pEA-71TeVomJtchiym5DqWFkujlA
+ hash: v1.k4693efd2.ef8e012cc506a0bf5e761ec8e89943820d4b391f7023f506da7d79586b49a356.ATiN8Y0hUmfGvr0rUytYWX-fITyHRTgeN1i_HOOGZuc
loops-loopslistview--long-mixed-list--dark:
- hash: v1.k4693efd2.fdbf0c24cb386c4345279db3e648efe72aa8a2a984d491361522f62074a771c9.2QmRxRMWYFFfBFrbMm0Dm9rWcvd1lfRbc0egfzoESnY
+ hash: v1.k4693efd2.c9915e22655fe1f6b77eabaf11d8876648c387ceebac6cd8be1880e7255bd7a5.y-gyTKSp7wYbuS57TABRbEyMSL9_U1wvHYvbyCeAbiQ
loops-loopslistview--long-mixed-list--light:
- hash: v1.k4693efd2.aa17d9b6f40fbd3914bd742951db9f90add0bd233c54170803c8483aeb45b43b.yXpqqGczOq1uW5k4Ie7ddNTnne-cFTglZ9cL800pXB4
- loops-loopslistview--shared-page-header--dark:
- hash: v1.k4693efd2.14ab860dcb0df51b4019f012288e45f3a2c4c23fa08e809efef8c04b5687fe36.qoMLHprZmV2wON156NBbl3sqP84a4nXgdYm1H6WpTVM
- loops-loopslistview--shared-page-header--light:
- hash: v1.k4693efd2.23be5408ff3b4a912a0ce0457af8638124b99a01c88a499d0f4204cee2c62487.dGBP1K08MA2Fvhml-BPl5eFra8U83JXmy04NK9wOQnM
+ hash: v1.k4693efd2.5fec9e1a3c14f1bc319cd7e5abc24b3d66ed787986a103b5330f49341d4983ad.mpD-eTS6vkSbsJdOYaHXASHQd5IiJGWRCb6uDGlzhpk
loops-loopslistview--with-builder-sessions--dark:
- hash: v1.k4693efd2.df4a1a4764e1de7b69905814b09c30d9b43f705f5e66c7ad83829c567d4faa1a.jthufoX_KPbbxScjj3pPBA4lEtT9Ym6zUCH-v1759GM
+ hash: v1.k4693efd2.06b404e4016ba0eb86769331a574bc640be1ad26ebf3a04d0256334d1da041a3.fPfF8c2wNFREfy8dVRdsw7W9Fpqj7HEtuaERMroNHMA
loops-loopslistview--with-builder-sessions--light:
- hash: v1.k4693efd2.eb65c38bb0de7efedbc0d7a6c27a6695528e2e6b60949617e7d22335b1e68c8b.fJr9uykvc8S7LI_ASXk5KRqxXCwIqh6ld9zfzs4shP0
+ hash: v1.k4693efd2.30f89915a12cadf313216403fb0f3e221f3c33cee763f0692ae2b96b4332e2b9.j00vexnH4QS0wJAHn7pQNpeITYYRtOxlvB2ngyzqU0c
primitives-pageheader--title-only--dark:
hash: v1.k4693efd2.f7f8c560b1e5cf20050189e10fc0f129e555ba672300a7a09bef5827c171a743.yP9Pp_k51agu_9Ri55Y7uCAPBQ1UTeUQJA9U9dPMKfQ
primitives-pageheader--title-only--light:
diff --git a/apps/mobile/src/app/inbox/[...id].tsx b/apps/mobile/src/app/inbox/[...id].tsx
index 8ad989bfa9..5ffc461924 100644
--- a/apps/mobile/src/app/inbox/[...id].tsx
+++ b/apps/mobile/src/app/inbox/[...id].tsx
@@ -463,7 +463,7 @@ export default function ReportDetailScreen() {
{/* Title */}
- {report.title ?? "Untitled signal"}
+ {report.title ?? "Untitled report"}
{/* Meta row */}
@@ -638,7 +638,7 @@ export default function ReportDetailScreen() {
setDismissOpen(false)}
onDismissed={handleDismissed}
/>
diff --git a/apps/mobile/src/features/inbox/components/ArchivedReportList.tsx b/apps/mobile/src/features/inbox/components/ArchivedReportList.tsx
index 72de972737..03524e145d 100644
--- a/apps/mobile/src/features/inbox/components/ArchivedReportList.tsx
+++ b/apps/mobile/src/features/inbox/components/ArchivedReportList.tsx
@@ -55,7 +55,7 @@ const ArchivedRow = memo(function ArchivedRow({
numberOfLines={2}
ellipsizeMode="tail"
>
- {report.title ?? "Untitled signal"}
+ {report.title ?? "Untitled report"}
diff --git a/apps/mobile/src/features/inbox/components/ReportListRow.tsx b/apps/mobile/src/features/inbox/components/ReportListRow.tsx
index 3b0508bb83..e12cff57bf 100644
--- a/apps/mobile/src/features/inbox/components/ReportListRow.tsx
+++ b/apps/mobile/src/features/inbox/components/ReportListRow.tsx
@@ -70,7 +70,7 @@ function ReportListRowComponent({ report, onPress }: ReportListRowProps) {
numberOfLines={2}
ellipsizeMode="tail"
>
- {report.title ?? "Untitled signal"}
+ {report.title ?? "Untitled report"}
diff --git a/packages/ui/src/features/inbox/CLAUDE.md b/packages/ui/src/features/inbox/CLAUDE.md
index 7ac2c6f467..b8b8273d57 100644
--- a/packages/ui/src/features/inbox/CLAUDE.md
+++ b/packages/ui/src/features/inbox/CLAUDE.md
@@ -4,13 +4,13 @@ The Inbox is the PostHog surface for **Self-driving**: agents that watch product
## Product Model
-The renderer still talks to backend endpoints and TypeScript types with the legacy `signals` naming. User-facing copy should say **Self-driving**, **Responder**, **report**, **run**, or **finding** depending on context. Do not rename backend paths or shared API fields unless the PostHog Cloud backend has changed too.
+The renderer still talks to backend endpoints and TypeScript types with the legacy `signals` naming. User-facing copy should say **Self-driving**, **agent**, **report**, **run**, or **signal** depending on context. Do not rename backend paths or shared API fields unless the PostHog Cloud backend has changed too.
The main objects are:
- `SignalReport`: the unit shown in all Inbox tabs.
- Findings: the source observations that contributed to a report, fetched separately for detail screens.
-- Artefacts: structured agent output attached to a report, such as priority, actionability, suggested reviewers, repo selection, and findings from research.
+- Artefacts: structured agent output attached to a report, such as priority, actionability, suggested reviewers, repo selection, and signals from research.
- Report tasks: links from a report to tasks created for research or implementation.
## Information Architecture
@@ -53,7 +53,7 @@ same artefact-lift pattern as `priority`/`actionability`/`already_addressed` —
so cards avoid an N+1 per-card artefact fetch. Unknown reason codes fall back to
the raw value; cards with no dismissal artefact simply omit the chip.
-Responder configuration is **not** an Inbox tab. It is the top-level Responders sidebar item at `/code/agents`. The legacy `/code/inbox/agents` route redirects there.
+Agent configuration is **not** an Inbox tab. It is the top-level Agents sidebar item at `/code/agents`. The legacy `/code/inbox/agents` route redirects there.
Reviewer scope is a UI preference stored in `inboxReviewerScopeStore`. It filters the list between reports suggested for the current user and reports for someone else. It does not change tab membership; the tab predicates are independent.
@@ -90,7 +90,7 @@ Tab membership and counts live in `utils/reportMembership.ts`. Keep that file as
Detail screens layer additional data on top of the base report:
- `useInboxReportById(reportId)` for the report record.
-- `useInboxReportSignals(reportId)` for contributing findings.
+- `useInboxReportSignals(reportId)` for contributing signals.
- `useInboxReportArtefacts(reportId)` for structured outputs such as suggested reviewers and repo selection.
- `useReportTasks(reportId, status)` for linked research/implementation tasks.
@@ -102,7 +102,7 @@ The Inbox reads from PostHog Cloud's Self-driving backend, currently implemented
- `GET /api/projects/{teamId}/signals/reports/`: paginated report list. Supports filters such as status, ordering, source product, suggested reviewers, and priority.
- `GET /api/projects/{teamId}/signals/reports/{id}/`: single report detail.
-- `GET /api/projects/{teamId}/signals/reports/{id}/signals/`: contributing findings.
+- `GET /api/projects/{teamId}/signals/reports/{id}/signals/`: contributing signals.
- `GET /api/projects/{teamId}/signals/reports/{id}/artefacts/`: structured report artefacts.
- `GET /api/projects/{teamId}/signals/reports/{id}/tasks/`: tasks linked to a report.
@@ -112,7 +112,7 @@ Card headlines are derived client-side from `summary` by `utils/reportPresentati
## Configuration Surface
-Responder setup lives in `features/agents/components/AgentsView.tsx`, which mounts `ConfigureAgentsSection`. This surface composes existing GitHub, Slack, source-toggle, and MCP configuration pieces. Keep setup copy outcome-focused: the user is asking Self-driving to figure out what matters, not choosing internal artefact types.
+Agent setup lives in `features/agents/components/AgentsView.tsx`, which mounts `ConfigureAgentsSection`. This surface composes existing GitHub, Slack, source-toggle, and MCP configuration pieces. Keep setup copy outcome-focused: the user is asking Self-driving to figure out what matters, not choosing internal artefact types.
Onboarding/setup should be task-backed when it starts work. Do not model it as a static checklist if the intended behavior is to launch an agent task.
@@ -124,7 +124,7 @@ Shared primitives exist to keep the surfaces consistent:
- `InboxDetailPageHeader` for detail headers.
- `DetailSection` for content sections inside detail screens.
-- `SignalsList` and the existing detail `SignalCard` for contributing findings.
+- `SignalsList` and the existing detail `SignalCard` for contributing signals.
- Badge and metadata helpers in `components/utils/` and `InboxMetaRow`.
- `SOURCE_PRODUCT_META` for source-product labels and icons.
@@ -134,7 +134,7 @@ When adding or changing UI, reuse those primitives first. Avoid encoding one-off
- Do not reuse the deleted legacy `ReportListRow`, `ReportDetailPane`, or old list/detail stores.
- Do not put page-level Inbox title or navigation into the global app header; `InboxView` owns the Inbox page chrome.
-- Do not add a configure shortcut back into the Inbox header; Responders configuration is a sidebar destination.
+- Do not add a configure shortcut back into the Inbox header; Agents configuration is a sidebar destination.
- Scout (`signals_scout`) is a real Cloud source product. Keep it covered wherever source products surface: `INBOX_SOURCE_OPTIONS`, `SOURCE_PRODUCT_META`, and the scout-name display in `SignalCard`.
- Scout management UI (fleet configuration, run history) lives in `features/scouts/` and is backed by the PostHog Cloud scout endpoints (`/api/projects/{teamId}/signals/scout/`). Do not add scout controls that have no backing endpoint there.
- Do not put preview shims or mock report data in `apps/code/index.html`; the app shell should stay minimal.
diff --git a/packages/ui/src/features/inbox/components/AgentRunDetail.tsx b/packages/ui/src/features/inbox/components/AgentRunDetail.tsx
index c8751d0306..4f32aea5e9 100644
--- a/packages/ui/src/features/inbox/components/AgentRunDetail.tsx
+++ b/packages/ui/src/features/inbox/components/AgentRunDetail.tsx
@@ -110,7 +110,7 @@ function RunOutputWidget({ report }: { report: SignalReport }) {
Research couldn't complete – check the task log below for the error.
- The Responder may retry automatically.
+ The agent may retry automatically.
@@ -123,7 +123,7 @@ function RunOutputWidget({ report }: { report: SignalReport }) {
content={report.summary}
fallback={
report.status === "in_progress"
- ? "The Responder is investigating – partial findings will appear here as they land."
+ ? "The agent is investigating – partial signals will appear here as they land."
: "Queued for research."
}
variant="detail"
@@ -325,7 +325,7 @@ function AgentRunDetailContent({ report }: { report: SignalReport }) {
<>
- {signals.length} finding{signals.length === 1 ? "" : "s"}
+ {signals.length} signal{signals.length === 1 ? "" : "s"}
>
)}
@@ -412,7 +412,7 @@ function AgentRunDetailContent({ report }: { report: SignalReport }) {
title="Evidence so far"
rightSlot={
- {signals.length || report.signal_count} finding
+ {signals.length || report.signal_count} signal
{(signals.length || report.signal_count) === 1 ? "" : "s"}
}
diff --git a/packages/ui/src/features/inbox/components/ConfigureAgentsSection.tsx b/packages/ui/src/features/inbox/components/ConfigureAgentsSection.tsx
index 3f98471ae2..498917b5e8 100644
--- a/packages/ui/src/features/inbox/components/ConfigureAgentsSection.tsx
+++ b/packages/ui/src/features/inbox/components/ConfigureAgentsSection.tsx
@@ -125,7 +125,7 @@ export function ConfigureAgentsSection() {
Scheduled agents that sweep this project on a cadence and emit
- findings to your inbox.{" "}
+ signals to your inbox.{" "}
{/* Placeholder docs link until a dedicated scouts page exists. */}
{isLoading ? (
@@ -209,7 +209,7 @@ export function ConfigureAgentsSection() {
diff --git a/packages/ui/src/features/inbox/components/InboxDetailFrame.tsx b/packages/ui/src/features/inbox/components/InboxDetailFrame.tsx
index bcaacd6c00..e122dcd0ae 100644
--- a/packages/ui/src/features/inbox/components/InboxDetailFrame.tsx
+++ b/packages/ui/src/features/inbox/components/InboxDetailFrame.tsx
@@ -137,7 +137,7 @@ export function InboxDetailFrame({
{evidenceCount > 0 && (
<>
- {evidenceCount} finding{evidenceCount === 1 ? "" : "s"}
+ {evidenceCount} signal{evidenceCount === 1 ? "" : "s"}
>
@@ -151,7 +151,7 @@ export function InboxDetailFrame({
>
)}
@@ -181,7 +181,7 @@ export function InboxDetailFrame({
@@ -196,7 +196,7 @@ export function InboxDetailFrame({
title={evidenceSection.title}
rightSlot={
- {evidenceCount} finding
+ {evidenceCount} signal
{evidenceCount === 1 ? "" : "s"}
}
diff --git a/packages/ui/src/features/inbox/components/PullRequestsTab.tsx b/packages/ui/src/features/inbox/components/PullRequestsTab.tsx
index e29d53bdc9..1d33402ca5 100644
--- a/packages/ui/src/features/inbox/components/PullRequestsTab.tsx
+++ b/packages/ui/src/features/inbox/components/PullRequestsTab.tsx
@@ -24,7 +24,7 @@ export function PullRequestsTab() {
entireProjectTitle: "No pull requests in the project right now",
teammateTitle: "No pull requests for this reviewer right now",
description:
- "When a Responder ships a code change, the PR draft lands here for you to review and publish.",
+ "When an agent ships a code change, the PR draft lands here for you to review and publish.",
}}
/>
);
diff --git a/packages/ui/src/features/inbox/components/ReportCard.tsx b/packages/ui/src/features/inbox/components/ReportCard.tsx
index a58955c4af..3cdfbbe2d9 100644
--- a/packages/ui/src/features/inbox/components/ReportCard.tsx
+++ b/packages/ui/src/features/inbox/components/ReportCard.tsx
@@ -323,7 +323,7 @@ export function ReportCard(props: ReportCardProps) {
>
- {report.signal_count} finding
+ {report.signal_count} signal
{report.signal_count !== 1 ? "s" : ""}
diff --git a/packages/ui/src/features/inbox/components/ReportsTab.tsx b/packages/ui/src/features/inbox/components/ReportsTab.tsx
index 1b531a0172..c33746e8a3 100644
--- a/packages/ui/src/features/inbox/components/ReportsTab.tsx
+++ b/packages/ui/src/features/inbox/components/ReportsTab.tsx
@@ -15,7 +15,7 @@ export function ReportsTab() {
entireProjectTitle: "No reports in the project yet",
teammateTitle: "No reports for this reviewer yet",
description:
- "Reports are what Responders surface when there's something worth your judgment but no clean code change to draft.",
+ "Reports are what agents surface when there's something worth your judgment but no clean code change to draft.",
}}
/>
);
diff --git a/packages/ui/src/features/inbox/components/RunsTab.tsx b/packages/ui/src/features/inbox/components/RunsTab.tsx
index af45dab0d9..8e4b41279f 100644
--- a/packages/ui/src/features/inbox/components/RunsTab.tsx
+++ b/packages/ui/src/features/inbox/components/RunsTab.tsx
@@ -95,10 +95,10 @@ export function RunsTab() {
{scope === INBOX_SCOPE_FOR_YOU
- ? "No Responders are working on something for you right now"
+ ? "No agents are working on something for you right now"
: scope === INBOX_SCOPE_ENTIRE_PROJECT
- ? "No Responders are working on anything in the project right now"
- : "No Responders are working on something for this reviewer right now"}
+ ? "No agents are working on anything in the project right now"
+ : "No agents are working on something for this reviewer right now"}
When Self-driving kicks one off, you'll see the live run land here
diff --git a/packages/ui/src/features/inbox/components/utils/ExplainedDismissOptionLabels.tsx b/packages/ui/src/features/inbox/components/utils/ExplainedDismissOptionLabels.tsx
index 5da50a8adf..203a3a5382 100644
--- a/packages/ui/src/features/inbox/components/utils/ExplainedDismissOptionLabels.tsx
+++ b/packages/ui/src/features/inbox/components/utils/ExplainedDismissOptionLabels.tsx
@@ -4,10 +4,10 @@ import { RadioGroup, Tooltip } from "@radix-ui/themes";
import type { ReactNode } from "react";
const PAUSE_OPTION_TOOLTIP =
- "Snoozes this report: it briefly leaves your inbox while more context is gathered, and it can come back if new findings match.";
+ "Snoozes this report: it briefly leaves your inbox while more context is gathered, and it can come back if new signals match.";
const SUPPRESS_OPTION_TOOLTIP =
- "Archives permanently: the report leaves your inbox and matching findings will not surface it again. Your reason is saved with the report.";
+ "Archives permanently: the report leaves your inbox and matching signals will not surface it again. Your reason is saved with the report.";
function dismissReasonOptionDomId(value: DismissalReasonOptionValue): string {
return `dismiss-report-dialog-reason-${value}`;
diff --git a/packages/ui/src/features/inbox/components/utils/SignalReportStatusBadge.tsx b/packages/ui/src/features/inbox/components/utils/SignalReportStatusBadge.tsx
index 0acdd3e73b..9f72d0680e 100644
--- a/packages/ui/src/features/inbox/components/utils/SignalReportStatusBadge.tsx
+++ b/packages/ui/src/features/inbox/components/utils/SignalReportStatusBadge.tsx
@@ -8,10 +8,10 @@ const STATUS_TOOLTIPS: Record = {
resolved: "This report is resolved — its implementation pull request merged.",
pending_input:
"This report needs human input in PostHog before it can proceed.",
- in_progress: "An AI agent is actively researching this report's findings.",
+ in_progress: "An AI agent is actively researching this report's signals.",
candidate: "Queued for research. An agent will pick this up shortly.",
potential:
- "Gathering findings. The report will be queued once enough evidence accumulates.",
+ "Gathering signals. The report will be queued once enough evidence accumulates.",
failed: "Research failed. The report may be retried automatically.",
suppressed: "This report has been suppressed and is out of your inbox.",
deleted: "This report has been deleted.",
diff --git a/packages/ui/src/features/scouts/components/FleetFindingsCallout.tsx b/packages/ui/src/features/scouts/components/FleetFindingsCallout.tsx
index 45e6ac0440..ba2ee222c2 100644
--- a/packages/ui/src/features/scouts/components/FleetFindingsCallout.tsx
+++ b/packages/ui/src/features/scouts/components/FleetFindingsCallout.tsx
@@ -45,10 +45,10 @@ export function FleetFindingsCallout() {
- Scout findings
+ Scout signals
- {summary.totalCount} finding{summary.totalCount === 1 ? "" : "s"}{" "}
+ {summary.totalCount} signal{summary.totalCount === 1 ? "" : "s"}{" "}
across {summary.scoutCount} scout
{summary.scoutCount === 1 ? "" : "s"}
{summary.latestEmittedAt ? (
diff --git a/packages/ui/src/features/scouts/components/ScoutBadges.tsx b/packages/ui/src/features/scouts/components/ScoutBadges.tsx
index 4245298dfa..952e5cbf39 100644
--- a/packages/ui/src/features/scouts/components/ScoutBadges.tsx
+++ b/packages/ui/src/features/scouts/components/ScoutBadges.tsx
@@ -27,7 +27,7 @@ export function ScoutOriginBadge({ config }: { config: ScoutConfig }) {
export function DryRunBadge({ config }: { config: ScoutConfig }) {
if (config.emit) return null;
return (
-
+
Mode
- Dry run executes the scout but holds back its findings
+ Dry run executes the scout but holds back its signals
- Finding
+ Signal
confidence {Math.round(emission.confidence * 100)}%
diff --git a/packages/ui/src/features/scouts/components/ScoutFindingDiscussButton.tsx b/packages/ui/src/features/scouts/components/ScoutFindingDiscussButton.tsx
index b539ad6650..fb83bf8c96 100644
--- a/packages/ui/src/features/scouts/components/ScoutFindingDiscussButton.tsx
+++ b/packages/ui/src/features/scouts/components/ScoutFindingDiscussButton.tsx
@@ -56,7 +56,7 @@ export function ScoutFindingDiscussButton({
const { runTask, isRunning } = useScoutChatTask({
prompt,
- taskLabel: "finding discussion",
+ taskLabel: "signal discussion",
loggerScope: "scout-finding-discuss",
chatType: "finding_discuss",
surface: "scout_detail",
@@ -85,7 +85,7 @@ export function ScoutFindingDiscussButton({