From bbce2f91d6d83d0b7a731808ac13eca2c2a0023c Mon Sep 17 00:00:00 2001 From: Matt Pocock Date: Tue, 14 Jul 2026 19:28:20 +0100 Subject: [PATCH 1/2] Add to-questionnaire skill (in-progress) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A user-invoked skill that turns a decision you can't fully answer into a Markdown discovery questionnaire to hand to one person async, or fill out over a meeting. Its defining move: it grills you about the *send* (who it's going to, what you need back), never the subject — sidestepping the "I don't know, I don't know" spiral you'd hit if it interrogated you on the very knowledge you're offloading. The written questions then target the gap between what the recipient knows and what you need. Landed in in-progress/ to shake out over a few real sends before promoting. Co-Authored-By: Claude Opus 4.8 (1M context) --- skills/in-progress/README.md | 1 + skills/in-progress/to-questionnaire/SKILL.md | 28 +++++++++++++++++++ .../to-questionnaire/agents/openai.yaml | 5 ++++ 3 files changed, 34 insertions(+) create mode 100644 skills/in-progress/to-questionnaire/SKILL.md create mode 100644 skills/in-progress/to-questionnaire/agents/openai.yaml diff --git a/skills/in-progress/README.md b/skills/in-progress/README.md index 83ef669..18be9a0 100644 --- a/skills/in-progress/README.md +++ b/skills/in-progress/README.md @@ -9,3 +9,4 @@ Skills that are still being developed. They're not ready to ship — expect roug - **[writing-shape](./writing-shape/SKILL.md)** — Take a markdown file of raw material and shape it into an article paragraph by paragraph, arguing format choices at each step. - **[claude-handoff](./claude-handoff/SKILL.md)** — Hand the current conversation off to a fresh background agent that picks up the work immediately, seeded with a handoff summary via `claude --bg`. User-invoked. - **[setup-ts-deep-modules](./setup-ts-deep-modules/SKILL.md)** — Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files, tests exercising it through those. User-invoked. +- **[to-questionnaire](./to-questionnaire/SKILL.md)** — Turn a decision you can't fully answer into a Markdown questionnaire for someone else to fill in async, or over a meeting. It grills you about the send (who it's for, what you need back), not the subject. User-invoked. diff --git a/skills/in-progress/to-questionnaire/SKILL.md b/skills/in-progress/to-questionnaire/SKILL.md new file mode 100644 index 0000000..822eb9d --- /dev/null +++ b/skills/in-progress/to-questionnaire/SKILL.md @@ -0,0 +1,28 @@ +--- +name: to-questionnaire +description: Turn a decision you can't fully answer into a questionnaire for someone else to fill in. +disable-model-invocation: true +--- + +Turn something the user can't answer alone into a **questionnaire** — a Markdown document they hand to one person to fill in async, or fill out together over a meeting. The recipient holds knowledge the user lacks; the questionnaire pulls it out of them. + +**Grill the send, not the subject.** The user is offloading this precisely because they don't hold the answers, so interrogating them about the subject just yields "I don't know, I don't know" — the failure this skill exists to avoid. Interview the user only about the _send_, which they can always answer: who it goes to, and what they need back. The questions in the document then target the **gap** between what the recipient knows and what the user needs. + +1. **Who is it going to?** Ask, in one exchange, the recipient's role, expertise, and relationship to the user. This fixes the questionnaire's tone and how much context it must carry. Done when you know who the recipient is and what they know that the user doesn't. + +2. **What do you need back?** Ask, in one exchange, the specific decisions or facts the user can't resolve alone and needs from this person. Done when you have a concrete list of what the user must walk away able to do or decide. + +3. **Write the questionnaire.** Draft questions aimed at the gap from steps 1–2, following the Document structure below. Write it to `to-questionnaire-.md` in the current directory (slug from the topic) and report the path. Done when the file exists and every item the user named in step 2 is covered by a question. + +## Document structure + +Frame the whole document as a **discovery questionnaire**: the user lacks context, the recipient holds it. Top to bottom: + +- **Metadata header** — purpose, who's asking, who's answering, and how the answers will be used. Naming the downstream decision gets sharper answers. +- **Context** — one paragraph orienting a recipient who wasn't in the user's head. Not a page. +- **How to answer** — one line: the deadline and rough effort, and explicit permission to give partial answers or flag unknowns. +- **Questions** — grouped under `##` headings by theme once there are more than a handful, ordered most-important-first (async means you may only get one pass). Each question carries: + - one idea only — no compound questions; + - a one-line _why this matters_ only where the question could be misread or invite a throwaway answer, never on a self-evident one; + - an answer stub (`> `) directly beneath, so there is an obvious place to type. +- **Catch-all** — a closing "anything we didn't ask that we should know?" diff --git a/skills/in-progress/to-questionnaire/agents/openai.yaml b/skills/in-progress/to-questionnaire/agents/openai.yaml new file mode 100644 index 0000000..a58d147 --- /dev/null +++ b/skills/in-progress/to-questionnaire/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "To Questionnaire" + short_description: "Front-load questions into a doc for someone to answer" +policy: + allow_implicit_invocation: false From 7f68c06dcb1a840950cb28fc634b79da6c65e94d Mon Sep 17 00:00:00 2001 From: Matt Pocock Date: Tue, 14 Jul 2026 19:31:22 +0100 Subject: [PATCH 2/2] Cut no-op justification and template the questionnaire structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the sentence explaining why interrogating the subject fails — the model already obeys it, so it was paying load to say nothing. Replace the bulleted document structure with an XML-tagged , mirroring to-spec's : headings with prose fill-in guidance and a nested . Co-Authored-By: Claude Opus 4.8 (1M context) --- skills/in-progress/to-questionnaire/SKILL.md | 45 +++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/skills/in-progress/to-questionnaire/SKILL.md b/skills/in-progress/to-questionnaire/SKILL.md index 822eb9d..1423375 100644 --- a/skills/in-progress/to-questionnaire/SKILL.md +++ b/skills/in-progress/to-questionnaire/SKILL.md @@ -6,7 +6,7 @@ disable-model-invocation: true Turn something the user can't answer alone into a **questionnaire** — a Markdown document they hand to one person to fill in async, or fill out together over a meeting. The recipient holds knowledge the user lacks; the questionnaire pulls it out of them. -**Grill the send, not the subject.** The user is offloading this precisely because they don't hold the answers, so interrogating them about the subject just yields "I don't know, I don't know" — the failure this skill exists to avoid. Interview the user only about the _send_, which they can always answer: who it goes to, and what they need back. The questions in the document then target the **gap** between what the recipient knows and what the user needs. +**Grill the send, not the subject.** Interview the user only about the _send_, which they can always answer: who it goes to, and what they need back. The questions in the document then target the **gap** between what the recipient knows and what the user needs. 1. **Who is it going to?** Ask, in one exchange, the recipient's role, expertise, and relationship to the user. This fixes the questionnaire's tone and how much context it must carry. Done when you know who the recipient is and what they know that the user doesn't. @@ -16,13 +16,38 @@ Turn something the user can't answer alone into a **questionnaire** — a Markdo ## Document structure -Frame the whole document as a **discovery questionnaire**: the user lacks context, the recipient holds it. Top to bottom: +Frame the document as a **discovery questionnaire**: the user lacks context, the recipient holds it. Order questions most-important-first — async means you may only get one pass — and group them under `##` headings by theme once there are more than a handful. Write it using the template below. -- **Metadata header** — purpose, who's asking, who's answering, and how the answers will be used. Naming the downstream decision gets sharper answers. -- **Context** — one paragraph orienting a recipient who wasn't in the user's head. Not a page. -- **How to answer** — one line: the deadline and rough effort, and explicit permission to give partial answers or flag unknowns. -- **Questions** — grouped under `##` headings by theme once there are more than a handful, ordered most-important-first (async means you may only get one pass). Each question carries: - - one idea only — no compound questions; - - a one-line _why this matters_ only where the question could be misread or invite a throwaway answer, never on a self-evident one; - - an answer stub (`> `) directly beneath, so there is an obvious place to type. -- **Catch-all** — a closing "anything we didn't ask that we should know?" + + +# + +**Purpose:** why this questionnaire exists and the decision riding on it. + +**From:** — **To:** — **How your answers will be used:** + +## Context + +One paragraph orienting a recipient who wasn't in the user's head. Enough to answer well, not a page. + +## How to answer + +Deadline and rough effort. Partial answers and "I don't know" are useful — flag anything you're unsure of rather than skipping it. + +## + +One `##` section per theme. Under each, its questions, most-important-first. Every question is one idea — never compound — with an answer stub directly beneath, and a one-line _why this matters_ only where the question could be misread or invite a throwaway answer. + + +### What load is the system expected to handle at launch? + +_Why this matters: it decides whether we provision for burst traffic now or defer it._ + +> + + +## Anything else? + +A closing catch-all: anything we didn't ask that we should know? + +