---
ui_doc_type: view
view_id: workbench-shell
status: 구현됨
frame: null
source_evidence:
  - type: code
    path: apps/client/lib/src/app/nomadcode_workbench_shell.dart
    notes: NomadCodeWorkbenchShell, _WorkbenchTitleBar, _WorkbenchActivityRail, _AgentDockPanel, section placeholder 구현.
  - type: code
    path: apps/client/lib/src/app/nomadcode_client_app.dart
    notes: MaterialApp home에서 WorkspaceHomePage를 workbench shell에 mount하는 조립 근거.
  - type: docs
    path: apps/client/README.md
    notes: Workbench shell, Agent dock, IOP slot composition 설명.
  - type: docs
    path: README.md
    notes: 제품 경계의 workbench shell, Agent dock, IOP slot 설명.
  - type: user
    path: null
    notes: agent-ui 생성 요청.
regions:
  - workbench-shell.titlebar
  - workbench-shell.center
  - workbench-shell.activity-rail
  - workbench-shell.agent-dock
  - workbench-shell.iop-slot
---

# Workbench Shell

View ID: `workbench-shell`

Frame:
- 없음

Status: `구현됨`

## Source Evidence

| Type | Path | Notes |
|------|------|-------|
| code | `apps/client/lib/src/app/nomadcode_workbench_shell.dart` | NomadCodeWorkbenchShell, _WorkbenchTitleBar, _WorkbenchActivityRail, _AgentDockPanel, section placeholder 구현. |
| code | `apps/client/lib/src/app/nomadcode_client_app.dart` | MaterialApp home에서 WorkspaceHomePage를 workbench shell에 mount하는 조립 근거. |
| docs | `apps/client/README.md` | Workbench shell, Agent dock, IOP slot composition 설명. |
| docs | `README.md` | 제품 경계의 workbench shell, Agent dock, IOP slot 설명. |
| user | 없음 | agent-ui 생성 요청. |

## Purpose

NomadCode Console의 최상위 작업 표면이다. 상단 titlebar, 중앙 product section, 우측 activity rail, 우측 Agent dock, optional IOP content slot을 하나의 workbench로 조립한다.

## Primary Users

- NomadCode로 개발 workspace와 agent 작업 상태를 오가는 사용자
- provider console 또는 IOP slot을 함께 열어보는 운영 사용자

## Primary Tasks

- Workspace, Workflow, Terminal, Review, Web Context, Settings, IOP section 사이를 전환한다.
- 우측 Agent dock을 열고 닫는다.
- optional IOP content가 제공되면 IOP section에 mount한다.

## Information Priority

1. 현재 선택된 workbench section과 중앙 content
2. Agent dock 열림 상태와 우측 rail navigation
3. IOP/provider slot availability

## Regions

| Region ID | Purpose | Component | Priority | Notes |
|-----------|---------|-----------|----------|-------|
| `workbench-shell.titlebar` | Console brand, 현재 section label 표시 | `workbench-titlebar` | high | `_WorkbenchTitleBar` 구현. |
| `workbench-shell.center` | 선택된 product section content 표시 | 없음 | high | Workspace는 `WorkspaceHomePage`, 나머지 section은 placeholder 또는 slot. |
| `workbench-shell.activity-rail` | Agent toggle과 section navigation | `activity-rail` | high | 우측 고정 rail. |
| `workbench-shell.agent-dock` | AgentShell 기반 대화/작업 dock | `agent-dock-panel` | medium | compact width에서는 center content를 숨기고 dock을 우선 표시. |
| `workbench-shell.iop-slot` | optional IOP console content mount | 없음 | medium | `iopContent`가 없으면 IOP placeholder를 표시한다. |

## Actions

| Action ID | Trigger | Result | Guard |
|-----------|---------|--------|-------|
| `workbench-shell.select-section` | activity rail section button | 중앙 content를 선택 section으로 전환하고 Agent dock을 닫는다. | 없음 |
| `workbench-shell.toggle-agent` | Agent rail button | Agent dock open/closed 상태를 전환한다. | 없음 |
| `workbench-shell.mount-iop-slot` | `iopContent` widget 제공 | IOP section에 외부 IOP console content를 표시한다. | IOP package/widget은 optional boundary로 유지한다. |

## States

- loading: shell 자체 loading state는 없다.
- empty: section content가 아직 없으면 `_WorkbenchPlaceholder`를 표시한다.
- error: shell 자체 error state는 없다.
- permission-denied: view-level permission guard는 구현되어 있지 않다.

## Open Questions

- 없음

## Decision History

- 2026-06-24: 구현된 Flutter workbench shell을 `구현됨` view로 등록했다.
