Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Adopt a full published Heydex profile by handle ('set me up like @davekilleen'). Use when the user says 'set me up like <person>', or names a handle. Not for a single workflow doc; use `diff-adopt`. Not for creating your own profile; use `diff-profile`.
.claude/skills/davekilleen-diff-adopt-profile/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 891% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 212% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 90% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -27% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 180% | 0% |
In plain English: Pulls down someone's full published Heydex profile, not just one workflow. You get the profile overview, the ordered workflow set, each methodology document, and the optional Love Letter. Then you walk the user through adopting the whole profile into their own Dex setup.
How to run it:
text/diff-adopt-profile @davekilleen /diff-adopt-profile https://heydex.ai/diff/davekilleen/
Natural-language triggers count too: when a user says "set me up like Dave" (or like any named person with a Heydex handle), treat it as /diff-adopt-profile @<their-handle>.
$ARGUMENTS must be either:
@davekilleenhttps://heydex.ai/diff/davekilleen/If missing or invalid:
text/diff-adopt-profile expects a Heydex handle or public profile URL. Examples: /diff-adopt-profile @davekilleen /diff-adopt-profile https://heydex.ai/diff/davekilleen/
Always fetch the bundle from the API host:
textGET https://gallant-reindeer-229.eu-west-1.convex.site/api/profile-bundle?handle=<handle>
Critical: the profile-adoption API lives on the DexDiff Convex deployment, gallant-reindeer-229.eu-west-1.convex.site. The website host heydex.ai serves pages only - it has no /api/* routes, and api.heydex.ai routes to the separate Dex Desktop backend. Never use either host for profile-adoption API calls. (Local stubs and rehearsals override the base with the DEXDIFF_API_BASE environment variable.)
Expected contract:
contractVersion: "2026-04-10"profileworkflows — ordered list, each with diffId, name, description, methodology, tags, roles, integrationsloveLetter — optionalDo not use the normal public profile page payload for this command. The whole point is to pull the dedicated runtime bundle.
This skill ships with scripts/adopt_profile.py (stdlib-only Python). Use it for fetch, validation, and saving - do not hand-roll HTTP calls or file writes:
bash# Step 1 of the flow (fetch + report, writes nothing): python3 <skill-dir>/scripts/adopt_profile.py @<handle> --fetch-only --json # Step 3 of the flow (save bundle + adoption log, after user consent): python3 <skill-dir>/scripts/adopt_profile.py @<handle> --json
Exit codes: 0 success, 2 bad handle, 3 network down, 4 profile not found, 5 malformed payload or server error, 6 not inside a Dex vault. Every non-zero exit prints a plain-language explanation on stdout - relay it to the user verbatim, then stop. Never improvise around a failure, and never fail silently.
If python3 is not available on the machine, fall back to fetching https://gallant-reindeer-229.eu-west-1.convex.site/api/profile-bundle?handle=<handle> yourself (WebFetch or curl), validate the contract fields listed above, and perform the same writes by hand - but say so explicitly and keep the same stop-on-failure behavior.
@handle or a profile URL both work - the script parses either).--fetch-only --json.https://heydex.ai/diff/<handle>/.warnings about v1-summary methodologies, tell the user plainly: those workflows were published in an old thin format and cannot be regenerated faithfully; offer to continue with only the full-fidelity workflows.Lead with what makes the profile useful:
text[displayName] — [role], [company] This profile contains [N] published workflows: 1. [workflow name] 2. [workflow name] ... [If loveLetter exists] WHY THIS PROFILE EXISTS "[loveLetter.text]" Want to bring this full profile into your Dex setup? [Yes] [Show me the workflows first]
If the user wants to inspect first, walk them through the workflows in order before asking again.
Before generating any local skills or hooks, run the bundled script without --fetch-only. It saves the raw hosted bundle into the user's DexDiff profile draft area and writes the adoption log in one deterministic step:
DEXDIFF_PROFILE_DRAFTS_DIR (default 04-Projects/DexDiff/beta/profile/)DEXDIFF_PROFILE_DRAFTS_DIR/adopted/<handle>/profile-bundle.jsonworkflows/01-<diff-id>.yaml, 02-<diff-id>.yaml, etc.love-letter.mdSystem/.dex/adoptions/profiles/<handle>.jsonThe log includes:
profile_handleprofile_display_nameadopted_atsourcebundle_contract_versionmanifest_pathworkflow_idsworkflow_pathslove_letter_pathRelay the script's printed file list to the user so they can see exactly what landed where. If the script exits 6 ("not a Dex vault"), the user is running from the wrong folder - help them locate their Dex vault and re-run from there.
Do one shared discovery pass for the whole profile:
Then reuse that shared context across every workflow instead of restarting discovery from scratch for each one.
Show one combined plan covering:
Keep the workflow order from the hosted bundle.
Only build after the user approves the combined plan.
For each workflow:
/diff-adoptEnd by explaining:
/diff-listgallant-reindeer-229.eu-west-1.convex.site - never the website host or api.heydex.ai.scripts/adopt_profile.py for fetch and save; do not hand-roll the deterministic steps./diff-adopt @handle/diffId.The Dex desktop app's chat lane cannot run shell commands or scripts. When the tools mcp__dex-dexdiff__dexdiff_fetch_bundle and mcp__dex-dexdiff__dexdiff_write_adoption are available, use THEM for the deterministic halves instead of scripts/adopt_profile.py:
dexdiff_fetch_bundle replaces the hosted fetch + validation step andreturns the validated bundle.
dexdiff_write_adoption replaces the file-writing + adoption-log step; itwrites atomically, never overwrites, and records the adoption server-side on completion.
The conversational halves — preview against the user's real vault, consent, adaptation, education — stay with this skill, unchanged. If neither tool is available (plain terminal), use the bundled script exactly as documented above.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 19,781 | 21,889 | +11% | 1 | 1 | 0% | 3,197 | 5,050 | +58% | 0 | 0 | — |
case-02 | fail→fail | 13,690 | 8,971 | -34% | 1 | 1 | 0% | 2,252 | 2,509 | +11% | 0 | 0 | — |
case-03 | fail→fail | 7,885 | 8,543 | +8% | 1 | 1 | 0% | 1,291 | 2,820 | +118% | 0 | 0 | — |
case-04 | fail→pass | 3,437 | 13,713 | +299% | 1 | 1 | 0% | 467 | 4,629 | +891% | 0 | 0 | — |
case-05 | fail→pass | 12,931 | 1,754 | -86% | 1 | 1 | 0% | 758 | 2,366 | +212% | 0 | 0 | — |
case-06 | pass→pass | 5,484 | 5,124 | -7% | 1 | 1 | 0% | 904 | 3,029 | +235% | 0 | 0 | — |
case-07 | fail→pass | 8,801 | 4,174 | -53% | 1 | 1 | 0% | 1,416 | 2,684 | +90% | 0 | 0 | — |
case-08 | fail→pass | 21,745 | 3,073 | -86% | 1 | 1 | 0% | 3,562 | 2,593 | -27% | 0 | 0 | — |
case-09 | pass→pass | 10,812 | 3,800 | -65% | 1 | 1 | 0% | 1,647 | 2,729 | +66% | 0 | 0 | — |
case-10 | pass→pass | 8,941 | 3,871 | -57% | 1 | 1 | 0% | 1,322 | 2,726 | +106% | 0 | 0 | — |
case-11 | fail→pass | 6,809 | 5,504 | -19% | 1 | 1 | 0% | 1,086 | 3,037 | +180% | 0 | 0 | — |
case-12 | fail→fail | 4,170 | 15,799 | +279% | 1 | 1 | 0% | 637 | 5,038 | +691% | 0 | 0 | — |
case-13 | pass→pass | 4,081 | 14,925 | +266% | 1 | 1 | 0% | 535 | 4,825 | +802% | 0 | 0 | — |
case-14 | fail→pass | 12,919 | 23,445 | +81% | 1 | 1 | 0% | 2,074 | 5,243 | +153% | 0 | 0 | — |
case-15 | fail→pass | 3,773 | 15,970 | +323% | 1 | 1 | 0% | 557 | 4,952 | +789% | 0 | 0 | — |
case-16 | fail→fail | 3,298 | 9,187 | +179% | 1 | 1 | 0% | 456 | 3,697 | +711% | 0 | 0 | — |
case-17 | fail→fail | 3,914 | 11,160 | +185% | 1 | 1 | 0% | 545 | 4,134 | +659% | 0 | 0 | — |
case-18 | pass→pass | 6,987 | 5,137 | -26% | 1 | 1 | 0% | 954 | 2,983 | +213% | 0 | 0 | — |
case-19 | fail→pass | 11,964 | 2,535 | -79% | 1 | 1 | 0% | 1,820 | 2,424 | +33% | 0 | 0 | — |
case-20 | fail→fail | 6,353 | 2,574 | -59% | 1 | 1 | 0% | 964 | 2,535 | +163% | 0 | 0 | — |
case-21 | fail→pass | 9,162 | 6,414 | -30% | 1 | 1 | 0% | 1,521 | 3,190 | +110% | 0 | 0 | — |
case-22 | pass→fail | 5,750 | 15,725 | +173% | 1 | 1 | 0% | 778 | 4,970 | +539% | 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 19 counted toward the lift figure. The other 3 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 +36 percentage points is the difference between those two pass rates over the 19 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.