To rename any agent yourself, expand its sidebar card and click the - edit button to open the Session settings dialog and + edit button to open the Session details dialog and type a new name.
@@ -396,19 +396,22 @@ export function AgentsContent() { directory and full-access mode, and renders as a row in the{" "} Sub Agents list inside the parent's expanded card rather than as a card of its own. Persona reviewers appear in the same - list, marked with a Review badge. Passing{" "} -child: false launches an independent agent instead — it
- gets its own top-level card, but Dispatch still records who launched
- it, so the launcher can message and archive it.
+ list, marked with a clipboard icon that turns into a green checkmark
+ once its review is submitted — click it to open the review directly.
+ Passing child: false launches an independent agent
+ instead — it gets its own top-level card, but Dispatch still records
+ who launched it, so the launcher can message and archive it.
Nesting stops at one level: a sub agent can only launch independent - agents, not children or persona reviews of its own. Sub agent rows - carry the same session controls a card does — attach or detach the - terminal, resume a stopped session, and an overflow menu with{" "} - Pause, Session settings, and{" "} - Archive. Selecting a sub agent expands the card it - lives in. + agents, not children or persona reviews of its own. Clicking a sub + agent row's own body connects or disconnects its terminal, the same + way a top-level card's row does. An overflow menu carries the rest of + its session controls: View terminal/ + Detach, Open review (once a review + is submitted), Pause/Resume,{" "} + Session details, and Archive. + Selecting a sub agent expands the card it lives in.
Each child is told which agent launched it and can coordinate back
diff --git a/apps/web/src/components/app/session-settings-dialog.tsx b/apps/web/src/components/app/session-settings-dialog.tsx
index a03fc26d..8d5ef29f 100644
--- a/apps/web/src/components/app/session-settings-dialog.tsx
+++ b/apps/web/src/components/app/session-settings-dialog.tsx
@@ -2,6 +2,10 @@ import { useCallback, useEffect, useRef, useState } from "react";
import { useQueryClient } from "@tanstack/react-query";
import { toast } from "sonner";
+import { AgentCardDetails } from "@/components/app/agent-card-details";
+import { AgentCardPhaseStatus } from "@/components/app/agent-card-status";
+import { describeAgentStatus } from "@/components/app/agent-event-utils";
+import { isFullAccessEnabled } from "@/components/app/agents-view-utils";
import { type Agent } from "@/components/app/types";
import { Button } from "@/components/ui/button";
import {
@@ -11,7 +15,12 @@ import {
DialogTitle,
} from "@/components/ui/dialog";
import { Input } from "@/components/ui/input";
+import { useAgentDiffStats } from "@/hooks/use-agent-diff-stats";
+import { useCopyText } from "@/hooks/use-copy";
import { api } from "@/lib/api";
+import { formatRelativeTime } from "@/lib/format";
+import { type IdeType } from "@/lib/ide-types";
+import { cn } from "@/lib/utils";
const MAX_NAME_LENGTH = 120;
@@ -19,18 +28,52 @@ type SessionSettingsDialogProps = {
agent: Agent | null;
open: boolean;
onOpenChange: (open: boolean) => void;
+ enabledIdes: IdeType[];
};
+/**
+ * "Session details": the rename form this dialog has always offered, plus —
+ * for a sub agent, which otherwise has no way to see this — the same
+ * read-only info a parent agent's own expanded card shows in the sidebar
+ * (branch/worktree, IDE links, sandbox state, latest event). Reuses the
+ * exact same components (AgentCardDetails, AgentCardLatestEvent,
+ * AgentCardPhaseStatus) a parent card renders, rather than a second
+ * implementation of the same information.
+ */
export function SessionSettingsDialog({
agent,
open,
onOpenChange,
+ enabledIdes,
}: SessionSettingsDialogProps) {
const [name, setName] = useState("");
const [saving, setSaving] = useState(false);
const inputRef = useRef