Skip to content

Latest commit

 

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rove

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.

A real use case

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.

What you see

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/tap

How it works

Your terminal → Rust server → OpenAI
Your terminal ← answer as it arrives ← Rust server
                         ↓
                Commands run on the server
                         ↓
                Live activity feed (/tap)
  1. You type a message in the client.
  2. The server asks OpenAI for a response.
  3. The AI can request a shell command. The server runs it and returns the result to the AI.
  4. 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.

Try it locally

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 server

Terminal 2 — start chatting:

cargo run --manifest-path backend-rove/Cargo.toml --bin client -- http://127.0.0.1:3000

Use your own server URL in place of the local address when connecting remotely.

Useful commands

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

More things to try

  • 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 /tap open in another terminal while you chat.

The AI can only access files and commands available to the server process.

Know before using

  • 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.

For developers

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/client

The last command tests streaming with a fake model service, without using API credits.

Technical notes · Deployment

About

A terminal AI assistant that runs commands on your server, streams answers, and shares a live activity feed. Built in Rust.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages