diff --git a/cmd/olliesrv/internal/agent/prompt_resolver.go b/cmd/olliesrv/internal/agent/prompt_resolver.go index 97bfe54..29c06ba 100644 --- a/cmd/olliesrv/internal/agent/prompt_resolver.go +++ b/cmd/olliesrv/internal/agent/prompt_resolver.go @@ -49,6 +49,7 @@ func resolvePrompt(p Prompt, cwd string, env []string) (string, error) { } // envLookup returns a lookup function that checks env slice first, then os env. +// Provides XDG spec defaults when variables are unset. func envLookup(env []string) func(string) string { m := make(map[string]string, len(env)) for _, e := range env { @@ -56,11 +57,24 @@ func envLookup(env []string) func(string) string { m[k] = v } } + home, _ := os.UserHomeDir() return func(key string) string { if v, ok := m[key]; ok { return v } - return os.Getenv(key) + if v := os.Getenv(key); v != "" { + return v + } + // XDG spec defaults + switch key { + case "XDG_CONFIG_HOME": + return home + "/.config" + case "XDG_DATA_HOME": + return home + "/.local/share" + case "XDG_CACHE_HOME": + return home + "/.cache" + } + return "" } } diff --git a/cmd/olliesrv/internal/agent/runtime.go b/cmd/olliesrv/internal/agent/runtime.go index b38c5a0..3641a33 100644 --- a/cmd/olliesrv/internal/agent/runtime.go +++ b/cmd/olliesrv/internal/agent/runtime.go @@ -100,12 +100,18 @@ func renderTools(infos []toolsrv.ToolInfo) string { if ti.Description == "" { continue } - sb.WriteString("## ") - sb.WriteString(ti.Name) - sb.WriteString("\n\n") if ti.Prompt != "" { + // If prompt already starts with a markdown header, skip the generated one. + if !strings.HasPrefix(ti.Prompt, "#") { + sb.WriteString("## ") + sb.WriteString(ti.Name) + sb.WriteString("\n\n") + } sb.WriteString(ti.Prompt) } else { + sb.WriteString("## ") + sb.WriteString(ti.Name) + sb.WriteString("\n\n") sb.WriteString(ti.Description) } sb.WriteString("\n\n")