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/stream.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'crates/atuin-ai/src/stream.rs') diff --git a/crates/atuin-ai/src/stream.rs b/crates/atuin-ai/src/stream.rs index 19d287e7..e7155a08 100644 --- a/crates/atuin-ai/src/stream.rs +++ b/crates/atuin-ai/src/stream.rs @@ -100,6 +100,7 @@ pub(crate) fn create_chat_stream( client_ctx: ClientContext, send_cwd: bool, last_command: Option, + user_contexts: Vec, ) -> std::pin::Pin> + Send>> { Box::pin(async_stream::stream! { ensure_crypto_provider(); @@ -115,10 +116,18 @@ pub(crate) fn create_chat_stream( let context = client_ctx.to_json(send_cwd, last_command.as_deref()); + let mut config = serde_json::json!({ + "capabilities": request.capabilities, + }); + + if !user_contexts.is_empty() { + config["user_contexts"] = serde_json::json!(user_contexts); + } + let mut request_body = serde_json::json!({ "messages": request.messages, "context": context, - "capabilities": request.capabilities, + "config": config, "invocation_id": request.invocation_id }); -- cgit v1.3.1