arvis
It holds a conversation, runs tools with your permission, and writes every turn to a journal on your machine. One process — no daemon between the prompt and the model.
macOS 26 or newer · any OpenAI-compatible endpoint
you add a --json flag to the status command and cover it with a test arvis I'll find the command first, then add the flag and a test. - Explored 3 files, ran 1 command - Ran swift test --filter StatusCommandTests 4.1s arvis Added `--json` and a test asserting the encoded shape. Both pass. -------------------------------------------------------------------- > _ -------------------------------------------------------------------- Qwen3.5-9B-8bit | 118.6K used | n/a | 2 comp | 15m
The conversation scrolls. The composer and status bar do not.
When the model wants to run a command, it appears above your composer with the command in full. The menu is built from what that tool permits — a tool that refuses to be permanently trusted never offers the key that would do it.
? shell rm -rf .build/release [Enter] run once [c] full command [Esc] deny [text] deny with a reason
Type a sentence instead of pressing a key and that becomes the reason the model is given — so it can take a different route rather than retrying the same one blind.
/model lists the models your endpoint
actually has loaded and marks the one you're on. No identifiers to
look up, and nothing to guess at install time.
Every message, every stream event and every turn's token usage is
journaled to ~/.arvis/arvis.sqlite as it
happens. The transcript you read is read back out of that journal, not
kept beside it — so what you saw and what was recorded cannot drift.
Any server speaking the OpenAI API: an Exo cluster on your own
machines, mlx_lm.server, LM Studio, or a
hosted provider. Set the host once; arvis works out the rest.
checksummed before it installs · nothing runs until you say so
Then run arvis. It writes no configuration file
you have to go and correct.