Agent skill

Pairing

by testdouble in testdouble/han

Build work collaboratively in reviewable pieces, handing each piece back for review before starting the next, so the person stays in the lead and steers while the work happens instead of reviewing a…

MITAuto-check passedTesting & QA

Install Pairing

skills CLI
$ npx skills add testdouble/han --skill pairing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install testdouble/han pairing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .claude/skills && cp -r skills-src/han-core/skills/pairing .claude/skills/pairing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
pairing
GitHub stars
279
Token cost
~3.5k tokens
SKILL.md length
2,135 words
Files
1
Skills in repo
54
Repo updated
First seen
Licence
MIT

At a glance

Build work collaboratively in reviewable pieces, handing each piece back for review before starting the next, so the person stays in the lead and steers while the work happens instead of reviewing a…

  • Works in 7 steps: Resolve the Record Location → Split the Request Into Concerns → Sort Each Concern → …
  • Someone says to pair with them on something
  • SKILL.md covers Project Context, The contract this skill runs on, Step 1: Resolve the Record… and Step 2: Split the Request Into…, plus 5 more sections
  • Calls bash

What it does

Pairing is an agent skill from testdouble/han. Build work collaboratively in reviewable pieces, handing each piece back for review before starting the next, so the person stays in the lead and steers while the work happens instead of reviewing a finished result. Use when someone says to pair with them on something, asks to collaborate rather than direct, wants to review as it goes, or wants to guide the work piece by piece — on code, on a design decision, or on writing. For a test-first build it runs tdd, for restructuring it runs refactor, for an interface…

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Test-driven development, Architecture decision records and API design. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.

When your agent uses it

  • Someone says to pair with them on something
  • Asks to collaborate rather than direct
  • Wants to review as it goes
  • Wants to guide the work piece by piece — on code

Example prompts

  • “/pairing”

