Show a parent/child link when one chat spawns another
- Dominant language
- TypeScript
- Stars
- 909
- Forks
- 116
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 156
Description
### Before filing
- [x] I searched [open and closed issues](https://github.com/block/berd/issues?q=is%3Aissue) for duplicates.
- [x] I am using a recent [release](https://github.com/block/berd/releases) and this doesn't already exist.
- [x] This is one request, not several bundled together.
### Closest existing issue
none found
### Is this new, or an improvement?
New capability — Berd can't do this at all today
### The problem, in your terms
I use Goose as the harness. `Builder` jobs often run longer than Goose's in-process `delegate` time limit, so the workable pattern is to have the parent chat spawn a new Berd session (`berdctl session`) and hand the long job to that.
The spawn works. The new chat then shows up in the session list as an unrelated item. There is no indication it came from the parent, so the relationship exists only in my head. Once a few of these are in flight, I cannot tell which child belongs to which conversation.
### What you do today
Whoever would have `delegate`d to `Builder` creates a new session instead. The work gets done. There is no linking — I just remember which chat is the child, or I don't.
### What you'd like to see
A visual parent/child relationship in the session list, directory-tree style: a session spawned from another one nests under (or is otherwise clearly tied to) the session that created it. Enough to see lineage at a glance. I am asking for the visual link, not a new way to spawn the session.
### Why this belongs in Berd itself
This is session-list UI and session metadata. A skill or agent can already create the child session; it cannot draw the relationship in the sidebar. An automation cannot either. If the parent pointer needs to be recorded when `berdctl session create` runs from inside another chat, that still has to live in Berd.
### Non-goals
- Not asking to raise Goose `delegate` timeouts or change how `delegate` works.
- Not asking Berd to automatically route `Builder` (or any subagent) into a new session.
- Not asking for a full file-explorer of every session, grouping, or project tree — just a visual link for spawned children.
- Not asking to change `berdctl session create` beyond whatever parent pointer the UI would need.
### Alternatives you considered
- Keep using Goose `delegate` and accept the hard time cap. Rejected: `Builder` jobs regularly exceed it.
- Name child sessions by hand so I can find them later. Rejected: still no structural link, and names drift.
- `berdctl session fork`. Different thing — I want a spawned worker chat, not a forked copy of the parent transcript.
### Mockups, prior art, or other context
Something as simple as indenting the child under the parent in the session list (like a collapsed directory) would be enough. I do not have a mockup.
Contributor guide
Research direction
Trace how `berdctl session create` records session metadata and how the session list/sidebar renders sessions. Define how a parent pointer is stored and displayed, then verify that a spawned child is visibly nested under or tied to its parent without changing session creation behavior beyond the needed metadata.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100