Skip to content

fix(ai): dispatch skills registered in the slash command registry - #3593

Merged
BinaryMuse merged 1 commit into
mainfrom
mkt/fix-skill-dispatch
Jul 8, 2026
Merged

fix(ai): dispatch skills registered in the slash command registry#3593
BinaryMuse merged 1 commit into
mainfrom
mkt/fix-skill-dispatch

Conversation

@BinaryMuse

Copy link
Copy Markdown
Member

Since #3525, resolve_skill_name required a skill's name to be absent from the slash command registry (so built-ins take precedence), but every skill is registered there for autocomplete; every skill invocation fell through to "Unknown command".

This PR decides precedence with an is_builtin flag on SlashCommand instead of registry membership, and extracts the predicate into a testable function with regression coverage.

Since #3525, resolve_skill_name required a skill's name to be absent
from the slash command registry (so built-ins take precedence), but
every skill is registered there for autocomplete — so every skill
invocation fell through to "Unknown command".

Decide precedence with an is_builtin flag on SlashCommand instead of
registry membership, and extract the predicate into a testable
function with regression coverage.
@BinaryMuse
BinaryMuse requested a review from taylordotfish July 8, 2026 22:35
@greptile-apps

greptile-apps Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Skills registered in the slash command registry for autocomplete were incorrectly blocked from dispatching because the old predicate treated registry membership as exclusionary. This PR fixes that by adding an is_builtin flag to SlashCommand and keying precedence on that flag instead.

  • SlashCommand::builtin() constructor and contains_builtin() method replace the old contains() check, correctly allowing non-builtin (skill-backed) commands to dispatch.
  • Three unit tests cover the regression, the builtin-wins case, and the unregistered-name case.

Confidence Score: 5/5

Straightforward targeted fix with good regression coverage; no risk to unrelated paths.

The change is narrow and well-contained: one new struct field, one constructor, one renamed method, and three tests that directly validate the corrected behavior. All existing builtins are updated to use the new constructor.

No files require special attention.

Important Files Changed

Filename Overview
crates/atuin-ai/src/tui/slash.rs Adds is_builtin flag to SlashCommand, a builtin() constructor, and replaces contains() with contains_builtin(). All existing built-in commands updated correctly.
crates/atuin-ai/src/driver.rs Extracts is_skill_command predicate that uses contains_builtin instead of contains, fixing skill dispatch. Three regression tests cover the key cases.

Reviews (1): Last reviewed commit: "fix(ai): dispatch skills registered in t..." | Re-trigger Greptile

@BinaryMuse
BinaryMuse merged commit 663a28d into main Jul 8, 2026
26 checks passed
@BinaryMuse
BinaryMuse deleted the mkt/fix-skill-dispatch branch July 8, 2026 22:43
taylordotfish pushed a commit that referenced this pull request Jul 9, 2026
### Bug Fixes

- *(ai)* Dispatch skills registered in the slash command registry
([#3593](#3593))
- *(ci)* Fossier install in scan workflow
([#3485](#3485))
- *(i18n)* Fix typos in Russian localization
([#3575](#3575))
- *(nu)* Use `char -u 1b` for ESC in OSC 133 sequences
([#3530](#3530))
- *(nu)* Suppress error when `ATUIN_HISTORY_ID` is missing in
`pre_prompt` hook
([#3587](#3587))
- *(pi)* Observe tool events instead of registering a bash tool
([#3557](#3557))
- *(pty-proxy)* Set `$SHELL` to the spawned shell
([#3548](#3548))
- *(search)* Fix terminal clearing with latest Ratatui
([#3578](#3578))
- *(sync)* Skip records that fail to decrypt or decode instead of
failing the whole store
([#3569](#3569))
- Atuin hangs when attempting to spawn daemon from Ctrl+R invocation
([#3502](#3502))
- Capture session ID from stream headers rather than final event
([#3531](#3531))
- Doctor resiliency fo runknown platforms + openbsd warning
([#3551](#3551))
- Double input on arrow keys in AI setup prompt on Windows
([#3552](#3552))
- Exclude AI agent commands from zsh-autosuggestions
([#3567](#3567))
- Silence shellcheck SC2016 on literal `$all-user` author filter
- Respect `store_failed` when using daemon
([#3571](#3571))


### Documentation

- Highlight `Ctrl-r` keybinding on docs page
([#3489](#3489))
- Document store purge workflow
([#3544](#3544))
- Fix command example typo in documentation
([#3536](#3536))
- Make commented-out lines in `config.toml` match real defaults
([#3583](#3583))
- Add fish shell cleanup step to uninstall instructions
([#3582](#3582))


### Features

- *(doctor)* Add whether daemon is enabled to `doctor` output
([#3572](#3572))
- *(pty-proxy)* Add `--shell` flag to override the spawned shell
([#3327](#3327))
- Setup fossier to stop bot slop prs
([#3482](#3482))
- Capture command output + expose to new `atuin_output` tool
([#3510](#3510))
- Cache user contexts on load until `/reload`
([#3525](#3525))
- Create database integration tests for atuin-server
([#3514](#3514))
- Add `/model` slash command for changing models
([#3576](#3576))
- Add mcp server for history tools and expand search filters
([#3581](#3581))
- Add status bar with model and usage information
([#3591](#3591))


### Miscellaneous Tasks

- *(rustdoc)* Fix Rustdoc warnings
([#3585](#3585))
- *(warnings)* Fix compile warnings with latest dependencies
([#3586](#3586))
- Vouch for all existing contributors
([#3486](#3486))
- Update GitHub app token format
- Update to Rust 1.96.1
([#3568](#3568))
- Adopt `derive_more` to reduce boilerplate across the codebase
([#3573](#3573))


### Performance

- *(search)* Scan history by recency until N unique
([#3553](#3553))
- Add `synchronous(Normal)` + `optimize_on_close` to record store SQLite
([#3577](#3577))
- Remove unnecessary clones in a hot path
([#3580](#3580))


### Refactor

- Implement `From<sqlx::Error>` and clean up `fix_error`
([#3484](#3484))
- Pull `fn into_utc` into `atuin-server-database` crate
([#3487](#3487))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants