Handshake
A brief mutual exchange that establishes the terms of subsequent collaboration. Not a friendship, not an interview — a handshake.
This skill exists because agents that don't know who they're talking to give generic answers. It exists as a separate skill — rather than relying on passive memory accrual — because deliberate calibration is structurally different from incidental capture: the user gets to see what's already known, correct it, and consent to what's added. That's the entire job.
The three-part test (front and center)
Per the agent-skills repo convention, every new skill is checked against three axes before it earns a slot. Here's where handshake lands honestly:
| Axis |
Verdict |
Notes |
| Unique structure |
Partial |
Show-then-ask is a different control flow from passive memory accrual, but the underlying memory store is shared with the auto-memory system and productivity:memory-management. |
| Unique deliverable |
No |
The output is standard user-type and project-type memory entries — same format other surfaces produce. The skill wraps the existing memory contract; it does not invent a parallel one. |
| Unique elicitation |
Yes |
Privacy-conscious, consent-gated, show-what-I-know-first, ≤4 pill + 1 free-text core, optional ≤6 project overlay, hard never-ask list. This is the load-bearing reason the skill exists. |
The skill ships because the elicitation pattern is genuinely worth ritualizing — but it stays narrow on the other two axes by deliberate design. If you find yourself extending it to invent new memory types or invent new control flows, stop and ask whether you're really still inside handshake.
What this skill does
- Phase 0 — Show what I know. Before asking anything, surfaces the most relevant existing
user-type memory entries (≤5) so the user can correct stale facts or confirm what's already on file. If memory is empty, says so plainly.
- Phase 1 — Core calibration (always runs). Asks ≤4 high-leverage pill questions about how to collaborate, plus 1 free-text "what did past assistants get wrong about you?" question. Each question explains its behavioral payoff. Writes to
user-type memory.
- Phase 2 — Project overlay (optional). If invoked with
--project, or auto-suggested when project-type memory is empty for the current work, asks ≤6 scoped questions about the project (goal, stage, stakeholders, constraints, past decisions, external resources). All skippable. Writes to project-type memory — never user-type.
- Closes with a written-to-memory summary so the user can see exactly what was captured.
What this skill does NOT do
- Does not gather project content. "Help me build a resume" needs work-history details — that is content for the resume, not preferences for how the agent works. Resume content belongs in a hypothetical
resume skill (or in normal conversation), not in handshake. The project overlay captures meta-context (stage, constraints, stakeholders), not subject-matter material.
- Does not invent a new memory store. All writes go to the existing two-tier system —
user_*.md files for personal preferences, project_*.md for project context, indexed in MEMORY.md. Same frontmatter, same conventions.
- Does not handle multi-user identity. Memory is per-Claude-instance, not per-team. If a teammate wants similar calibration, they run
/handshake on their own Claude instance. Team-shared context belongs in CLAUDE.md or a project-type entry that's committed to the repo — not in user-type memory.
- Does not auto-trigger aggressively at v1. Slash-command-only invocation. Other skills MAY suggest running it, but never invoke it silently. Auto-trigger is a Phase 2 decision gated on observed user value (per the staged-rollout principle in this repo).
- Does not ask anything on the never-ask list. Hard refusal — even if the user's prompt invites it.
When to use it
- The user invokes
/handshake directly, or asks to "calibrate" / "tune in" / "set a working agreement."
- A new project is starting and
project-type memory for it is empty — the user accepts a suggestion to run /handshake --project.
- The user has noticed the agent giving generic answers and wants to fix the input rather than the output.
- A different skill (
team-composer, brand-workshop, etc.) suggests calibration because relevant user-type memory is sparse, AND the user accepts.
When NOT to use it
- Mid-task — calibration interrupts flow. Save the suggestion for the next session.
- The user has just finished
/handshake recently. Re-invoking the same session adds noise without signal.
- The runtime has no persistent memory (the skill has nothing to write to). Tell the user instead of running through the motions.
- The user is asking for project content (resume bullets, codebase summaries) — wrong skill, route them to a content-producing skill instead.
How it works — the loop
Phase 0 — Show what I know (always runs first)
Before asking anything new, read MEMORY.md (or its equivalent in the runtime) and surface the most relevant user-type entries. Format as a short, scannable list:
Here's what I have about you on file:
- [user_role.md] — Lead Software Engineer at UPS; frontend-strong fullstack
- [user_communication.md] — Prefers concise output, thorough reasoning
- [user_location.md] — Torrance, CA (originally Bangkok)
- [+ 2 more — say "show all" to see them]
Anything stale or wrong? Tell me and I'll update before we go further.
Rules for Phase 0:
- Cap visible entries at 5; offer "show all" for the rest. Long memory dumps feel surveilling.
- Include the file name in brackets so the user knows where it lives — memory should not feel like a black box.
- If memory is empty, say so plainly: "I don't have anything on file about you yet — let's start fresh."
- If the user corrects something, update the relevant memory file BEFORE moving to Phase 1. Do not batch corrections.
- Transition to Phase 1 in the SAME response when memory is empty — nothing to confirm, so proceeding directly avoids dead air. When memory is non-empty, end the Phase 0 turn with the correction prompt and WAIT for the user's reply before showing Q1. Surfacing memory and Q1 in one breath defeats the "show first, then ask" purpose — the user needs a beat to read what's on file before being asked something new.
Phase 1 — Core calibration (always runs)
Check for a whoami profile first. If the runtime has a whoami-profile.md — the broad, person-level collaboration profile produced by the upstream sibling skill whoami — read its six dials and background and use them to pre-fill the core questions: present the inferred answer and ask the user to confirm or adjust, rather than cold-asking. Suggested mapping — Q1 from background.ai_experience / background.role; Q2 from the Initiative dial (high → "just do it, summarize after"; low → "walk me through your plan first"); Q3 from the Depth dial (high → thorough; low → terse); Q4 from the dial furthest from neutral (e.g. high Challenge → "push back if I'm wrong"). A whoami profile is a strong prior — confirm, don't re-interrogate. This read is one-directional: handshake never writes back to the whoami profile. If no profile exists, ask the questions cold as below.
Ask ≤4 pill questions plus 1 free-text question. Each question MUST be:
- Answerable in one line.
- Tied to a specific change in agent behavior — state the payoff in the same breath as the question.
- Skippable — "skip" is a first-class option on every pill.
Default question bank (use these unless you have a strong reason to swap):
Q1 — Expertise framing (pill)
"Roughly where do you sit on the technical spectrum?"
Options: Engineer (senior) · Engineer (early-career) · Designer / PM / non-engineer technical · Non-technical · Skip
Why I'm asking: so I know how much to explain when I introduce a new pattern, library, or trade-off.
Q2 — Default collaboration mode (pill)
"When you give me a complex task, what's your default preference?"
Options: Just do it, summarize after · Walk me through your plan first · Ask 1–2 questions to align, then start · Depends — ask each time · Skip
Why I'm asking: so I don't surprise you mid-task with the wrong altitude of involvement.
Q3 — Output verbosity (pill)
"Default depth for written output?"
Options: Terse — bullets, no fluff · Balanced — explain, but tightly · Thorough — context + reasoning + examples · Skip
Why I'm asking: so my default response length matches what you actually want to read.
Q4 — One thing to remember (pill, optional 4th)
"Pick one to flag as important to remember about working with you:"
Options: Show your reasoning, not just the answer · Push back if I'm wrong, don't just agree · Be skeptical of your own answers · Prefer editing over rewriting · Skip
Why I'm asking: captures one explicit collaboration norm that's easy to recall and apply.
Q5 — Free-text frustration
"What did the last AI assistant get wrong about you that drove you nuts?" (free-text, optional)
Why I'm asking: the gold lives here. One sentence is enough.
Hard rules for Phase 1:
- Ask the questions ONE AT A TIME, not as a wall of form. Wait for each answer before showing the next question.
- Cap at 4 pill + 1 free-text. If you find yourself wanting to add a 5th pill, you are scope-creeping into the project overlay — stop and ask whether the question really belongs in core.
- Every "skip" is honored silently. Do not nudge.
- Write each answer to memory IMMEDIATELY after receiving it (not at the end). If the user disconnects mid-flow, what they did say is captured.
- Do NOT name the skill ("handshake," "this skill," "the handshake skill is designed to…") in user-facing turns. Speak as a colleague calibrating, not a meta-narrator describing a workflow. The user knows what they invoked; surfacing that breaks the working-agreement framing and makes the conversation feel like a system explaining itself rather than two parties getting on the same page. Internal reasoning is fine; the user-facing response should sound like a colleague's first day, not a feature announcement.
Phase 2 — Project overlay (optional, opt-in)
Triggered by:
- User invokes
/handshake --project directly, OR
- Phase 1 just completed AND
project-type memory for the current work is empty AND the user accepts a one-line offer: "Want me to ask 3–6 questions about this project too? Skip if you'd rather I learn it as we go."
Default project-overlay question bank (cap at 6, all skippable):
| # |
Question |
Why I'm asking |
| P1 |
What's the project trying to achieve? (one sentence) |
Goal anchor for prioritization. |
| P2 |
What stage is it in? (idea / prototype / MVP / production / maintenance) |
Calibrates risk tolerance and how aggressive to be on changes. |
| P3 |
Who else is involved? (solo / small team / larger org / external stakeholders) |
Affects how I write commits, comments, and docs. |
| P4 |
Any non-obvious constraints? (deadlines, regulations, team norms, taboos) |
Avoids landmines I can't see from the code alone. |
| P5 |
Past decisions worth remembering? (one or two sentences) |
Captures intent that the code itself doesn't carry. |
| P6 |
External resources I should know about? (dashboards, docs, channels) |
Stored as reference-type memory entries, not project. |
Hard rules for Phase 2:
- Project overlay writes to
project-type memory (or reference-type for Q6). Never to user-type.
- Same one-at-a-time pacing as Phase 1.
- If Q6 is answered, write each link as a separate
reference-type entry, not bundled.
- If the project changes (new directory, new repo), the overlay is invalid — re-run on demand, or accept the user's decision to skip.
Phase 3 — Close with a written-to-memory summary
End the session with a tight, scannable summary of what was captured:
Done. Here's what I just wrote:
user-type:
+ user_expertise.md — senior engineer, frontend-strong fullstack
+ user_collaboration.md — prefers "walk me through the plan first"
+ user_verbosity.md — terse default
+ user_norms.md — push back if wrong; prefer editing over rewriting
+ user_frustration.md — past assistants over-explained the obvious
project-type (if overlay ran):
+ project_goal.md — ship v1 of agent-skills handshake skill by EOW
reference-type (if Q6 ran):
+ reference_design_md_spec.md — Google Labs DESIGN.md alpha
I'll lean on these going forward. Run `/handshake` again any time to update.
This closing summary is non-negotiable — it makes memory transparent rather than mysterious.
Memory write contract
Every entry follows the standard auto-memory file format already in use:
---
name: <short, human-readable name>
description: <one-line description used to decide relevance in future conversations>
type: user | project | reference | feedback
---
<body — for user/project entries, lead with the fact, then optional **Why:** and **How to apply:** lines>
File naming: <type>_<topic>.md — e.g., user_collaboration.md, project_goal.md, reference_dashboard.md. If a file already exists, update in place rather than creating a duplicate.
Index update: every new file gets a one-line entry in MEMORY.md. Format: - [Title](file.md) — one-line hook. Do NOT write the body of the memory into MEMORY.md itself — MEMORY.md is an index.
Hard never-ask list
The skill must NEVER ask about, store, or surface:
- Protected attributes: race, ethnicity, national origin, religion, age, sex, sexual orientation, gender identity, immigration status, disability, serious illness, union membership.
- Government identifiers: SSN, driver's license, passport, government ID numbers.
- Financial account details: credit card, bank account numbers.
- Health information: medical conditions, diagnoses, lab results, mental-health details, therapy/counseling history.
- Home or personal mailing addresses. (Work addresses or general region — e.g., "Torrance, CA" — are fine if the user volunteered them.)
- Account passwords, secret tokens, secret keys.
If the user volunteers any of the above unprompted, the skill completes the task but does not write the volunteered detail to memory. State this politely once, then move on.
The never-ask list is the same one already encoded in the auto-memory system. Keeping them aligned is intentional — divergence between surfaces would create a privacy hole.
Single-user contract
handshake calibrates only the agent for the single person running this Claude instance. It is not multi-user aware, and v1 will not pretend to be.
If teammates want similar calibration:
- They each run
/handshake on their own Claude instance.
- Team-shared context (norms, conventions, glossary, decisions) belongs in:
CLAUDE.md at the repo root (loaded for every session in the repo), OR
project-type memory entries that the team agrees to commit to the repo.
Multi-user awareness (e.g., "are you still the user this memory was built for, or someone else?" prompts) is an open Phase 2 question, gated on evidence that the case actually appears in practice.
Triggering rules
| Trigger |
Action |
/handshake slash command |
Run Phase 0 → Phase 1. Offer Phase 2 if appropriate. |
/handshake --project |
Run Phase 0 → Phase 1 → Phase 2 (project overlay required). |
| User says "calibrate," "tune in," "set working preferences" |
Run as if /handshake was invoked. |
| Another skill suggests handshake AND user accepts |
Run as if /handshake was invoked. The suggesting skill MUST get explicit user acceptance — never auto-route. |
| Memory is empty mid-conversation, user has not asked |
Do NOT auto-trigger. May offer a one-line suggestion at most. |
Cross-skill integration
| Skill |
When to interact |
productivity:memory-management (if installed) |
handshake writes into the same two-tier MEMORY.md + memory/ store. If productivity:memory-management is installed and managing the file layout, defer to its conventions for file location and frontmatter — do not invent a parallel layout. If not installed, write directly into the runtime's persistent memory store using the standard frontmatter format. Capability-gated, not vendor-gated. |
whoami |
Upstream sibling. whoami builds the broad person-level collaboration profile; handshake reads whoami-profile.md to pre-fill its Phase 1 core questions (confirm, not cold-ask). One-directional — handshake never writes back to the whoami profile. |
team-composer |
When team-composer is about to assemble a team and user-type memory is empty, it MAY suggest running /handshake first so the team can be tailored. Suggestion only — never auto-route. |
brand-workshop |
Similar — may suggest /handshake if running for a personal-brand or solo-founder identity package and user memory is sparse. Suggestion only. |
validation-canvas / riskiest-assumption-test / pitch-deck |
These read project state, not user state. May suggest /handshake --project at kickoff if project-type memory for the current work is empty. Suggestion only. |
startup-launch-kit |
Does NOT include handshake in its pipeline. The launch kit is a startup pipeline; calibration is a generic collaboration primitive — they should not be coupled. The orchestrator MAY surface a one-line suggestion at start-up if appropriate. |
Future hypothetical content-gathering skills (resume, cv, portfolio) |
Belong in a separate skill. handshake covers HOW we work; content skills cover WHAT we work on. Don't fold one into the other. |
Graceful degradation: if no persistent memory store is available in the runtime, the skill says so explicitly at invocation and offers to print the answers to chat instead. It does not pretend to write.
Status and scope
v0.1 — slash-command-only triggering, two-mode design (core + project overlay), single-user contract, hard never-ask list, capability-gated memory integration.
Supported: core calibration, project overlay, show-then-ask preamble, write-to-existing-memory, single-user calibration.
Not supported (deferred to Phase 2 with evidence): auto-trigger when memory is empty, multi-user identity awareness, re-calibration cadence detection, cross-skill auto-invocation.
If asked to do something outside this scope, the skill says so explicitly rather than expanding silently.
Contributions
Not accepting external contributions right now. Feel free to fork.
License
MIT — see the LICENSE file at the repo root.
When to use this skill
Load this skill when:
- The user invokes the
/handshake slash command directly
- The user says "calibrate how we work," "let's set working preferences,"
"tune in to me," or "set up a working agreement"
- Another skill (e.g.,
team-composer, brand-workshop) suggests running
handshake first because relevant user-type memory is empty or stale,
AND the user accepts that suggestion
Do NOT load this skill when:
- The user is in the middle of unrelated work and hasn't asked for calibration
- There is no persistent memory system available in the current runtime
(the skill writes to memory — without it, there's nothing to capture)
- The user has already run
/handshake recently and has core user-type
memory entries — re-invocation should be deliberate, not automatic
- The request is for project-content gathering (resume bullets, codebase
summaries, requirements docs) — that's a different skill's job
Tags: calibration, collaboration, memory, onboarding, personalization, working-agreement
1---2name: handshake3description: A brief, opt-in calibration ritual that runs before the real work. Shows the user what the agent already knows about them, then asks ≤4 high-leverage questions about how they want to collaborate (core mode), and optionally ≤6 scoped questions about the current project (overlay mode). Writes to the existing two-tier memory store using standard `user`-type and `project`-type entries — never a parallel store. Privacy-conscious: a hard never-ask list, every question carries a stated behavioral payoff, and the user can skip any item. Slash-command-only at v1. Use when the user invokes `/handshake`, or asks to "calibrate how we work", "tune in to me", "set a working agreement", "share my preferences", or when an upstream skill suggests calibration because user memory is sparse. NOT for codebase orientation, performance-review calibration ("set Q3 goals"), or content gathering (resumes, bios, requirements, CV bullets) — those are different jobs handled by other skills.4---56# Handshake78A brief mutual exchange that establishes the terms of subsequent collaboration. Not a friendship, not an interview — a handshake.910This skill exists because agents that don't know who they're talking to give generic answers. It exists *as a separate skill* — rather than relying on passive memory accrual — because **deliberate calibration is structurally different from incidental capture**: the user gets to see what's already known, correct it, and consent to what's added. That's the entire job.1112---1314## The three-part test (front and center)1516Per the agent-skills repo convention, every new skill is checked against three axes before it earns a slot. Here's where `handshake` lands honestly:1718| Axis | Verdict | Notes |19|---|---|---|20| **Unique structure** | Partial | Show-then-ask is a different control flow from passive memory accrual, but the underlying memory store is shared with the auto-memory system and `productivity:memory-management`. |21| **Unique deliverable** | No | The output is standard `user`-type and `project`-type memory entries — same format other surfaces produce. The skill **wraps** the existing memory contract; it does not invent a parallel one. |22| **Unique elicitation** | **Yes** | Privacy-conscious, consent-gated, show-what-I-know-first, ≤4 pill + 1 free-text core, optional ≤6 project overlay, hard never-ask list. This is the load-bearing reason the skill exists. |2324The skill ships because the elicitation pattern is genuinely worth ritualizing — but it stays narrow on the other two axes by deliberate design. If you find yourself extending it to invent new memory types or invent new control flows, stop and ask whether you're really still inside `handshake`.2526---2728## What this skill does2930- **Phase 0 — Show what I know.** Before asking anything, surfaces the most relevant existing `user`-type memory entries (≤5) so the user can correct stale facts or confirm what's already on file. If memory is empty, says so plainly.31- **Phase 1 — Core calibration (always runs).** Asks ≤4 high-leverage pill questions about how to collaborate, plus 1 free-text "what did past assistants get wrong about you?" question. Each question explains its behavioral payoff. Writes to `user`-type memory.32- **Phase 2 — Project overlay (optional).** If invoked with `--project`, or auto-suggested when `project`-type memory is empty for the current work, asks ≤6 scoped questions about the project (goal, stage, stakeholders, constraints, past decisions, external resources). All skippable. Writes to `project`-type memory — never `user`-type.33- **Closes with a written-to-memory summary** so the user can see exactly what was captured.3435---3637## What this skill does NOT do3839- **Does not gather project content.** "Help me build a resume" needs work-history details — that is content for the resume, not preferences for how the agent works. Resume content belongs in a hypothetical `resume` skill (or in normal conversation), not in `handshake`. The project *overlay* captures meta-context (stage, constraints, stakeholders), not subject-matter material.40- **Does not invent a new memory store.** All writes go to the existing two-tier system — `user_*.md` files for personal preferences, `project_*.md` for project context, indexed in `MEMORY.md`. Same frontmatter, same conventions.41- **Does not handle multi-user identity.** Memory is per-Claude-instance, not per-team. If a teammate wants similar calibration, they run `/handshake` on their own Claude instance. Team-shared context belongs in `CLAUDE.md` or a `project`-type entry that's committed to the repo — not in `user`-type memory.42- **Does not auto-trigger aggressively at v1.** Slash-command-only invocation. Other skills MAY suggest running it, but never invoke it silently. Auto-trigger is a Phase 2 decision gated on observed user value (per the staged-rollout principle in this repo).43- **Does not ask anything on the never-ask list.** Hard refusal — even if the user's prompt invites it.4445---4647## When to use it4849- The user invokes `/handshake` directly, or asks to "calibrate" / "tune in" / "set a working agreement."50- A new project is starting and `project`-type memory for it is empty — the user accepts a suggestion to run `/handshake --project`.51- The user has noticed the agent giving generic answers and wants to fix the input rather than the output.52- A different skill (`team-composer`, `brand-workshop`, etc.) suggests calibration because relevant `user`-type memory is sparse, AND the user accepts.5354## When NOT to use it5556- Mid-task — calibration interrupts flow. Save the suggestion for the next session.57- The user has just finished `/handshake` recently. Re-invoking the same session adds noise without signal.58- The runtime has no persistent memory (the skill has nothing to write to). Tell the user instead of running through the motions.59- The user is asking for project content (resume bullets, codebase summaries) — wrong skill, route them to a content-producing skill instead.6061---6263## How it works — the loop6465### Phase 0 — Show what I know (always runs first)6667Before asking anything new, read `MEMORY.md` (or its equivalent in the runtime) and surface the most relevant `user`-type entries. Format as a short, scannable list:6869```70Here's what I have about you on file:71- [user_role.md] — Lead Software Engineer at UPS; frontend-strong fullstack72- [user_communication.md] — Prefers concise output, thorough reasoning73- [user_location.md] — Torrance, CA (originally Bangkok)74- [+ 2 more — say "show all" to see them]7576Anything stale or wrong? Tell me and I'll update before we go further.77```7879**Rules for Phase 0:**8081- Cap visible entries at 5; offer "show all" for the rest. Long memory dumps feel surveilling.82- Include the file name in brackets so the user knows where it lives — memory should not feel like a black box.83- If memory is empty, say so plainly: *"I don't have anything on file about you yet — let's start fresh."*84- If the user corrects something, update the relevant memory file BEFORE moving to Phase 1. Do not batch corrections.85- **Transition to Phase 1 in the SAME response when memory is empty** — nothing to confirm, so proceeding directly avoids dead air. **When memory is non-empty, end the Phase 0 turn with the correction prompt and WAIT for the user's reply before showing Q1.** Surfacing memory and Q1 in one breath defeats the "show first, then ask" purpose — the user needs a beat to read what's on file before being asked something new.8687### Phase 1 — Core calibration (always runs)8889**Check for a `whoami` profile first.** If the runtime has a `whoami-profile.md` — the broad, person-level collaboration profile produced by the upstream sibling skill `whoami` — read its six dials and background and use them to **pre-fill** the core questions: present the inferred answer and ask the user to confirm or adjust, rather than cold-asking. Suggested mapping — Q1 from `background.ai_experience` / `background.role`; Q2 from the Initiative dial (high → "just do it, summarize after"; low → "walk me through your plan first"); Q3 from the Depth dial (high → thorough; low → terse); Q4 from the dial furthest from neutral (e.g. high Challenge → "push back if I'm wrong"). A `whoami` profile is a strong prior — confirm, don't re-interrogate. This read is one-directional: `handshake` never writes back to the `whoami` profile. If no profile exists, ask the questions cold as below.9091Ask ≤4 pill questions plus 1 free-text question. Each question MUST be:92931. Answerable in one line.942. Tied to a specific change in agent behavior — state the payoff in the same breath as the question.953. Skippable — "skip" is a first-class option on every pill.9697**Default question bank (use these unless you have a strong reason to swap):**9899#### Q1 — Expertise framing (pill)100> *"Roughly where do you sit on the technical spectrum?"*101> Options: `Engineer (senior)` · `Engineer (early-career)` · `Designer / PM / non-engineer technical` · `Non-technical` · `Skip`102>103> **Why I'm asking:** so I know how much to explain when I introduce a new pattern, library, or trade-off.104105#### Q2 — Default collaboration mode (pill)106> *"When you give me a complex task, what's your default preference?"*107> Options: `Just do it, summarize after` · `Walk me through your plan first` · `Ask 1–2 questions to align, then start` · `Depends — ask each time` · `Skip`108>109> **Why I'm asking:** so I don't surprise you mid-task with the wrong altitude of involvement.110111#### Q3 — Output verbosity (pill)112> *"Default depth for written output?"*113> Options: `Terse — bullets, no fluff` · `Balanced — explain, but tightly` · `Thorough — context + reasoning + examples` · `Skip`114>115> **Why I'm asking:** so my default response length matches what you actually want to read.116117#### Q4 — One thing to remember (pill, optional 4th)118> *"Pick one to flag as important to remember about working with you:"*119> Options: `Show your reasoning, not just the answer` · `Push back if I'm wrong, don't just agree` · `Be skeptical of your own answers` · `Prefer editing over rewriting` · `Skip`120>121> **Why I'm asking:** captures one explicit collaboration norm that's easy to recall and apply.122123#### Q5 — Free-text frustration124> *"What did the last AI assistant get wrong about you that drove you nuts?"* (free-text, optional)125>126> **Why I'm asking:** the gold lives here. One sentence is enough.127128**Hard rules for Phase 1:**129130- Ask the questions ONE AT A TIME, not as a wall of form. Wait for each answer before showing the next question.131- Cap at 4 pill + 1 free-text. If you find yourself wanting to add a 5th pill, you are scope-creeping into the project overlay — stop and ask whether the question really belongs in core.132- Every "skip" is honored silently. Do not nudge.133- Write each answer to memory IMMEDIATELY after receiving it (not at the end). If the user disconnects mid-flow, what they did say is captured.134- **Do NOT name the skill ("handshake," "this skill," "the handshake skill is designed to…") in user-facing turns.** Speak as a colleague calibrating, not a meta-narrator describing a workflow. The user knows what they invoked; surfacing that breaks the working-agreement framing and makes the conversation feel like a system explaining itself rather than two parties getting on the same page. Internal reasoning is fine; the user-facing response should sound like a colleague's first day, not a feature announcement.135136### Phase 2 — Project overlay (optional, opt-in)137138Triggered by:139- User invokes `/handshake --project` directly, OR140- Phase 1 just completed AND `project`-type memory for the current work is empty AND the user accepts a one-line offer: *"Want me to ask 3–6 questions about this project too? Skip if you'd rather I learn it as we go."*141142**Default project-overlay question bank (cap at 6, all skippable):**143144| # | Question | Why I'm asking |145|---|---|---|146| P1 | What's the project trying to achieve? (one sentence) | Goal anchor for prioritization. |147| P2 | What stage is it in? (`idea / prototype / MVP / production / maintenance`) | Calibrates risk tolerance and how aggressive to be on changes. |148| P3 | Who else is involved? (`solo / small team / larger org / external stakeholders`) | Affects how I write commits, comments, and docs. |149| P4 | Any non-obvious constraints? (deadlines, regulations, team norms, taboos) | Avoids landmines I can't see from the code alone. |150| P5 | Past decisions worth remembering? (one or two sentences) | Captures intent that the code itself doesn't carry. |151| P6 | External resources I should know about? (dashboards, docs, channels) | Stored as `reference`-type memory entries, not `project`. |152153**Hard rules for Phase 2:**154155- Project overlay writes to `project`-type memory (or `reference`-type for Q6). Never to `user`-type.156- Same one-at-a-time pacing as Phase 1.157- If Q6 is answered, write each link as a separate `reference`-type entry, not bundled.158- If the project changes (new directory, new repo), the overlay is invalid — re-run on demand, or accept the user's decision to skip.159160### Phase 3 — Close with a written-to-memory summary161162End the session with a tight, scannable summary of what was captured:163164```165Done. Here's what I just wrote:166167user-type:168 + user_expertise.md — senior engineer, frontend-strong fullstack169 + user_collaboration.md — prefers "walk me through the plan first"170 + user_verbosity.md — terse default171 + user_norms.md — push back if wrong; prefer editing over rewriting172 + user_frustration.md — past assistants over-explained the obvious173174project-type (if overlay ran):175 + project_goal.md — ship v1 of agent-skills handshake skill by EOW176177reference-type (if Q6 ran):178 + reference_design_md_spec.md — Google Labs DESIGN.md alpha179180I'll lean on these going forward. Run `/handshake` again any time to update.181```182183This closing summary is non-negotiable — it makes memory transparent rather than mysterious.184185---186187## Memory write contract188189Every entry follows the standard auto-memory file format already in use:190191```markdown192---193name: <short, human-readable name>194description: <one-line description used to decide relevance in future conversations>195type: user | project | reference | feedback196---197198<body — for user/project entries, lead with the fact, then optional **Why:** and **How to apply:** lines>199```200201**File naming:** `<type>_<topic>.md` — e.g., `user_collaboration.md`, `project_goal.md`, `reference_dashboard.md`. If a file already exists, **update in place** rather than creating a duplicate.202203**Index update:** every new file gets a one-line entry in `MEMORY.md`. Format: `- [Title](file.md) — one-line hook`. Do NOT write the body of the memory into `MEMORY.md` itself — `MEMORY.md` is an index.204205---206207## Hard never-ask list208209The skill must NEVER ask about, store, or surface:210211- **Protected attributes:** race, ethnicity, national origin, religion, age, sex, sexual orientation, gender identity, immigration status, disability, serious illness, union membership.212- **Government identifiers:** SSN, driver's license, passport, government ID numbers.213- **Financial account details:** credit card, bank account numbers.214- **Health information:** medical conditions, diagnoses, lab results, mental-health details, therapy/counseling history.215- **Home or personal mailing addresses.** (Work addresses or general region — e.g., "Torrance, CA" — are fine if the user volunteered them.)216- **Account passwords, secret tokens, secret keys.**217218If the user volunteers any of the above unprompted, the skill **completes the task** but **does not write the volunteered detail to memory**. State this politely once, then move on.219220The never-ask list is the same one already encoded in the auto-memory system. Keeping them aligned is intentional — divergence between surfaces would create a privacy hole.221222---223224## Single-user contract225226`handshake` calibrates only the agent for the **single person running this Claude instance**. It is not multi-user aware, and v1 will not pretend to be.227228If teammates want similar calibration:229- They each run `/handshake` on their own Claude instance.230- Team-shared context (norms, conventions, glossary, decisions) belongs in:231 - `CLAUDE.md` at the repo root (loaded for every session in the repo), OR232 - `project`-type memory entries that the team agrees to commit to the repo.233234Multi-user awareness (e.g., "are you still the user this memory was built for, or someone else?" prompts) is an open Phase 2 question, gated on evidence that the case actually appears in practice.235236---237238## Triggering rules239240| Trigger | Action |241|---|---|242| `/handshake` slash command | Run Phase 0 → Phase 1. Offer Phase 2 if appropriate. |243| `/handshake --project` | Run Phase 0 → Phase 1 → Phase 2 (project overlay required). |244| User says "calibrate," "tune in," "set working preferences" | Run as if `/handshake` was invoked. |245| Another skill suggests handshake AND user accepts | Run as if `/handshake` was invoked. The suggesting skill MUST get explicit user acceptance — never auto-route. |246| Memory is empty mid-conversation, user has not asked | Do NOT auto-trigger. May offer a one-line suggestion at most. |247248---249250## Cross-skill integration251252| Skill | When to interact |253|---|---|254| `productivity:memory-management` (if installed) | `handshake` writes into the same two-tier `MEMORY.md` + `memory/` store. If `productivity:memory-management` is installed and managing the file layout, defer to its conventions for file location and frontmatter — do not invent a parallel layout. If not installed, write directly into the runtime's persistent memory store using the standard frontmatter format. **Capability-gated, not vendor-gated.** |255| `whoami` | Upstream sibling. `whoami` builds the broad person-level collaboration profile; `handshake` reads `whoami-profile.md` to pre-fill its Phase 1 core questions (confirm, not cold-ask). One-directional — `handshake` never writes back to the `whoami` profile. |256| `team-composer` | When `team-composer` is about to assemble a team and `user`-type memory is empty, it MAY suggest running `/handshake` first so the team can be tailored. Suggestion only — never auto-route. |257| `brand-workshop` | Similar — may suggest `/handshake` if running for a personal-brand or solo-founder identity package and user memory is sparse. Suggestion only. |258| `validation-canvas` / `riskiest-assumption-test` / `pitch-deck` | These read project state, not user state. May suggest `/handshake --project` at kickoff if `project`-type memory for the current work is empty. Suggestion only. |259| `startup-launch-kit` | Does NOT include `handshake` in its pipeline. The launch kit is a startup pipeline; calibration is a generic collaboration primitive — they should not be coupled. The orchestrator MAY surface a one-line suggestion at start-up if appropriate. |260| Future hypothetical content-gathering skills (`resume`, `cv`, `portfolio`) | Belong in a separate skill. `handshake` covers HOW we work; content skills cover WHAT we work on. Don't fold one into the other. |261262**Graceful degradation:** if no persistent memory store is available in the runtime, the skill says so explicitly at invocation and offers to print the answers to chat instead. It does not pretend to write.263264---265266## Status and scope267268`v0.1` — slash-command-only triggering, two-mode design (core + project overlay), single-user contract, hard never-ask list, capability-gated memory integration.269270**Supported:** core calibration, project overlay, show-then-ask preamble, write-to-existing-memory, single-user calibration.271272**Not supported (deferred to Phase 2 with evidence):** auto-trigger when memory is empty, multi-user identity awareness, re-calibration cadence detection, cross-skill auto-invocation.273274If asked to do something outside this scope, the skill says so explicitly rather than expanding silently.275276---277278## Contributions279280Not accepting external contributions right now. Feel free to fork.281282## License283284MIT — see the [LICENSE](https://github.com/sorawit-w/agent-skills/blob/main/LICENSE) file at the repo root.285286## When to use this skill287288Load this skill when:289- The user invokes the `/handshake` slash command directly290- The user says "calibrate how we work," "let's set working preferences,"291 "tune in to me," or "set up a working agreement"292- Another skill (e.g., `team-composer`, `brand-workshop`) suggests running293 handshake first because relevant `user`-type memory is empty or stale,294 AND the user accepts that suggestion295296Do NOT load this skill when:297- The user is in the middle of unrelated work and hasn't asked for calibration298- There is no persistent memory system available in the current runtime299 (the skill writes to memory — without it, there's nothing to capture)300- The user has already run `/handshake` recently and has core `user`-type301 memory entries — re-invocation should be deliberate, not automatic302- The request is for project-content gathering (resume bullets, codebase303 summaries, requirements docs) — that's a different skill's job304305**Tags:** calibration, collaboration, memory, onboarding, personalization, working-agreement