From b649a7ab8de6488c1341e94c37d032c07d5b3f13 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Thu, 26 Mar 2026 19:19:47 -0700 Subject: feat: Use eye-declare for more performant and flexible AI TUI (#3343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR replaces the mess of custom rendering code in Atuin AI with [eye-declare](https://github.com/BinaryMuse/eye-declare), and updates the TUI to feel more terminal-native: output appears inline and persists in scrollback, so you can scroll up and look at previous conversations for reference. The "review" state — which used to exist between the LLM generating a response and the user either executing or following up — has been removed; just start typing to follow up with the LLM, or press `enter` at the empty input box to execute the suggested command. image --- docs/docs/ai/images/basic-followup-questions.png | Bin 0 -> 504535 bytes docs/docs/ai/images/basic-refine.png | Bin 0 -> 410378 bytes docs/docs/ai/images/basic.png | Bin 0 -> 371724 bytes docs/docs/ai/images/danger.png | Bin 0 -> 409263 bytes docs/docs/ai/images/question.png | Bin 0 -> 372884 bytes docs/docs/ai/introduction.md | 122 ++--------------------- 6 files changed, 9 insertions(+), 113 deletions(-) create mode 100644 docs/docs/ai/images/basic-followup-questions.png create mode 100644 docs/docs/ai/images/basic-refine.png create mode 100644 docs/docs/ai/images/basic.png create mode 100644 docs/docs/ai/images/danger.png create mode 100644 docs/docs/ai/images/question.png (limited to 'docs') diff --git a/docs/docs/ai/images/basic-followup-questions.png b/docs/docs/ai/images/basic-followup-questions.png new file mode 100644 index 00000000..d0c1d12d Binary files /dev/null and b/docs/docs/ai/images/basic-followup-questions.png differ diff --git a/docs/docs/ai/images/basic-refine.png b/docs/docs/ai/images/basic-refine.png new file mode 100644 index 00000000..e2404bc5 Binary files /dev/null and b/docs/docs/ai/images/basic-refine.png differ diff --git a/docs/docs/ai/images/basic.png b/docs/docs/ai/images/basic.png new file mode 100644 index 00000000..a58e510a Binary files /dev/null and b/docs/docs/ai/images/basic.png differ diff --git a/docs/docs/ai/images/danger.png b/docs/docs/ai/images/danger.png new file mode 100644 index 00000000..9c762f19 Binary files /dev/null and b/docs/docs/ai/images/danger.png differ diff --git a/docs/docs/ai/images/question.png b/docs/docs/ai/images/question.png new file mode 100644 index 00000000..a1dc5690 Binary files /dev/null and b/docs/docs/ai/images/question.png differ diff --git a/docs/docs/ai/introduction.md b/docs/docs/ai/introduction.md index 1c154992..b14634b3 100644 --- a/docs/docs/ai/introduction.md +++ b/docs/docs/ai/introduction.md @@ -22,111 +22,25 @@ For a list of settings that control the behavior of Atuin AI, see [its dedicated Prompt the LLM to create a command, and get one back, no fuss. Press `enter` to run, or `tab` to insert. -``` -┌Ask questions or generate a command:──────────────────────────┐ -│ │ -│ > Get a list of running docker containers │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ $ docker ps │ -│ │ -└────[Enter]: Run [Tab]: Insert [f]: Follow-up [Esc]: Cancel┘ -``` +[![Basic Atuin AI usage](./images/basic.png)](./images/basic.png) ### Follow-up -You can follow-up with `f` to specify a refinement prompt to update the command that will be inserted. - -``` -┌Ask questions or generate a command:──────────────────────────┐ -│ │ -│ > Get a list of running docker containers │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ $ docker ps │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ > Actually I want to get all docker containers │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ $ docker ps -a │ -│ │ -└────[Enter]: Run [Tab]: Insert [f]: Follow-up [Esc]: Cancel┘ -``` +You can follow-up with a refinement prompt to update the command that will be inserted. + +[![Basic Atuin AI refinement usage](./images/basic-refine.png)](./images/basic-refine.png) You can also follow-up with questions to get responses in natural language. -``` -┌Ask questions or generate a command:──────────────────────────┐ -│ │ -│ > Get a list of running docker containers │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ $ docker ps │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ > Actually I want to get all docker containers │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ $ docker ps -a │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ > What other useful flags to `docker ps` should I know? │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ Here are some handy `docker ps` flags: │ -│ │ -│ - `-q` — Only show container IDs (great for piping to │ -│ other commands) │ -│ - `-s` — Show container sizes │ -│ - `-n 5` — Show the last 5 created containers │ -│ - `-l` — Show only the latest created container │ -│ - `--no-trunc` — Don't truncate output (shows full IDs and │ -│ commands) │ -│ - `-f` or `--filter` — Filter by condition, e.g.: │ -│ - `-f status=exited` — only exited containers │ -│ - `-f name=myapp` — filter by name │ -│ - `-f ancestor=nginx` — filter by image │ -│ - `--format` — Custom output using Go templates, e.g.: │ -│ `--format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"` │ -│ │ -│ A common combo is `docker ps -aq` to get all container │ -│ IDs, useful for bulk operations like `docker rm $(docker │ -│ ps -aq)`. │ -│ │ -└────[Enter]: Run [Tab]: Insert [f]: Follow-up [Esc]: Cancel┘ -``` - -You can use `enter` or `tab` at any time to run or insert the last suggested command, even if it was suggested in a previous turn. +[![Basic Atuin AI refinement informational usage](./images/basic-followup-questions.png)](./images/basic-followup-questions.png) + +You can still use `enter` or `tab` to run or insert the last suggested command, even if it was suggested in a previous turn. ### Conversational and search usage If you prompt the LLM with a question that doesn't imply you want to generate a command, it can respond in natural language, and use web search if necessary to fetch the data it needs. -``` -┌Ask questions or generate a command:──────────────────────────┐ -│ │ -│ > What is the latest version of atuin? │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ ✓ Used 2 tools │ -│ │ -│ The latest version of Atuin is **v18.12.0**, available on │ -│ the [GitHub releases │ -│ page](https://github.com/atuinsh/atuin/releases). │ -│ │ -└─────────────────────────────────[f]: Follow-up [Esc]: Cancel┘ -``` +[![Ask it a question](./images/question.png)](./images/question.png) ### Dangerous or low-confidence command detection @@ -134,22 +48,4 @@ The LLM scores its confidence in the command, as well as how dangerous the comma The Atuin Hub server also monitors suggested commands for dangerous patterns the LLM didn't catch, and appends its own assessment at the end of the LLM's own assessment. -``` -┌Ask questions or generate a command:──────────────────────────┐ -│ │ -│ > Delete all files from $HOME │ -│ │ -├──────────────────────────────────────────────────────────────┤ -│ │ -│ $ rm -rf $HOME/* │ -│ │ -│ ! This will PERMANENTLY delete ALL files and directories in │ -│ your home directory, including documents, downloads, │ -│ configurations, SSH keys, and everything else. This is │ -│ irreversible and will likely break your system. Also note │ -│ this won't delete hidden (dot) files — if you want those │ -│ too, that's even more destructive.; [Server] Recursive │ -│ delete of critical directory │ -│ │ -└────[Enter]: Run [Tab]: Insert [f]: Follow-up [Esc]: Cancel┘ -``` +[![Potentially dangerous commands are marked](./images/danger.png)](./images/danger.png) -- cgit v1.3.1