Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Migrates the supported subset of an existing Warp GUI setup into Warp Agent CLI without exposing credentials or application state. Use in Warp Agent CLI when a user wants to copy or move compatible settings or global file-based MCP servers from the desktop app, set up Warp Agent CLI from an existing GUI installation, or understand which Warp data is already shared.
.claude/skills/warpdotdev-tui-migrate-setup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 27% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 343% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 187% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 65% | 0% |
Guide the user through a narrow, local migration. Treat the GUI files as untrusted inputs and preserve the Warp Agent CLI destination. Read references/migration-matrix.md before starting.
Use these host-provided paths. Do not substitute ~/.warp or infer another channel/profile:
{{settings_schema_path}}{{gui_settings_file_path}}{{tui_settings_file_path}}{{gui_mcp_config_file_path}}{{tui_mcp_config_file_path}}If any rendered path is empty, unresolved, or still contains double braces, stop that part of the migration and report that the current installation could not resolve it. In particular, fail closed when the GUI source profile is ambiguous. If the rendered schema or either helper script is missing, report a build artifact defect and stop. Do not substitute alternate paths or inspect configuration files directly.
cat, grep, a shell expansion, or an ad hocscript to inspect either MCP config. Only scripts/merge_mcp_config.py may read those files. Its output is intentionally limited to counts, booleans, status codes, and a fingerprint.
environment variables, or values. Do not ask the user to paste them.
items, secure storage, SQLite rows, MCP installation/running state, or OAuth state. Templatable/gallery MCP installations must be reinstalled in Warp Agent CLI, and authenticated servers must be reauthenticated there.
project-scoped or third-party MCP files because doing so changes scope and working-directory behavior.
x-warp-surfaces annotation is the source of truth; a setting is eligible only when its array contains both gui and tui.
approves that exact conflict. Preserve destination comments, unknown keys, and settings exclusive to Warp Agent CLI.
Limit inspection to the categories the user actually requested. For an MCP-only request, do not inspect settings. For a request limited to templatable/gallery installations, OAuth, credentials, or another unsupported category, explain the supported Warp Agent CLI setup path without running either file inspector.
Briefly summarize the four migration categories from the matrix:
shared paths. Drive objects, saved prompts, and cloud execution profiles appear after Warp Agent CLI login and sync.
global file-based MCP definitions, can be imported.
reauthentication or reinstallation.
preferences, GUI state, command history, and databases are unsupported.
Do not claim that logging into Warp Agent CLI migrates local files.
Run Python 3.11 or newer. If tomllib is unavailable, explain that settings inspection is unsupported in this runtime; do not fall back to reading the GUI settings file into model context.
Run the settings inspector:
shpython3 "{{skill_dir}}/scripts/inspect_shared_settings.py" \ --schema "{{settings_schema_path}}" \ --source "{{gui_settings_file_path}}" \ --destination "{{tui_settings_file_path}}"
The JSON output contains only eligible setting paths and their GUI and Warp Agent CLI values. Do not independently open the GUI settings file.
Run the MCP helper in dry-run mode:
shpython3 "{{skill_dir}}/scripts/merge_mcp_config.py" \ --source "{{gui_mcp_config_file_path}}" \ --destination "{{tui_mcp_config_file_path}}" \ --dry-run
Retain the returned fingerprint exactly for the apply step. A dry run never creates a file or backup.
For settings, present only the eligible dotted names and values emitted by the inspector. Group them as:
default.
Call out that agent permission settings can expand what commands, file reads, or other actions are approved automatically. For a machine-local file allowlist, offer a source path only after checking that the path is valid on this host. Exclude nonexistent or host-inapplicable paths from the proposal.
For MCP, report only the helper's redacted counts: eligible additions, destination conflicts, definitions skipped because they may contain literal credentials, definitions requiring reinstallation, and whether anything would change. Include the helper's exact fingerprint verbatim in the proposal and approval prompt so a later apply is bound to the reviewed inputs; the fingerprint is opaque and does not reveal config contents. Never infer or reveal identities from the counts.
Ask for explicit approval before mutation. Approval must separately cover:
If the user approves only some settings, edit only those settings. Destination values win all unapproved conflicts.
Before editing, reject a symlink at the Warp Agent CLI settings path. If the destination exists, create a timestamped backup beside it and restrict the backup to the current user on Unix. If it does not exist, create it with user-only permissions on Unix.
Read only the Warp Agent CLI destination and edit it in place. Add or update only approved shared dotted keys. Preserve its comments, formatting outside the edited keys, unknown keys, and values exclusive to Warp Agent CLI. Do not regenerate or replace the whole TOML document. If a safe surgical edit is not possible, stop and explain why rather than using a lossy TOML serializer.
Pass the exact dry-run fingerprint:
shpython3 "{{skill_dir}}/scripts/merge_mcp_config.py" \ --source "{{gui_mcp_config_file_path}}" \ --destination "{{tui_mcp_config_file_path}}" \ --apply \ --fingerprint "<dry-run fingerprint>"
If either file changed after preview, the helper rejects the fingerprint without writing. Run a fresh dry run and ask for approval again. The destination wins all name conflicts; do not offer an overwrite mode.
Rerun the settings inspector and MCP dry run. Confirm that approved settings now match and the MCP helper reports no remaining eligible additions. Do not inspect MCP files directly to verify.
Report:
required;
behavior.
If verification fails, leave backups intact and report the sanitized helper status. Never expose file contents while troubleshooting.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 22,457 | 14,860 | -34% | 1 | 1 | 0% | 1,082 | 3,073 | +184% | 0 | 0 | — |
case-02 | fail→fail | 13,091 | 11,391 | -13% | 1 | 1 | 0% | 1,064 | 2,497 | +135% | 0 | 0 | — |
case-03 | fail→fail | 51,912 | 15,387 | -70% | 1 | 1 | 0% | 3,073 | 4,525 | +47% | 0 | 0 | — |
case-04 | fail→pass | 14,487 | 5,879 | -59% | 1 | 1 | 0% | 2,268 | 2,589 | +14% | 0 | 0 | — |
case-05 | fail→pass | 13,804 | 7,369 | -47% | 1 | 1 | 0% | 2,239 | 2,838 | +27% | 0 | 0 | — |
case-06 | pass→pass | 11,420 | 8,336 | -27% | 1 | 1 | 0% | 1,754 | 3,175 | +81% | 0 | 0 | — |
case-07 | pass→pass | 9,468 | 8,218 | -13% | 1 | 1 | 0% | 1,227 | 2,813 | +129% | 0 | 0 | — |
case-08 | fail→pass | 21,695 | 7,609 | -65% | 1 | 1 | 0% | 656 | 2,907 | +343% | 0 | 0 | — |
case-09 | fail→pass | 6,938 | 9,493 | +37% | 1 | 1 | 0% | 1,150 | 3,299 | +187% | 0 | 0 | — |
case-10 | fail→pass | 12,812 | 8,286 | -35% | 1 | 1 | 0% | 1,900 | 3,129 | +65% | 0 | 0 | — |
case-11 | fail→fail | 14,175 | 6,053 | -57% | 1 | 1 | 0% | 2,201 | 2,617 | +19% | 0 | 0 | — |
case-12 | fail→pass | 15,598 | 127,420 | +717% | 1 | 1 | 0% | 2,260 | 2,622 | +16% | 0 | 0 | — |
case-13 | pass→pass | 12,888 | 4,414 | -66% | 1 | 1 | 0% | 972 | 2,409 | +148% | 0 | 0 | — |
case-14 | fail→pass | 14,428 | 12,311 | -15% | 1 | 1 | 0% | 2,260 | 3,926 | +74% | 0 | 0 | — |
case-15 | fail→fail | 14,679 | 7,603 | -48% | 1 | 1 | 0% | 2,306 | 3,139 | +36% | 0 | 0 | — |
case-16 | fail→pass | 14,268 | 9,115 | -36% | 1 | 1 | 0% | 2,149 | 3,075 | +43% | 0 | 0 | — |
case-17 | pass→pass | 8,519 | 7,083 | -17% | 1 | 1 | 0% | 1,262 | 2,383 | +89% | 0 | 0 | — |
case-18 | pass→pass | 14,998 | 7,015 | -53% | 1 | 1 | 0% | 2,399 | 3,052 | +27% | 0 | 0 | — |
case-19 | pass→pass | 30,999 | 2,970 | -90% | 1 | 1 | 0% | 1,598 | 2,114 | +32% | 0 | 0 | — |
case-20 | fail→pass | 15,359 | 7,029 | -54% | 1 | 1 | 0% | 2,275 | 2,879 | +27% | 0 | 0 | — |
case-21 | fail→pass | 12,408 | 6,007 | -52% | 1 | 1 | 0% | 1,904 | 2,730 | +43% | 0 | 0 | — |
case-22 | fail→pass | 9,525 | 6,715 | -30% | 1 | 1 | 0% | 1,433 | 2,777 | +94% | 0 | 0 | — |
case-23 | fail→pass | 19,209 | 4,414 | -77% | 1 | 1 | 0% | 1,827 | 2,361 | +29% | 0 | 0 | — |
case-24 | fail→pass | 10,148 | 7,278 | -28% | 1 | 1 | 0% | 1,407 | 2,958 | +110% | 0 | 0 | — |
case-25 | fail→pass | 21,048 | 4,379 | -79% | 1 | 1 | 0% | 2,112 | 2,371 | +12% | 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. 25 cases were attempted, and 23 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 +56 percentage points is the difference between those two pass rates over the 23 comparable cases.
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.