How to use ask_user_question — the single operator-input channel for every interview question, including free-form fields via allow_other=true.
59
68%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./packages/decepticon/decepticon/skills/standard/soundwave/structured-questions/SKILL.mdask_user_question)The Soundwave interview has exactly one question channel:
ask_user_question — structured picker rendered in the CLI. For
free-form dimensions (organization name, IP ranges, contact addresses)
set allow_other=true and the picker appends a free-text fallback the
operator can type into.There is no prose-question path. Every operator-facing question goes through this tool.
ask_user_questionEVERY operator-facing question. There is no prose-question path. Provide
2–6 best-guess options for the dimension and always set allow_other=true
so the operator can override with a custom answer when none of your
predefined options fit.
Typical dimensions:
multi_select=true)allow_other=true, the operator types the
actual value via the Other fallback if your guesses miss.The tool pauses the run while the operator picks, then resumes with the
chosen label (or list of labels for multi-select, or free text when the
operator chose Other). Treat the returned value as authoritative.
(Recommended) on its labelOther option yourself — set allow_other=true and
the picker appends a free-text fallback that returns the operator's text
verbatimmulti_select=true; the tool returns the
list of chosen labels (in selection order)ask_user_question(
question="What is the operator's posture for this engagement?",
header="OPSEC",
options=[
{"label": "Quiet (Recommended)", "description": "Minimize detection signals; rate-limited recon"},
{"label": "Loud", "description": "Speed over stealth; full-rate scans permitted"},
{"label": "Stealth", "description": "Avoid detection at all costs; manual cadence"},
],
)allow_other for custom noteask_user_question(
question="Is the testing window strictly business hours (09:00–18:00, client TZ)?",
header="Window",
options=[
{"label": "Yes", "description": "Business hours only"},
{"label": "No", "description": "24x7 testing permitted"},
],
allow_other=True, # operator can type a custom window if neither fits
)ask_user_question(
question="Which kill-chain phases are in scope?",
header="Phases",
options=[
{"label": "Recon", "description": "Passive + active enumeration"},
{"label": "Exploitation", "description": "Initial access via discovered weaknesses"},
{"label": "Post-exploit", "description": "Privilege escalation, lateral movement, C2"},
{"label": "Exfiltration", "description": "Crown-jewel retrieval simulation"},
],
multi_select=True,
)ask_user_question — even
free-form fields go through the tool. Provide 2–4 best-guess options
allow_other=true so the operator can type a custom answer if your
guesses miss. The tool is the ONLY operator-input channel."Other" entry to options manually — set allow_other=true
and the picker appends the free-text fallback for you"Engagement Type" → use "Eng. type")ask_user_question picker during the
interview, and (b) the final bundle summary right before
complete_engagement_planning.0cf691e
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.