From b121b73d07df389d324b3a8f27066661a6609618 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Thu, 23 Apr 2026 13:29:58 -0700 Subject: feat: Send user-defined context with `TERMINAL.md` (#3443) 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 --- crates/atuin-ai/src/driver.rs | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'crates/atuin-ai/src/driver.rs') diff --git a/crates/atuin-ai/src/driver.rs b/crates/atuin-ai/src/driver.rs index 3acb9798..b5e1c275 100644 --- a/crates/atuin-ai/src/driver.rs +++ b/crates/atuin-ai/src/driver.rs @@ -775,6 +775,13 @@ async fn run_stream_bridge( use crate::stream::{StreamContent, StreamControl, StreamFrame, create_chat_stream}; use futures::StreamExt; + // Gather user context files (TERMINAL.md) and interpolate commands. + let shell = client_ctx.shell.as_deref().unwrap_or("sh"); + let start_dir = std::env::current_dir().unwrap_or_default(); + let global_ctx_path = crate::user_context::global_context_path(); + let user_contexts = + crate::user_context::gather(&start_dir, Some(&global_ctx_path), shell).await; + let stream = create_chat_stream( app_ctx.endpoint.clone(), app_ctx.token.clone(), @@ -782,6 +789,7 @@ async fn run_stream_bridge( client_ctx, app_ctx.send_cwd, app_ctx.last_command.clone(), + user_contexts, ); futures::pin_mut!(stream); -- cgit v1.3.1