paperclipai/paperclip · error · Error

Source and target Paperclip configs are the same. Pass --fro

Error message

Source and target Paperclip configs are the same. Pass --from-config for the source instance.

What it means

Thrown by ensureWorktreeSeeded when the resolved source config path and the target config path are the same. Reseeding requires a distinct source instance to copy data from; seeding from the instance onto itself is a no-op at best and a data-corruption risk at worst, so it is rejected.

Source

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

      return { seeded: false, reason: "complete_marker" };
    }
    if (!existsSync(markers.pending)) {
      // Worktrees created before lazy seeding shipped were seeded eagerly and
      // have neither marker. Preserve that compatibility without re-cloning.
      return { seeded: false, reason: "legacy_unmarked" };
    }

    const pending = readWorktreeSeedPendingMarker(markers.pending);
    const sourceConfigPath = opts.fromConfig || opts.fromDataDir || opts.fromInstance
      ? resolveSourceConfigPath({
          fromConfig: opts.fromConfig,
          fromDataDir: opts.fromDataDir,
          fromInstance: opts.fromInstance,
        })
      : path.resolve(pending.sourceConfigPath);

    if (path.resolve(sourceConfigPath) === path.resolve(configPath)) {
      throw new Error(
        "Source and target Paperclip configs are the same. Pass --from-config for the source instance.",
      );
    }

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

    const targetRoot = path.dirname(path.dirname(configPath));
    const targetPaths = resolveWorktreeReseedTargetPaths({ configPath, rootPath: targetRoot });
    const seedDatabase = dependencies.seedDatabase ?? seedWorktreeDatabase;
    const details = await seedDatabase({
      sourceConfigPath,

View on GitHub (pinned to 67001ec6eb)

Solutions

  1. Pass --from-config (or --from-data-dir/--from-instance) pointing at a DIFFERENT instance holding the seed data.
  2. Inspect the pending marker's sourceConfigPath and correct it if it erroneously equals the target.
  3. Re-run `paperclipai worktree init` with a valid source so the marker records a distinct source.

Example fix

# before
paperclipai worktree reseed --from-config ./worktree/.paperclip/config.json
# after
paperclipai worktree reseed --from-config ~/.paperclip/instances/default/config.json
Defensive patterns

Strategy: validation

Validate before calling

function sourceDiffersFromTarget(sourceConfigPath: string, targetConfigPath: string): boolean {
  return path.resolve(sourceConfigPath) !== path.resolve(targetConfigPath);
}

Prevention

When it happens

Trigger: Running reseed without --from-config while the pending marker's sourceConfigPath happens to equal the target config path; explicitly passing --from-config pointing at the same config as the target; resolving the source via the default which lands on the target.

Common situations: Pending marker written with source equal to target (bug or manual edit); user assumes reseed defaults to a different instance but it resolves to the same one; copy-paste of the target path into --from-config.

Related errors


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