{"record":{"id":"76a4a64d480dfb5c","repo":"yamadashy/repomix","slug":"force-can-only-be-used-with-skill-generate","errorCode":null,"errorMessage":"--force can only be used with --skill-generate","messagePattern":"--force can only be used with --skill-generate","errorType":"exception","errorClass":"RepomixError","httpStatus":null,"severity":"error","filePath":"src/cli/actions/defaultAction.ts","lineNumber":98,"sourceCode":"  directories: string[],\n  cwd: string,\n  cliOptions: CliOptions,\n  progressCallback?: RepomixProgressCallback,\n): Promise<DefaultActionRunnerResult> => {\n  logger.trace('Loaded CLI options:', redactOptionsForLog(cliOptions));\n\n  // Build the merged config (migration + file config + CLI options)\n  const config = await buildMergedConfig(cwd, cliOptions);\n\n  // Validate conflicting options\n  validateConflictingOptions(config);\n\n  // Validate --skill-output and --force require --skill-generate\n  if (cliOptions.skillOutput && config.skillGenerate === undefined) {\n    throw new RepomixError('--skill-output can only be used with --skill-generate');\n  }\n  if (cliOptions.force && config.skillGenerate === undefined) {\n    throw new RepomixError('--force can only be used with --skill-generate');\n  }\n  if (cliOptions.skillProjectName !== undefined && config.skillGenerate === undefined) {\n    throw new RepomixError('--skill-project-name can only be used with --skill-generate');\n  }\n\n  // Validate --skill-output is not empty or whitespace only\n  if (cliOptions.skillOutput !== undefined && !cliOptions.skillOutput.trim()) {\n    throw new RepomixError('--skill-output path cannot be empty');\n  }\n  if (cliOptions.skillProjectName !== undefined && !cliOptions.skillProjectName.trim()) {\n    throw new RepomixError('--skill-project-name cannot be empty');\n  }\n\n  // Validate skill generation options and prompt for location\n  if (config.skillGenerate !== undefined) {\n    // Resolve skill name: use pre-computed name (from remoteAction) or generate from directory\n    cliOptions.skillName ??=\n      typeof config.skillGenerate === 'string'","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/yamadashy/repomix/blob/f465ad909315a22120636baf03fa5e28701a50cb/src/cli/actions/defaultAction.ts#L80-L116","documentation":"--force (which lets the skill generator overwrite an existing skill directory) is only meaningful together with --skill-generate. runDefaultAction rejects a standalone --force so users cannot unknowingly enable destructive overwrites in normal packing mode. The check runs before any filesystem work in runDefaultAction (src/cli/actions/defaultAction.ts:98).","triggerScenarios":"Executing `repomix --force` without --skill-generate; scripts exporting repomix() wrappers that always append --force; config merging where cliOptions.force is true but skillGenerate is undefined.","commonSituations":"Reusing a skill-generation command line from documentation but deleting the --skill-generate part; CI templates where --force was added for skill regeneration; users assuming --force relates to overwriting repomix output files generally.","solutions":["Use `repomix --skill-generate --force --skill-output <path>` when you intend to overwrite a skill directory.","If no skill is intended, drop --force; standard packing does not require it.","Review CI scripts/aliases for a hardcoded --force flag unrelated to your current invocation."],"exampleFix":"// before\nrepomix --force\n// after\nrepomix --skill-generate --skill-output ./skill --force","handlingStrategy":"validation","validationCode":"if (args.includes('--force') && !args.includes('--skill-generate')) {\n  args = args.filter(a => a !== '--force');\n}","typeGuard":"const canUseForce = (argv: string[]): boolean => !argv.includes('--force') || argv.includes('--skill-generate');","tryCatchPattern":"try {\n  await repomixRun(args);\n} catch (e) {\n  if (String(e.message).includes('--force can only be used with --skill-generate')) {\n    throw new Error('Drop --force or add --skill-generate');\n  }\n  throw e;\n}","preventionTips":["Only use --force in skill-generation commands; never add it 'for safety' elsewhere.","Keep --force next to --skill-generate in your scripts so the pairing is visually obvious.","Audit CI templates for stray --force flags."],"tags":["cli","argument-validation","repomix"],"backgroundTag":"incompatible-cli-flags","analyzedSha":"f465ad909315a22120636baf03fa5e28701a50cb","analyzedAt":"2026-08-29T01:27:42.024Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}