-
Notifications
You must be signed in to change notification settings - Fork 6.5k
Description
Feature hasn't been suggested before.
- I have verified this feature I'm about to request hasn't been suggested before.
Describe the enhancement you want to request
[FEATURE]: Navigation to parent session from child/subagent sessions
Current Behavior
OpenCode currently supports session navigation via keybindings for cycling through child sessions:
ctrl+right(session_child_cycle): Cycles forward through child sessions (e.g., subagent sessions spawned via @mentions).ctrl+left(session_cycle_reverse): Cycles backward through child sessions.
These allow switching between sibling child sessions within a parent. However, there is no dedicated keybinding to quickly navigate upward to the parent session from a child/subagent session. Users must rely on alternatives like the session list modal (<leader>l, where leader is ctrl+x by default) to switch back, which interrupts workflow.
Keybindings are customizable via the keybinds section in the config file (e.g., ~/.config/opencode/config.json), but no predefined options exist for parent navigation.
Problem
When working in a subagent/child session (e.g., after delegating a task to a specialized agent), users frequently need to return to the parent session to review context, delegate further, or integrate results. The lack of a direct upward navigation forces less efficient methods, like listing all sessions or interrupting flow. This is especially cumbersome in complex workflows with nested subagents.
Existing cycle keybindings (ctrl+left/right) work well for horizontal navigation among children but don't address vertical (parent/child) hierarchy. Platform-specific conflicts (e.g., #2816 on macOS where ctrl+left/right clashes with OS desktop switching) also suggest any new bindings should consider configurability and alternatives like cmd+ support (#653).
Proposed Solution
Introduce new configurable keybindings for vertical session navigation:
session_parent: Navigate to the parent session from a child (suggested default:ctrl+up).session_child_return: Return to the last active child session from the parent (suggested default:ctrl+down), or cycle through children if multiple are active.
This would create an intuitive "up/down" metaphor for hierarchy, complementing the existing "left/right" for siblings. To address potential conflicts:
- Make them fully customizable in the config, similar to other keybinds.
- Add support for
cmd+equivalents on macOS (e.g.,cmd+upas an alias). - Ensure navigation preserves context and fixes integration with existing bugs (e.g., proper message routing after switch, as in Switching to a child session doesn't send subsequent messages to that session but to the parent one #2390).
Alternatives Considered
- Expand session list modal: Allow quicker selection of parent via a dedicated shortcut in the modal, but this still requires opening the list.
- Tree-view navigation: A more advanced TUI feature to visualize parent/child relationships, but that's a larger scope—start with simple keybinds. A visual of the session trees could be added later.
Implementation Thoughts
- Define new actions in the keybinds registry (likely in src/keybinds or similar, based on repo structure).
- Track session hierarchy in the session manager to enable parent lookup.
- Test for conflicts with word navigation (ctrl + arrow key no longer moves word-to-word #1975, add ctrl+left/right to navigate by word #3090) and ensure compatibility with custom commands (Custom commands don't appear in message history #3161).
- Since subagents create child sessions automatically, ensure navigation works seamlessly with agent configs.
What do folks think? Any concerns with defaults or better key suggestions?