skills/ask-user/SKILL.md
Reusable pattern for presenting the user with explicit choices and gating execution until they respond. Used by other skills when a decision point requires human input before proceeding. Platform-agnostic — works on Telegram (inline buttons), Discord, CLI, or any agent with a message tool.
npx skillsauth add garrytan/gbrain ask-userInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A formalized pattern for presenting users with 2-4 options and stopping execution until they respond. This is the canonical way to gate on user input in any GBrain-powered agent.
This is NOT a traditional async/await. In an LLM agent, "gating" means:
Present choices as a clear question with numbered or labeled options:
🔀 **How should I handle this?**
[context about the decision — 1-3 lines max]
1. **Option A** — short description
2. **Option B** — short description
3. **Option C** — short description
4. **Skip** — do nothing for now
If the platform supports interactive buttons, use them:
{
"message": "🔀 **How should I handle this?**\n\n<context>",
"buttons": [
{ "label": "Option A — description", "value": "option_a" },
{ "label": "Option B — description", "value": "option_b" },
{ "label": "Skip", "value": "skip" }
]
}
clarify tool (OpenClaw agents)Some OpenClaw agents have a built-in clarify tool that presents choices natively:
clarify(
question: "How should I handle this?",
choices: [
"Option A — description",
"Option B — description",
"Option C — description",
"Skip for now"
]
)
After presenting choices, you MUST stop your turn. Do not:
Instead:
When the user responds:
Users sometimes type instead of clicking. Handle gracefully:
Signal the decision type:
1-3 lines maximum. The user should understand the decision in under 5 seconds.
Format: Action verb — brief qualifier
📋 **Phase 2: Google Contacts**
I can import your Google Contacts to seed the people/ directory.
This creates a brain page for each real contact (~200 pages).
1. **Import via ClawVisor** — secure credential gateway
2. **Import via direct OAuth** — simpler, agent holds tokens
3. **Import from Google Takeout export** — offline, from file
4. **Skip** — move to the next phase
🔀 **Where should this go?**
Meeting notes from call with Jane Smith. She already has a page at
people/jane-smith.md and there's a deal page at deals/acme-corp.md.
1. **Merge into Jane's page** — add to her timeline
2. **Add to Acme deal page** — this was primarily a deal discussion
3. **New meeting page** — standalone at meetings/2026-01-15-jane-acme.md
4. **Skip** — don't file this
⚠️ **About to delete 847 stale cache files (2.3 GB)**
These haven't been accessed in 90+ days. They can be re-fetched
but that takes ~4 hours.
1. **Delete them** — free up space now
2. **Archive first** — upload to cloud storage, then delete
3. **Keep them** — no changes
4. **Show me the list** — let me review before deciding
This pattern is used by:
When building a new skill that needs user input at a decision point, reference this pattern rather than inventing a new one.
The skill's "output" is the choice-gate message itself, structured as:
{emoji-prefix} **{question}**
{1-3 lines of context}
1. **{Option A label}** — {short qualifier}
2. **{Option B label}** — {short qualifier}
3. **{Skip / Cancel}** — {what skipping means}
After emitting this, the skill stops the turn. No further tool calls, no preemptive action, no follow-up message until the user responds. The user's response triggers the next turn, where the calling skill branches on the chosen option.
tools
Validate and auto-repair YAML frontmatter on brain pages. Catches malformed pages before they enter the brain (missing closing ---, nested quotes, slug mismatches, null bytes, empty frontmatter, YAML parse failures). Wraps the `gbrain frontmatter` CLI for agent-driven workflows.
data-ai
Trace one idea's evolution through the brain: first mention, best articulation, related concepts, reversals, contradictions, abandoned branches, and the current live version. Use for single-idea conceptual lineage, not broad concept-map synthesis or structured entity metrics.
data-ai
Route to Venus (sharp executive-assistant voice persona). Used for logistics — calendar, tasks, recent messages, brain lookups — at sub-second phone-call latency. The default voice persona unless DEFAULT_PERSONA=mars is set.
tools
Route to Mars (introspective thought partner / demo showman voice persona). Used when the operator wants depth, meaning, or impressive social demos rather than logistics. Mars handles SOLO mode (philosophy, presence, patterns) and DEMO mode (tool-driven showmanship) automatically.