> ## Documentation Index
> Fetch the complete documentation index at: https://agentstack.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# start

这两个命令分别用于启动 OpenCode 的不同组件：

## 1. `bun run --cwd packages/app dev`

**作用**：启动前端开发服务器

* 运行在 `packages/app` 目录
* 启动 Vite 开发服务器
* 提供 Web 界面
* 默认端口通常是 3000 或 5173

**功能**：

* 提供前端界面
* 热重载
* 开发环境配置

## 2. `bun run --cwd packages/opencode src/index.ts serve`

**作用**：启动后端服务器

* 运行在 `packages/opencode` 目录
* 启动 OpenCode 核心服务器
* 默认端口是 4096

**功能**：

* 提供 API 服务
* 处理 AI 模型调用
* 管理会话和消息
* 执行文件系统操作
* 协调工具调用

## 为什么需要同时运行

OpenCode 采用 **客户端-服务器架构**：

* 前端（`packages/app`）：用户界面，负责展示和交互
* 后端（`packages/opencode`）：核心功能，处理业务逻辑和 AI 交互

前端需要连接后端服务器来：

* 获取会话数据
* 发送用户输入
* 接收 AI 响应
* 执行文件操作
* 调用工具

## 执行流程

1. 首先启动后端服务器：`bun run --cwd packages/opencode src/index.ts serve`
2. 然后启动前端开发服务器：`bun run --cwd packages/app dev`
3. 打开前端页面，即可与 OpenCode 进行交互

后端服务器是必需的，因为所有核心功能都在后端实现，前端只是一个界面层。

## 启动tui

```shellscript theme={null}
bun run --cwd packages/opencode --conditions=browser src/index.ts
```

## TUI是否需要启动server：

TUI 界面确实可以直接启动 agent 和调用模型，但\*\*并不是通过启动完整的服务器\*\*，而是通过以下方式：

1. **直接调用核心功能**：
   * TUI 直接导入和调用 `packages/opencode` 中的核心模块
   * 绕过了 HTTP 服务器层，直接使用本地代码
2. **本地功能调用**：
   * Agent 调用：直接使用 `Agent` 模块
   * 模型调用：直接使用 `Provider` 模块
   * 会话管理：直接使用 `Session` 模块
3. **服务器的作用**：
   * 当你使用 `serve` 命令时，启动的是一个 HTTP 服务器
   * 这个服务器提供 API 接口，供外部客户端（如 Web 界面）调用
   * TUI 作为内置客户端，不需要通过 HTTP 接口，直接调用核心功能

### 技术实现差异

\| 功能 | TUI 实现方式 | 服务器实现方式 |

\|------|-------------|---------------|

\| Agent 调用 | 直接调用 `Agent` 模块 | 通过 HTTP API `/agent` 接口 |

\| 模型调用 | 直接调用 `Provider` 模块 | 通过会话相关的 HTTP API |

\| 会话管理 | 直接调用 `Session` 模块 | 通过 `/session` 相关接口 |

\| 存储访问 | 直接调用 `Storage` 模块 | 通过文件和会话接口 |

### 为什么 TUI 不需要启动服务器

这是因为：

1. **代码架构**：核心功能被设计为可重用的模块，可以被不同的界面直接调用
2. **本地执行**：TUI 运行在本地终端，与核心代码在同一个进程中
3. **性能考虑**：直接调用比通过 HTTP 接口更快，响应更及时
4. **简化设计**：TUI 作为内置界面，不需要网络层的复杂性

### 验证方法

你可以通过以下方式验证：

1. 启动 TUI`bun dev`
2. 尝试使用 agent 和模型功能
3. 检查系统的网络连接：不会有 4096 端口的监听

### 总结

TUI 确实可以启动 agent 和调用模型，但这是通过\*\*直接调用本地核心功能\*\*实现的，而不是通过启动完整的 HTTP 服务器。服务器的主要作用是为外部客户端（如 Web 界面）提供 API 接口，而 TUI 作为内置界面，直接与核心代码交互。

所以，当你执行 `bun dev` 时，\*\*不会\*\*启动 4096 端口的服务器，但 TUI 仍然可以正常使用所有核心功能。
