obscli 사용자 매뉴얼¶
obscli는 Beak 명령줄 클라이언트입니다. 설치 및 로그인 후 다음을 수행할 수 있습니다:
- 현재 워크스페이스의 Agent를 조회합니다.
- 새 Task를 생성하거나 기존 Task를 계속합니다.
- Agent와 대화하고, 관측 리소스를 참조하며, Skill을 선택합니다.
- 스크립트에서 일회성 작업을 제출하고 결과를 수집합니다.
obscli 설치¶
설치 스크립트로 설치¶
Linux 및 macOS¶
실행:
curl -fsSL https://static.guance.com/obscli/install-obscli.sh | bash -s -- \
--release-base-url https://static.guance.com/obscli \
--beak-server https://agent-api.guance.com \
--login <YOUR-USER-SK>
Linux/macOS는 기본적으로 Unix 경로를 사용합니다:
| 유형 | 기본 경로 |
|---|---|
| 설치 디렉터리 | ~/.local/bin |
| 실행 파일 | ~/.local/bin/obscli |
| 데이터 디렉터리 | ~/.obscli |
| 로그인 및 업데이트 설정 | ~/.obscli/login.toml |
| 로그 디렉터리 | ~/.obscli/log |
| 현재 로그 파일 | ~/.obscli/log/obscli.log |
설치 후 obscli를 사용할 수 없는 경우, 설치 디렉터리를 PATH에 추가하세요:
WSL은 Linux 환경이므로 동일한 명령과 경로를 사용합니다.
Windows PowerShell¶
실행:
iwr https://static.guance.com/obscli/install-obscli.ps1 -OutFile $env:TEMP\install-obscli.ps1
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
& $env:TEMP\install-obscli.ps1 `
-ReleaseBaseUrl https://static.guance.com/obscli `
-BeakServer https://agent-api.guance.com `
-Login <YOUR-USER-SK>
Windows에서 obscli는 기본적으로 다음 경로에 설치됩니다:
설치 후 PowerShell을 다시 열고 실행하세요:
PowerShell을 다시 열 수 없는 경우, 전체 경로를 직접 실행하세요:
Windows 기본 디렉터리:
| 유형 | 기본 경로 |
|---|---|
| 설치 디렉터리 | %LOCALAPPDATA%\Programs\obscli |
| 실행 파일 | %LOCALAPPDATA%\Programs\obscli\obscli.exe |
| 데이터 디렉터리 | %USERPROFILE%\.obscli |
| 로그인 및 업데이트 설정 | %USERPROFILE%\.obscli\login.toml |
| 로그 디렉터리 | %USERPROFILE%\.obscli\log |
| 현재 로그 파일 | %USERPROFILE%\.obscli\log\obscli.log |
Windows에서는 PowerShell을 권장합니다. Git Bash는 자체 $HOME을 사용하여 경로를 해석합니다. Git Bash를 사용하는 경우 설치 디렉터리를 명시적으로 지정하세요:
curl.exe -fsSL https://static.guance.com/obscli/install-obscli.sh | bash -s -- \
--release-base-url https://static.guance.com/obscli \
--install-dir "$HOME/bin" \
--beak-server https://agent-api.guance.com \
--login <YOUR-USER-SK>
오프라인 패키지로 설치¶
시스템에 맞는 패키지를 다운로드합니다. 예:
obscli-linux-amd64-v1.2.3.tar.gz
obscli-darwin-arm64-v1.2.3.tar.gz
obscli-windows-amd64-v1.2.3.tar.gz
검증 및 설치:
sha256sum -c obscli-linux-amd64-v1.2.3.tar.gz.sha256
bash install-obscli.sh --archive ./obscli-linux-amd64-v1.2.3.tar.gz --install-dir "$HOME/.local/bin" --yes
obscli 제거¶
재설치 전 이전 이름에서 마이그레이션¶
이 머신에 이전 obsycli가 설치되어 있는 경우, obscli로 직접 덮어쓰지 마세요. 먼저 이전 실행 파일과 데이터 디렉터리를 삭제한 후, 설치 섹션에 따라 새 obscli를 재설치하고 로그인하세요.
Linux/macOS/WSL:
명령 중 하나를 선택하세요. 첫 번째는 파일 삭제 전 확인을 요청하고, 두 번째는 --yes를 사용하여 확인을 건너뜁니다:
curl -fsSL https://static.guance.com/obs-agent/uninstall-legacy.sh | sudo bash
curl -fsSL https://static.guance.com/obs-agent/uninstall-legacy.sh | sudo bash -s -- --yes
이 스크립트는 beak-agent에서 이름이 변경되기 전의 고정 시스템 레이아웃을 정리합니다. 또한 이전 obsycli의 일반적인 Linux/macOS 설치 위치도 제거합니다: /usr/local/bin/obsycli, /usr/bin/obsycli, 그리고 현재 HOME 및 SUDO_USER 홈 아래의 ~/.local/bin/obsycli와 ~/.obsycli입니다.
Windows PowerShell:
Get-Command obsycli -All
Remove-Item "$env:LOCALAPPDATA\Programs\obsycli\obsycli.exe" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:LOCALAPPDATA\Programs\obsycli" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILE\.obsycli" -Recurse -Force -ErrorAction SilentlyContinue
이전 버전을 제거한 후 이 문서의 obscli 설치 명령으로 재설치하세요. obscli는 ~/.obscli 또는 %USERPROFILE%\.obscli를 사용하며 이전 obsycli의 로컬 설정을 읽지 않습니다.
현재 버전 제거¶
Linux/macOS:
sudo로 시스템 디렉터리에 설치한 경우:
Windows PowerShell:
Get-Command obscli -All
Remove-Item "$env:LOCALAPPDATA\Programs\obscli\obscli.exe" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:LOCALAPPDATA\Programs\obscli" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILE\.obscli" -Recurse -Force -ErrorAction SilentlyContinue
obscli.exe가 다른 디렉터리에 있는 경우, Get-Command obscli -All로 표시된 파일을 삭제하세요.
Windows Git Bash:
WSL:
로컬 데이터 디렉터리에는 로그인 토큰, 업데이트 설정, 로그가 포함되어 있습니다. 삭제 후에는 다시 로그인해야 합니다.
Beak에 로그인¶
Beak 웹 페이지에서 사용자 sk를 복사한 후 실행하세요:
테스트 환경 인증서가 머신에서 신뢰되지 않는 경우 다음을 추가하세요:
로그인이 성공하면 자격 증명이 다음에 저장됩니다:
이후 obscli를 직접 실행하면 대화형 채팅에 진입합니다.
obscli 자동 업데이트 방식¶
설치 스크립트로 설치한 경우, obscli는 시작 시 새 버전을 확인합니다. 새 버전이 있으면 다음과 같이 안내합니다:
y 또는 yes를 입력하면 obscli는 현재 시스템용 패키지를 다운로드하고, .sha256을 검증한 후 로컬 실행 파일을 교체합니다. Linux/macOS는 업데이트 후 obscli를 자동으로 재시작합니다. Windows는 현재 프로세스가 종료된 후 교체가 완료되므로 obscli를 다시 실행해야 합니다.
현재 환경에서 시작 시 업데이트 확인을 비활성화하려면 다음을 설정하세요:
주요 명령어¶
| 명령어 | 용도 |
|---|---|
obscli |
대화형 클라이언트 진입 |
/agents |
현재 워크스페이스의 Agent 목록 조회 |
/tasks |
기존 Task 목록 조회 |
/newtask <number> |
지정 번호의 Agent로 Task 생성 |
/model auto\|auto:fast\|auto:standard\|auto:advanced |
현재 Task의 모델 경로 변경 |
/attach <number> |
기존 Task 열기 |
/close <number> |
현재 Task 또는 지정 번호의 Task 닫기 |
/clear |
화면 지우기 |
/subagent <task> |
Agent에게 먼저 여러 하위 에이전트로 작업을 분할하도록 요청 |
/statusline |
상태 표시줄 필드를 설정하고 ~/.obscli/config.toml에 저장 |
/yolo |
YOLO/Full access 모드 전환으로 파일 접근 제한 및 승인 프롬프트 해제 |
/exit |
종료 |
표에서 <number>는 /agents 또는 /tasks의 # 열에 표시되는 임시 번호를 의미합니다. /newtask <number>는 /agents의 # 번호를 사용하고, /attach <number> 및 /close <number>는 /tasks의 # 번호를 사용합니다.
닫힌 Task는 새 메시지를 받을 수 없습니다. 대화를 계속하려면 새 Task를 생성하세요.
Agent 접근 제어¶
/yolo는 토글입니다:
- 첫 번째 사용: Full access 모드 진입. Agent가 작업 디렉터리 외부의 파일에 접근할 수 있으며, 도구 호출 시 승인을 요청하지 않습니다.
- 두 번째 사용: 일반 모드로 복귀하여 파일 접근 제한 및 승인 프롬프트를 복원합니다.
현재 Agent와 Task 컨텍스트를 신뢰하는 경우에만 YOLO를 활성화하세요.
하위 에이전트로 작업 분할¶
작업을 독립적인 부분으로 나눌 수 있는 경우, /subagent <task>를 사용하여 Agent에게 먼저 하위 에이전트를 활용하도록 요청합니다. 예:
/subagent Check error logs, slow queries, and alert events from the past hour separately, then summarize root-cause clues
obscli는 각 하위 에이전트의 시작, 대기 및 완료 상태를 표시합니다. 메인 Agent가 최종 결과를 요약합니다. 방향키로 입력 기록에서 전체 명령을 불러올 수 있습니다.
복잡한 작업의 계획 및 실행¶
/plan을 사용하여 Plan 모드에 진입합니다:
예:
계획을 받은 후 승인, 거부, 수정 요청 또는 중단할 수 있습니다:
/plan-approve
/plan-approve /subagent [instruction]
/plan-reject [reason]
/plan-revise <feedback>
/plan-interrupt [reason]
| 명령어 | 용도 |
|---|---|
/plan |
Plan 모드 진입 후 계획 요청 대기 |
/plan <prompt> |
Plan 모드 진입 후 즉시 계획 요청 제출 |
/plan-approve |
최신 계획 승인 |
/plan-approve /subagent [instruction] |
계획을 승인하고 하위 에이전트 분할 실행을 우선 적용 |
/plan-reject [reason] |
계획을 거부하고 이유 설명 |
/plan-revise <feedback> |
수정 피드백 제출 |
/plan-interrupt [reason] |
현재 계획을 중단하고 Plan 모드 종료 |
일반 메시지는 자동으로 Plan 모드에 진입하지 않습니다. 활성 계획이 있는 Task를 닫으면 해당 계획도 중단됩니다.
스크립트에서 단일 프롬프트 실행¶
obscli run을 사용하여 일회성 작업을 제출하고 Agent의 응답을 기다린 후 종료합니다. 셸 스크립트 및 자동화에 사용됩니다.
먼저 obscli --login <user-sk>로 로그인하세요. run은 기존 로그인 설정을 읽으므로 스크립트에서 자격 증명을 다시 전달할 필요가 없습니다.
obscli -h 또는 obscli run -h를 실행하여 지원되는 모든 run 옵션을 확인하세요.
Agent UUID를 모르는 경우 현재 워크스페이스의 온라인 Agent를 조회하세요:
기본 출력에는 각 Agent의 UUID, 이름, 상태가 포함됩니다. 스크립트에서는 --json을 사용하세요. 이 명령은 온라인 Agent만 조회하며 Task를 생성하지 않습니다.
프롬프트 직접 전달:
answer="$(obscli run --agent-uuid <AGENT_UUID> --prompt 'Check errors from the past hour and summarize them briefly')"
printf '%s\n' "$answer"
여러 줄의 파일 또는 stdin 읽기:
obscli run --agent-uuid <AGENT_UUID> --prompt-file ./prompt.md
printf '%s\n' 'Summarize the health of the current workspace' | \
obscli run --agent-uuid <AGENT_UUID> --prompt-file -
기본적으로 stdout에는 Agent가 반환한 원시 Markdown만 포함되며 정상 진행 상황은 stderr에 기록되지 않습니다. 구조화된 결과를 얻으려면 --json을 사용하세요:
JSON 결과에는 응답, 관련 UUID, Agent UUID, Task 이름이 포함됩니다. 사용량 및 첨부 파일 정보도 가능한 경우 반환됩니다.
기본 타임아웃은 5분이며 --timeout 90s로 변경할 수 있습니다. -v, -vv, -vvv 또는 --verbose=1|2|3을 사용하여 다양한 수준의 진단 정보를 stderr에 기록합니다. 기본적으로 Agent가 위험한 도구에 대한 승인을 요청하면 해당 턴을 취소하고 종료 코드 3으로 종료합니다. Full access 위험을 명시적으로 수락하는 경우에만 --yolo를 사용하세요.
일회성 작업에서 하위 에이전트를 우선 사용하도록 하려면 --subagent를 추가하세요:
obscli run --agent-uuid <AGENT_UUID> --subagent \
--prompt 'Check errors, slow queries, and alerts from the past hour separately, then summarize the evidence'
작업을 합리적으로 분할할 수 없는 경우, Agent가 이유를 설명하고 직접 응답합니다. --subagent는 --list-agents와 함께 사용할 수 없습니다.
obscli run은 Plan 모드를 지원하지 않습니다. 계획은 여러 차례의 확인이 필요하기 때문입니다. 계획을 승인하거나 수정하려면 대화형 obscli를 사용하세요.
주요 종료 코드:
| 종료 코드 | 의미 |
|---|---|
0 |
응답을 수신하고 Task가 성공적으로 완료됨 |
1 |
API, 메시지 스트림, Agent 실행 또는 Task 정리 실패 |
2 |
잘못된 인수 또는 로컬 프롬프트 입력 오류 |
3 |
도구 호출에 승인이 필요함 |
4 |
Agent가 추가 입력을 요청했으나 일회성 Task에서는 대화형으로 계속할 수 없음 |
124 |
실행 시간 초과 |
130 / 143 |
SIGINT / SIGTERM 수신 |
--json 모드에서 실패 시 stdout은 비어 있으며 stderr에 error.code 및 error.message를 포함하는 JSON 객체가 반환됩니다. 스크립트는 종료 코드와 이 필드를 사용하여 결과를 판별해야 합니다.
메시지에서 리소스 및 Skill 참조¶
대화형 입력에서 @를 입력하면 현재 워크스페이스의 관측 리소스를 참조할 수 있습니다:
- Service
- Dashboards
- Application
- Hosts
- Containers
방향키 또는 Tab으로 탐색하고, Space로 하나 이상의 항목을 선택한 후 Enter로 확인합니다. 입력하면 리소스 이름과 유형을 검색할 수 있습니다. 선택된 리소스는 @resource-name으로 표시되며 Agent에 쿼리 컨텍스트를 제공합니다.
단일 Agent Task에 연결된 상태에서 $를 입력하면 해당 Agent가 제공하는 Skill을 선택할 수 있습니다. 검색은 Skill 이름과 설명을 매칭하며 공백을 무시하므로, rootcause로 Root cause analysis를 검색할 수 있습니다. 선택 방식은 리소스 목록과 동일하며, 선택된 모든 Skill은 전체 메시지에 적용됩니다.
두 목록 모두 Enter로 확인하기 전에 Space로 선택해야 합니다. 검색해도 기존 선택은 유지됩니다.
@resource-name 또는 $skill-name의 경계에서 Backspace 또는 Delete를 누르면 전체 참조가 삭제됩니다. 방향키 또는 Ctrl+R로 메시지를 불러오면 리소스와 Skill도 함께 복원됩니다.
리터럴 @ 또는 $를 입력하려면 목록이 열린 후 Esc를 누르세요. 붙여넣은 @ 및 $도 일반 텍스트로 유지됩니다.
Task를 연 후 메시지를 입력하고 Enter를 누르세요. Task에 Agent가 하나인 경우 해당 Agent에게 메시지가 전송됩니다. 여러 Agent가 있는 경우 모든 Agent에게 메시지가 브로드캐스트됩니다.
키보드 단축키 사용¶
일반 입력에서 지원하는 단축키:
일반 입력:
| 키 | 동작 |
|---|---|
Enter |
현재 입력 전송; 슬래시 명령 선택 시 강조된 명령 수락 |
Shift+Enter / Alt+Enter |
줄바꿈 삽입 |
Esc |
현재 입력 취소 확인 표시 |
Esc 두 번 |
현재 입력 또는 현재 채팅 취소 |
↑ / ↓ |
입력 기록 탐색; 슬래시 명령 선택 시 강조 이동 |
← / → |
커서를 좌우로 이동 |
Home / End |
줄의 시작 또는 끝으로 이동 |
Backspace |
커서 앞 문자 삭제 |
Delete |
커서 위치의 문자 삭제 |
Tab |
슬래시 명령의 공통 접두사 완성 |
Ctrl+A / Ctrl+E |
줄의 시작 또는 끝으로 이동 |
Ctrl+C |
비어 있지 않은 입력 지우기; 입력이 비어 있으면 현재 상호작용 종료 |
Ctrl+L |
화면을 지우고 현재 입력 유지 |
Ctrl+R |
입력 기록 검색 |
Ctrl+T |
전체 도구 출력 열기 |
Ctrl+W |
이전 단어 삭제 |
| 텍스트 직접 입력 | 커서 위치에 텍스트 삽입 |
팝업 선택:
| 키 | 동작 |
|---|---|
↑ / Ctrl+P |
강조를 위로 이동; 첫 번째 항목에서 마지막 항목으로 순환 |
↓ / Tab / Ctrl+N |
강조를 아래로 이동; 마지막 항목에서 첫 번째 항목으로 순환 |
Shift+Tab |
강조를 위로 이동; 첫 번째 항목에서 마지막 항목으로 순환 |
Space |
강조 이동 없이 현재 항목 토글; 실패한 리소스 유형 재시도 후 로딩 성공 시 선택 |
Enter |
선택된 모든 항목 제출; 선택된 항목이 없으면 팝업 유지 |
Esc |
현재 팝업 취소; 리소스 항목 목록에서는 먼저 유형 목록으로 복귀; 승인 팝업에서는 현재 채팅 취소 |
Ctrl+C |
팝업을 취소하고 현재 상호작용 종료 |
Backspace |
검색 텍스트의 마지막 문자 삭제 |
Ctrl+U |
검색 텍스트 지우기 |
| 텍스트 직접 입력 또는 붙여넣기 | 목록을 퍼지 필터링하고 강조를 첫 번째 항목으로 초기화 |
터미널에서 방향키 또는 제어 키가 작동하지 않는 경우, 먼저 터미널이 해당 단축키를 외부 애플리케이션에 바인딩했는지 확인하세요. 문제가 지속되면 ~/.obscli/log/obscli.log를 열고 터미널 이름, 버전, 키 동작을 기록하세요.
로컬 파일¶
obscli는 기본적으로 다음 로컬 경로를 사용합니다:
Linux/macOS:
Windows:
로그는 자동으로 로테이션됩니다. 단일 로그 파일의 기본 최대 크기는 32 MiB입니다.
문제 해결¶
로그인 실패 시 다음을 확인하세요:
--beak-server가 Beak 서비스 주소를 가리키는지 확인합니다.- 설치 스크립트를 통해 로그인하는 경우,
--beak-server가 Beak 서비스 주소를 가리키는지 확인합니다. - 사용자 sk가 현재 Beak 웹 페이지에서 복사한 유효한 자격 증명인지 확인합니다.
- HTTPS 테스트 환경에
--insecure-skip-tls-verify가 필요한지 확인합니다.
채팅 진입 후 Task가 없는 경우 다음을 실행하세요:
여기서 <number>는 /agents의 # 열에 표시되는 번호입니다.