Files
brent.edwards f48eb5a05f
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 19s
CI / build (pull_request) Successful in 24s
CI / security (pull_request) Successful in 34s
CI / typecheck (pull_request) Successful in 43s
CI / integration_tests (pull_request) Successful in 2m37s
CI / unit_tests (pull_request) Successful in 6m12s
CI / docker (pull_request) Successful in 1m1s
CI / benchmark-regression (pull_request) Successful in 15m33s
CI / coverage (pull_request) Successful in 21m54s
feat(cli): add interactive repl
Implement `agents repl` command providing an interactive read-eval-print
loop that dispatches to existing CLI commands without the `agents` prefix.

Features:
- Command dispatch via existing Typer app
- readline history with --no-history opt-out (default: ~/.cleveragents/history)
- Tab-completion for all CLI commands and built-in commands
- !! last-command repetition
- Prompt context from CLEVERAGENTS_PROJECT / CLEVERAGENTS_PLAN env vars
- Ctrl+C (continue) and Ctrl+D (exit) signal handling
- Multi-line input with \ continuation
- :help and :exit/:quit built-in commands

Test coverage:
- 15 Behave scenarios (features/repl.feature)
- 10 Robot Framework smoke tests (robot/repl_smoke.robot)
- ASV benchmark suite (benchmarks/repl_bench.py)
- All nox sessions pass: lint, typecheck, unit_tests, integration_tests
- Coverage: 97.2% (threshold: 97%)
2026-02-23 03:11:12 +00:00

100 lines
2.9 KiB
Markdown

# Interactive REPL
The `agents repl` command starts an interactive read-eval-print loop that
lets you run any CleverAgents CLI command without the leading `agents`
prefix.
## Quick start
```bash
agents repl
```
Once inside the REPL you can type commands directly:
```
agents> plan list
agents> session create --actor openai/gpt-4
agents> config get log_level
```
## Built-in commands
| Command | Description |
|----------------|------------------------------------|
| `:help` | Show available commands |
| `:exit` | Exit the REPL (same as Ctrl+D) |
| `:quit` | Alias for `:exit` |
| `!!` | Repeat the last command |
## Command-line options
| Flag | Default | Description |
|------------------|----------------------------------|------------------------------------|
| `--no-history` | `False` | Disable history loading/saving |
| `--history-path` | `~/.cleveragents/history` | Custom history file location |
## Features
### Tab-completion
Press **Tab** to complete top-level command names. All CLI commands and
built-in REPL commands are available as completion candidates.
### Command repetition
Type `!!` and press Enter to repeat the previous command. The repeated
command is printed before execution so you can see what ran.
### Multi-line input
End a line with `\` to continue on the next line. The REPL shows a `...`
continuation prompt. All lines are joined with a space before dispatch.
```
agents> plan create \
... --name "My Plan" \
... --project demo
```
### Prompt context
The prompt reflects the active project and plan when the environment
variables `CLEVERAGENTS_PROJECT` and `CLEVERAGENTS_PLAN` are set:
```
agents (myproject/active-plan)> plan status
```
### Signal handling
| Signal | Behaviour |
|----------|-------------------------------------------|
| Ctrl+C | Cancels the current input; stays in REPL |
| Ctrl+D | Exits the REPL cleanly |
## History
By default the REPL persists command history to
`~/.cleveragents/history`. The file is created automatically on first
use. History survives across sessions and is limited to 10 000 entries.
### Privacy considerations
The history file is stored in the user's home directory with default
filesystem permissions. It may contain sensitive information such as
project names, plan names, and configuration values passed on the
command line. If this is a concern:
* Use `--no-history` to disable persistence entirely.
* Periodically delete or truncate `~/.cleveragents/history`.
* Ensure the directory permissions on `~/.cleveragents/` are
restricted (e.g. `chmod 700`).
## Running the REPL smoke tests
```bash
nox -e unit_tests -- features/repl.feature
nox -e integration_tests # includes robot/repl_smoke.robot
```