<feed xmlns='http://www.w3.org/2005/Atom'>
<title>atuin/crates/atuin-ai/src/tui/components/input_box.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/tui/components/input_box.rs?h=main</id>
<link rel='self' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/atom/crates/atuin-ai/src/tui/components/input_box.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>refactor: Replace ad-hoc dispatch with FSM + driver architecture (#3434)</title>
<updated>2026-04-21T20:07:27Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-04-21T20:07:27Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=2f702ad446fcd6a261a3bea0ab2807d70eca43e2'/>
<id>urn:sha1:2f702ad446fcd6a261a3bea0ab2807d70eca43e2</id>
<content type='text'>
Replaces the tangled dispatch handler system (`tui/dispatch.rs`,
`tui/state.rs`) with a pure finite state machine + driver architecture.
The FSM handles all state transitions as explicit `(State, Event) →
(NewState, Effects)` mappings. The driver executes IO effects and
bridges the TUI to the FSM.</content>
</entry>
<entry>
<title>feat: Allow resuming previous AI sessions (#3407)</title>
<updated>2026-04-14T23:03:08Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-04-14T23:03:08Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=fd188da879d977ca847f10708c39dd4801a204c4'/>
<id>urn:sha1:fd188da879d977ca847f10708c39dd4801a204c4</id>
<content type='text'>
This PR introduces session continuation to Atuin AI.

* Conversations with Atuin AI are stored in a local SQLite database
* Upon startup, Atuin AI tries to find a session to resume based on its
directory/workspace and the time since the last event
* If found, Atuin AI will show a note that the session has been resumed,
and an event is added to help the LLM know where the invocation
boundaries are
* If not, Atuin AI will create a new conversation
* The user can create a new conversation with `/new`
* The new setting `ai.session_continue_minutes`, which defaults to `60`,
controls how old the last event in a session can be before it's no
longer considered for automatic resuming.

&lt;img width="1055" height="593" alt="image"
src="https://github.com/user-attachments/assets/3f9ff01a-ef64-44a9-b0e2-3a4252c5746f"
/&gt;

## Architecture

A new `SessionService` trait defines an API contract for a service that
can manage session data. `LocalSessionService` implements this, with
`DaemonSessionService` a possible future extension point.

`SessionManager` owns a `dyn SessionService` and delegates as
appropriate.</content>
</entry>
<entry>
<title>chore: Update to eye-declare 0.3.0 (#3365)</title>
<updated>2026-03-30T22:20:31Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-03-30T22:20:31Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=0478a05320ff7bc4257633bc945bd750864d68d4'/>
<id>urn:sha1:0478a05320ff7bc4257633bc945bd750864d68d4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore(deps): Update to eye-declare v0.2.0 (#3355)</title>
<updated>2026-03-27T17:45:04Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-03-27T17:45:04Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=bc9e62e8e24f5e218acd471404455ef57bc7d752'/>
<id>urn:sha1:bc9e62e8e24f5e218acd471404455ef57bc7d752</id>
<content type='text'>
eye-declare v0.2.0 includes two relevant changes:

* "Capture-phase" event handling lets us remove the special-case event
handling in `InputBox` that allowed global keyboard binds to work; the
`AtuinAi` component now handles this directly.
* `Tracked::read()` allows reading fields in tracked state without
triggering the dirty-tracking from the `DerefMut` implementation,
allowing us to send messages on the app event bus without marking the
containing state as dirty.</content>
</entry>
<entry>
<title>feat: Use eye-declare for more performant and flexible AI TUI (#3343)</title>
<updated>2026-03-27T02:19:47Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-03-27T02:19:47Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=b649a7ab8de6488c1341e94c37d032c07d5b3f13'/>
<id>urn:sha1:b649a7ab8de6488c1341e94c37d032c07d5b3f13</id>
<content type='text'>
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.

&lt;img width="1203" height="633" alt="image"
src="https://github.com/user-attachments/assets/159ee447-9a2a-4edd-b56e-a79bf1aaaa94"
/&gt;</content>
</entry>
</feed>
