Skip to content

Commit 8f8a106

Browse files
FelixIsaacclaude
andcommitted
feat: add reset, destroy, unlink lifecycle commands
- reset: wipe ~/.claude-sync (with confirmation) - reset --keep-key: preserve key, wipe rest - destroy: alias for reset - unlink: disconnect remote, keep local data 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 051dc52 commit 8f8a106

3 files changed

Lines changed: 138 additions & 0 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ claude-code-sync pull
100100
| `import-key` | Import private key on new machine |
101101
| `export-key` | Display private key for backup |
102102
| `verify` | Verify file integrity |
103+
| `reset` | Delete all sync data (⚠️ deletes key!) |
104+
| `reset --keep-key` | Reset but preserve your private key |
105+
| `unlink` | Disconnect from remote repo (keep local data) |
103106
| `help` | Show help |
104107

105108
## What Gets Synced

claude-code-sync

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,67 @@ cmd_verify() {
538538
fi
539539
}
540540

541+
cmd_reset() {
542+
local keep_key=false
543+
for arg in "$@"; do
544+
[[ "$arg" == "--keep-key" || "$arg" == "-k" ]] && keep_key=true
545+
done
546+
547+
if [[ ! -d "$SYNC_DIR" ]]; then
548+
log_info "Nothing to reset - ~/.claude-sync does not exist."
549+
return
550+
fi
551+
552+
echo ""
553+
echo -e "${YELLOW}This will delete:${NC}"
554+
if $keep_key; then
555+
echo " - $REPO_DIR (local repo)"
556+
echo " - $CONFIG_FILE (config)"
557+
echo " - $BACKUP_DIR (backups)"
558+
echo ""
559+
echo -e "${GREEN}Your key will be PRESERVED at $KEY_FILE${NC}"
560+
else
561+
echo -e " ${RED}- $SYNC_DIR (everything including your private key!)${NC}"
562+
echo ""
563+
echo -e "${RED}WARNING: If you haven't backed up your key, you will lose access${NC}"
564+
echo -e "${RED}to any encrypted configs in your repo!${NC}"
565+
fi
566+
echo ""
567+
568+
read -rp "Type 'yes' to confirm: " confirm
569+
if [[ "$confirm" != "yes" ]]; then
570+
log_info "Aborted."
571+
return
572+
fi
573+
574+
if $keep_key; then
575+
[[ -d "$REPO_DIR" ]] && rm -rf "$REPO_DIR"
576+
[[ -f "$CONFIG_FILE" ]] && rm -f "$CONFIG_FILE"
577+
[[ -d "$BACKUP_DIR" ]] && rm -rf "$BACKUP_DIR"
578+
[[ -f "$LOCK_FILE" ]] && rm -f "$LOCK_FILE"
579+
log_success "Reset complete. Key preserved. Run 'claude-code-sync init <repo-url>' to reconnect."
580+
else
581+
rm -rf "$SYNC_DIR"
582+
log_success "Reset complete. All sync data removed."
583+
fi
584+
}
585+
586+
cmd_unlink() {
587+
if [[ ! -d "$REPO_DIR" ]]; then
588+
log_info "No repo linked."
589+
return
590+
fi
591+
592+
if git -C "$REPO_DIR" remote | grep -q origin; then
593+
git -C "$REPO_DIR" remote remove origin
594+
[[ -f "$CONFIG_FILE" ]] && rm -f "$CONFIG_FILE"
595+
log_success "Unlinked from remote. Local repo preserved at $REPO_DIR"
596+
log_info "To link to a new repo: git -C $REPO_DIR remote add origin <new-url>"
597+
else
598+
log_info "No remote configured."
599+
fi
600+
}
601+
541602
cmd_version() {
542603
echo "claude-code-sync v$VERSION"
543604
}
@@ -557,6 +618,9 @@ COMMANDS:
557618
import-key Import private key on new machine
558619
export-key Display private key for backup
559620
verify Verify file integrity
621+
reset Delete all sync data (WARNING: deletes key!)
622+
reset --keep-key Reset but preserve your private key
623+
unlink Disconnect from remote repo (keep local data)
560624
version Show version
561625
help Show this help
562626
@@ -611,6 +675,9 @@ main() {
611675
import-key) cmd_import_key "$@" ;;
612676
export-key) cmd_export_key "$@" ;;
613677
verify) cmd_verify "$@" ;;
678+
reset) cmd_reset "$@" ;;
679+
destroy) cmd_reset "$@" ;; # Alias for reset
680+
unlink) cmd_unlink "$@" ;;
614681
version|-v|--version) cmd_version ;;
615682
help|-h|--help) cmd_help ;;
616683
*) die "Unknown command: $cmd. Run 'claude-code-sync help' for usage." ;;

