<feed xmlns='http://www.w3.org/2005/Atom'>
<title>atuin/crates/atuin-client/src, 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-client/src?h=main</id>
<link rel='self' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/atom/crates/atuin-client/src?h=main'/>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/'/>
<updated>2026-06-10T22:54:30Z</updated>
<entry>
<title>chore: Move everything into one big crate</title>
<updated>2026-06-10T22:54:30Z</updated>
<author>
<name>Benedikt Peetz</name>
<email>benedikt.peetz@b-peetz.de</email>
</author>
<published>2026-06-10T22:54:30Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8'/>
<id>urn:sha1:5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8</id>
<content type='text'>
That helps remove duplicated code and rustc/cargo will now also show
dead code correctly.
</content>
</entry>
<entry>
<title>chore: Somewhat simplify sync code</title>
<updated>2026-06-10T21:12:17Z</updated>
<author>
<name>Benedikt Peetz</name>
<email>benedikt.peetz@b-peetz.de</email>
</author>
<published>2026-06-10T21:12:17Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=9eb2ffb2e9b52cdec70acb268e7a12131811db10'/>
<id>urn:sha1:9eb2ffb2e9b52cdec70acb268e7a12131811db10</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: Turn all `allow`s into into `expect`s</title>
<updated>2026-06-10T20:28:10Z</updated>
<author>
<name>Benedikt Peetz</name>
<email>benedikt.peetz@b-peetz.de</email>
</author>
<published>2026-06-10T20:28:10Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=b4011176cc4b68aed77a6946610a3dcf3b938e95'/>
<id>urn:sha1:b4011176cc4b68aed77a6946610a3dcf3b938e95</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: Remove more useless code</title>
<updated>2026-06-10T20:26:10Z</updated>
<author>
<name>Benedikt Peetz</name>
<email>benedikt.peetz@b-peetz.de</email>
</author>
<published>2026-06-10T20:26:10Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=989f01ad230423c5a5105d6c9ff8580020e902ed'/>
<id>urn:sha1:989f01ad230423c5a5105d6c9ff8580020e902ed</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: Capture command output + expose to new `atuin_output` tool (#3510)</title>
<updated>2026-06-08T16:12:45Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-06-08T16:12:45Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=bcdf8c8cde31e826000f1b2d6eeaebdd865a07c1'/>
<id>urn:sha1:bcdf8c8cde31e826000f1b2d6eeaebdd865a07c1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: update GitHub app token format</title>
<updated>2026-06-04T07:33:00Z</updated>
<author>
<name>Chris Rose</name>
<email>offline@offby1.net</email>
</author>
<published>2026-06-04T07:33:00Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=c54d4921662acb372666885037febb5cfde81977'/>
<id>urn:sha1:c54d4921662acb372666885037febb5cfde81977</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: ensure local key matches remote data before syncing (#3474)</title>
<updated>2026-05-12T20:45:02Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@atuin.sh</email>
</author>
<published>2026-05-12T20:45:02Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=8c8730e1d559442832a794c91471bd3a0426e856'/>
<id>urn:sha1:8c8730e1d559442832a794c91471bd3a0426e856</id>
<content type='text'>
We rely on the user to manage their keys. This is ok, and is
intentionally part of our security model

However. If the user messes up, they corrupt their remote store. It is
possible to work around and fix, but not without difficulty. This change
ensures that if the local key does not match the remote data, no data is
synced and the user has a chance to fix it before breaking things.

## Checks
- [ ] I am happy for maintainers to push small adjustments to this PR,
to speed up the review cycle
- [ ] I have checked that there are no existing pull requests for the
same thing</content>
</entry>
<entry>
<title>fix: atuin update on windows (#3453)</title>
<updated>2026-05-04T20:12:12Z</updated>
<author>
<name>Lucas Trzesniewski</name>
<email>lucas.trzesniewski@gmail.com</email>
</author>
<published>2026-05-04T20:12:12Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=9609759d775c8851d84eadf983c51db2798ebc81'/>
<id>urn:sha1:9609759d775c8851d84eadf983c51db2798ebc81</id>
<content type='text'>
This fixes the `atuin update` command on Windows.

Windows doesn't let you overwrite a running exe, but it lets you rename
it. This PR special-cases the official `update` plugin by renaming the
running `atuin.exe` to `atuin.old` before the update, and rolling it
back if the update fails.

Note that the `atuin.old` file is left behind on success, which
shouldn't be a problem in practice: it will be overwritten on the next
call to `atuin update` (also deleted if there's no update available),
and is located in `~/.atuin/bin`, which is an isolated location specific
to Atuin.

Fixes #3451

## Checks
- [x] I am happy for maintainers to push small adjustments to this PR,
to speed up the review cycle
- [x] I have checked that there are no existing pull requests for the
same thing</content>
</entry>
<entry>
<title>feat: AI tool rendering overhaul + edit_file tool (#3423)</title>
<updated>2026-04-21T17:32:54Z</updated>
<author>
<name>Michelle Tilley</name>
<email>michelle@michelletilley.net</email>
</author>
<published>2026-04-21T17:32:54Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=0f20ee4eb871907defe7848f0d3e2203cfff057e'/>
<id>urn:sha1:0f20ee4eb871907defe7848f0d3e2203cfff057e</id>
<content type='text'>
Overhaul of how AI tool calls are modeled, rendered, and displayed in
the Atuin AI TUI. Fixes bugs in shell command output capture, implements
the `edit_file` tool with full safety infrastructure, and adds a diff
preview for edits.</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>
</feed>
