diff --git a/.grok/settings.json b/.grok/settings.json new file mode 100644 index 0000000..a2d9deb --- /dev/null +++ b/.grok/settings.json @@ -0,0 +1,3 @@ +{ + "model": "grok-code-fast-1" +} \ No newline at end of file diff --git a/cmd/query.go b/cmd/query.go new file mode 100644 index 0000000..ca450a5 --- /dev/null +++ b/cmd/query.go @@ -0,0 +1,53 @@ +package cmd + +import ( + "github.com/fatih/color" + "github.com/spf13/cobra" + "gmgauthier.com/grokkit/config" + "gmgauthier.com/grokkit/internal/grok" +) + +var queryCmd = &cobra.Command{ + Use: "query [question]", + Short: "One-shot non-interactive query to Grok (programming focused)", + Long: `Ask Grok a single technical question and get a concise, actionable answer. + +Default mode is factual and brief. Use --wordy for longer, more explanatory answers.`, + Args: cobra.MinimumNArgs(1), + Run: runQuery, +} + +func init() { + queryCmd.Flags().Bool("wordy", false, "Give a longer, more detailed answer") + rootCmd.AddCommand(queryCmd) +} + +func runQuery(cmd *cobra.Command, args []string) { + wordy, _ := cmd.Flags().GetBool("wordy") + question := args[0] + + // Use fast model by default for quick queries + model := config.GetModel("query", "") + + client := grok.NewClient() + + systemPrompt := `You are Grok, a helpful and truthful AI built by xAI. +Focus on programming, software engineering, and technical questions. +Be concise, factual, and actionable. Include code snippets when helpful. +Do not add unnecessary fluff.` + + if wordy { + systemPrompt = `You are Grok, a helpful and truthful AI built by xAI. +Give thorough, detailed, textbook-style answers to technical questions. +Explain concepts clearly, include examples, and allow light humour where appropriate. +Be comprehensive but still clear and well-structured.` + } + + messages := []map[string]string{ + {"role": "system", "content": systemPrompt}, + {"role": "user", "content": question}, + } + + color.Yellow("Asking Grok...") + client.Stream(messages, model) +} diff --git a/cmd/root.go b/cmd/root.go index e647115..ce766df 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -60,6 +60,7 @@ func init() { rootCmd.AddCommand(docsCmd) rootCmd.AddCommand(testgenCmd) rootCmd.AddCommand(scaffoldCmd) + rootCmd.AddCommand(queryCmd) // Add model flag to all commands rootCmd.PersistentFlags().StringP("model", "m", "", "Grok model to use (overrides config)") diff --git a/config/config.go b/config/config.go index b9063d2..372547c 100644 --- a/config/config.go +++ b/config/config.go @@ -36,6 +36,7 @@ func Load() { viper.SetDefault("commands.prdescribe.model", "grok-4") viper.SetDefault("commands.review.model", "grok-4") viper.SetDefault("commands.docs.model", "grok-4") + viper.SetDefault("commands.query.model", "grok-4-1-fast-non-reasoning") // Config file is optional, so we ignore read errors _ = viper.ReadInConfig()