Install any skill in seconds. Free to start, no credit card required.
Get Started Free →M1 Part 2 workspace migration — guided walkthrough that scans legacy state across sources A (repo-root), B (~/.sutando/workspace/), C ($SUTANDO_WORKSPACE env-override), surfaces collisions, gets owner greenlight, commits, verifies, and (if sutando-plus + sync configured) re-routes the vault .git via sutando-migrate-sync.sh. Wraps scripts/sutando-migrate.sh for agent-invoked use; bash entry path remains available.
.claude/skills/sonichi-sutando-migrate/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 154% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 86% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 80% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 29% | 0% |
Guided workspace migration for existing users (M1 Part 2). Reach for this when:
<repo>/{notes,state,results,...}/, ~/.sutando/workspace/, or a custom $SUTANDO_WORKSPACE-pointed path) and wants it folded into the M0 canonical <repo>/workspace/Usage: /sutando-migrate [--auto]
--auto proceeds without per-step greenlight. Without it the skill waits for owner OK at each phase boundary.
Run bash scripts/sutando-migrate.sh scan --json. Parse the JSON for:
identical_content (drop-dup, no action) + mtime_only_diff (commit's newest-mtime auto-resolves) + size_mismatch (REAL content conflicts — owner attention)Present a concise 4–6 line summary to owner via:
osascript -e 'display notification "scan ready: N actionable / M ignorable" with title "Sutando-Migrate"')Wait for greenlight unless --auto.
If owner says go:
bash scripts/sutando-migrate.sh commit (no --delete-source; honors workspace_m1_no_auto_commit)After commit, the script prints the phase-2 footer ("After ~7d run --commit --delete-source --backup-id <id>"). Acknowledge it; don't run delete-source automatically.
bash scripts/sutando-migrate.sh verify — confirms hash + count match per indexed source-file entryDetect whether the user has the sync engine configured:
~/Documents/github/sutando-plus/scripts/sync-workspace.sh (or ${SUTANDO_PLUS_DIR:-}/scripts/sync-workspace.sh).git with a remoteIf both: run bash $SUTANDO_PLUS_DIR/scripts/sutando-migrate-sync.sh --dry-run first; show owner the plan; on greenlight run without --dry-run. Reports vault remote intact + restart instruction.
If either missing: skip this phase silently; OSS users don't need it.
Summarize end-state to owner:
workspace_m1_no_auto_commit)bash scripts/sutando-migrate.sh rollback --backup-id <id>)--delete-source after ~7d observation)python3 src/health-check.py and note: the legacy-state-detected warning WILL still fire — that's expected. The default commit preserves sources (matches workspace_m1_no_auto_commit + the (b)-style reader-fallback contract). The warning only clears after the two-phase phase 2 (commit --delete-source --backup-id <id> after ~7d observing no source-side writes). Mention this to owner: nag-clearance is intentional follow-up, not an unfixed bug.Write a build_log entry summarizing what migrated.
scan fails to find any source: report "no migration needed; you're already on M0" and exit.commit partial-fail mid-file (rsync interrupt etc.): rollback via the just-created backup-id, report the failure path, exit.verify mismatch: report which sources failed, suggest rollback or --force re-commit (the latter only if owner confirms the diff is OK).sutando-migrate-sync.sh fails post-commit: data is at dest; just sync is broken. Suggest manual cd <ws>; git init; git remote add origin <vault-url>; git push -u origin <hostname> as the recovery path. Don't auto-rollback data.The script (scripts/sutando-migrate.sh) is the engine — operator-invocable from any shell. This SKILL adds:
/sutando-migrate is more memorable than bash scripts/sutando-migrate.sh scanOSS users with sufficient bash literacy use the script directly. Most owners use the skill.
--auto unless explicitly directed by owner.feedback_workspace_m1_no_auto_commit: this skill modifies workspace DATA but never runs git commit against the repo. Owner reviews any code changes (e.g. CLAUDE.md updates that may need to follow migration) manually.feedback_design_quality: surface the COMPLETE per-phase outcome to owner, don't suppress non-blocking warnings.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→fail | 14,724 | 2,743 | -81% | 1 | 1 | 0% | 2,736 | 1,783 | -35% | 0 | 0 | — |
case-01 | fail→fail | 7,647 | 10,636 | +39% | 1 | 1 | 0% | 1,283 | 1,825 | +42% | 0 | 0 | — |
case-02 | fail→fail | 9,440 | 3,198 | -66% | 1 | 1 | 0% | 1,763 | 1,852 | +5% | 0 | 0 | — |
case-04 | fail→pass | 10,866 | 1,660 | -85% | 1 | 1 | 0% | 678 | 1,725 | +154% | 0 | 0 | — |
case-05 | pass→pass | 6,619 | 1,971 | -70% | 1 | 1 | 0% | 1,149 | 1,821 | +58% | 0 | 0 | — |
case-06 | fail→pass | 8,121 | 5,720 | -30% | 1 | 1 | 0% | 1,281 | 2,388 | +86% | 0 | 0 | — |
case-07 | pass→pass | 8,562 | 4,713 | -45% | 1 | 1 | 0% | 1,307 | 2,251 | +72% | 0 | 0 | — |
case-08 | pass→pass | 7,952 | 3,969 | -50% | 1 | 1 | 0% | 1,205 | 2,107 | +75% | 0 | 0 | — |
case-09 | fail→pass | 28,127 | 2,508 | -91% | 1 | 1 | 0% | 1,642 | 1,932 | +18% | 0 | 0 | — |
case-10 | pass→pass | 5,628 | 2,939 | -48% | 1 | 1 | 0% | 923 | 1,957 | +112% | 0 | 0 | — |
case-11 | pass→pass | 9,626 | 6,058 | -37% | 1 | 1 | 0% | 1,435 | 2,498 | +74% | 0 | 0 | — |
case-12 | fail→pass | 6,595 | 2,370 | -64% | 1 | 1 | 0% | 1,003 | 1,809 | +80% | 0 | 0 | — |
case-13 | fail→pass | 11,183 | 4,099 | -63% | 1 | 1 | 0% | 1,668 | 2,145 | +29% | 0 | 0 | — |
case-14 | pass→pass | 9,354 | 3,079 | -67% | 1 | 1 | 0% | 1,391 | 2,029 | +46% | 0 | 0 | — |
case-15 | pass→pass | 10,038 | 3,441 | -66% | 1 | 1 | 0% | 1,240 | 2,060 | +66% | 0 | 0 | — |
case-16 | pass→pass | 12,798 | 3,259 | -75% | 1 | 1 | 0% | 1,930 | 1,947 | +1% | 0 | 0 | — |
case-17 | pass→pass | 3,485 | 1,817 | -48% | 1 | 1 | 0% | 452 | 1,791 | +296% | 0 | 0 | — |
case-18 | fail→pass | 5,821 | 1,942 | -67% | 1 | 1 | 0% | 967 | 1,770 | +83% | 0 | 0 | — |
case-19 | pass→pass | 6,725 | 2,377 | -65% | 1 | 1 | 0% | 931 | 1,906 | +105% | 0 | 0 | — |
case-20 | pass→pass | 6,182 | 5,132 | -17% | 1 | 1 | 0% | 1,122 | 2,383 | +112% | 0 | 0 | — |
case-21 | pass→pass | 10,524 | 6,865 | -35% | 1 | 1 | 0% | 1,711 | 2,697 | +58% | 0 | 0 | — |
case-22 | fail→pass | 6,278 | 4,550 | -28% | 1 | 1 | 0% | 1,052 | 2,343 | +123% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 20 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.