Requirements

  • Pre-approved tools (allowed-tools): Read, Write, Edit, Glob, Grep, Skill, Bash(find *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Resolve the Record Location
  2. Split the Request Into Concerns
  3. Sort Each Concern
  4. Propose the Plan
  5. Run the Loop
  6. Act on the Response
  7. Close

What it can do on your machine

Read from SKILL.md and the folder at commit abba73a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Glob
    • Grep
    • Skill
    • Bash(find *)
    • Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Pairing loads about 3.5k tokens when it runs. Until then it costs about 234 tokens; SKILL.md has 2,135 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~234
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 2,135 words, ~3,540 tokens.

Download SKILL.mdSave it as .claude/skills/pairing/SKILL.md (or your agent's skills folder).
name
pairing
description
Build work collaboratively in reviewable pieces, handing each piece back for review before starting the next, so the person stays in the lead and steers while the work happens instead of reviewing a finished result. Use when someone says to pair with them on something, asks to collaborate rather than direct, wants to review as it goes, or wants to guide the work piece by piece — on code, on a design decision, or on writing. For a test-first build it runs tdd, for restructuring it runs refactor, for an interface contract it runs design-an-api, and for plan work it runs iterative-plan-review or plan-implementation, each collaboratively; invoke any of those directly instead to run it straight through without pausing. Does not pace someone through code that already exists and builds nothing — use code-walkthrough. Does not explain, summarize, or research something instead of producing it — use code-overview or research.
allowed-tools
Read, Write, Edit, Glob, Grep, Skill, Bash(find *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")
argument-hint
[what to pair on]

Project Context

  • personal config directory: !bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"
  • project .han/config.md: !cat .han/config.md 2>/dev/null || echo ""
  • CLAUDE.md: !find . -maxdepth 1 -name "CLAUDE.md" -type f

As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A read that returns no file is no personal configuration: continue silently. When that file or the project .han/config.md probe supplies content, apply it per config-rule.md, which governs precedence between the two files, relative-path resolution, and what to do with a file that reads but cannot be used.

The contract this skill runs on

Read collaborative-stop-rule.md before Step 4. It defines what a stop presents, when the pre-build ask fires, what makes a choice expensive to walk back, and what to do with the answer. The skills this one hands work to follow the same file, which is what makes a stop feel the same whoever performed it.

Two constraints from that file govern every step below and are repeated here because they are the ones most easily lost:

  • The pacing is the deliverable. Ending the turn at each stop is the product, not an interruption in it. Never continue past a stop to be helpful.
  • A stop hands over something to check, never a case for the work. Lead with what the person can verify. The reasoning goes last or goes unsaid until asked, BECAUSE a fluent explanation raises agreement without raising scrutiny, which is the failure this whole loop exists to prevent.

Pairing

Step 1: Resolve the Record Location

Resolve where the running feedback record will be written, using the output base directory from the configuration probed above. Absent any configuration, write it beside the work under .han/pairing/.

Name the file for this run so a second run in the same repository does not overwrite the first. State the path to the person in Step 4's plan, in one clause, BECAUSE a record they cannot find is not a record.

Read the file first if it already exists. A run resuming after an interrupted session inherits the record rather than starting a new one.

Step 2: Split the Request Into Concerns

Split the request into concerns before sorting any of it. A request holding two concerns and sorted as one produces one kind, one set of boundaries, and one uninterrupted run through both, which is how a build and the work that depends on that build end up in the same turn with neither of them reviewed.

A concern is one thing the person asked for, with its own deliverable. Two asks joined by "and", "and then", "then help me", or a numbered list are two concerns whenever they produce two things the person would check separately. An edit to a file and a reply to a question are two deliverables even when they are about the same lines of code.

Changing code and understanding or answering a question are always separate concerns. This one takes no judgment. Never bundle them, whatever their subject, however small either one is, and however plainly the second follows from the first, BECAUSE checking an edit means reading a diff and checking an answer means reading the answer. Bundled, the answer arrives before the edit it rests on has been verified, so a wrong edit yields a confident wrong answer and the two pass unreviewed together.

Do not split one deliverable into concerns. The steps inside a single deliverable are pieces, and Step 4's plan divides them. Two concerns exist when the person would check two different artifacts, not when one artifact takes several steps.

Concerns run in sequence and never interleave. The last piece of one concern is a stop like any other, and the next concern does not begin until the person responds.

When you cannot tell whether the request holds one concern or two, treat it as two and say so in the plan, where the person can merge them back. An extra stop costs one turn. A missing one costs the review this whole loop exists to get.

Step 3: Sort Each Concern

Apply this test to each concern separately, in order, and stop at the first match:

  1. Does a skill carrying the collaborative flag cover this work? Then it is skill-backed. The flagged skills are tdd for a test-first build, refactor for restructuring, design-an-api for an interface contract, iterative-plan-review for sharpening a plan, and plan-implementation for planning a build.
  2. Does the work produce a choice among options that commits the person to something? Then it is decision work.
  3. Does the work produce prose someone will read? Then it is prose work.
  4. Otherwise it is open-ended, and Step 4's plan supplies the boundaries with no rule behind them.

The order is the tie-break. A concern matching more than one kind sorts as the earliest match, so drafting a decision record sorts as decision work rather than prose work. Concerns sort independently, so one request routinely yields a skill-backed concern and a prose concern side by side.

Never guess the discipline for skill-backed work. A concern to build something that does not say whether to drive it from tests, restructure what is there, or sketch a shape first is answered by proposing an approach in Step 4, never by picking one silently. A single concern may span more than one approach.

When a concern is too vague to sort, ask once. Name what was ambiguous and offer candidate readings. If the answer still does not settle it, propose a plan against the most likely reading and say that is what you did. Never sort a concern you could not read.

When a concern asks to understand something rather than produce something, this skill is the wrong one for it. Say so and name where it goes: code-walkthrough for paced explanation of existing code, code-overview for a written overview, research for an open question. Do not sort it as open-ended and propose a plan to build things. When it is one concern among several, hand off that one and keep the rest in the plan rather than ending the run.

Step 4: Propose the Plan

Before any work starts, present a short plan. It names:

  • The concerns the request split into, in the order they will run, and which kind each one sorted into. Always state both BECAUSE the split sets where control comes back and the sort determines every boundary inside a concern, and they are the parts of the plan the person cannot correct if they cannot see them.
  • The pieces to be built inside each concern, and the reason for each boundary. No piece spans two concerns.
  • Which pieces carry a choice that is expensive to walk back, applying the test in the stop rule. Naming them here is what makes that call contestable while contesting it is still cheap.
  • Where the feedback record lives.

What counts as one piece depends on the kind that concern sorted into:

Kind of workOne piece is
Skill-backedWhatever that skill already treats as one unit
DecisionOne decision, with its context, the options weighed, and what it commits the person to
ProseOne rung of a fidelity ladder: the shape, then a rough draft, then the language
Open-endedWhatever this plan names

For prose, scale the ladder to the size of the work. Short work climbs the ladder once, whole. For longer work, agree the shape for the whole artifact first, then climb the remaining rungs section by section, naming the sections in this plan so they can be redirected. Sectioning only the later rungs keeps structural feedback ahead of surface feedback, which is the ordering the ladder exists for.

For skill-backed work the plan names the backing skill, the unit it stops at, and the reason — not the list of units. That skill builds its own list partway through its own run, so the list does not exist yet. Surface it at the first stop, where it can still be redirected.

When the plan sequences more than one backing skill, order them so each skill's own preconditions hold when its turn arrives. refactor will not run alongside an unfinished test-driven loop, so a plan that sequences both closes the first before starting the second.

Then wait. The person accepts the plan, changes it, or replaces it.

Show full SKILL.md (752 more words)Show less

Step 5: Run the Loop

Repeat until the plan is finished or the person ends it. The loop walks the concerns in the order the plan named, and the pieces inside each one in the order the plan named.

  1. If the plan marked this piece expensive to walk back, ask first, in a turn of its own. The ask opens this piece's turn, after the person has responded to the previous stop, or to the plan when this is the first piece. Name the dimension the choice turns on, offer no candidate answers, and end the turn. Never append the ask to that stop or plan, BECAUSE a reply to it is a reply to that alone and answers nothing about this piece.

    When the reply arrives, write it into the record in the person's words, against this ask, then build. A declined answer is a complete one, and a question about the ask holds it open: answer it and end the turn again. The reply is not routed through Step 6, which handles replies to a stop.

    When an earlier turn already bundled the ask into a stop or the plan and the reply spoke only to that, the ask was never posed on its own: present it now, on its own, before building.

  2. Build one piece.

    For skill-backed work, invoke the backing skill with the collaborative argument set, and forward the person's request and any constraints through unchanged. That skill runs its own job and stops at the boundary it already has. After the invocation returns, continue this loop explicitly BECAUSE the moment after a sub-skill call is where an orchestration most often stops and treats the sub-skill's output as its final answer.

    When a backing skill is not available, name it and offer the choice between the open-ended path and installing the plugin that carries it. Never substitute silently — hand-rolling a refactoring skips the passing-test gate that skill exists to enforce.

    For every other kind, build the piece yourself.

  3. Present the stop, in the shape the stop rule specifies: position in the plan, what was built, what can be checked, what changed, and one line saying the reasoning is available for the asking.

    When the piece closes a concern, say so in the position line and name the concern that comes next. That tells the person the next response starts different work, which is the moment their review matters most. That is a report about what comes next, never a question about it.

  4. End the turn. Nothing further is built until the person responds. Starting the next concern is not an exception, however directly it follows from the one that just closed.

Step 6: Act on the Response

Write the response into the record, in the person's words and against the stop or ask it answers, before acting on it. When a recorded entry shapes this piece, name which entry it was.

Then route by what the feedback touches, per the stop rule:

  • The piece in hand. Fix it within that piece and show it again, naming the correction and what it touched. That re-show is a stop, so return to Step 5's fourth instruction and wait. Do not return to the pre-build ask; this piece is already built.
  • What comes next. Carry it into the next piece and return to the top of Step 5.
  • Work outside the piece in hand. Name that reading before acting on it, then offer three ways out: accept a revised plan, change it, or decline the reopening so the feedback is recorded as scoped to later work and the agreed plan continues.

A question holds the person's place; it never advances the work. Answer it and stop again at the same place.

When the person asks for more than one piece at a time, honor it as asked, present the pieces together, and return to the normal pace at the following stop without being asked to.

When the person says to finish without stopping, acknowledge it in the same turn and name what will now go unreviewed, then continue from the current plan and report at the end.

Step 7: Close

Report what was built, what the person's feedback changed, anything the plan named but did not reach, the state of any work a backing skill left mid-cycle, and where the feedback record was written.

Ending is the person's call throughout. Nothing here computes a stopping point, BECAUSE work being built produces no countable signal to compute over.

© testdouble, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in han-core/skills/pairing of testdouble/han.

Open the folder on GitHubat commit abba73a

Compare with similar skills

Pairing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Pairing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pairing this skilltestdouble/han279—~3.5kAutomated safety check: PassMIT
Implementopen-octo/octo-agent125—~2.3kAutomated safety check: PassMIT
Development Workflowrunceel/ReactiveProperty944—~1.4kAutomated safety check: PassMIT
SDKkortix-ai/suna20k—~9.6kAutomated safety check: PassCustom licence
Technical Design Doc Creatortech-leads-club/agent-skills7k—~13kAutomated safety check: PassCustom licence
Nw TDD Review EnforcementnWave-ai/nWave617—~3.5kAutomated safety check: PassMIT

Similar skills

  • Implement

    open-octo/octo-agent

    Implement a technical design by decomposing it into dependency-ordered vertical slices, executing each with TDD red-green, reviewing each via an isolated sub-agent, and persisting progress to a…

    125 GitHub stars~2.3k tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Development Workflow

    runceel/ReactiveProperty

    ReactiveProperty repository development policy. An agent skill from runceel/ReactiveProperty.

    944 GitHub stars~1.4k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • SDK

    kortix-ai/suna

    The hard rules for editing @kortix/sdk (packages/sdk) — a PUBLISHED npm package with constraints no other package in this repo has: TDD is mandatory (failing test first, gates run and pasted every…

    20k GitHub stars~9.6k tokensUpdated today
    Testing & QAAuto-check passed
  • Technical Design Doc Creator

    tech-leads-club/agent-skills

    Creates comprehensive Technical Design Documents (TDD) with mandatory and optional sections through interactive discovery.

    7k GitHub stars~13k tokensUpdated 17 days ago
    DevelopmentAuto-check passed
  • Test design mandate enforcement, test budget validation, TDD phase validation (3-phase canon per ADR-025), and external validity checks for the software crafter reviewer

    617 GitHub stars~3.5k tokensUpdated 21 days ago
    Testing & QAAuto-check passed
  • Architecture Decisions and ADRs

    first-fluke/oh-my-agent

    Evaluates system boundaries and tradeoffs and writes architecture recommendations, option comparisons or ADRs, with a Mermaid diagram when structure changes.

    1.3k GitHub stars~2.6k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from testdouble/han

All 54 skills in this repo
  • HTML Summary

    testdouble/han

    Convert a stakeholder summary markdown file into a single self-contained HTML executive report — bottom line and decision asks up front, supporting detail later — styled with a Test Double-derived…

    279 GitHub stars~2.9k tokensUpdated 6 days ago
    Auto-check passed
  • Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate.

    279 GitHub stars~3.4k tokensUpdated 6 days ago
    Auto-check passed
  • Guidance

    testdouble/han

    Authoritative guidance for building Claude Code skills, agents, and plugins, plus init and update steps that install and refresh the plugin-building skills in the current repository.

    279 GitHub stars~1.8k tokensUpdated 6 days ago
    Auto-check passed
  • Han Release

    testdouble/han

    Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve…

    279 GitHub stars~8.6k tokensUpdated 6 days ago
    Auto-check passed
  • Plan Implementation

    testdouble/han

    Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.

    279 GitHub stars~9.5k tokensUpdated 6 days ago
    Auto-check passed
  • Refactor

    testdouble/han

    Restructure existing code without changing its behavior, through a test-gated refactoring loop: a named target, a green suite over that target before any edit, a planned sequence of small named…

    279 GitHub stars~3.1k tokensUpdated 6 days ago
    Auto-check passed

Questions about Pairing

What does Pairing do?

Build work collaboratively in reviewable pieces, handing each piece back for review before starting the next, so the person stays in the lead and steers while the work happens instead of reviewing a…. Pairing is an agent skill from testdouble/han. Build work collaboratively in reviewable pieces, handing each piece back for review before starting the next, so the person stays in the lead and steers while the work happens instead of reviewing a finished result.

When should I use Pairing?

Pairing fits situations like: someone says to pair with them on something; asks to collaborate rather than direct; wants to review as it goes; wants to guide the work piece by piece — on code.

How do I install Pairing in Claude Code?

Run `npx skills add testdouble/han --skill pairing -a claude-code`. Or copy the skill folder (han-core/skills/pairing in testdouble/han) into .claude/skills/pairing in your project. Claude Code loads it when a task matches its description.

How do I install Pairing in Codex?

Run `npx skills add testdouble/han --skill pairing -a codex`. Or copy the skill folder (han-core/skills/pairing in testdouble/han) into .agents/skills/pairing in your project. Codex loads it when a task matches its description.

Can I use Pairing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add testdouble/han --skill pairing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pairing, .gemini/skills/pairing, .github/skills/pairing and .opencode/skills/pairing in your project.

What does Pairing need to run?

Going by SKILL.md and its folder, Pairing needs the command-line tools its instructions call (bash). Its frontmatter pre-approves these tools: Read, Write, Edit, Glob, Grep, Skill, Bash(find *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").

Does Pairing access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Pairing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Pairing use?

Pairing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pairing use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pairing?

Skills that share tags, products or a category with Pairing: Implement (open-octo/octo-agent, 125 stars), Development Workflow (runceel/ReactiveProperty, 944 stars), SDK (kortix-ai/suna, 20k stars) and Technical Design Doc Creator (tech-leads-club/agent-skills, 7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pairing?

testdouble (a GitHub organization) maintains it in testdouble/han, which has 279 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 1, 2026.

Source: testdouble/han on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.