218 lines
6.3 KiB
Markdown
218 lines
6.3 KiB
Markdown
|
|
# CLI
|
|||
|
|
|
|||
|
|
The Hermes Agent CLI provides an interactive terminal interface for working with the agent.
|
|||
|
|
|
|||
|
|
## Running the CLI
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Basic usage
|
|||
|
|
./hermes
|
|||
|
|
|
|||
|
|
# With specific model
|
|||
|
|
./hermes --model "anthropic/claude-sonnet-4"
|
|||
|
|
|
|||
|
|
# With specific toolsets
|
|||
|
|
./hermes --toolsets "web,terminal,skills"
|
|||
|
|
|
|||
|
|
# Verbose mode
|
|||
|
|
./hermes --verbose
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Architecture
|
|||
|
|
|
|||
|
|
The CLI is implemented in `cli.py` and uses:
|
|||
|
|
|
|||
|
|
- **Rich** - Welcome banner with ASCII art and styled panels
|
|||
|
|
- **prompt_toolkit** - Fixed input area with command history
|
|||
|
|
- **KawaiiSpinner** - Animated feedback during operations
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────┐
|
|||
|
|
│ HERMES-AGENT ASCII Logo │
|
|||
|
|
│ ┌─────────────┐ ┌────────────────────────────┐ │
|
|||
|
|
│ │ Caduceus │ │ Model: claude-opus-4.5 │ │
|
|||
|
|
│ │ ASCII Art │ │ Terminal: local │ │
|
|||
|
|
│ │ │ │ Working Dir: /home/user │ │
|
|||
|
|
│ │ │ │ Available Tools: 19 │ │
|
|||
|
|
│ │ │ │ Available Skills: 12 │ │
|
|||
|
|
│ └─────────────┘ └────────────────────────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────┘
|
|||
|
|
│ Conversation output scrolls here... │
|
|||
|
|
│ │
|
|||
|
|
│ User: Hello! │
|
|||
|
|
│ ────────────────────────────────────────────── │
|
|||
|
|
│ (◕‿◕✿) 🧠 pondering... (2.3s) │
|
|||
|
|
│ ✧٩(ˊᗜˋ*)و✧ got it! (2.3s) │
|
|||
|
|
│ │
|
|||
|
|
│ Assistant: Hello! How can I help you today? │
|
|||
|
|
├─────────────────────────────────────────────────┤
|
|||
|
|
│ ❯ [Fixed input area at bottom] │
|
|||
|
|
└─────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Commands
|
|||
|
|
|
|||
|
|
| Command | Description |
|
|||
|
|
|---------|-------------|
|
|||
|
|
| `/help` | Show available commands |
|
|||
|
|
| `/tools` | List available tools grouped by toolset |
|
|||
|
|
| `/toolsets` | List available toolsets with descriptions |
|
|||
|
|
| `/model [name]` | Show or change the current model |
|
|||
|
|
| `/prompt [text]` | View/set/clear custom system prompt |
|
|||
|
|
| `/personality [name]` | Set a predefined personality |
|
|||
|
|
| `/clear` | Clear screen and reset conversation |
|
|||
|
|
| `/reset` | Reset conversation only (keep screen) |
|
|||
|
|
| `/history` | Show conversation history |
|
|||
|
|
| `/save` | Save current conversation to file |
|
|||
|
|
| `/config` | Show current configuration |
|
|||
|
|
| `/quit` | Exit the CLI (also: `/exit`, `/q`) |
|
|||
|
|
|
|||
|
|
## Configuration
|
|||
|
|
|
|||
|
|
The CLI is configured via `cli-config.yaml`. Copy from `cli-config.yaml.example`:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cp cli-config.yaml.example cli-config.yaml
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Model Configuration
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
model:
|
|||
|
|
default: "anthropic/claude-opus-4.5"
|
|||
|
|
base_url: "https://openrouter.ai/api/v1"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Terminal Configuration
|
|||
|
|
|
|||
|
|
The CLI supports multiple terminal backends:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# Local execution (default)
|
|||
|
|
terminal:
|
|||
|
|
env_type: "local"
|
|||
|
|
cwd: "." # Current directory
|
|||
|
|
|
|||
|
|
# SSH remote execution (sandboxed - agent can't touch its own code)
|
|||
|
|
terminal:
|
|||
|
|
env_type: "ssh"
|
|||
|
|
cwd: "/home/myuser/project"
|
|||
|
|
ssh_host: "my-server.example.com"
|
|||
|
|
ssh_user: "myuser"
|
|||
|
|
ssh_key: "~/.ssh/id_rsa"
|
|||
|
|
|
|||
|
|
# Docker container
|
|||
|
|
terminal:
|
|||
|
|
env_type: "docker"
|
|||
|
|
docker_image: "python:3.11"
|
|||
|
|
|
|||
|
|
# Singularity/Apptainer (HPC)
|
|||
|
|
terminal:
|
|||
|
|
env_type: "singularity"
|
|||
|
|
singularity_image: "docker://python:3.11"
|
|||
|
|
|
|||
|
|
# Modal cloud
|
|||
|
|
terminal:
|
|||
|
|
env_type: "modal"
|
|||
|
|
modal_image: "python:3.11"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Toolsets
|
|||
|
|
|
|||
|
|
Control which tools are available:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# Enable all tools
|
|||
|
|
toolsets:
|
|||
|
|
- all
|
|||
|
|
|
|||
|
|
# Or enable specific toolsets
|
|||
|
|
toolsets:
|
|||
|
|
- web
|
|||
|
|
- terminal
|
|||
|
|
- skills
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Available toolsets: `web`, `search`, `terminal`, `browser`, `vision`, `image_gen`, `skills`, `moa`, `debugging`, `safe`
|
|||
|
|
|
|||
|
|
### Personalities
|
|||
|
|
|
|||
|
|
Predefined personalities for the `/personality` command:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
agent:
|
|||
|
|
personalities:
|
|||
|
|
helpful: "You are a helpful, friendly AI assistant."
|
|||
|
|
kawaii: "You are a kawaii assistant! Use cute expressions..."
|
|||
|
|
pirate: "Arrr! Ye be talkin' to Captain Hermes..."
|
|||
|
|
# Add your own!
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Built-in personalities:
|
|||
|
|
- `helpful`, `concise`, `technical`, `creative`, `teacher`
|
|||
|
|
- `kawaii`, `catgirl`, `pirate`, `shakespeare`, `surfer`
|
|||
|
|
- `noir`, `uwu`, `philosopher`, `hype`
|
|||
|
|
|
|||
|
|
## Animated Feedback
|
|||
|
|
|
|||
|
|
The CLI provides animated feedback during operations:
|
|||
|
|
|
|||
|
|
### Thinking Animation
|
|||
|
|
|
|||
|
|
During API calls, shows animated spinner with thinking verbs:
|
|||
|
|
```
|
|||
|
|
◜ (。•́︿•̀。) pondering... (1.2s)
|
|||
|
|
◠ (⊙_⊙) contemplating... (2.4s)
|
|||
|
|
✧٩(ˊᗜˋ*)و✧ got it! (3.1s)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Tool Execution Animation
|
|||
|
|
|
|||
|
|
Each tool type has unique animations:
|
|||
|
|
```
|
|||
|
|
⠋ (◕‿◕✿) 🔍 web_search... (0.8s)
|
|||
|
|
▅ (≧◡≦) 💻 terminal... (1.2s)
|
|||
|
|
🌓 (★ω★) 🌐 browser_navigate... (2.1s)
|
|||
|
|
✧ (✿◠‿◠) 🎨 image_generate... (4.5s)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Multi-line Input
|
|||
|
|
|
|||
|
|
For multi-line input, end a line with `\` to continue:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
❯ Write a function that:\
|
|||
|
|
1. Takes a list of numbers\
|
|||
|
|
2. Returns the sum
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Environment Variable Priority
|
|||
|
|
|
|||
|
|
For terminal settings, `cli-config.yaml` takes precedence over `.env`:
|
|||
|
|
|
|||
|
|
1. `cli-config.yaml` (highest priority in CLI)
|
|||
|
|
2. `.env` file
|
|||
|
|
3. System environment variables
|
|||
|
|
4. Default values
|
|||
|
|
|
|||
|
|
This allows you to have different terminal configs for CLI vs batch processing.
|
|||
|
|
|
|||
|
|
## Session Management
|
|||
|
|
|
|||
|
|
- **History**: Command history is saved to `~/.hermes_history`
|
|||
|
|
- **Conversations**: Use `/save` to export conversations
|
|||
|
|
- **Reset**: Use `/clear` for full reset, `/reset` to just clear history
|
|||
|
|
|
|||
|
|
## Quiet Mode
|
|||
|
|
|
|||
|
|
The CLI runs in "quiet mode" (`HERMES_QUIET=1`), which:
|
|||
|
|
- Suppresses verbose logging from tools
|
|||
|
|
- Enables kawaii-style animated feedback
|
|||
|
|
- Hides terminal environment warnings
|
|||
|
|
- Keeps output clean and user-friendly
|
|||
|
|
|
|||
|
|
For verbose output (debugging), use:
|
|||
|
|
```bash
|
|||
|
|
./hermes --verbose
|
|||
|
|
```
|