|
8 | 8 | - [LLM Agent를 위한 안내](#llm-agent를-위한-안내) |
9 | 9 | - [Why OpenCode & Why Oh My OpenCode](#why-opencode--why-oh-my-opencode) |
10 | 10 | - [기능](#기능) |
11 | | - - [Hooks](#hooks) |
12 | 11 | - [Agents](#agents) |
13 | 12 | - [Tools](#tools) |
14 | 13 | - [내장 LSP Tools](#내장-lsp-tools) |
15 | 14 | - [내장 AST-Grep Tools](#내장-ast-grep-tools) |
16 | 15 | - [Grep](#grep) |
17 | 16 | - [내장 MCPs](#내장-mcps) |
| 17 | + - [Background Task](#background-task) |
| 18 | + - [Hooks](#hooks) |
18 | 19 | - [Claude Code 호환성](#claude-code-호환성) |
19 | 20 | - [기타 편의 기능](#기타-편의-기능) |
20 | 21 | - [설정](#설정) |
@@ -199,49 +200,6 @@ OpenCode 는 아주 확장가능하고 아주 커스터마이저블합니다. |
199 | 200 |
|
200 | 201 | ## 기능 |
201 | 202 |
|
202 | | -### Hooks |
203 | | - |
204 | | -- **Todo Continuation Enforcer**: 에이전트가 멈추기 전 모든 TODO 항목을 완료하도록 강제합니다. LLM의 고질적인 "중도 포기" 문제를 방지합니다. |
205 | | -- **Context Window Monitor**: [컨텍스트 윈도우 불안 관리](https://agentic-patterns.com/patterns/context-window-anxiety-management/) 패턴을 구현합니다. |
206 | | - - 사용량이 70%를 넘으면 에이전트에게 아직 토큰이 충분하다고 상기시켜, 급하게 불완전한 작업을 하는 것을 완화합니다. |
207 | | -- **Session Notification**: 에이전트가 작업을 마치면 OS 네이티브 알림을 보냅니다 (macOS, Linux, Windows). |
208 | | -- **Session Recovery**: API 에러로부터 자동으로 복구하여 세션 안정성을 보장합니다. 네 가지 시나리오를 처리합니다: |
209 | | - - **Tool Result Missing**: `tool_use` 블록이 있지만 `tool_result`가 없을 때 (ESC 인터럽트) → "cancelled" tool result 주입 |
210 | | - - **Thinking Block Order**: thinking 블록이 첫 번째여야 하는데 아닐 때 → 빈 thinking 블록 추가 |
211 | | - - **Thinking Disabled Violation**: thinking 이 비활성화인데 thinking 블록이 있을 때 → thinking 블록 제거 |
212 | | - - **Empty Content Message**: 메시지가 thinking/meta 블록만 있고 실제 내용이 없을 때 → 파일시스템을 통해 "(interrupted)" 텍스트 주입 |
213 | | -- **Comment Checker**: 코드 수정 후 불필요한 주석을 감지하여 보고합니다. BDD 패턴, 지시어, 독스트링 등 유효한 주석은 똑똑하게 제외하고, AI가 남긴 흔적을 제거하여 코드를 깨끗하게 유지합니다. |
214 | | -- **Directory AGENTS.md Injector**: 파일을 읽을 때 `AGENTS.md` 내용을 자동으로 주입합니다. 파일 디렉토리부터 프로젝트 루트까지 탐색하며, 경로 상의 **모든** `AGENTS.md` 파일을 수집합니다. 중첩된 디렉토리별 지침을 지원합니다: |
215 | | - ``` |
216 | | - project/ |
217 | | - ├── AGENTS.md # 프로젝트 전체 컨텍스트 |
218 | | - ├── src/ |
219 | | - │ ├── AGENTS.md # src 전용 컨텍스트 |
220 | | - │ └── components/ |
221 | | - │ ├── AGENTS.md # 컴포넌트 전용 컨텍스트 |
222 | | - │ └── Button.tsx # 이 파일을 읽으면 위 3개 AGENTS.md 모두 주입 |
223 | | - ``` |
224 | | - `Button.tsx`를 읽으면 순서대로 주입됩니다: `project/AGENTS.md` → `src/AGENTS.md` → `components/AGENTS.md`. 각 디렉토리의 컨텍스트는 세션당 한 번만 주입됩니다. Claude Code의 CLAUDE.md 기능에서 영감을 받았습니다. |
225 | | -- **Directory README.md Injector**: 파일을 읽을 때 `README.md` 내용을 자동으로 주입합니다. AGENTS.md Injector와 동일하게 동작하며, 파일 디렉토리부터 프로젝트 루트까지 탐색합니다. LLM 에이전트에게 프로젝트 문서 컨텍스트를 제공합니다. 각 디렉토리의 README는 세션당 한 번만 주입됩니다. |
226 | | -- **Rules Injector**: 파일을 읽을 때 `.claude/rules/` 디렉토리의 규칙을 자동으로 주입합니다. |
227 | | - - 파일 디렉토리부터 프로젝트 루트까지 상향 탐색하며, `~/.claude/rules/` (사용자) 경로도 포함합니다. |
228 | | - - `.md` 및 `.mdc` 파일을 지원합니다. |
229 | | - - Frontmatter의 `globs` 필드(glob 패턴)를 기반으로 매칭합니다. |
230 | | - - 항상 적용되어야 하는 규칙을 위한 `alwaysApply: true` 옵션을 지원합니다. |
231 | | - - 규칙 파일 구조 예시: |
232 | | - ```markdown |
233 | | - --- |
234 | | - globs: ["*.ts", "src/**/*.js"] |
235 | | - description: "TypeScript/JavaScript coding rules" |
236 | | - --- |
237 | | - - Use PascalCase for interface names |
238 | | - - Use camelCase for function names |
239 | | - ``` |
240 | | -- **Think Mode**: 확장된 사고(Extended Thinking)가 필요한 상황을 자동으로 감지하고 모드를 전환합니다. 사용자가 깊은 사고를 요청하는 표현(예: "think deeply", "ultrathink")을 감지하면, 추론 능력을 극대화하도록 모델 설정을 동적으로 조정합니다. |
241 | | -- **Anthropic Auto Compact**: Anthropic 모델 사용 시 컨텍스트 한계에 도달하면 대화 기록을 자동으로 압축하여 효율적으로 관리합니다. |
242 | | -- **Empty Task Response Detector**: 서브 에이전트가 수행한 작업이 비어있거나 무의미한 응답을 반환하는 경우를 감지하여, 오류 없이 우아하게 처리합니다. |
243 | | -- **Grep Output Truncator**: Grep 검색 결과가 너무 길어 컨텍스트를 장악해버리는 것을 방지하기 위해, 과도한 출력을 자동으로 자릅니다. |
244 | | - |
245 | 203 | ### Agents |
246 | 204 |
|
247 | 205 | - **oracle** (`openai/gpt-5.2`): 아키텍처, 코드 리뷰, 전략 수립을 위한 전문가 조언자. GPT-5.2의 뛰어난 논리적 추론과 깊은 분석 능력을 활용합니다. AmpCode 에서 영감을 받았습니다. |
@@ -314,6 +272,71 @@ OpenCode 는 아주 확장가능하고 아주 커스터마이저블합니다. |
314 | 272 | } |
315 | 273 | ``` |
316 | 274 |
|
| 275 | +#### Background Task |
| 276 | + |
| 277 | +장시간 실행되는 작업이나 복잡한 분석을 메인 세션을 차단하지 않고 백그라운드에서 실행합니다. 작업이 완료되면 시스템이 자동으로 알림을 보냅니다. |
| 278 | + |
| 279 | +- **background_task**: 백그라운드 에이전트 작업을 시작합니다. 설명, 프롬프트, 에이전트 타입을 지정하면 즉시 task ID를 반환합니다. |
| 280 | +- **background_output**: 작업 진행 상황 확인(`block=false`) 또는 결과 대기(`block=true`). 최대 10분까지 커스텀 타임아웃을 지원합니다. |
| 281 | +- **background_cancel**: task ID로 실행 중인 백그라운드 작업을 취소합니다. |
| 282 | + |
| 283 | +주요 기능: |
| 284 | +- **비동기 실행**: 복잡한 분석이나 연구 작업을 백그라운드에서 처리하면서 다른 작업 계속 가능 |
| 285 | +- **자동 알림**: 백그라운드 작업 완료 시 메인 세션에 자동 알림 |
| 286 | +- **상태 추적**: 도구 호출 횟수, 마지막 사용 도구 등 실시간 진행 상황 모니터링 |
| 287 | +- **세션 격리**: 각 작업은 독립된 세션에서 실행 |
| 288 | + |
| 289 | +사용 예시: |
| 290 | +``` |
| 291 | +1. 시작: background_task → task_id="bg_abc123" 반환 |
| 292 | +2. 다른 작업 계속 진행 |
| 293 | +3. 시스템 알림: "Task bg_abc123 completed" |
| 294 | +4. 결과 조회: background_output(task_id="bg_abc123") → 전체 결과 획득 |
| 295 | +``` |
| 296 | + |
| 297 | +### Hooks |
| 298 | + |
| 299 | +- **Todo Continuation Enforcer**: 에이전트가 멈추기 전 모든 TODO 항목을 완료하도록 강제합니다. LLM의 고질적인 "중도 포기" 문제를 방지합니다. |
| 300 | +- **Context Window Monitor**: [컨텍스트 윈도우 불안 관리](https://agentic-patterns.com/patterns/context-window-anxiety-management/) 패턴을 구현합니다. |
| 301 | + - 사용량이 70%를 넘으면 에이전트에게 아직 토큰이 충분하다고 상기시켜, 급하게 불완전한 작업을 하는 것을 완화합니다. |
| 302 | +- **Session Notification**: 에이전트가 작업을 마치면 OS 네이티브 알림을 보냅니다 (macOS, Linux, Windows). |
| 303 | +- **Session Recovery**: API 에러로부터 자동으로 복구하여 세션 안정성을 보장합니다. 네 가지 시나리오를 처리합니다: |
| 304 | + - **Tool Result Missing**: `tool_use` 블록이 있지만 `tool_result`가 없을 때 (ESC 인터럽트) → "cancelled" tool result 주입 |
| 305 | + - **Thinking Block Order**: thinking 블록이 첫 번째여야 하는데 아닐 때 → 빈 thinking 블록 추가 |
| 306 | + - **Thinking Disabled Violation**: thinking 이 비활성화인데 thinking 블록이 있을 때 → thinking 블록 제거 |
| 307 | + - **Empty Content Message**: 메시지가 thinking/meta 블록만 있고 실제 내용이 없을 때 → 파일시스템을 통해 "(interrupted)" 텍스트 주입 |
| 308 | +- **Comment Checker**: 코드 수정 후 불필요한 주석을 감지하여 보고합니다. BDD 패턴, 지시어, 독스트링 등 유효한 주석은 똑똑하게 제외하고, AI가 남긴 흔적을 제거하여 코드를 깨끗하게 유지합니다. |
| 309 | +- **Directory AGENTS.md Injector**: 파일을 읽을 때 `AGENTS.md` 내용을 자동으로 주입합니다. 파일 디렉토리부터 프로젝트 루트까지 탐색하며, 경로 상의 **모든** `AGENTS.md` 파일을 수집합니다. 중첩된 디렉토리별 지침을 지원합니다: |
| 310 | + ``` |
| 311 | + project/ |
| 312 | + ├── AGENTS.md # 프로젝트 전체 컨텍스트 |
| 313 | + ├── src/ |
| 314 | + │ ├── AGENTS.md # src 전용 컨텍스트 |
| 315 | + │ └── components/ |
| 316 | + │ ├── AGENTS.md # 컴포넌트 전용 컨텍스트 |
| 317 | + │ └── Button.tsx # 이 파일을 읽으면 위 3개 AGENTS.md 모두 주입 |
| 318 | + ``` |
| 319 | + `Button.tsx`를 읽으면 순서대로 주입됩니다: `project/AGENTS.md` → `src/AGENTS.md` → `components/AGENTS.md`. 각 디렉토리의 컨텍스트는 세션당 한 번만 주입됩니다. Claude Code의 CLAUDE.md 기능에서 영감을 받았습니다. |
| 320 | +- **Directory README.md Injector**: 파일을 읽을 때 `README.md` 내용을 자동으로 주입합니다. AGENTS.md Injector와 동일하게 동작하며, 파일 디렉토리부터 프로젝트 루트까지 탐색합니다. LLM 에이전트에게 프로젝트 문서 컨텍스트를 제공합니다. 각 디렉토리의 README는 세션당 한 번만 주입됩니다. |
| 321 | +- **Rules Injector**: 파일을 읽을 때 `.claude/rules/` 디렉토리의 규칙을 자동으로 주입합니다. |
| 322 | + - 파일 디렉토리부터 프로젝트 루트까지 상향 탐색하며, `~/.claude/rules/` (사용자) 경로도 포함합니다. |
| 323 | + - `.md` 및 `.mdc` 파일을 지원합니다. |
| 324 | + - Frontmatter의 `globs` 필드(glob 패턴)를 기반으로 매칭합니다. |
| 325 | + - 항상 적용되어야 하는 규칙을 위한 `alwaysApply: true` 옵션을 지원합니다. |
| 326 | + - 규칙 파일 구조 예시: |
| 327 | + ```markdown |
| 328 | + --- |
| 329 | + globs: ["*.ts", "src/**/*.js"] |
| 330 | + description: "TypeScript/JavaScript coding rules" |
| 331 | + --- |
| 332 | + - Use PascalCase for interface names |
| 333 | + - Use camelCase for function names |
| 334 | + ``` |
| 335 | +- **Think Mode**: 확장된 사고(Extended Thinking)가 필요한 상황을 자동으로 감지하고 모드를 전환합니다. 사용자가 깊은 사고를 요청하는 표현(예: "think deeply", "ultrathink")을 감지하면, 추론 능력을 극대화하도록 모델 설정을 동적으로 조정합니다. |
| 336 | +- **Anthropic Auto Compact**: Anthropic 모델 사용 시 컨텍스트 한계에 도달하면 대화 기록을 자동으로 압축하여 효율적으로 관리합니다. |
| 337 | +- **Empty Task Response Detector**: 서브 에이전트가 수행한 작업이 비어있거나 무의미한 응답을 반환하는 경우를 감지하여, 오류 없이 우아하게 처리합니다. |
| 338 | +- **Grep Output Truncator**: Grep 검색 결과가 너무 길어 컨텍스트를 장악해버리는 것을 방지하기 위해, 과도한 출력을 자동으로 자릅니다. |
| 339 | + |
317 | 340 | ### Claude Code 호환성 |
318 | 341 |
|
319 | 342 | Oh My OpenCode는 Claude Code 설정과 완벽하게 호환됩니다. Claude Code를 사용하셨다면, 기존 설정을 그대로 사용할 수 있습니다. |
|
0 commit comments