<feed xmlns='http://www.w3.org/2005/Atom'>
<title>atuin/crates/atuin-ai/src/commands/init.rs, branch main</title>
<subtitle>Turtle. A hard-fork of atuin, focusing on a more minimal feature set</subtitle>
<id>http://git.foss-syndicate.org/bpeetz/forks/atuin/atom/crates/atuin-ai/src/commands/init.rs?h=main</id>
<link rel='self' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/atom/crates/atuin-ai/src/commands/init.rs?h=main'/>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/'/>
<updated>2026-06-10T20:01:45Z</updated>
<entry>
<title>chore: Remove some unused rust code</title>
<updated>2026-06-10T20:01:45Z</updated>
<author>
<name>Benedikt Peetz</name>
<email>benedikt.peetz@b-peetz.de</email>
</author>
<published>2026-06-10T20:01:45Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=5e31a81cd2207f053b8cd8ad84ebe2a2f691b29d'/>
<id>urn:sha1:5e31a81cd2207f053b8cd8ad84ebe2a2f691b29d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: minor issues with fish's vim mode(s) (#3362)</title>
<updated>2026-04-23T18:10:50Z</updated>
<author>
<name>Aditya Bhargava</name>
<email>rightaditya@users.noreply.github.com</email>
</author>
<published>2026-04-23T18:10:50Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=1b6f9d10220178f8f69986d57d9441d9f669f7df'/>
<id>urn:sha1:1b6f9d10220178f8f69986d57d9441d9f669f7df</id>
<content type='text'>
This PR fixes two minor issues when using Atuin with fish's vim mode(s):
1. Add support for `fish_hybrid_key_bindings`: in addition to
`fish_vi_key_bindings`, fish also provides `fish_hybrid_key_bindings`,
which is a vi-based mode with some extra keybinds; but the key bind
check for `atuin search` only checks for the former.
2. The AI keybind inserts a `?` on the command line in vim mode even
though it can only be called from normal mode, when pressing `?`
normally does nothing.</content>
</entry>
<entry>
<title>feat: Client-tool execution + permission system (#3370)</title>
<updated>2026-04-10T20:24:57Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-04-10T20:24:57Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=09279a428659cf41824737d3e0c97bcc19a8885a'/>
<id>urn:sha1:09279a428659cf41824737d3e0c97bcc19a8885a</id>
<content type='text'>
Adds client-side tool execution to Atuin AI, starting with
`atuin_history`. The server can request tool calls, which are executed
locally with a permission system, and results are sent back to continue
the conversation.</content>
</entry>
<entry>
<title>fix(ai): restore url-quote-magic for ? in zsh (#3304)</title>
<updated>2026-03-19T22:22:48Z</updated>
<author>
<name>Alex Kirk</name>
<email>akirk@users.noreply.github.com</email>
</author>
<published>2026-03-19T22:22:48Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=4f1402001b3c0e8df61a4a327a9ec02691096beb'/>
<id>urn:sha1:4f1402001b3c0e8df61a4a327a9ec02691096beb</id>
<content type='text'>
I discovered that since #3178, typing or pasting a `?` in a URL no
longer gets escaped by `url-quote-magic`. For example, pasting
`https://example.com/search?q=foo&amp;test` would result in
`https://example.com/search?q=foo\&amp;test` (leave the `?` unescaped, while
`&amp;` still worked correctly).

The root cause is that Atuin binds `?` to `_atuin_ai_question_mark`,
which bypasses `url-quote-magic` in two ways:

1. **Typed `?`**: the else branch (non-empty buffer) appended `?`
directly to `LBUFFER` instead of delegating to `self-insert` which runs
`url-quote-magic`.

2. **Pasted `?`**: `bracketed-paste-magic` only [activates widgets whose
name matches
`self-*`](https://github.com/zsh-users/zsh/blob/99f578897614f318cdad76402a7d2423ce176b5a/Functions/Zle/bracketed-paste-magic#L24).
Since `_atuin_ai_question_mark` didn't match, pasted `?` characters fell
through to `zle .self-insert` — the raw built-in that inserts literally
without any URL escaping.

The fix renames the widget to `self-atuin-ai-question-mark` (Note: I am
not sure this is the best way but it is a relatively simple one). The
`self-` prefix satisfies `bracketed-paste-magic`'s `active-widgets`
pattern, so `?` in paste is processed by our widget and delegated to
`zle self-insert`, restoring `url-quote-magic` behaviour. The typed case
delegates to `zle self-insert` in the else branch for the same reason.</content>
</entry>
<entry>
<title>feat: Add `atuin setup` (#3257)</title>
<updated>2026-03-12T21:52:15Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-03-12T21:52:15Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=f7431afe2f0b424b6dcd0a76138607857563e008'/>
<id>urn:sha1:f7431afe2f0b424b6dcd0a76138607857563e008</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: Move atuin ai subcommand into core binary (#3212)</title>
<updated>2026-03-02T17:12:20Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-03-02T17:12:20Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=4c9180c2755b6457113e8d6a7566c32cf1ad547a'/>
<id>urn:sha1:4c9180c2755b6457113e8d6a7566c32cf1ad547a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: Generate commands or ask questions with `atuin ai` (#3199)</title>
<updated>2026-02-24T19:48:20Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-02-24T19:48:20Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=6ea760bb6b36da241961e8ecd60cb2c5e15c0a78'/>
<id>urn:sha1:6ea760bb6b36da241961e8ecd60cb2c5e15c0a78</id>
<content type='text'>
This PR refines the system created in #3178 to be suitable for a v1
release.

---

## Overview

`atuin-ai` is a separate binary that allows for generating commands and
asking questions from the command line.

It is fully opt-in.

## Usage

`atuin ai init` will output bindings for your shell. Currently, bash,
zsh, and fish are supported.

```bash
eval "$(atuin ai init)"
```

Once the hooks are installed, just press `?` on an empty prompt line to
call up the TUI.

`atuin ai` requires an account on [Atuin Hub](https://hub.atuin.sh/);
you will be prompted to log in on first use.

## Features

### Command generation

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:──────────────────────────┐
│                                                              │
│ &gt; Get a list of running docker containers                    │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ $ docker ps                                                  │
│                                                              │
└────[Enter]: Run  [Tab]: Insert  [f]: Follow-up  [Esc]: Cancel┘
```

### 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:──────────────────────────┐
│                                                              │
│ &gt; Get a list of running docker containers                    │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ $ docker ps                                                  │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ &gt; Actually I want to get all docker containers               │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ $ docker ps -a                                               │
│                                                              │
└────[Enter]: Run  [Tab]: Insert  [f]: Follow-up  [Esc]: Cancel┘
```

You can also follow-up with questions to get responses in natural
language.

```
┌Ask questions or generate a command:──────────────────────────┐
│                                                              │
│ &gt; Get a list of running docker containers                    │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ $ docker ps                                                  │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ &gt; Actually I want to get all docker containers               │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ $ docker ps -a                                               │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ &gt; 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.

### 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:──────────────────────────┐
│                                                              │
│ &gt; 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┘
```

### Dangerous or low-confidence command detection

The LLM scores its confidence in the command, as well as how dangerous
the command is. This information is shown if a threshold is exceeded,
and requires an extra confirmation step before running automatically
with `enter`.

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:──────────────────────────┐
│                                                              │
│ &gt; 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┘
```

---------

Co-authored-by: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;</content>
</entry>
<entry>
<title>feat: add Atuin AI inline CLI MVP (#3178)</title>
<updated>2026-02-13T18:54:38Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-02-13T18:54:38Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=e6a8bb033434541974262699c12e2805cc054153'/>
<id>urn:sha1:e6a8bb033434541974262699c12e2805cc054153</id>
<content type='text'>
</content>
</entry>
</feed>
