From e5932a7a47e5cae312c1b814ce6194b09aa27be1 Mon Sep 17 00:00:00 2001 From: Matt Pocock Date: Mon, 6 Jul 2026 13:48:56 +0100 Subject: [PATCH 1/2] wayfinder/grilling: stop the agent grilling itself Students reported /wayfinder picking a grilling ticket and grilling itself instead of turning to the human (confirmed by @_noshit / @maudova; Matt: "that sounds like a bug"). Root cause: a grilling line written for the live-human case ("explore the codebase instead") reads as license to answer questions autonomously once wayfinder runs it in a resolve-the-ticket frame. Fix with affirmative framing (no negative-space "don't"): - grilling: split facts (look up) from decisions (put to the human, wait) - wayfinder Grilling ticket type: a back-and-forth with the human, who answers each question - wayfinder Invocation: grilling always runs with the human in the loop Co-Authored-By: Claude Opus 4.8 (1M context) --- skills/in-progress/wayfinder/SKILL.md | 10 ++++++---- skills/productivity/grilling/SKILL.md | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/skills/in-progress/wayfinder/SKILL.md b/skills/in-progress/wayfinder/SKILL.md index d7854ef..6549dd3 100644 --- a/skills/in-progress/wayfinder/SKILL.md +++ b/skills/in-progress/wayfinder/SKILL.md @@ -71,10 +71,12 @@ The answer isn't part of the body — it's recorded on resolution (see [Work thr ## Ticket Types -- **Research**: Reading documentation, third-party APIs, or local resources like knowledge bases. Creates a markdown summary as a linked asset. Use when knowledge outside the current working directory is required. -- **Prototype**: Raise the fidelity of the discussion by making a cheap, rough, concrete artifact to react to — an outline, a rough take, a stub, or UI/logic code via the /prototype skill. Links the prototype as an asset. Use when "how should it look" or "how should it behave" is the key question. -- **Grilling**: Conversation with the agent. Uses the /grilling and /domain-modeling skills. Asks one question at a time. The default case. -- **Task**: Manual work that must happen before a *decision* can be made — nothing to decide, prototype, or research, but the discussion is blocked until it's done. Signing up for a service so its API can be judged, provisioning access, moving data so its shape can be seen. This is the one type that *does* rather than decides — and it earns its place by unblocking a decision, not by delivering the destination. The agent automates it where it can; otherwise it hands the human a precise checklist. Resolved when the work is done; the answer records what was done and any resulting facts (credentials location, new URLs, row counts) later tickets depend on. +Every ticket is either **HITL** — human in the loop, worked *with* a human who speaks for themselves — or **AFK**, driven by the agent alone. A HITL ticket only resolves through that live exchange; the agent never stands in for the human's side of it (a grilling agent that answers its own questions has broken this). + +- **Research** (AFK): Reading documentation, third-party APIs, or local resources like knowledge bases. Creates a markdown summary as a linked asset. Use when knowledge outside the current working directory is required. +- **Prototype** (HITL): Raise the fidelity of the discussion by making a cheap, rough, concrete artifact to react to — an outline, a rough take, a stub, or UI/logic code via the /prototype skill. Links the prototype as an asset. Use when "how should it look" or "how should it behave" is the key question. +- **Grilling** (HITL): Conversation via the /grilling and /domain-modeling skills, one question at a time. The default case. +- **Task** (HITL or AFK): Manual work that must happen before a *decision* can be made — nothing to decide, prototype, or research, but the discussion is blocked until it's done. Signing up for a service so its API can be judged, provisioning access, moving data so its shape can be seen. This is the one type that *does* rather than decides — and it earns its place by unblocking a decision, not by delivering the destination. The agent drives it alone where it can (AFK); otherwise it hands the human a precise checklist (HITL). Resolved when the work is done; the answer records what was done and any resulting facts (credentials location, new URLs, row counts) later tickets depend on. ## Fog of war diff --git a/skills/productivity/grilling/SKILL.md b/skills/productivity/grilling/SKILL.md index e220063..219930f 100644 --- a/skills/productivity/grilling/SKILL.md +++ b/skills/productivity/grilling/SKILL.md @@ -7,6 +7,6 @@ Interview me relentlessly about every aspect of this plan until we reach a share Ask the questions one at a time, waiting for feedback on each question before continuing. Asking multiple questions at once is bewildering. -If a question can be answered by exploring the codebase, explore the codebase instead. +If a *fact* can be found by exploring the codebase, look it up rather than asking me. The *decisions*, though, are mine — put each one to me and wait for my answer. Do not enact the plan until I confirm we have reached a shared understanding. From ce908a622007e2c290415e25bdaed70198afc30b Mon Sep 17 00:00:00 2001 From: Matt Pocock Date: Mon, 6 Jul 2026 13:52:20 +0100 Subject: [PATCH 2/2] Add changeset for the self-grilling fix Co-Authored-By: Claude Opus 4.8 (1M context) --- .changeset/wayfinder-grilling-not-self.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .changeset/wayfinder-grilling-not-self.md diff --git a/.changeset/wayfinder-grilling-not-self.md b/.changeset/wayfinder-grilling-not-self.md new file mode 100644 index 0000000..8dbdd75 --- /dev/null +++ b/.changeset/wayfinder-grilling-not-self.md @@ -0,0 +1,12 @@ +--- +"mattpocock-skills": patch +--- + +Stop **`wayfinder`** grilling *itself* instead of the human, and classify ticket types by **HITL** / **AFK**. + +Students reported `/wayfinder` picking a **grilling** ticket and answering its own questions rather than turning to the human. Root cause: **`grilling`** carried a line written for the live-human case — "If a question can be answered by exploring the codebase, explore the codebase instead" — which, once `wayfinder` runs grilling inside a resolve-the-ticket frame, reads as license to answer questions autonomously and race the ticket to "resolved". + +Two changes: + +- **`grilling`** now splits *facts* (look them up) from *decisions* (put each one to the human and wait for their answer). +- **`wayfinder`** labels every ticket type **HITL** (human in the loop — Prototype, Grilling) or **AFK** (agent alone — Research; Task is either). A HITL ticket only resolves through the live exchange, so the "wait for the human" behaviour falls out of the label instead of being spelled out per type — a grilling agent that answers its own questions has, by definition, broken HITL.