obscli User Manual¶
obscli is the Beak command-line client. After installing and logging in, you can:
- View Agents in the current workspace.
- Create a new Task or continue an existing Task.
- Chat with Agents, reference observation resources, and select Skills.
- Submit one-shot tasks from scripts and collect the results.
Install obscli¶
Install with the installer script¶
Linux and macOS¶
Run:
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 use Unix paths by default:
| Type | Default Path |
|---|---|
| Install directory | ~/.local/bin |
| Executable | ~/.local/bin/obscli |
| Data directory | ~/.obscli |
| Login and update config | ~/.obscli/login.toml |
| Log directory | ~/.obscli/log |
| Current log file | ~/.obscli/log/obscli.log |
If obscli is not available after installation, add the install directory to PATH:
WSL is a Linux environment and uses the same command and paths.
Windows PowerShell¶
Run:
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 installs obscli to this path by default:
After installation, reopen PowerShell and run:
If you cannot reopen PowerShell, run the full path directly:
Windows default directories:
| Type | Default Path |
|---|---|
| Install directory | %LOCALAPPDATA%\Programs\obscli |
| Executable | %LOCALAPPDATA%\Programs\obscli\obscli.exe |
| Data directory | %USERPROFILE%\.obscli |
| Login and update config | %USERPROFILE%\.obscli\login.toml |
| Log directory | %USERPROFILE%\.obscli\log |
| Current log file | %USERPROFILE%\.obscli\log\obscli.log |
PowerShell is recommended on Windows. Git Bash interprets paths using its own $HOME; if you use Git Bash, specify the install directory explicitly:
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>
Install with an offline package¶
Download the package that matches your system, for example:
obscli-linux-amd64-v1.2.3.tar.gz
obscli-darwin-arm64-v1.2.3.tar.gz
obscli-windows-amd64-v1.2.3.tar.gz
Verify and install:
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
Uninstall obscli¶
Migrate from the legacy name before reinstalling¶
If the legacy obsycli is installed on this machine, do not overwrite it directly with obscli. Delete the old executable and old data directory first, then reinstall and log in to the new obscli by following the installation section.
Linux/macOS/WSL:
Choose one command. The first asks for confirmation before deleting files; the second uses --yes to skip confirmation:
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
This script cleans up the fixed system layout from before the rename from beak-agent. It also removes common Linux/macOS install locations for the old obsycli: /usr/local/bin/obsycli, /usr/bin/obsycli, and ~/.local/bin/obsycli plus ~/.obsycli under the current HOME and the SUDO_USER home.
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
After removing the old version, reinstall with the obscli installation commands in this document. obscli uses ~/.obscli or %USERPROFILE%\.obscli and does not read local configuration from the old obsycli.
Uninstall the current version¶
Linux/macOS:
If you installed to a system directory with 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
If obscli.exe was placed in another directory, delete the file shown by Get-Command obscli -All.
Windows Git Bash:
WSL:
The local data directory contains login tokens, update config, and logs. After deleting it, you need to log in again.
Log in to Beak¶
Copy the user sk from the Beak web page, then run:
If the test environment certificate is not trusted by your machine, add:
After a successful login, credentials are written to:
Run obscli directly afterward to enter interactive chat.
How obscli updates automatically¶
When installed with the installer, obscli checks for new versions during startup. When a new version is available, it prompts:
After you enter y or yes, obscli downloads the package for the current system, verifies .sha256, and replaces the local executable. Linux/macOS restart obscli automatically after the update. Windows completes replacement after the current process exits, and you need to run obscli again.
To disable startup update checks in the current environment, set:
Common Commands¶
| Command | Purpose |
|---|---|
obscli |
Enter the interactive client |
/agents |
List Agents in the current workspace |
/tasks |
List existing Tasks |
/newtask <number> |
Create a Task with the Agent at the specified number |
/model auto\|auto:fast\|auto:standard\|auto:advanced |
Change the model route for the current Task |
/attach <number> |
Open an existing Task |
/close <number> |
Close the current Task or the Task at the specified number |
/compact |
Compact older history in the current Task manually |
/clear |
Clear the screen |
/subagent <task> |
Ask the Agent to split the task across multiple subagents first |
/statusline |
Configure status line fields and write them to ~/.obscli/config.toml |
/yolo |
Toggle YOLO/Full access, removing file access limits and approval prompts |
/exit |
Exit |
<number> in the table refers to the temporary number in the # column from /agents or /tasks. /newtask <number> uses the # number from /agents; /attach <number> and /close <number> use the # number from /tasks.
Closed Tasks cannot receive new messages. To continue a conversation, create a new Task.
Control Agent access¶
/yolo is a toggle:
- First use: enter Full access. The Agent can access files outside the working directory, and tool calls no longer request approval.
- Second use: return to normal mode and restore file access limits and approval prompts.
Enable YOLO only when you trust the current Agent and Task context.
Split work across subagents¶
When a task can be split into independent parts, use /subagent <task> to ask the Agent to use subagents first. For example:
/subagent Check error logs, slow queries, and alert events from the past hour separately, then summarize root-cause clues
obscli displays each subagent's start, wait, and completion status. The main Agent summarizes the final result. You can recall the complete command from input history with the arrow keys.
Compact task history manually¶
When a long-running task approaches the model context limit, Agent automatically compacts older conversation and tool interactions. To free context space earlier, run this command in the current Task:
Compaction retains recent raw interactions and converts older history into a continuation summary. It does not close the Task or delete the complete session event record. obscli displays the start and completion status. If the current history is still within the retention budget, Agent reports that compaction is not needed.
Plan and execute complex work¶
Use /plan to enter Plan mode:
For example:
After receiving the plan, approve it, reject it, request changes, or interrupt it:
/plan-approve
/plan-approve /subagent [instruction]
/plan-reject [reason]
/plan-revise <feedback>
/plan-interrupt [reason]
| Command | Purpose |
|---|---|
/plan |
Enter Plan mode and wait for a planning request |
/plan <prompt> |
Enter Plan mode and submit the planning request immediately |
/plan-approve |
Approve the latest plan |
/plan-approve /subagent [instruction] |
Approve the plan and prioritize splitting execution across subagents |
/plan-reject [reason] |
Reject the plan and explain why |
/plan-revise <feedback> |
Submit revision feedback |
/plan-interrupt [reason] |
Interrupt the current plan and leave Plan mode |
Regular messages do not enter Plan mode automatically. Closing a Task with an active plan also interrupts the plan.
Run a single prompt from a script¶
Use obscli run to submit a one-shot task, wait for the Agent's answer, and exit. It is intended for shell scripts and automation.
Log in with obscli --login <user-sk> first. run reads the existing login configuration, so scripts do not need to pass credentials again.
Run obscli -h or obscli run -h to see all supported run options.
If you do not know the agent UUID, list online agents in the current workspace:
The default output includes each Agent's UUID, name, and status. Use --json for scripts. This command only queries online Agents and does not create a Task.
Pass a prompt directly:
answer="$(obscli run --agent-uuid <AGENT_UUID> --prompt 'Check errors from the past hour and summarize them briefly')"
printf '%s\n' "$answer"
Read a multiline file or 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 -
By default, stdout contains only the raw Markdown returned by the agent and normal progress does not write to stderr. Use --json for a structured result:
The JSON result includes the answer, related UUIDs, Agent UUID, and Task name. Usage and attachment information is also returned when available.
The default timeout is 5 minutes; change it with --timeout 90s. Use -v, -vv, -vvv, or --verbose=1|2|3 to write different levels of diagnostic information to stderr. By default, if the Agent requests approval for a dangerous tool, the command cancels the turn and exits with code 3. Use --yolo only when you explicitly accept Full access risk.
To ask a one-shot task to prioritize subagents, add --subagent:
obscli run --agent-uuid <AGENT_UUID> --subagent \
--prompt 'Check errors, slow queries, and alerts from the past hour separately, then summarize the evidence'
If the task cannot reasonably be split, the Agent explains why and answers directly. --subagent cannot be combined with --list-agents.
obscli run does not support Plan mode because plans require multiple rounds of confirmation. Use interactive obscli to approve or revise a plan.
Common exit codes:
| Exit code | Meaning |
|---|---|
0 |
An answer was received and the Task completed successfully |
1 |
API, message stream, Agent execution, or Task cleanup failure |
2 |
Invalid arguments or local prompt input |
3 |
A tool call requires approval |
4 |
The Agent requested more input, but the one-shot Task cannot continue interactively |
124 |
Execution timed out |
130 / 143 |
SIGINT / SIGTERM received |
In --json mode, stdout remains empty on failure and stderr returns a JSON object containing error.code and error.message. Scripts should use the exit code and these fields to determine the result.
Reference resources and Skills in a message¶
Enter @ in the interactive input to reference observation resources in the current workspace:
- Service
- Dashboards
- Application
- Hosts
- Containers
Use the arrow keys or Tab to browse, Space to select one or more items, and Enter to confirm. Type to search resource names and types. Selected resources appear as @resource-name and provide query context to the Agent.
In an attached single-Agent Task, enter $ to select a Skill provided by that Agent. Search matches the Skill name and description and ignores spaces, so rootcause can match Root cause analysis. Selection works the same way as the resource list, and every selected Skill applies to the whole message.
Both lists require Space to select before Enter confirms. Searching does not clear existing selections.
At the boundary of @resource-name or $skill-name, Backspace or Delete removes the entire reference. Recalling a message with the arrow keys or Ctrl+R also restores its resources and Skills.
To enter a literal @ or $, press Esc after the list opens. Pasted @ and $ also remain plain text.
After opening a Task, type a message and press Enter. If the Task has one Agent, the message goes to that Agent. If it has multiple Agents, the message is broadcast to all of them.
Use keyboard shortcuts¶
Normal input supports these shortcuts:
Normal input:
| Key | Behavior |
|---|---|
Enter |
Send the current input; when selecting a slash command, accept the highlighted command |
Shift+Enter / Alt+Enter |
Insert a newline |
Esc |
Show confirmation for canceling the current input |
Double Esc |
Cancel the current input or current chat |
↑ / ↓ |
Browse input history; when selecting a slash command, move the highlight |
← / → |
Move the cursor left or right |
Home / End |
Move to the beginning or end of the line |
Backspace |
Delete the character before the cursor |
Delete |
Delete the character at the cursor |
Tab |
Complete the common prefix of a slash command |
Ctrl+A / Ctrl+E |
Move to the beginning or end of the line |
Ctrl+C |
Clear non-empty input; exit the current interaction when input is empty |
Ctrl+L |
Clear the screen and keep the current input |
Ctrl+R |
Search input history |
Ctrl+T |
Open full tool output |
Ctrl+W |
Delete the previous word |
| Direct text input | Insert text at the cursor |
Pop-up selection:
| Key | Behavior |
|---|---|
↑ / Ctrl+P |
Move the highlight up; from the first item, wrap to the last item |
↓ / Tab / Ctrl+N |
Move the highlight down; from the last item, wrap to the first item |
Shift+Tab |
Move the highlight up; from the first item, wrap to the last item |
Space |
Toggle the current item without moving the highlight; retry a failed resource type and select it after loading succeeds |
Enter |
Submit all selected items; keep the popup open if nothing is selected |
Esc |
Cancel the current popup; in the resource item list, first return to the type list; in an approval popup, cancel the current chat |
Ctrl+C |
Cancel the pop-up and exit the current interaction |
Backspace |
Delete the last character of the search text |
Ctrl+U |
Clear the search text |
| Direct or pasted text input | Fuzzy-filter the list and reset the highlight to the first item |
If arrow keys or control keys do not work in a terminal, first check whether the terminal has bound the shortcut to an outer application. If the issue remains, open ~/.obscli/log/obscli.log and record the terminal name, version, and key behavior.
Local Files¶
obscli uses the following local paths by default:
Linux/macOS:
Windows:
Logs rotate automatically. The default maximum size for one log file is 32 MiB.
Troubleshooting¶
When login fails, check:
--beak-serverpoints to the Beak service address.- If you log in through the installer,
--beak-serverpoints to the Beak service address. - The user sk is a valid credential copied from the current Beak web page.
- Whether the HTTPS test environment requires
--insecure-skip-tls-verify.
If there is no task after entering chat, run:
Here, <number> is the number in the # column from /agents.