interview — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited interview (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Resolve scope ambiguity before non-trivial work by batching 2–4 task-specific multiple-choice questions through AskUserQuestion, then proceeding with a short scope brief that reflects the answers.
/interview invoked explicitly (with or without a task description).The structured tool (AskUserQuestion) earns its keep when the user can resolve scope in one click rather than a paragraph of free-text Q&A.
Skip — and announce the skip — when any of these hold:
/release, /ci-status, gh pr list, etc.ExitPlanMode, not this skill. AskUserQuestion is for picking among options, not approving a finished plan.If the task is trivial (per § When NOT to use), announce the skip and continue:
Skipping interview — this looks trivial. Proceeding directly.
Do not refuse silently. The skip is a signal, not an absence.
Read the conversation context. List, internally, what's already specified — goal, files touched, mode, constraints, acceptance. Do not re-ask anything the context already answers. A question whose answer is already in the prompt is a tell that the model didn't read.
Each question must clear the bar in § Question quality bar below. If you can't write 2 that clear the bar, ask 1 (sequential calls are fine) or skip and announce why. Don't quota-fill to reach 4.
AskUserQuestion callPass all questions in one tool call. Each options array has 2–4 entries; never 1, never 5+. The user UI auto-adds "Other" — do not add it manually. Use multiSelect: true only when the choices are genuinely not mutually exclusive.
Sequential calls are the rare exception: only when a later question's option set genuinely depends on an earlier answer (e.g., "which file?" depends on "which mode?").
After answers come back, write a 2–3 sentence brief that:
If the user types STOP during the brief, halt — do not finish the thought, do not start the work.
Append to memory/<UTC-date>/log.md:
## interview -- HH:MM UTC
- **Result**: OP | SKIPPED-TRIVIAL | INTERRUPTED
- **Questions**: <count>
- **Brief**: <one-line summary of the scope brief>
- **Observation**: <one sentence on whether the questions landed (changed the work, or were noise)>Then run the qualify/improve loop per context/rules/memory.md. If a question pattern landed especially well or poorly across runs, that may merit a line in memory/MEMORY.md.
Every question must satisfy all of:
multiSelect: true and acknowledge they don't).ExitPlanMode. The two tools are not interchangeable.ExitPlanMode.Invocation: /interview refactor the audit skill
BAD (generic filler):
What are your constraints for this refactor? Options: Time-constrained / Quality-first / Other
GOOD (task-specific):
AskUserQuestion:
question: "Which axis of the audit skill is most worth changing?"
header: "Refactor axis"
options:
- label: "Sub-agent prompts"
description: "Tighten PM/Implementer/Critic/Explorer briefs to reduce overlap"
- label: "Synthesis step"
description: "Replace the tier-ranked report with a different output shape"
- label: "Trigger conditions"
description: "Change when the skill fires (manual vs heartbeat vs both)"
multiSelect: false
question: "What does success look like?"
header: "Success signal"
options:
- label: "Fewer duplicate findings"
description: "Sub-agents stop reporting the same issue under different framings"
- label: "Faster wall-clock"
description: "Audit completes meaningfully sooner without losing coverage"
- label: "Higher action-rate"
description: "More of the top-3 recommendations actually get worked on"
multiSelect: falseScope brief (after answers come back):
Refactoring the audit skill to tighten the four sub-agent prompts so duplicate findings drop. Holding wall-clock and trigger conditions constant. Will land as edits to .claude/skills/harness-audit/SKILL.md only.Invocation: /interview add a "dry-run" mode to /release
BAD (generic filler):
Any concerns about backward compatibility? Options: Yes / No / Maybe
GOOD (task-specific):
AskUserQuestion:
question: "What does --dry-run skip?"
header: "Skip set"
options:
- label: "Only the push + tag"
description: "Compute version, write CHANGELOG, commit locally — stop before pushing"
- label: "Push + tag + CHANGELOG promote"
description: "Compute version only, print intended actions, no file changes"
- label: "Everything except CI poll"
description: "Do the full release but skip the CI verification step"
multiSelect: false
question: "How does the user invoke it?"
header: "Flag shape"
options:
- label: "--dry-run flag"
description: "/release --dry-run, default off"
- label: "DRY_RUN env var"
description: "DRY_RUN=1 /release, no flag"
- label: "Separate skill"
description: "/release-preview as its own SKILL.md"
multiSelect: falseScope brief:
Adding--dry-runto/releasethat computes the version and prints intended actions, but writes no files and runs no git operations. Implementation goes in.claude/skills/release/SKILL.mdonly.
The contrast is the teaching tool: same axis, but the GOOD form's options would only make sense for this task.
AskUserQuestion contract| Field | Shape | Notes |
|---|---|---|
question | string | Full question, ends in ? |
header | string ≤12 chars | Short chip/tag shown above the question |
options | array, 2–4 entries | Each has label (1–5 words) + description (one line, context/tradeoff). No Other — auto-added. |
multiSelect | bool, default false | true when choices aren't mutually exclusive |
questions | array, 1–4 entries | Multiple questions batch into one tool call |
AskUserQuestion is the wrong tool| Situation | Use instead |
|---|---|
| User needs to approve a finished plan | ExitPlanMode |
| Question requires free-text input (a filename, a number) | Plain prose question in chat |
| Question is one of many in a deep tree | Sequential AskUserQuestion calls — but reconsider whether you should be reading code first |
| Want to confirm before a destructive action | Plain prose confirmation in chat |
Future skills wanting structured elicitation can copy the option-shape contract above — /interview is the in-tree reference pattern.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.