Skip to content
This repository was archived by the owner on Aug 6, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/mobile/src/app/inbox/[...id].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ export default function ReportDetailScreen() {

{/* Title */}
<Text className="mb-2 font-semibold text-[18px] text-gray-12">
{report.title ?? "Untitled signal"}
{report.title ?? "Untitled report"}
</Text>

{/* Meta row */}
Expand Down Expand Up @@ -642,7 +642,7 @@ export default function ReportDetailScreen() {
<DismissReportSheet
visible={dismissOpen}
reportId={report.id}
reportTitle={report.title?.trim() ? report.title : "Untitled signal"}
reportTitle={report.title?.trim() ? report.title : "Untitled report"}
onClose={() => setDismissOpen(false)}
onDismissed={handleDismissed}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ const ArchivedRow = memo(function ArchivedRow({
numberOfLines={2}
ellipsizeMode="tail"
>
{report.title ?? "Untitled signal"}
{report.title ?? "Untitled report"}
</Text>

<View className="mt-1 flex-row flex-wrap items-center gap-2">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ function ReportListRowComponent({ report, onPress }: ReportListRowProps) {
numberOfLines={2}
ellipsizeMode="tail"
>
{report.title ?? "Untitled signal"}
{report.title ?? "Untitled report"}
</Text>

<View className="mt-1 flex-row items-center gap-2">
Expand Down
16 changes: 8 additions & 8 deletions packages/ui/src/features/inbox/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.

Expand Down Expand Up @@ -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.

Expand All @@ -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.

Expand All @@ -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.

Expand All @@ -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.

Expand All @@ -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.
Expand Down
8 changes: 4 additions & 4 deletions packages/ui/src/features/inbox/components/AgentRunDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ function RunOutputWidget({ report }: { report: SignalReport }) {
</Text>
<Text className="text-[12px] text-gray-11 leading-snug">
Research couldn't complete – check the task log below for the error.
The Responder may retry automatically.
The agent may retry automatically.
</Text>
</Flex>
</Flex>
Expand All @@ -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"
Expand Down Expand Up @@ -325,7 +325,7 @@ function AgentRunDetailContent({ report }: { report: SignalReport }) {
<>
<InboxMetaSeparator />
<InboxMetaText className="tabular-nums">
{signals.length} finding{signals.length === 1 ? "" : "s"}
{signals.length} signal{signals.length === 1 ? "" : "s"}
</InboxMetaText>
</>
)}
Expand Down Expand Up @@ -412,7 +412,7 @@ function AgentRunDetailContent({ report }: { report: SignalReport }) {
title="Evidence so far"
rightSlot={
<Text className="cursor-default select-none text-[11px] text-gray-10 tabular-nums">
{signals.length || report.signal_count} finding
{signals.length || report.signal_count} signal
{(signals.length || report.signal_count) === 1 ? "" : "s"}
</Text>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ export function ConfigureAgentsSection() {

<Subsection
title="Connections"
description="Foundational integrations responders read from and write to."
description="Foundational integrations agents read from and write to."
>
<GitHubIntegrationSection
hasGithubIntegration={hasGithubIntegration}
Expand All @@ -138,7 +138,7 @@ export function ConfigureAgentsSection() {
description={
<>
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. */}
<a
href="https://posthog.com/blog/self-driving-product"
Expand All @@ -155,8 +155,8 @@ export function ConfigureAgentsSection() {
</Subsection>

<Subsection
title="Responders"
description="Each source: 1. watches for signals, 2. spins up a Responder when something matters, 3. hands you solutions."
title="Signal sources"
description="Each source watches for signals and spins up work when something matters."
>
{isLoading ? (
<ResponderAgentRosterSkeleton />
Expand Down Expand Up @@ -207,7 +207,7 @@ export function ConfigureAgentsSection() {

<Subsection
title="MCP servers"
description="External tools responders can read from. PostHog data is always available; this is everything else."
description="External tools agents can read from. PostHog data is always available; this is everything else."
>
<Link
to="/settings/$category"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ function GitHubSetup({ onComplete, onCancel }: SetupFormProps) {
? "We didn't hear back from GitHub. If the browser tab was closed, click Try again."
: connecting
? "Waiting for GitHub… finish authorizing in your browser, then return here."
: "Connect your GitHub account to import issues as Self-driving findings.";
: "Connect your GitHub account to import issues as Self-driving signals.";
return (
<SetupFormContainer title="Connect GitHub">
<Flex direction="column" gap="3">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ export function InboxDetailFrame({
{evidenceCount > 0 && (
<>
<InboxMetaText className="tabular-nums">
{evidenceCount} finding{evidenceCount === 1 ? "" : "s"}
{evidenceCount} signal{evidenceCount === 1 ? "" : "s"}
</InboxMetaText>
<InboxMetaSeparator />
</>
Expand All @@ -151,7 +151,7 @@ export function InboxDetailFrame({
<InboxMetaSeparator />
<InboxMetaSourceStack
sourceProducts={report.source_products}
labelPrefix="Responder · "
labelPrefix="Agent · "
/>
</>
)}
Expand Down Expand Up @@ -181,7 +181,7 @@ export function InboxDetailFrame({
<DetailSection Icon={SummaryIcon} title={summarySection.title}>
<SignalReportSummaryMarkdown
content={report.summary}
fallback="No summary yet – the Responder is still investigating."
fallback="No summary yet – the agent is still investigating."
variant="detail"
pending={report.status === "in_progress"}
/>
Expand All @@ -196,7 +196,7 @@ export function InboxDetailFrame({
title={evidenceSection.title}
rightSlot={
<Text className="cursor-default select-none text-[11px] text-gray-10 tabular-nums">
{evidenceCount} finding
{evidenceCount} signal
{evidenceCount === 1 ? "" : "s"}
</Text>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
}}
/>
);
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/features/inbox/components/ReportCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ export function ReportCard(props: ReportCardProps) {
>
<LightningIcon size={11} />
<span className="tabular-nums">
{report.signal_count} finding
{report.signal_count} signal
{report.signal_count !== 1 ? "s" : ""}
</span>
</Flex>
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/features/inbox/components/ReportsTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
}}
/>
);
Expand Down
6 changes: 3 additions & 3 deletions packages/ui/src/features/inbox/components/RunsTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,10 @@ export function RunsTab() {
</EmptyMedia>
<EmptyTitle>
{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"}
</EmptyTitle>
<EmptyDescription>
When Self-driving kicks one off, you'll see the live run land here
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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}`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ const STATUS_TOOLTIPS: Record<string, string> = {
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.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ export function FleetFindingsCallout() {
<SparkleIcon size={20} className="shrink-0 text-(--iris-9)" />
<Flex direction="column" gap="0" className="min-w-0">
<Text className="font-medium text-[13px] text-gray-12">
Scout findings
Scout signals
</Text>
<Text className="truncate text-[12px] text-gray-11 leading-snug">
{summary.totalCount} finding{summary.totalCount === 1 ? "" : "s"}{" "}
{summary.totalCount} signal{summary.totalCount === 1 ? "" : "s"}{" "}
across {summary.scoutCount} scout
{summary.scoutCount === 1 ? "" : "s"}
{summary.latestEmittedAt ? (
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/features/scouts/components/ScoutBadges.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export function ScoutOriginBadge({ config }: { config: ScoutConfig }) {
export function DryRunBadge({ config }: { config: ScoutConfig }) {
if (config.emit) return null;
return (
<Tooltip content="Runs on schedule but findings are not emitted to the Signals inbox">
<Tooltip content="Runs on schedule but signals are not emitted to the Signals inbox">
<Badge
variant="soft"
color="amber"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ export function ScoutConfigForm({
<Flex direction="column" className="min-w-0">
<Text className="text-[12px] text-gray-12">Mode</Text>
<Text className="text-[11.5px] text-gray-10">
Dry run executes the scout but holds back its findings
Dry run executes the scout but holds back its signals
</Text>
</Flex>
<SettingsOptionSelect
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ export function ScoutEmissionCard({
className={`shrink-0 text-gray-9 transition-transform duration-150 ${expanded ? "rotate-90" : ""}`}
/>
<CompassIcon size={14} className="shrink-0 text-(--iris-9)" />
<Text className="font-medium text-[13px] text-gray-10">Finding</Text>
<Text className="font-medium text-[13px] text-gray-10">Signal</Text>
<SeverityBadge severity={emission.severity} />
<Text className="text-[11px] text-gray-10">
confidence {Math.round(emission.confidence * 100)}%
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -85,7 +85,7 @@ export function ScoutFindingDiscussButton({
<button
type="button"
disabled={isRunning}
title="Discuss this finding with your agent"
title="Discuss this signal with your agent"
className="inline-flex shrink-0 items-center gap-1 text-[11px] text-accent-11 no-underline transition-colors hover:text-accent-12 disabled:cursor-default disabled:opacity-60"
>
{isRunning ? <Spinner size="1" /> : <ChatCircleIcon size={11} />}
Expand All @@ -106,9 +106,9 @@ export function ScoutFindingDiscussButton({
}}
>
<TextArea
aria-label="Question to discuss about this finding"
aria-label="Question to discuss about this signal"
autoFocus
placeholder="Ask about this finding… (optional)"
placeholder="Ask about this signal… (optional)"
resize="vertical"
rows={5}
size="2"
Expand Down
Loading
Loading