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
- Pass --from-config (or --from-data-dir/--from-instance) pointing at a DIFFERENT instance holding the seed data.
- Inspect the pending marker's sourceConfigPath and correct it if it erroneously equals the target.
- 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
- Always pass --from-config pointing at a distinct instance.
- Inspect the pending marker's sourceConfigPath before reseeding.
- Re-run init with a correct source if the marker is wrong.
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
- Use either --from <worktree> or --from-config/--from-data-di
- Target config ${input.configPath} does not look like a workt
- Resolved worktree path ${directPath} does not contain .paper
- Resolved worktree "${selector}" does not look like a Papercl
- Source and target Paperclip configs are the same. Choose dif
AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12).
Data as JSON: /api/errors/c8b152182f78bfd4.
Report an issue: GitHub.