Skip to content
Back to skills

Pair Capability Grill

ASecurity

Interviews one question at a time, always with a recommendation, after exploring the KB/codebase first; sync mode drives systematic AI-human alignment on a story until shared understanding is confirmed. Invoke directly to interview on any topic ('grill me on the requirements'). Composed by /pair-process-refine-story and a future /brainstorm (planned — #230). Write-free — returns the synthesis, never writes adoption or issues.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
businessgoapi

Works with

  • api

Security analysis

A100/100

Scanned November 7, 2026

npx -y skills add learnn-com/designn --skill pair-capability-grill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pair Capability Grill?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pair Capability Grill
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/learnn-com-pair-capability-grill/badge)](https://www.skillsdirectory.com/skills/learnn-com-pair-capability-grill)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pair-capability-grill
description: "Interviews one question at a time, always with a recommendation, after exploring the KB/codebase first; sync mode drives systematic AI-human alignment on a story until shared understanding is confirmed. Invoke directly to interview on any topic ('grill me on the requirements'). Composed by /pair-process-refine-story and a future /brainstorm (planned — #230). Write-free — returns the synthesis, never writes adoption or issues."
version: 0.4.1
author: Foomakers
---

# /pair-capability-grill — Interview Engine

Ask one question at a time, always with a recommended answer, after exploring the KB/codebase for anything already answerable. `interview` mode explores a free topic; `sync` mode systematically aligns AI and human on every aspect of a story. Never writes — returns the synthesis to the caller.

## Core Rules

- **Never answer for the human.** The recommendation attached to each question is a proposal, not a stand-in for consent. If no reply has been given, the turn ends and the session waits for real input — treating a missing reply as acceptance, or drafting what the human "would probably say," breaks the interview. Grill is HITL by design.
- **One question per turn.** Ask exactly one question at a time; never batch multiple questions.
- **Write-free.** Never write adoption files or PM tool issues in any mode; the only file grill ever writes is the optional `.pair/working/` handoff, on request or interruption.

## Arguments

| Argument   | Required   | Description                                                                                                                    |
| ---------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `$mode`    | No         | `interview` (default) or `sync`.                                                                                                 |
| `$topic`   | No         | Freeform subject to explore in `interview` mode. If omitted, the opening question asks for it.                                  |
| `$story`   | Conditional| Target story identifier. Required for `sync` mode unless the composing skill already supplies a loaded story via `$context`.    |
| `$context` | No         | Caller-supplied context bundle (e.g. brainstorm's seed text, refine-story's current story body) so grill skips re-fetching it.   |
| `$aspects` | No         | Comma-separated subset of the [Sync Coverage Checklist](#sync-coverage-checklist) to focus on (e.g. `risks,dependencies`). `sync` only. If omitted, all six aspects are covered.|

## Modes

### Interview Mode (default)

Freeform exploration of `$topic`. No fixed checklist — the question queue grows from what Step 1's exploration leaves open and from what answers reveal. Used standalone or composed by `/brainstorm` (phase 1, planned — #230) to produce a raw requirements blob.

### Sync Mode

Systematic AI↔human alignment on a specific story, covering all six aspects of the [Sync Coverage Checklist](#sync-coverage-checklist) (goal, AC, edge cases, dependencies, design, risks). Ends only at explicit shared-understanding confirmation. Used standalone (e.g. "sync me on #42") or composed by `/pair-process-refine-story` phase 0.

## Algorithm

### Step 0: Detect Mode and Target

1. **Check**: Is `$mode` provided?
2. **Skip**: If provided, use it.
3. **Act**: Default to `interview` when omitted.
4. **Act**: If `$mode: sync`, resolve the target story:
   - Use `$story` if provided.
   - Else use a story already loaded by the composing skill via `$context`.
   - Else **HALT**: "sync mode needs a target story — provide `$story` or invoke via `/pair-process-refine-story`."
5. **Verify**: Mode is `interview` or `sync`; for `sync`, a target story is resolved.

### Step 1: Explore Before Asking

1. **Act**: Before drafting any question, gather what is already knowable:
   - `interview`: read the [PRD](../../../.pair/adoption/product/PRD.md), related epics/issues (per [way-of-working.md](../../../.pair/adoption/tech/way-of-working.md)), and grep the codebase for the topic's terms.
   - `sync`: read the target story's current body (sections already populated), [architecture.md](../../../.pair/adoption/tech/architecture.md), [tech-stack.md](../../../.pair/adoption/tech/tech-stack.md), [way-of-working.md](../../../.pair/adoption/tech/way-of-working.md), prior decisions in decision-log/adr, and the codebase for the touched components.
2. **Act**: For every fact resolvable this way, mark it **explored** with its source. It is never asked — anything answerable by exploring KB/codebase is explored instead of asked.
3. **Verify**: An explored/unresolved map exists before the first question is asked.

### Step 2: Build the Question Queue

1. **Check**: `interview` or `sync`?
2. **Act (interview)**: Decompose `$topic` into the open sub-questions left after Step 1. If `$topic` is omitted, the opening question of the queue is simply "what's the topic?". The queue has no fixed size — it grows as answers reveal new sub-questions.
3. **Act (sync)**: Take the [Sync Coverage Checklist](#sync-coverage-checklist), restricted to `$aspects` if given. Drop any aspect fully resolved in Step 1; queue the remaining aspects in checklist order (already risk-ordered).
4. **Verify**: Queue built — topic-driven (interview) or checklist-driven (sync).

### Step 3: Ask One Question at a Time

1. **Act**: Pop the next queue item. Ask exactly one question, always with a recommended answer derived from Step 1's findings, project precedent, or best judgment:

   > [Question]?
   > **Recommendation**: [proposed answer] — [why].

2. **Act**: Read the human's reply:
   - **Accepts the recommendation** → record it as the answer.
   - **Gives a different answer** → record that instead.
   - **"Don't know"** → the recommendation becomes the **provisional answer**, flagged as an assumption in the synthesis.
   - **Raises a new sub-question** → insert it into the queue before continuing.
3. **Never answer on the human's behalf.** The recommendation is a proposal, not a stand-in for consent — if no reply has been given yet, the turn ends and the session waits for real input. Treating a missing reply as acceptance, or drafting what the human "would probably say," breaks the interview: grill is HITL by design.
4. **Verify**: Exactly one answer recorded per question. Never batch multiple questions in a single turn.

### Step 4: Repeat Until Explicit Shared Understanding

1. **Check**: Is the queue empty?
2. **Skip**: If not empty, return to Step 3.
3. **Act**: When the queue empties, ask directly:

   > Do we have shared understanding here? (yes / no — anything to add?)

4. **Verify**: Only an explicit **yes** ends the session. A **no**, or any new concern raised, adds items to the queue and returns to Step 3. The session never auto-exits on an empty queue alone.

### Step 5: Assemble the Synthesis

1. **Act**: Compile recorded answers, explored facts (with source), and flagged assumptions:
   - `interview` → raw requirements blob (topic, findings per sub-question, open items, assumptions).
   - `sync` → alignment synthesis mapped to the six [Sync Coverage Checklist](#sync-coverage-checklist) aspects, ready to drop into the matching [user-story-template.md](../../../.pair/knowledge/guidelines/collaboration/templates/user-story-template.md) (resolve override-first — [template resolution](../../../.pair/knowledge/guidelines/technical-standards/ai-development/skill-conventions/template-resolution.md)) sections.
2. **Verify**: Synthesis accounts for every answered/explored/assumed item — nothing silently dropped.

### Step 6: Return — Never Write

1. **Act**: Return the synthesis to the caller (composed invocation) or print it in conversation (standalone). **Never** write to adoption files or PM tool issues in either mode — that stays with the composer (`/brainstorm`, `/pair-process-refine-story`) or the human.
2. **Act (standalone, or session interrupted before Step 4's explicit yes)**: Offer an optional handoff file:

   > Save this as a handoff file in `.pair/working/`? (y/n)

   If yes, create `.pair/working/` if it doesn't exist and write `grill-<mode>-<slug>-<YYYYMMDD-HHMM>.md` with the synthesis-so-far plus per-aspect/per-topic coverage state (covered / explored / open).
3. **Verify**: No adoption or PM tool write occurred, regardless of mode or handoff.

## Sync Coverage Checklist

Ordered by risk of omission, except Goal always first — it anchors every other aspect; the remaining five follow the story template's functional-first, technical-last order.

| # | Aspect       | Story Template Section(s)                                                          | Explore First                                                     | Sample Probe                                             |
| - | ------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | --------------------------------------------------------- |
| 1 | Goal         | Story Statement                                                                       | PRD, parent epic body                                               | "As a [persona], I want [outcome], so that [benefit] — confirm or adjust?" |
| 2 | AC           | Acceptance Criteria → Functional Requirements (Given-When-Then), Business Rules      | Story's existing AC draft, similar refined stories                 | One Given-When-Then scenario at a time                    |
| 3 | Edge Cases   | Edge Cases and Error Handling                                                         | Codebase error-handling patterns, existing edge cases on the story | "What happens when [input/dependency] fails?"              |
| 4 | Dependencies | Dependencies and Coordination                                                         | PM tool backlog graph, epic breakdown                               | "Does this depend on, or block, another story?"            |
| 5 | Design       | Technical Analysis → Implementation Approach, Key Components, Integration Points     | architecture.md, tech-stack.md, codebase                           | "Which existing component/pattern implements this?"        |
| 6 | Risks        | Technical Risks and Mitigation                                                        | Story's existing risk table, decision-log/adr precedent            | "What's most likely to break or slip here?"                |

Aspects already covered by Step 1's exploration, or answered earlier in the same conversation, are skipped and marked explored rather than asked — the checklist stays fixed, but only genuinely open aspects consume a question.

## Output Format

```text
GRILL SESSION COMPLETE:
├── Mode:        [interview | sync]
├── Topic/Story: [topic string | #ID: Title]
├── Coverage:    [N/6 aspects covered (sync) | topics explored: list (interview)]
├── Assumptions: [list of "don't know" → recommendation-as-assumption items, or none]
├── Explored:    [KB/codebase sources consulted instead of asked]
├── Confirmed:   [explicit shared understanding: Yes]
└── Handoff:     [None | .pair/working/<file>]

SYNTHESIS:
[the raw requirements blob (interview) or the six-aspect alignment synthesis (sync)]
```

## Composition Interface

When composed by `/brainstorm` (phase 1, planned — #230):

- **Input**: `$mode` omitted (defaults `interview`); `$topic` from the free theme text or the `$root` issue's body; `$context` carries the issue if `$root` was given.
- **Output**: Returns the raw requirements blob (R3.7). `/brainstorm` carries it into phase 2 (domain integration) — grill never touches the PM tool or adoption files itself.

When composed by `/pair-process-refine-story` (phase 0, future extension):

- **Input**: `$mode: sync`; `$story` is the story being refined; `$context` carries the current (possibly partial) story body so grill doesn't re-fetch it.
- **Output**: Returns the alignment synthesis, pre-mapped to Refined User Story Template sections. `/pair-process-refine-story` merges it into the body it writes via `/pair-capability-write-issue` — grill itself never calls `/pair-capability-write-issue`.

When invoked **standalone**:

- No composition context required (decision Q8). `$mode` defaults to `interview`; if `$topic` is also omitted, the opening question asks for it directly. `sync` still requires `$story`.
- Synthesis is printed in conversation. A handoff file in `.pair/working/` is offered, never written silently.

## Example Transcripts

### Interview Mode (standalone, free topic)

```text
> /grill
AI:  What's the topic?
     Recommendation: none — this is genuinely open, your call.
You: caching strategy for the API layer
AI:  [explores codebase: finds no cache layer; checks tech-stack.md: Redis already adopted]
     Redis is already in tech-stack.md but unused for caching — reuse it or introduce another store?
     Recommendation: reuse Redis — avoids a new dependency.
You: don't know
AI:  [records "reuse Redis" as provisional answer, flagged as assumption]
     What's the target cache TTL?
     Recommendation: 5 minutes — matches the existing session-token TTL in auth config.
You: agreed
AI:  Do we have shared understanding here? (yes / no)
You: yes
AI:  GRILL SESSION COMPLETE — Mode: interview · Assumptions: 1 (store choice) · Handoff: none
```

### Sync Mode (composed by /pair-process-refine-story, phase 0)

```text
$mode: sync, $story: #142, $context: <current draft body>
AI:  [explores story body: Goal and AC present; Design, Risks missing]
     Goal and AC already covered — skipping.
     Who owns retry logic if the downstream call times out — caller or this story?
     Recommendation: this story — the caller has no visibility into the downstream contract.
You: agreed
AI:  [continues through Edge Cases, Dependencies, Design]
     What's most likely to break or slip here?
     Recommendation: the third-party rate limit — unconfirmed quota.
You: yes, flag that
AI:  Do we have shared understanding here? (yes / no)
You: yes
AI:  GRILL SESSION COMPLETE — Mode: sync · Coverage: 6/6 · returns alignment synthesis to /refine-story
```

## Edge Cases and Error Handling

- **User answers "don't know"**: the recommendation becomes the provisional answer, flagged as an assumption in the synthesis — never silently dropped, never blocking.
- **Session interrupted** (human stops, connection drops, or the composing skill's turn budget ends) before Step 4's explicit confirmation: offer the partial synthesis as a handoff file in `.pair/working/` rather than discarding it.
- **Aspect already answered earlier in the same conversation**: skip it, mark it explored with a reference to where it was answered — never re-ask.

## HALT Conditions

- `$mode: sync` with no `$story` resolvable from arguments or composer context (Step 0).

## Graceful Degradation

See [graceful degradation](../../../.pair/knowledge/guidelines/technical-standards/ai-development/skill-conventions/graceful-degradation.md) (composing skill not installed → this skill still runs standalone) for the standard scenarios. Additional cases:

- If KB/codebase exploration is unavailable (no repo access), skip Step 1 (nothing marked explored), ask every aspect/topic question directly, and note in the synthesis that explore-first was skipped.
- If `.pair/working/` cannot be created or written, present the handoff content inline in conversation and tell the human to save it manually.

## Notes

- **Write-free by design**: single-writer responsibility stays with composers. Grill never writes adoption files or PM tool issues in any mode; the only file it ever writes is the optional `.pair/working/` handoff, on request or interruption.
- **Recommendation always present**: every question carries a recommended answer, adapted from mattpocock `grilling`.
- **Never auto-exit**: the exit condition is always an explicit shared-understanding confirmation — an empty question queue alone is not enough to end a session.
- The `.pair/working/` handoff format here is a minimal, self-contained default — expect it to align with the checkpoint capability once that lands, without changing grill's write-free contract.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.