Interactive REPL
Running the binary on a terminal starts a persistent conversation. One process serves every turn, so the prompt cache stays warm and a turn boundary costs milliseconds.
oasis-agentIf nothing is configured yet, the first interactive run walks you through setup.
The editor
| Action | Keys |
|---|---|
| Newline without submitting | \ + ↵, or Alt + ↵ |
| Complete the command being typed | Tab (↑/↓ to choose, ↵ accepts) |
| Cycle the permission mode | Shift + Tab |
| Clear the input, or cancel a running turn | Ctrl + C |
| Leave on an empty prompt | Ctrl + D |
| Release a foreground job mid-turn | Ctrl + B |
Word motions and persistent history work as they do in any readline-style editor. Disable history with --no-history or OASIS_AGENT_NO_HISTORY=1.
Slash commands
| Command | What it does |
|---|---|
/help | Show the command help |
/expand [id] | Print a collapsed tool result in full (default: the last one) |
/cost | Token and cost totals for this session |
/plan | List the model's current plan items |
/plan on | off | status | Toggle or report read-only plan mode |
/jobs | Background jobs. ↑↓ choose, ↵ output, k kill, d detach |
/background | Hand this conversation to a background agent, or let go of one. /bg and /handoff are the same thing |
/agents | Background agents and saved conversations; ↵ switches to one in place. /resume is the same |
/status | Version, installed versions, launcher, update settings |
/config | Open the settings menu. ↑↓ choose, ←→ change, ↵ edit |
/config <key> <value> | Set one key without opening the menu |
/restart | Restart with the settings on disk. The conversation is not carried over |
/update | Update to the newest published version |
/exit, /quit | Leave the REPL |
A line starting with / is not always a command
An absolute path is the common case, so anything with a / or a . in the first word is treated as ordinary input and sent to the model. /home/user/file.txt reaches the agent; /cost does not.
Commands that work mid-turn
/jobs, /cost, /help, /plan and /background run where you type them, even while the model is working. Anything else you type is queued and becomes the next prompt.
Permission modes
Five modes, cycled with Shift+Tab, live during a turn as well as at the prompt. The active mode shows under the prompt and in the pinned region while a turn runs.
| Mode | Behaviour |
|---|---|
plan | Read-only. Mutating tools are refused until a plan is approved |
manual | Ask before every mutating tool. The default |
accept edits | File edits apply without asking, inside the working directory. Bash still asks |
auto | Nothing routine is asked, inside the working directory |
dangerous | Every waivable request is approved. Shown in red |
Hard-stop tools (a PLC write, a motion command) ask in every mode. Full detail in Permission Model.
Output rendering
| Feature | Behaviour | Disable with |
|---|---|---|
| Unified diffs | File edits render inline as a diff | --no-diffs |
| Collapsible results | Long tool output collapses to a placeholder; /expand prints it in full | --no-collapse |
| Colour | Auto-detected from the terminal | --no-color, or NO_COLOR |
| Cost meter | Running token and cost totals; /cost for the breakdown | — |
Collapsed results stay expandable after a resume. A resumed transcript replays through the same renderers a live turn uses.
Background jobs
When the agent starts a long-running task, a row appears under the prompt with a live timer:
›
2 jobs ⚙ npm test 1m34s ⚙ vite dev 2m07s · /jobs/jobs opens the list. The cursor follows the job row, not a line number, so a job finishing above the one you are about to kill does not slide a different one under your keypress.
Full detail in Background Agents & Jobs.
Pasting
| Paste size | Behaviour |
|---|---|
| Up to 3 lines and 280 characters | Appears inline |
| Larger | Collapses to a [Pasted N lines, M chars] placeholder; the full text is sent on ↵ |
Backspace deletes a collapsed paste whole rather than a character at a time.
Restarting
/restart reloads the settings on disk (endpoint, model, packs) and starts fresh. The conversation is not carried over. If you want to keep it, hand it to a background agent with /background first, or resume it later from Sessions.