summaryrefslogtreecommitdiff
path: root/internal/cli/root.go
diff options
context:
space:
mode:
authorClaudomator Agent <agent@claudomator>2026-03-10 04:36:19 +0000
committerClaudomator Agent <agent@claudomator>2026-03-10 04:36:19 +0000
commit8873187921c55d94be56364bf0b9d6b2d12127c2 (patch)
treecc277db491104ebec5645e1a0422be9d5d4cafd2 /internal/cli/root.go
parent7d6943c5f9f4124c652377148a35bea5f61be4bf (diff)
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 <noreply@anthropic.com>
Diffstat (limited to 'internal/cli/root.go')
-rw-r--r--internal/cli/root.go19
1 files changed, 19 insertions, 0 deletions
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