handshake
Skill2 starsChanged 5 months agoMITView on GitHub
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 other projects use a version of this.
Adopted by
Most recently taken up by
- iblai/higher-education-agentstheir own version, first seen Nov 8, 2026
- ZhouYinLong-lab/Dog-Skillstheir own version, first seen Nov 8, 2026
- joansebgarcia/skillstheir own version, first seen Nov 1, 2026
- HouseAlone/handshake-skilltheir own version, first seen Sep 24, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- iblai/higher-education-agents★ 14same name
- ZhouYinLong-lab/Dog-Skills★ 7same name
- HouseAlone/handshake-skill★ 0same name
- joansebgarcia/skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository26 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- ai-eval-reviewSkill
- ai-ux-reviewSkill
- brand-workshopSkill
- defineSkill
- gamification-fitSkill
- ghostwriterSkill
- gtmSkill
- i18nSkill
- pitch-deckSkill
- pixel-artSkill
- plain-englishSkill
- riskiest-assumption-testSkill
- screenwrightSkill
- skill-evaluatorSkill
- startup-auditSkill
- startup-grillSkill
- startup-launch-kitSkill
- stormSkill
- sub-agent-coordinatorSkill
- team-composerSkill
- tech-stack-recommendationsSkill
- validation-canvasSkill
- wear-the-hatSkill
- whoamiSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. About 0 are common, 14 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈14
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 43
Phase 0 — Show what I know: Before asking anything, surfaces the most relevant existing user-type memory entries (≤5) so the user can …
- Very specific: line 45
Phase 2 — Project overlay (optional): If invoked with --project, or auto-suggested when project-type memory is empty for the current work, …
- Very specific: line 53
Does not invent a new memory store: All writes go to the existing two-tier system — user_*.md files for personal preferences, project_*.md …
- Very specific: line 80
Before asking anything new, read MEMORY.md (or its equivalent in the runtime) and surface the most relevant user-type entries.
- Distinctive: line 96
If memory is empty, say so plainly: *"I don't have anything on file about you yet — let's start fresh."*
- Distinctive: line 97
If the user corrects something, update the relevant memory file BEFORE moving to Phase 1.
- Distinctive: line 104
Ask ≤4 pill questions plus 1 free-text question.
- Distinctive: line 143
Ask the questions ONE AT A TIME, not as a wall of form.
- Distinctive: line 145
Every "skip" is honored silently.
- Distinctive: line 146
Write each answer to memory IMMEDIATELY after receiving it (not at the end).
- Very specific: line 170
If Q6 is answered, write each link as a separate reference-type entry, not bundled.
- Distinctive: line 171
If the project changes (new directory, new repo), the overlay is invalid — re-run on demand, or accept the user's decision to skip.
- Distinctive: line 202
Every entry follows the standard auto-memory file format already in use:
- Very specific: line 216
Index update: every new file gets a one-line entry in MEMORY.md.
- Distinctive: line 231
If the user volunteers any of the above unprompted, the skill completes the task but does not write the volunteered detail to memory.
- Distinctive: line 241
If teammates want similar calibration:
- Distinctive: line 275
Graceful degradation: if no persistent memory store is available in the runtime, the skill says so explicitly at invocation and offers to …
- Distinctive: line 287
If asked to do something outside this scope, the skill says so explicitly rather than expanding silently.
- Distinctive: line 293
Not accepting external contributions right now.
- Distinctive: line 309
Do NOT load this skill when:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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 whenproject-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 toproject-type memory — neveruser-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
resumeskill (or in normal conversation), not inhandshake. 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_*.mdfiles for personal preferences,project_*.mdfor project context, indexed inMEMORY.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
/handshakeon their own Claude instance. Team-shared context belongs inCLAUDE.mdor aproject-type entry that's committed to the repo — not inuser-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
/handshakedirectly, 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 relevantuser-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
/handshakerecently. 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·SkipWhy 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·SkipWhy 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·SkipWhy 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·SkipWhy 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 --projectdirectly, 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 (orreference-type for Q6). Never touser-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
/handshakeon their own Claude instance. - Team-shared context (norms, conventions, glossary, decisions) belongs in:
CLAUDE.mdat the repo root (loaded for every session in the repo), ORproject-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
/handshakeslash 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 relevantuser-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
/handshakerecently and has coreuser-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
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

