aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-client (follow)
Commit message (Collapse)AuthorAge
...
* feat: Add history author/intent metadata and v1 record version (#3205)Ellie Huxtable2026-02-25
| | | | | | | | | | | | | | | | | | | | | | | | <!-- 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 - [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 Adds `author` and `intent` to client history records and DB persistence, including migration/backfill and CLI/daemon propagation. Introduces V2 record-store history version `v1` while retaining read compatibility for legacy `v0` records. Adds `--author` and `--intent` flags to `atuin history start`, plus `{author}` and `{intent}` format keys for listing/history output. Updates shell-integration docs for `ATUIN_HISTORY_AUTHOR` and `ATUIN_HISTORY_INTENT`, and updates related tests/fixtures. Validated with `cargo test -p atuin-client --lib`, `cargo test -p atuin-daemon --tests`, `cargo test -p atuin search::inspector`, and `cargo fmt --check`.
* feat: Generate commands or ask questions with `atuin ai` (#3199)Michelle Tilley2026-02-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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:──────────────────────────┐ │ │ │ > 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:──────────────────────────┐ │ │ │ > 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 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. ### 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┘ ``` ### 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:──────────────────────────┐ │ │ │ > 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 <noreply@anthropic.com>
* chore(release): prepare for release 18.13.0-beta.1 (#3187)Ellie Huxtable2026-02-13
| | | | | | | | | | | | <!-- 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
* feat: add autostart and pid management to daemon (#3180)Ellie Huxtable2026-02-13
|
* feat: add Atuin AI inline CLI MVP (#3178)Michelle Tilley2026-02-13
|
* feat: add Hub authentication for future sync + extra features (#3010)Ellie Huxtable2026-02-12
|
* feat: `switch-context` (#3149)Lucas Trzesniewski2026-02-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This PR lets you change the current search context to the one of the currently selected command, which lets you easily see the surrounding commands of its session. It adds the following: - `switch-context` and `clear-context` actions - A `has-context` condition - `CTX:` and `C>` prefixes to show we're in another context The `switch-context` behavior is as follows: - The selected command defines the new context - The filter mode is automatically switched to SESSION - The search input is cleared, which gives you a full overview of the other commands executed in the same session - The command which triggered this mode keeps being selected to get a clear overview - The filter mode can be changed to modes such as DIRECTORY, but not to GLOBAL or SESSION+ as IMO those would be confusing in this mode This lets you easily navigate between modes and commands the way you prefer, for instance by switching the context through selected commands or switching back to the default mode with the same key. This could certainly still be improved (the docs are missing for instance), and if you have any feedback I can change the behavior as you see fit. I can add the docs when you'll approve the new names. Closes #2784 ## 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 --------- Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
* chore(release): prepare for release 18.12.1 (#3172)Ellie Huxtable2026-02-11
| | | | | | | | | | | | <!-- 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
* fix(shell): fix ATUIN_SESSION errors in tmux popup (#3170)Kkoi2026-02-11
| | | | | | | | | | | | | | | | | | | | | This PR fixes: + #3154 + #3164 + #3166 It changes the following: + Pass ATUIN_SESSION to tmux popup + Use `command rm` to bypass user-defined configs + Disable tmux popup by default ## 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 --------- Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
* chore(deps): Update to tiny-bip39 2.0.0 (#3151)Cristian Le2026-02-09
| | | | | | | | | | | | | | | | <!-- 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 - [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 I don't know why the previous PR https://github.com/atuinsh/atuin/pull/2643 got auto-closed after a rebase, so I am re-creating it.
* chore(release): prepare for release 18.12.0 (#3152)Ellie Huxtable2026-02-09
| | | | | | | | | | | | <!-- 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
* chore(release): prepare for release 18.12.0-beta.4 (#3139)Michelle Tilley2026-02-05
|
* chore(release): prepare for release 18.12.0-beta.3 (#3136)Ellie Huxtable2026-02-05
| | | | | | | | | | | | <!-- 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
* chore(release): prepare for release 18.12.0-beta.2 (#3133)Ellie Huxtable2026-02-05
| | | | | | | | | | | | <!-- 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
* feat: Add new custom keybinding system for search TUI (#3127)Michelle Tilley2026-02-05
|
* feat: replace several files with a sqlite db (#3128)Ellie Huxtable2026-02-04
| | | | | | | | | | | | | | | | | | | | | | | These files have been known to have corruption issues. SQLite will perform better across filesystems for reads/writes across threads, and will lock as expected. I've also put the session file in there, though I'm 50/50 on it - I'll be replacing it with keyring storage asap anyway. The key file is _not_ included. It should ~never be changed, and should be easy for the user to secure + manage themselves In the future, instead of creating more files, we can just use this as a kv store Resolves https://github.com/atuinsh/atuin/issues/2336, resolves https://github.com/atuinsh/atuin/issues/1650 ## 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
* feat: Add a parameter to the sync to specify the download/upload page (#2408)Matthias Bilger2026-02-03
| | | | | | | | | | | | | | This adds a parameter to change the upload/download page size, this could help if one gets a '413' in a selfhosted scenario. ## 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 --------- Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
* fix: halt sync loop if server returns an empty page (#3122)Ellie Huxtable2026-02-02
| | | | | | | | | | | | | We had an issue where the server was returning an empty page, when it should not, and causing the client to keep looping While such bugs should not happen, putting the client into a loop does not help ## 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
* docs: update the `[keys]` docs (#3114)Lucas Trzesniewski2026-02-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is related to: - #3090 - #1906 --- ## No longer relevant: ~I often just hold the backspace key to clear the query line in Atuin, and the change in #3090 makes it no longer possible: it accepts the current history entry instead.~ 🤯 ~It may be a muscle memory thing, but it also feels wrong to me for the left key to accept the current entry. I'd prefer for it to do nothing when the cursor is at the start of the line (I've set `exit_past_line_start = false` in my config).~ ~This PR makes the new behavior configurable: it adds an `accept_past_empty_line` setting (naming is *hard*, feel free to find a better name) which lets you disable it. It also updates the `[keys]` docs.~ BTW wouldn't setting the `accept_past_line_start` and `accept_with_backspace` settings to `true` (maybe by default) have the same effect as what #3090 introduced? ## 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
* fix: larger exit column width on Windows (#3119)Lucas Trzesniewski2026-02-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The default width of the `exit` column is 3, which matches the 0-255 values on Linux. However, on Windows it is a 32-bit integer, and can be anything from -2147483648 to 2147483647. Popular tools such as `winget` apparently make use of that. Here's an example with `columns = ["exit", "time", "duration", "directory", "command"]`: <img width="647" height="416" alt="image" src="https://github.com/user-attachments/assets/d73b0487-3c77-4049-8487-01b2aab29a44" /> This PR changes the default column width to 11 on Windows to match these values. The result is: <img width="601" height="412" alt="image" src="https://github.com/user-attachments/assets/b4b95f40-f223-400d-83c4-74d71e070b3e" /> ## 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
* chore(deps): update whoami dependency to v2 (#3118)Ben Beasley2026-01-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | <!-- 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 --> In the [2.0.0](https://github.com/ardaku/whoami/releases/tag/v2.0.0) series, `whoami` removed all infallible function variants, and removed the `fallible` module, moving those functions to the root module. Therefore, I replaced `whoami::fallible::hostname` with `whoami::hostname` (the same function with the same signature, just moved to the root module). For `whoami::username`, the infallible function that `atuin` was using before is gone, and we must add error handling. I chose to fall back to the string `"unknown-user"` if getting the username fails, just as `"unknown-host"` is already the fallback when getting the hostname fails. This seemed reasonable to me, but it’s worth double-checking if there could be any unintended consequences, especially if `unknown-user` happens to be a real, valid username on the system. The alternatives I can see would be to panic on failure or to amend the signature of `get_username()` and all of its call sites with some kind of more graceful error handling (what?). ## 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
* chore(release): prepare for release 18.12.0-beta.1 (#3113)Ellie Huxtable2026-01-28
| | | | | | | | | | | | <!-- 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
* feat: add option to use tmux display-popup (#3058)Kkoi2026-01-28
| | | | | | | | | | | | | | | | | | | | | | | | This is a "continuation" of #1177 - which was a draft that used FIFOs (named pipes) to get output from the popup, however this causes popup not being closed properly, so in this PR I use tmpfile to store the result and read after popup closes. @ellie could you review this PR please? P.S. Thank you @immae for sharing your idea! ## Feature + Option to use tmux popup window in `config.toml` + Customize window width/height in `config.toml` + Tmux display-popup for `zsh, bash, fish` ## 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 --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* chore(deps): audit ssl deps (#3110)Ellie Huxtable2026-01-27
| | | | | | | | | | | | <!-- 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
* fix: custom data dir test on windows (#3109)Ellie Huxtable2026-01-27
| | | | | | | | | | | | <!-- 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
* feat: remove user verification functionality (#3108)Ellie Huxtable2026-01-27
| | | | | | | | | | | | | | | | <!-- 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 --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* chore(deps): cleanup of dep versions (#3106)Ellie Huxtable2026-01-27
| | | | | | | | | | | | | | Ensure we aren't using multiple versions, etc <!-- 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
* fix(ui): align cursor when expand column is in the middle (#3103)依云2026-01-27
| | | | | | | | | | | | | | | | Also change the trailing space of each column to be drawn in `render_row` instead so that each column is separated by a space no matter how they are ordered. <!-- 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 - [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
* feat: support setting a custom data dir in config (#3105)Ellie Huxtable2026-01-27
| | | | | | | | | | | | <!-- 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
* chore(deps): Update to ratatui 0.30.0 (#3104)Tobias Genannt2026-01-27
| | | | | | | | | | | | <!-- 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 - [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
* feat(ui): highlight fulltext search as fulltext search instead of fuzzy ↵Ellie Huxtable2026-01-26
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | search (#3098) also parse query in one place. This supersedes #3097 and can highlight regex matches as well. <!-- 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 - [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
| * fix for inverse matchinglilydjwg2026-01-25
| |
| * fix for 'termlilydjwg2026-01-25
| |
| * feat(ui): highlight fulltext search as fulltext search instead of fuzzy searchlilydjwg2026-01-25
| | | | | | | | also parse query in one place
* | fix(ui): time column can take up to 9 cellslilydjwg2026-01-24
| |
* | fix: zsh import multiline issue (#2799)Haris Thohir2026-01-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Here is my case: ```sh curl -X POST https://example.com/api \ -H "Content-Type: application/json" \ -d '{ "username": "name", "password": "pass", "details": { "age": 30, "location": "Earth" } }' ``` Using current release version i got: ```sh curl -X POST https://example.com/api \\ -H "Content-Type: application/json" \\ -d '{\ "username": "name",\ "password": "pass",\ "details": {\ "age": 30,\ "location": "Earth"\ }\ }' ``` and i test with `echo \\` (https://github.com/atuinsh/atuin/pull/100#issuecomment-836477081) it also works; there is similar PR https://github.com/atuinsh/atuin/pull/2390, it only works on multiline with `\` suffix, in my case i got: ```sh curl -X POST https://example.com/api \ -H "Content-Type: application/json" \ -d '{\ ``` ## Checks - [x] 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
* | feat: add custom column support (#3089)Ellie Huxtable2026-01-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Configure the interactive search UI appearance. Resolves #998 ```toml [ui] columns = ["duration", "time", "command"] ``` ### `columns` Default: `["duration", "time", "command"]` Columns to display in the interactive search, from left to right. The selection indicator (`" > "`) is always shown first implicitly. Each column can be specified as: - A simple string (uses default width): `"duration"` - An object with type and optional width/expand: `{ type = "directory", width = 30 }` #### Available column types | Column | Default Width | Description | | --------- | ------------- | ----------------------------------------------- | | duration | 5 | Command execution duration (e.g., "123ms") | | time | 8 | Relative time since execution (e.g., "59m ago") | | datetime | 16 | Absolute timestamp (e.g., "2025-01-22 14:35") | | directory | 20 | Working directory (truncated if too long) | | host | 15 | Hostname | | user | 10 | Username | | exit | 3 | Exit code (colored by success/failure) | | command | * | The command itself (expands by default) | #### Column options - **type**: The column type (required when using object format) - **width**: Custom width in characters (optional, uses default if not specified) - **expand**: If `true`, the column fills remaining space. Default is `true` for `command`, `false` for others. Only one column should have `expand = true`. #### Examples ```toml # Minimal - more space for commands columns = ["duration", "command"] # With custom directory width columns = ["duration", { type = "directory", width = 30 }, "command"] # Show host for multi-machine sync users columns = ["duration", "time", "host", "command"] # Show exit codes prominently columns = ["exit", "duration", "command"] # Make directory expand instead of command columns = ["duration", "time", { type = "directory", expand = true }, { type = "command", expand = false }] ```
* | Update regex for AWS Access Key ID pattern (#3088)Daniel Rinehart2026-01-21
| |
* | chore(release): prepare for release 18.11.0 (#3051)Ellie Huxtable2026-01-12
| | | | | | | | | | | | | | | | | | | | | | | | <!-- 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
* | fix: Move thorough search through search.filters w/ workspaces (#2703)Leonidas Loucas2025-12-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Do not just pick first from search.filters, consider all options, filtering based on git-root and workspaces config Fix: atuinsh/atuin#2700 Might Fix: atuinsh/atuin#2536 Wrote a few simple unit tests, and tried it by running the client locally. Not sure about which of "[search] filters" vs "workspaces" should be more respected, so i made it so if workspaces = false, regardless of whats in "[search] filters" workspace gets filtered out. First time looking at atuins code, let me know if this needs any changes. edit: (from my post here: https://github.com/atuinsh/atuin/issues/2536#issuecomment-2808053862) ``` workspaces = true [search] filters = [ "workspace", "directory", "session", "global" ] ``` | `^R` for the ... time| in a git repo | any other dir| | ------------- | ------------- | ------------- | | first | workspace | directory| | second | directory | session| | third| session | global| | fourth | global | directory | | fifth | workspace | session| | sixth | directory | global | ![Image](https://github.com/user-attachments/assets/33150e0a-d219-44d1-8994-b1f98accdfc3) <!-- 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 - [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 - #1655 might be related, but it seems to also implement code that is already merged, and has been open for over a year, hope its ok to suggest this --------- Co-authored-by: Michelle Tilley <michelle@michelletilley.net>
* | feat: support additional history filenames in replxx importer (#3005)Waldir Pimenta2025-12-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | <!-- 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 --> The original implementation of the `replxx` importer, from PR #2024, only supported `.histfile` as a filename for the history file, since there is no default filename. However, the replxx codebase does use `replxx_history.txt` as an example history filename (see [here](https://github.com/AmokHuginnsson/replxx/blob/release-0.0.4/examples/c-api.c#L183) and [here](https://github.com/AmokHuginnsson/replxx/blob/release-0.0.4/examples/cxx-api.cxx#L383)), so this patch adds support for that as an alternative filename. The implementation was modeled after [the one](https://github.com/atuinsh/atuin/blob/v18.10.0/crates/atuin-client/src/import/zsh.rs#L29-L44) currently used for the `zsh` history file importer, which also means the `replxx` importer now produces a human-friendly error if no history file is found in the expected path(s). ## 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 /cc @amosbird who introduced this importer in #2024.
* | chore: clarify docstring of the enter_accept config key (#3003)Waldir Pimenta2025-11-26
| |
* | chore: remove trailing whitespace (#2985)Tommi Hovi2025-11-10
|/ | | | | | | | | | | | <!-- 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 - [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
* chore(release): prepare for release 18.10.0 (#2962)Ellie Huxtable2025-10-21
| | | | | | | | | | | | <!-- 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
* Revert "feat: more accurately filter secret tokens" (#2961)Ellie Huxtable2025-10-21
| | | | | Reverts atuinsh/atuin#2932 Resolves #2960
* feat: Interactive Inspector (#2319)P T Weir2025-10-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ### What does this PR do? Adds simple navigation to the inspector, to explore a session starting from a single command. This creates a new user flow, where a user can find a history entry in the interactive view (in, say, Global mode), and hit Ctrl+o to navigate back and forward through that command's session. IMAGINED USE-CASE: I remembered that I did a sequence of git steps but I can't remember the order and forgot to document it. I remember that `reflog` was involved and want to see the actual sequence, and only those commands. IMAGINED USE-CASE: I used a curl command to get my IP address for greenlisting before I connected to the bastion server `abc.xyz` over SSH - I could easily find the SSH command with abc.xyz, and go back one step in the session, but without this change, scrolling through all my curl commands ever run to find a forgotten URL/domain would be too much work. Since this gives the inspector tab a broader purpose than viewing analytics, it needs to function even when there are not enough screen rows for charts -- hence, this PR also introduces an ultracompact mode for the inspector that _just_ shows the neighbouring history commands (as simple scrolling three-entry list, with no panes) if there are fewer than `auto_hide_height` rows (default: 8). Otherwise, the inspector behaves as normal, except that Up / Down will change the focused command by navigating through the session. That means there is no "compact" mode for the inspector - when the interactive search is compact (but not ultracompact), the inspector shows its usual chart view. The UX for this could be improved - to keep this PR as lean as it realistically can be, I have tried to keep the flow very minimal, but a follow-up PR could introduce some tooltips, nicer ultracompact formatting, etc. A minor QoL improvement that comes with this - since I had to deal with bold text and would otherwise have need a theming exception, I took the opportunity to ensure the theme engine sets styles completely (so a theme can have bold), not just colours. To limit scope creep, I do not add TOML syntax so (for now) you can only customize colours from config files, but it means that default-bold text (etc.) can now use the theming engine if the code-defined default Meaning is bolded. Key changes: * introduces a simplified inspector tab, with only previous-current-next commands as rows, in compact mode * allows navigation through session history within the inspector (so compact inspector view is still useful) It also (see comments below): * makes `compact` into `compactness`, an enum (to better standardize across inspector/interactive) * makes the inspector _only_ change layout for ultracompact mode, which is still compact+(height<8) * clippy's complexity limit wanted draw split up a little, so not sure if this is a reasonable minimal way to do so for now * adds a `(none)` theme to the theming to enable output testing without styling * ~~additional tests, although keen for input on how best to do these~~ one functional test, as a starting point * ~~documentation~~ [minor doc changes only](https://github.com/atuinsh/docs/pull/72), as I am not sure there is much to say <!-- 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 --> _Was stacked on #2357, which is now in `main`_ ## 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
* chore: update rusty_paseto and rusty_paserk (#2942)Ben Beasley2025-10-20
| | | | | | | | | | | | <!-- 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 - [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
* feat: add import from PowerShell history (#2864)Lucas Trzesniewski2025-10-20
| | | | | | | | | | | | | | | | This adds an `atuin import powershell` command. Of course, it is related to #2543 but I'm submitting it as a separate PR since the code is self-contained and simple enough, and the feature could be useful on its own. /cc @ajn142 who [requested it](https://github.com/atuinsh/atuin/issues/84#issuecomment-3091692807). ## 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
* chore(release): prepare for release 18.9.0 (#2952)Ellie Huxtable2025-10-20
| | | | | | | | | | | | <!-- 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
* feat: add shell pipelines to command chaining (#2938)Lucas Trzesniewski2025-10-06
| | | | | | | | | | I wanted to use `command_chaining` to write a pipeline (`cmdA | cmdB`) and was genuinely surprised it didn't work. ## 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