aboutsummaryrefslogtreecommitdiffstats
path: root/crates (unfollow)
Commit message (Collapse)Author
2026-06-10chore: Remove more (kinda) useless stuffBenedikt Peetz
2026-06-10chore: Turn all `allow`s into into `expect`sBenedikt Peetz
2026-06-10chore: Remove more useless codeBenedikt Peetz
2026-06-10chore: Remove some unused rust codeBenedikt Peetz
2026-06-08feat: Capture command output + expose to new `atuin_output` tool (#3510)Michelle Tilley
2026-06-04chore: update GitHub app token formatChris Rose
2026-05-27fix: Atuin hangs when attempting to spawn daemon from Ctrl+R invocation (#3502)Michelle Tilley
This PR fixes a shell hang when daemon autostart happens from the interactive search widget. The bash/zsh/fish integrations run `atuin search -i` under command substitution and swap stdout/stderr so the TUI can draw to the terminal while the selected command is captured: ```sh 3>&1 1>&2 2>&3 ``` This leaves fd 3 open in the atuin search process. If search autostarts the daemon, the spawned long-running `atuin daemon start --daemonize` inherits fd 3, the command-substitution pipe, so the shell keeps waiting for EOF until the daemon is killed. The fix: close fd 3 after the swap in the non-tmux bash/zsh/fish paths: ```sh 3>&1 1>&2 2>&3 3>&- ``` Tested on zsh; I still need to confirm for bash and fish. Near as I can tell, the other shell integrations don't need this change. Fixes #3499
2026-05-19Allow overriding model with env var (#3493)Michelle Tilley
This PR allows overriding the Atuin AI model for feature-flagged users with the `ATUIN_AI__MODEL` environment variable. Any OpenRouter model is accepted; it's recommended to include an explicit `openrouter:` provider prefix, so models with colons in their names are interpreted correctly, e.g. `ATUIN_AI__MODEL=openrouter:deepseek/deepseek-v4-flash:free`.
2026-05-14refactor: pull `fn into_utc` into atuin-server-database crate (#3487)John Oxley
The `fn into_utc` was defined in both `atuin-server-postgres` and `atuin-server-sqlite`, with tests being in the postgres crate. This pulls the function into the `atuin-server-database` crate along with the tests and references it from both crates. ## 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
2026-05-14refactor: Implement From<sqlx::Error> and clean up fix_error (#3484)John Oxley
In the database crates for atuin-server, there is `fn fix_error`. This PR implements `From<sqlx::Error>` on `DbError` which makes it possible to mostly use `?` to bubble up the errors. There are cases where `?` is not being used e.g. ```rust async fn get_session(&self, token: &str) -> DbResult<Session> { sqlx::query_as("select id, user_id, token from sessions where token = $1") .bind(token) .fetch_one(&self.pool) .await .map_err(fix_error) .map(|DbSession(session)| session) } ``` There are two options ## 1. Use `Into::into` ```rust async fn get_session(&self, token: &str) -> DbResult<Session> { sqlx::query_as("select id, user_id, token from sessions where token = $1") .bind(token) .fetch_one(&self.pool) .await .map_err(fix_error) .map(|DbSession(session)| session) } ``` ## 2. Create a variable and use `?` ```rust async fn get_session(&self, token: &str) -> DbResult<Session> { let session = sqlx::query_as("select id, user_id, token from sessions where token = $1") .bind(token) .fetch_one(&self.pool) .await .map(|DbSession(session)| session)?; Ok(session) } ``` I chose to do option 1 as it was just a find/replace but say the word and I'll convert them all to option 2 ## 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
2026-05-12chore(release): prepare for release 18.16.1 (#3476)Ellie Huxtable
## 18.16.1 ### Bug Fixes - *(shell/xonsh)* Use os.devnull instead of hard-coded /dev/null ([#3464](https://github.com/atuinsh/atuin/issues/3464)) - Atuin update on windows ([#3453](https://github.com/atuinsh/atuin/issues/3453)) - Ensure local key matches remote data before syncing ([#3474](https://github.com/atuinsh/atuin/issues/3474)) ### Documentation - Add related projects section to README ### Features - *(ui)* Prominent banner for wrong-key errors at login/sync ([#3475](https://github.com/atuinsh/atuin/issues/3475)) ### Miscellaneous Tasks - Generate LLM-optimized docs ([#3468](https://github.com/atuinsh/atuin/issues/3468)) - Rename 'atuin hex' to 'atuin pty-proxy' ([#3473](https://github.com/atuinsh/atuin/issues/3473))
2026-05-12feat(ui): prominent banner for wrong-key errors at login/sync (#3475)Ellie Huxtable
The wrong-key error was a long unwrapped sentence buried under "Successfully authenticated.", and wrapped by eyre error formatting add - print_error(title, description) — red box-drawn bars across the terminal width (capped at 100 cols) with bold title; word-wraps the description; plain "Error:" header when stderr isn't a TTY. - format_sync_error(SyncError) -> eyre::Report — intercepts WrongKey to print the banner and exit(1) so eyre's footer never runs; forwards other variants unchanged. Use it from: - account/login.rs — replaces bail\! in the wrong-key path - command/client/sync.rs — .map_err(format_sync_error)? on sync() - store/push.rs and store/pull.rs — .map_err on check_encryption_key ## 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
2026-05-12fix: ensure local key matches remote data before syncing (#3474)Ellie Huxtable
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
2026-05-11chore: Rename 'atuin hex' to 'atuin pty-proxy' (#3473)Michelle Tilley
2026-05-05fix(shell/xonsh): use os.devnull instead of hard-coded /dev/null (#3464)Sai Asish Y
Refiles a previously-closed PR (#3463) that was closed in error after the force-push. Same fix; new branch. Uses inline `@(os.devnull)` per @ltrzesniewski's suggestion in #3463. Fixes #3462. Signed-off-by: SAY-5 <saiasish.cnp@gmail.com> Co-authored-by: SAY-5 <saiasish.cnp@gmail.com>
2026-05-04fix: atuin update on windows (#3453)Lucas Trzesniewski
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
2026-04-28chore(release): prepare for release 18.16.0 (#3457)Michelle Tilley
2026-04-24chore(release): prepare for release 18.16.0-beta.1 (#3450)Michelle Tilley
2026-04-24chore: Update to eye_declare 0.5.1 (#3449)Michelle Tilley
2026-04-23perf: Reduce AI TUI rendering overhead for long conversations (#3447)Michelle Tilley
Fixes keystroke lag in Atuin AI that scales with conversation length. After extended use (many turns, lots of tool calls with output viewports), pressing a key had noticeable delay before the letter appeared. Three layers of optimization: - **Skip `sync_view_state` for `InputUpdated`** — every keystroke was cloning all events, tools, and archived data even though no FSM state changed. Uses `handle.update_tracked()` (eye_declare 0.5) to skip rebuilds when values haven't actually changed. - **Pre-compute turns and `has_command` on the driver thread** — the view function was rebuilding the full turn structure from raw events and scanning for `suggest_command` tool calls 3× per render frame. Now computed once per FSM state change and cached in ViewState. - **Commit-based element tree pruning** — turns that scroll into terminal scrollback are tracked via `on_commit` and filtered from the element tree, keeping rendering work proportional to visible content. Turn views are now direct children of the root VStack (not nested inside AtuinAi) so `detect_committed` can see them.
2026-04-23feat: Add skill discovery, loading, and invocation (#3444)Michelle Tilley
Adds a skills system that lets users define reusable LLM instructions as `SKILL.md` files with YAML frontmatter.
2026-04-23feat: Send user-defined context with `TERMINAL.md` (#3443)Michelle Tilley
This PR adds the ability to inject user-defined content into Atuin AI requests, a la `AGENTS.md` or `CLAUDE.md`. * `.atuin/TERMINAL.md` (or alternatively just `TERMINAL.md`) is checked in every directory from the cwd up to the root * `~/.config/atuin/TERMINAL.md` (or equivalent config dir) is also checked * Supports Claude-style ``` !`` ``` and ```` ```!...``` ```` style shell interpolation
2026-04-23fix: minor issues with fish's vim mode(s) (#3362)Aditya Bhargava
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.
2026-04-21fix: require all subcommands covered for shell allow rules (#3440)Michelle Tilley
2026-04-21feat: shell tool execution timeouts (#3437)Michelle Tilley
2026-04-21fix: shell tool preview stuck as Running after completion (#3436)Michelle Tilley
2026-04-21chore: Use cat -n format for read_file tool (#3435)Michelle Tilley
2026-04-21refactor: Replace ad-hoc dispatch with FSM + driver architecture (#3434)Michelle Tilley
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.
2026-04-21feat: Implement write_file tool with overwrite safety (#3432)Michelle Tilley
## Summary Implements the `write_file` client-side tool — creates new files or overwrites existing ones with an explicit `overwrite` flag for safety. - **Overwrite flag**: Writing to an existing file without `overwrite: true` returns an error directing the LLM to set the flag or use `edit_file` for targeted changes. Prevents accidental overwrites. - **Snapshots**: Existing files are backed up before overwriting (same infrastructure as `edit_file`). - **Content preview**: Completed writes show the first 10 lines in gray with line numbers, plus "+ N more lines" for longer files. - **Atomic writes**: Uses `tempfile` + fsync + rename (same as `edit_file`). - **File tracker update**: After writing, the file is registered in the tracker so subsequent `edit_file` calls work without a separate read. - **Permission**: Shares the `"Write"` rule with `edit_file` — one permission covers both tools.
2026-04-21feat: AI tool rendering overhaul + edit_file tool (#3423)Michelle Tilley
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.
2026-04-21chore: update to rust 1.95 (#3426)Ellie Huxtable
<!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## 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
2026-04-16chore(release): prepare for release 18.15.2 (#3421)Michelle Tilley
## 18.15.2 ### Bug Fixes - Tab doesn't insert suggested command ([#3420](https://github.com/atuinsh/atuin/issues/3420))
2026-04-16fix: Tab doesn't insert suggested command (#3420)Michelle Tilley
2026-04-15chore(release): prepare for release 18.15.1 (#3419)Michelle Tilley
2026-04-15fix: Enter runs suggested command when selecting permissions (#3418)Michelle Tilley
2026-04-15chore(release): prepare for release 18.15.0 (#3417)Michelle Tilley
2026-04-14fix: loss of loading spinners + tokio panic on exit (#3415)Michelle Tilley
2026-04-15feat: Allow resuming previous AI sessions (#3407)Michelle Tilley
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. <img width="1055" height="593" alt="image" src="https://github.com/user-attachments/assets/3f9ff01a-ef64-44a9-b0e2-3a4252c5746f" /> ## 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.
2026-04-14fix: dependency fix (#3414)Michael Zeller
This was commented out in #3413 and needs to be fixed back up. It's possible we can drop this line altogether if CI passed before without it. ## 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
2026-04-14feat: Enable atuin hex for illumos (#3413)Michael Zeller
This bumps the `portable-pty` dep which itself has a dependency on a newer termios that knows about illumos. Unless this was pinned for a particular reason I think this is fine. With this dep bumped we can enable `atuin hex` on illumos. ## 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
2026-04-13chore(release): prepare for release 18.14.1 (#3405)Ellie Huxtable
<!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## 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
2026-04-13fix: Thread remote and content_length through system for server tool calls ↵Michelle Tilley
(#3404)
2026-04-13fix: ensure we can publish to crates (#3403)Ellie Huxtable
include_str won't work outside of the crate boundary. Crates is so frustrating sometimes. <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## 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
2026-04-13chore(release): prepare for release 18.14.0 (#3401)Ellie Huxtable
<!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## 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
2026-04-13refactor: rename examples -> contrib (#3400)Ellie Huxtable
<!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## 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
2026-04-13feat: add pi hook installer (#3398)Ellie Huxtable
Support installing the pi extension via `atuin hook install pi`. Bundle the extension in the binary and update the docs. <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## 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
2026-04-13feat: remove agent search from tui (#3397)Ellie Huxtable
This is essentially not a useful place to search agent history Right now, using the CLI is the best way to explore this. We are looking into building another TUI for searching records more widely and in more detail ## 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
2026-04-11feat: track coding agent shell usage (#3388)Ellie Huxtable
https://github.com/user-attachments/assets/7868c7a4-6a91-4c93-ac6a-e8665cf1f799 ## 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
2026-04-11fix: ensure daemon is running (#3384)Ellie Huxtable
Instead of only ensuring the daemon is running as part of writing history, route all calls through a function that ensures it's running if an error occurs. This fixes the case where a system boots, no commands run, and the user tries to search history. <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## 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
2026-04-11feat: add history tail for live monitoring view (#3389)Ellie Huxtable
Useful for watching what agents are doing, or viewing live info from other machines. Regardless I am liking it for debugging ## 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