Add o complete and o route subcommands, update table

This commit is contained in:
Ollie Agent 2026-08-05 19:20:52 +02:00
parent 58cedd902b
commit 2e14d2e93b
2 changed files with 46 additions and 16 deletions

View File

@ -52,9 +52,9 @@ Shell environment variables take precedence over the env file.
|---|---|
| **CLI** | `o` — unified namespace CLI with `read`, `write`, `readloop`, `ls`, `ctl`, `prompt`, `tail`, `env`, `stop`, `kill` |
| **Terminal TUI** | `o tui` — tmux + two shell commands, no widgets |
| **One-shot LLM** | `echo 'prompt' \| o generate` |
| **Code completion** | `echo '{"file":"...","prefix":"...","suffix":"..."}' \| o write complete` |
| **Task routing** | `echo 'task' \| o write route` → read back with `o read route` |
| **One-shot LLM** | `o generate "explain monads"` |
| **Code completion** | `o complete '{"file":"main.go","prefix":"func "}'` |
| **Task routing** | `o route "implement login"` → `backend=X model=Y` |
| **Run an agent** | Create a session + agent via 9P — then connect with any frontend ([ellie](doc/ellie.md), KDE (GUI/KRunner/Kate), `o tui`) |
| **Remote execution** | Set `remote=user@host` in session config |
| **Custom tools** | Drop an executable + `.meta` in `$OLLIE_TOOLS_PATH` |

View File

@ -236,6 +236,40 @@ cmd_generate() {
printf '%s' "$prompt" | ollie-9p rdwr generate
}
cmd_complete() {
# Code completion via /complete (no session/agent needed)
# Usage: o complete '{"file":"...","prefix":"...","suffix":"..."}'
# echo '{"file":"..."}' | o complete
local json=""
if [[ $# -gt 0 ]]; then
json="$*"
else
json=$(cat)
fi
[[ -z "$json" ]] && { echo "usage: o complete <json>" >&2; exit 1; }
printf '%s' "$json" | ollie-9p rdwr complete
}
cmd_route() {
# Task routing via /route (no session/agent needed)
# Usage: o route "task description"
# echo "task" | o route
local task=""
if [[ $# -gt 0 ]]; then
task="$*"
else
task=$(cat)
fi
[[ -z "$task" ]] && { echo "usage: o route <task>" >&2; exit 1; }
printf '%s' "$task" | ollie-9p rdwr route
}
cmd_readloop() {
if [[ $# -lt 1 ]]; then
echo "usage: o readloop <path>" >&2
@ -275,7 +309,7 @@ cmd_prompt() {
echo "[$s/$a]"
echo "Type . on a blank line to send, Ctrl+D to exit."
echo "Slash commands: /stop /compact /kill /clear /model /backend /cwd /help"
echo "Slash commands: /stop /compact /kill /clear /model /backend /cwd /i /help"
echo ""
local buf="" line
@ -306,17 +340,7 @@ cmd_prompt() {
backend*) echo "$cmd" | ollie-9p write "$path/ctl"; echo "[${cmd}]" ;;
cwd*) echo "$cmd" | ollie-9p write "$path/ctl"; echo "[${cmd}]" ;;
quit|q) tmux kill-session -t "o-${s}" 2>/dev/null; exit 0 ;;
i|info)
local state model backend cost
state=$(ollie-9p read "$path/state" 2>/dev/null || echo "?")
model=$(ollie-9p read "$path/model" 2>/dev/null || echo "?")
backend=$(ollie-9p read "$path/backend" 2>/dev/null || echo "?")
cost=$(ollie-9p read "$path/cost" 2>/dev/null || echo "?")
echo " state: $state"
echo " model: $model"
echo " backend: $backend"
echo " cost: $cost"
;;
i*) echo "/$line" | ollie-9p write "$path/prompt"; echo "[injected]" ;;
help)
echo " /stop — interrupt running agent"
echo " /compact — compact context"
@ -326,7 +350,7 @@ cmd_prompt() {
echo " /backend X — switch backend"
echo " /cwd X — change working directory"
echo " /quit /q — kill the tmux TUI"
echo " /i /info — inspect agent state, model, backend, cost"
echo " /i — interrupt running agent"
;;
*) echo "unknown command: /$cmd (try /help)" ;;
esac
@ -507,6 +531,8 @@ Commands:
ls [path] List namespace entries
generate <prompt> One-shot generation (no session needed)
complete <json> Code completion (no session needed)
route <task> Route task to best model (no session needed)
ctl <cmd> Send control command to agent
stop Interrupt running agent
@ -529,6 +555,8 @@ Examples:
o ls session # list all sessions
o read models # read root-level file
o generate "explain monads" # one-shot, no session
o complete '{"file":"main.go","prefix":"func "}' # code completion
o route "implement login" # route to best model
export session=foo agent=bar # set context
o read chat # read agent's chat
o readloop statewait # blocks until agent state changes
@ -549,6 +577,8 @@ case "$subcmd" in
readloop) cmd_readloop "$@" ;;
ls) cmd_ls "$@" ;;
generate) cmd_generate "$@" ;;
complete) cmd_complete "$@" ;;
route) cmd_route "$@" ;;
ctl) cmd_ctl "$@" ;;
stop) cmd_stop "$@" ;;
kill) cmd_kill "$@" ;;