paperclipai/paperclip · error · Error

Source and target Paperclip configs are the same. Choose dif

Error message

Source and target Paperclip configs are the same. Choose different --from/--to values.

What it means

Thrown by runWorktreeReseed after resolving source and target when both config paths are identical. Reseeding an instance from itself is destructive and pointless, so it is rejected. Distinct from the merge-history variant (245) because reseed accepts --from-config/--from-data-dir/--from-instance in addition to --from, so the message references '--from/--to values' broadly.

Source

Thrown at cli/src/commands/worktree.ts:3410

  } finally {
    await targetHandle.stop();
    await sourceHandle.stop();
  }
}

async function runWorktreeReseed(opts: WorktreeReseedOptions): Promise<void> {
  const seedMode = opts.seedMode ?? "full";
  if (!isWorktreeSeedMode(seedMode)) {
    throw new Error(`Unsupported seed mode "${seedMode}". Expected one of: minimal, full.`);
  }

  const targetEndpoint = opts.to
    ? resolveWorktreeEndpointFromSelector(opts.to, { allowCurrent: true })
    : resolveCurrentWorktreeEndpoint();
  const source = resolveWorktreeReseedSource(opts);

  if (path.resolve(source.configPath) === path.resolve(targetEndpoint.configPath)) {
    throw new Error("Source and target Paperclip configs are the same. Choose different --from/--to values.");
  }
  if (!existsSync(source.configPath)) {
    throw new Error(`Source config not found at ${source.configPath}.`);
  }

  const targetConfig = readConfig(targetEndpoint.configPath);
  if (!targetConfig) {
    throw new Error(`Target config not found at ${targetEndpoint.configPath}.`);
  }
  const sourceConfig = readConfig(source.configPath);
  if (!sourceConfig) {
    throw new Error(`Source config not found at ${source.configPath}.`);
  }

  const targetPaths = resolveWorktreeReseedTargetPaths({
    configPath: targetEndpoint.configPath,
    rootPath: targetEndpoint.rootPath,
  });

View on GitHub (pinned to 67001ec6eb)

Solutions

  1. Point --from / --from-config / --from-data-dir / --from-instance at a different source instance.
  2. Set --to explicitly to the worktree you want to overwrite, distinct from the source.

Example fix

// before
paperclipai worktree reseed
// after
paperclipai worktree reseed --from-config ~/.paperclip/instances/default/config.json --to /path/to/worktree --seed-mode full
Defensive patterns

Strategy: validation

Validate before calling

import path from "node:path";

function validateReseedDistinct(sourceConfigPath: string, targetConfigPath: string): void {
  if (path.resolve(sourceConfigPath) === path.resolve(targetConfigPath)) {
    throw new Error("Source and target Paperclip configs are the same. Choose different --from/--to values.");
  }
}

Prevention

When it happens

Trigger: Calling `worktree reseed` where the resolved source config path equals the resolved target config path: e.g. --from current --to current, or --from-config pointing at the target's own config.json, or --from-instance default where the target IS the default instance.

Common situations: A developer runs reseed without flags from inside the only instance (both default to current). Or they pass --from-config with a path that, after resolution, is the target config.

Related errors


AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12). Data as JSON: /api/errors/5f385a0fcc8b6ab2. Report an issue: GitHub.