yamadashy/repomix · error · RepomixError
--force can only be used with --skill-generate
Error message
--force can only be used with --skill-generate
What it means
--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).
Source
Thrown at src/cli/actions/defaultAction.ts:98
directories: string[],
cwd: string,
cliOptions: CliOptions,
progressCallback?: RepomixProgressCallback,
): Promise<DefaultActionRunnerResult> => {
logger.trace('Loaded CLI options:', redactOptionsForLog(cliOptions));
// Build the merged config (migration + file config + CLI options)
const config = await buildMergedConfig(cwd, cliOptions);
// Validate conflicting options
validateConflictingOptions(config);
// Validate --skill-output and --force require --skill-generate
if (cliOptions.skillOutput && config.skillGenerate === undefined) {
throw new RepomixError('--skill-output can only be used with --skill-generate');
}
if (cliOptions.force && config.skillGenerate === undefined) {
throw new RepomixError('--force can only be used with --skill-generate');
}
if (cliOptions.skillProjectName !== undefined && config.skillGenerate === undefined) {
throw new RepomixError('--skill-project-name can only be used with --skill-generate');
}
// Validate --skill-output is not empty or whitespace only
if (cliOptions.skillOutput !== undefined && !cliOptions.skillOutput.trim()) {
throw new RepomixError('--skill-output path cannot be empty');
}
if (cliOptions.skillProjectName !== undefined && !cliOptions.skillProjectName.trim()) {
throw new RepomixError('--skill-project-name cannot be empty');
}
// Validate skill generation options and prompt for location
if (config.skillGenerate !== undefined) {
// Resolve skill name: use pre-computed name (from remoteAction) or generate from directory
cliOptions.skillName ??=
typeof config.skillGenerate === 'string'View on GitHub (pinned to f465ad9093)
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.
Example fix
// before repomix --force // after repomix --skill-generate --skill-output ./skill --force
Defensive patterns
Strategy: validation
Validate before calling
if (args.includes('--force') && !args.includes('--skill-generate')) {
args = args.filter(a => a !== '--force');
} Type guard
const canUseForce = (argv: string[]): boolean => !argv.includes('--force') || argv.includes('--skill-generate'); Try / catch
try {
await repomixRun(args);
} catch (e) {
if (String(e.message).includes('--force can only be used with --skill-generate')) {
throw new Error('Drop --force or add --skill-generate');
}
throw e;
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- --skill-output can only be used with --skill-generate
- --skill-project-name can only be used with --skill-generate
- --skill-output path cannot be empty
- --skill-project-name cannot be empty
- When using --stdin, do not specify directory arguments. File
AI-assisted analysis of yamadashy/repomix@f465ad9093 (2026-08-29).
Data as JSON: /api/errors/76a4a64d480dfb5c.
Report an issue: GitHub.