From 461ef4c43589c6ca68176c180fd04f2755c9f036 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Thu, 23 Apr 2026 13:43:01 -0700 Subject: feat: Add skill discovery, loading, and invocation (#3444) Adds a skills system that lets users define reusable LLM instructions as `SKILL.md` files with YAML frontmatter. --- crates/atuin-ai/src/tui/view/turn.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'crates/atuin-ai/src/tui/view/turn.rs') diff --git a/crates/atuin-ai/src/tui/view/turn.rs b/crates/atuin-ai/src/tui/view/turn.rs index 98ae5eff..9f4460eb 100644 --- a/crates/atuin-ai/src/tui/view/turn.rs +++ b/crates/atuin-ai/src/tui/view/turn.rs @@ -151,6 +151,8 @@ pub(crate) enum ToolRenderData { query: String, filter_modes: Vec, }, + /// Skill loading — read-only, auto-approved. + SkillLoad { _name: String }, /// Server-side tool — no client rendering data available. Remote, } @@ -257,6 +259,15 @@ impl<'a> TurnBuilder<'a> { ConversationEvent::SystemContext { .. } => { // Not rendered in the TUI — only sent to the API } + ConversationEvent::SkillInvocation { + name, arguments, .. + } => { + let display = match arguments { + Some(args) => format!("/{name} {args}"), + None => format!("/{name}"), + }; + self.add_user_message(&display); + } } } @@ -459,6 +470,9 @@ impl<'a> TurnBuilder<'a> { query: history.query.clone(), filter_modes: history.filter_modes.clone(), }, + ClientToolCall::LoadSkill(skill) => ToolRenderData::SkillLoad { + _name: skill.name.clone(), + }, } } else { // Not in tracker → server-side tool -- cgit v1.3.1