Chat with an AI in your terminal and let it run commands on your server.
Rove sends your messages to OpenAI through a Rust server. Answers appear as they arrive. When the AI runs a command, you see the command and its result. A second terminal can follow the activity live.
You want to check disk space on a development server without looking up the command yourself.
Ask:
Check available disk space. Run df -h and summarize the result. Do not change anything.
The AI can run df -h on the server and explain the output. You can watch the conversation and command activity from another terminal.
Illustrative output; the command, response, and disk values depend on your server:
You: Check disk space. Run df -h and summarize it.
$ df -h
[command result: exit 0]
Rove: The root filesystem has 18 GB available.
A separate activity feed shows messages, commands, response text, and token totals:
curl -N http://127.0.0.1:3000/tapYour terminal → Rust server → OpenAI
Your terminal ← answer as it arrives ← Rust server
↓
Commands run on the server
↓
Live activity feed (/tap)
- You type a message in the client.
- The server asks OpenAI for a response.
- The AI can request a shell command. The server runs it and returns the result to the AI.
- The answer streams back to your terminal.
The model runs at OpenAI. Your API key stays on the server; the terminal client does not need it.
Requires Rust, Cargo, a shell, and an OpenAI API key configured in the server environment as OPENAI_API_KEY. Model calls use that account's API credits.
Terminal 1 — start the server:
cargo run --manifest-path backend-rove/Cargo.toml --bin serverTerminal 2 — start chatting:
cargo run --manifest-path backend-rove/Cargo.toml --bin client -- http://127.0.0.1:3000Use your own server URL in place of the local address when connecting remotely.
| Do this | Command |
|---|---|
| Start a fresh conversation | /new |
| Quit | /exit or /quit |
| Cancel and exit | Ctrl+C |
| Follow live activity | curl -N http://127.0.0.1:3000/tap |
| Read the last 50 activity lines | curl 'http://127.0.0.1:3000/tap?tail=50' |
| Check server health | curl http://127.0.0.1:3000/health |
- Inspect the server: “Run uname -a and explain what system this is.”
- Check a directory: “List the files in /path/to/project. Do not modify anything.”
- Learn from commands: “Explain what df -h shows, then run it.”
- Observe a session: keep
/tapopen in another terminal while you chat.
The AI can only access files and commands available to the server process.
- Commands run on the server, with a 30-second timeout and limited output. This is real execution, not a simulation.
- Chat history stays in the client's memory and resets when it exits. Recent activity on the server is also temporary.
- There is no built-in login. Anyone who can reach the service can request commands and read the shared activity feed. Restrict access to trusted users.
- This repository contains the terminal client, Rust server, and deployment scripts.
cargo test --locked --all-targets --manifest-path backend-rove/Cargo.toml
cargo build --locked --manifest-path backend-rove/Cargo.toml --bin server --bin client
python3 deploy/test-chat.py backend-rove/target/debug/server backend-rove/target/debug/clientThe last command tests streaming with a fake model service, without using API credits.