From 8873187921c55d94be56364bf0b9d6b2d12127c2 Mon Sep 17 00:00:00 2001 From: Claudomator Agent Date: Tue, 10 Mar 2026 04:36:19 +0000 Subject: cli: implement --config flag to load TOML config file The --config flag was registered but silently ignored. Now: - config.LoadFile loads a TOML file on top of defaults - PersistentPreRunE applies the file when --config is set - Explicit CLI flags (--data-dir, --claude-bin) take precedence over the file Tests: TestLoadFile_OverridesDefaults, TestLoadFile_MissingFile_ReturnsError, TestRootCmd_ConfigFile_Loaded, TestRootCmd_ConfigFile_CLIFlagOverrides, TestRootCmd_ConfigFile_Missing_ReturnsError Co-Authored-By: Claude Sonnet 4.6 --- internal/cli/root.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'internal/cli/root.go') diff --git a/internal/cli/root.go b/internal/cli/root.go index ab6ac1f..7c4f2ff 100644 --- a/internal/cli/root.go +++ b/internal/cli/root.go @@ -38,7 +38,26 @@ func NewRootCmd() *cobra.Command { cmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose output") // Re-derive DBPath and LogDir after flags are parsed, so --data-dir takes effect. + // If --config is provided, load that file first; explicit CLI flags override it. cmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { + if cfgFile != "" { + // Save values set by explicit CLI flags before overwriting cfg from file. + flagDataDir := cfg.DataDir + flagClaudeBin := cfg.ClaudeBinaryPath + + loaded, err := config.LoadFile(cfgFile) + if err != nil { + return err + } + *cfg = *loaded + + if cmd.Flags().Changed("data-dir") { + cfg.DataDir = flagDataDir + } + if cmd.Flags().Changed("claude-bin") { + cfg.ClaudeBinaryPath = flagClaudeBin + } + } cfg.DBPath = filepath.Join(cfg.DataDir, "claudomator.db") cfg.LogDir = filepath.Join(cfg.DataDir, "executions") return nil -- cgit v1.2.3