도구
도구
도구를 사용하면 LLM이 코드베이스에서 작업을 수행할 수 있습니다. OpenCode에는 기본 제공 도구 세트가 제공되지만 커스텀 도구 또는 MCP 서버로 확장할 수 있습니다.
기본적으로 모든 도구가 활성화되어 있으며 실행에 권한이 필요하지 않습니다. 권한을 통해 도구 동작을 제어할 수 있습니다.
구성
permission 필드를 사용하여 도구 동작을 제어합니다. 각 도구에 대해 허용, 거부 또는 승인 요청을 설정할 수 있습니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
} 와일드카드를 사용하여 여러 도구를 한 번에 제어할 수도 있습니다. 예를 들어 MCP 서버의 모든 도구에 승인이 필요하도록 하려면:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"mymcp_*": "ask"
}
} 권한 구성에 대해 자세히 알아보기.
기본 제공
OpenCode에서 사용 가능한 모든 기본 제공 도구입니다.
bash
프로젝트 환경에서 셸 명령을 실행합니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": "allow"
}
} 이 도구를 사용하면 LLM이 npm install, git status 또는 기타 셸 명령을 실행할 수 있습니다.
edit
정확한 문자열 치환을 사용하여 기존 파일을 수정합니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
} 이 도구는 정확한 텍스트 일치를 통해 파일을 정밀하게 편집합니다. 이것은 LLM이 코드를 수정하는 주요 방법입니다.
write
새 파일을 생성하거나 기존 파일을 덮어씁니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
} LLM이 새 파일을 생성할 수 있도록 하려면 이것을 사용하세요. 이미 존재하는 파일을 덮어씁니다.
read
코드베이스에서 파일 내용을 읽습니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"read": "allow"
}
} 이 도구는 파일을 읽고 내용을 반환합니다. 큰 파일의 경우 특정 줄 범위 읽기를 지원합니다.
grep
정규식을 사용하여 파일 내용을 검색합니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"grep": "allow"
}
} 코드베이스에서 빠른 콘텐츠 검색. 전체 정규식 구문 및 파일 패턴 필터링을 지원합니다.
glob
패턴 일치를 사용하여 파일을 찾습니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"glob": "allow"
}
} **/*.js 또는 src/**/*.ts 같은 glob 패턴을 사용하여 파일을 검색합니다. 수정 시간순으로 정렬된 일치하는 파일 경로를 반환합니다.
lsp (실험적)
구성된 LSP 서버와 상호작용하여 정의, 참조, 호버 정보 및 호출 계층과 같은 코드 인텔리전스 기능을 가져옵니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"lsp": "allow"
}
} 지원되는 작업에는 goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, prepareCallHierarchy, incomingCalls, outgoingCalls가 포함됩니다.
프로젝트에서 사용 가능한 LSP 서버를 구성하는 방법은 LSP 서버를 참조하세요.
apply_patch
파일에 패치를 적용합니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
} 이 도구는 코드베이스에 패치 파일을 적용합니다. 다양한 소스의 diff 및 패치를 적용하는 데 유용합니다.
tool.execute.before 또는 tool.execute.after 후크를 처리할 때 input.tool === "apply_patch" (패치 아님)를 확인하세요.
apply_patch는 output.args.filePath 대신 output.args.patchText를 사용합니다. 경로는 patchText 내 마커 줄에 포함되며 프로젝트 루트를 기준으로 합니다 (예: *** Add File: src/new-file.ts, *** Update File: src/existing.ts, *** Move to: src/renamed.ts, *** Delete File: src/obsolete.ts).
skill
skill (SKILL.md 파일)을 로드하고 대화에서 해당 내용을 반환합니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"skill": "allow"
}
} todowrite
코딩 세션 중에 todo 목록을 관리합니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todowrite": "allow"
}
} 복잡한 작업 중에 진행 상황을 추적하기 위해 작업 목록을 생성하고 업데이트합니다. LLM은 이를 사용하여 다단계 작업을 구성합니다.
webfetch
웹 콘텐츠를 가져옵니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"webfetch": "allow"
}
} LLM이 웹 페이지를 가져오고 읽을 수 있게 합니다. 문서를 조회하거나 온라인 리소스를 연구하는 데 유용합니다.
websearch
웹에서 정보를 검색합니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "allow"
}
} 관련 정보를 온라인에서 찾기 위해 Exa AI를 사용하여 웹 검색을 수행합니다. 주제를 연구하거나, 현재 이벤트를 찾거나, 학습 데이터 컷오프 너머의 정보를 수집하는 데 유용합니다.
API 키가 필요하지 않습니다 — 도구는 인증 없이 Exa AI의 호스팅 MCP 서비스에 직접 연결합니다.
question
실행 중에 사용자에게 질문합니다.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"question": "allow"
}
} 이 도구를 사용하면 LLM이 작업 중에 사용자에게 질문할 수 있습니다. 이는 다음에 유용합니다:
- 사용자 기본 설정 또는 요구 사항 수집
- 모호한 지침 명확히 하기
- 구현 선택에 대한 결정 얻기
- 어떤 방향으로 갈지 선택 제공
각 질문에는 헤더, 질문 텍스트 및 옵션 목록이 포함됩니다. 사용자는 제공된 옵션에서 선택하거나 커스텀 답변을 입력할 수 있습니다. 여러 질문이 있으면 제출하기 전에 탐색할 수 있습니다.
커스텀 도구
커스텀 도구를 사용하면 LLM이 호출할 수 있는 자체 함수를 정의할 수 있습니다. 이는 구성 파일에서 정의되며 임의의 코드를 실행할 수 있습니다.
커스텀 도구 생성에 대해 자세히 알아보기.
MCP 서버
MCP (Model Context Protocol) 서버를 사용하면 외부 도구 및 서비스를 통합할 수 있습니다. 여기에는 데이터베이스 액세스, API 통합 및 서드파티 서비스가 포함됩니다.
MCP 서버 구성에 대해 자세히 알아보기.
내부
grep 및 glob 같은 도구는 내부적으로 ripgrep을 사용합니다. 기본적으로 ripgrep은 .gitignore 패턴을 존중하므로 .gitignore에 나열된 파일 및 디렉토리는 검색 및 목록에서 제외됩니다.
무시 패턴
일반적으로 무시되는 파일을 포함하려면 프로젝트 루트에 .ignore 파일을 생성합니다. 이 파일은 특정 경로를 명시적으로 허용할 수 있습니다.
!node_modules/
!dist/
!build/
예를 들어, 이 .ignore 파일을 사용하면 ripgrep이 .gitignore에 나열되어 있어도 node_modules/, dist/ 및 build/ 디렉토리 내에서 검색할 수 있습니다.