aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-ai/src/tui/view/turn.rs
diff options
context:
space:
mode:
authorMichelle Tilley <michelle@michelletilley.net>2026-04-23 13:43:01 -0700
committerGitHub <noreply@github.com>2026-04-23 13:43:01 -0700
commit461ef4c43589c6ca68176c180fd04f2755c9f036 (patch)
treec646ea272d6016533c4941592f9a22baa2a54488 /crates/atuin-ai/src/tui/view/turn.rs
parentfeat: Send user-defined context with `TERMINAL.md` (#3443) (diff)
downloadatuin-461ef4c43589c6ca68176c180fd04f2755c9f036.zip
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.
Diffstat (limited to 'crates/atuin-ai/src/tui/view/turn.rs')
-rw-r--r--crates/atuin-ai/src/tui/view/turn.rs14
1 files changed, 14 insertions, 0 deletions
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<HistorySearchFilterMode>,
},
+ /// 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