claude-code-sync.ps1

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,65 @@ function Invoke-Verify {
556556
}
557557
}
558558

559+
function Invoke-Reset {
560+
param([switch]$KeepKey)
561+
562+
if (-not (Test-Path $SYNC_DIR)) {
563+
Write-Info "Nothing to reset - ~/.claude-sync does not exist."
564+
return
565+
}
566+
567+
Write-Host ""
568+
Write-Host "This will delete:" -ForegroundColor Yellow
569+
if ($KeepKey) {
570+
Write-Host " - $REPO_DIR (local repo)"
571+
Write-Host " - $CONFIG_FILE (config)"
572+
Write-Host " - $BACKUP_DIR (backups)"
573+
Write-Host ""
574+
Write-Host "Your key will be PRESERVED at $KEY_FILE" -ForegroundColor Green
575+
} else {
576+
Write-Host " - $SYNC_DIR (everything including your private key!)" -ForegroundColor Red
577+
Write-Host ""
578+
Write-Host "WARNING: If you haven't backed up your key, you will lose access" -ForegroundColor Red
579+
Write-Host "to any encrypted configs in your repo!" -ForegroundColor Red
580+
}
581+
Write-Host ""
582+
583+
$confirm = Read-Host "Type 'yes' to confirm"
584+
if ($confirm -ne "yes") {
585+
Write-Info "Aborted."
586+
return
587+
}
588+
589+
if ($KeepKey) {
590+
if (Test-Path $REPO_DIR) { Remove-Item -Recurse -Force $REPO_DIR }
591+
if (Test-Path $CONFIG_FILE) { Remove-Item -Force $CONFIG_FILE }
592+
if (Test-Path $BACKUP_DIR) { Remove-Item -Recurse -Force $BACKUP_DIR }
593+
if (Test-Path $LOCK_FILE) { Remove-Item -Force $LOCK_FILE }
594+
Write-Success "Reset complete. Key preserved. Run 'claude-code-sync init <repo-url>' to reconnect."
595+
} else {
596+
Remove-Item -Recurse -Force $SYNC_DIR
597+
Write-Success "Reset complete. All sync data removed."
598+
}
599+
}
600+
601+
function Invoke-Unlink {
602+
if (-not (Test-Path $REPO_DIR)) {
603+
Write-Info "No repo linked."
604+
return
605+
}
606+
607+
$remotes = & git -C $REPO_DIR remote 2>$null
608+
if ($remotes -contains "origin") {
609+
& git -C $REPO_DIR remote remove origin
610+
if (Test-Path $CONFIG_FILE) { Remove-Item -Force $CONFIG_FILE }
611+
Write-Success "Unlinked from remote. Local repo preserved at $REPO_DIR"
612+
Write-Info "To link to a new repo: git -C $REPO_DIR remote add origin <new-url>"
613+
} else {
614+
Write-Info "No remote configured."
615+
}
616+
}
617+
559618
function Show-Version {
560619
Write-Host "claude-code-sync v$VERSION"
561620
}
@@ -575,6 +634,9 @@ COMMANDS:
575634
import-key Import private key on new machine
576635
export-key Display private key for backup
577636
verify Verify file integrity
637+
reset Delete all sync data (WARNING: deletes key!)
638+
reset --keep-key Reset but preserve your private key
639+
unlink Disconnect from remote repo (keep local data)
578640
version Show version
579641
help Show this help
580642
@@ -606,6 +668,12 @@ switch ($Command.ToLower()) {
606668
"import-key" { Invoke-ImportKey }
607669
"export-key" { Invoke-ExportKey }
608670
"verify" { Invoke-Verify }
671+
"reset" {
672+
$keepKey = $Arguments -contains "--keep-key" -or $Arguments -contains "-k"
673+
Invoke-Reset -KeepKey:$keepKey
674+
}
675+
"destroy" { Invoke-Reset } # Alias for reset
676+
"unlink" { Invoke-Unlink }
609677
"version" { Show-Version }
610678
"-v" { Show-Version }
611679
"--version" { Show-Version }

0 commit comments

Comments
 (0)