{"slug": "a-reader-pointed-out-my-ask-first-principle-only-covered-half-my-tool-so-i-fixed", "title": "A Reader Pointed Out My \"Ask First\" Principle Only Covered Half My Tool — So I Fixed It", "summary": "A developer updated SKILLmama, an AI tool that scans projects for capability gaps, after a reader pointed out that only one of its two entry points asked clarifying questions before searching. The fix adds a 'Confirm Constraints' step to the direct-query flow, where the AI asks one informed question based on the project stack and then waits for a response. The update is live in version 1.4.0 across all adapters.", "body_md": "In my [last article](https://dev.to/magithar/i-got-tired-of-asking-what-am-i-missing-so-i-made-my-ai-ask-first-g8), I added Flow B to SKILLmama: run `/skillmama`\n\nwith no arguments, and it scans your project, finds capability gaps, and **asks before it searches**. The whole point was to stop the AI from guessing what you need.\n\nThen [@alexshev](https://dev.to/alexshev) left this comment:\n\nHaving the AI ask first is underrated because it changes the contract from answer-generation to ambiguity-reduction. The best agents I have used spend a little time shrinking the unknowns before they touch code.\n\n\"Ambiguity-reduction over answer-generation.\" That's a sharper framing of the idea than I'd come up with myself. But reading it back, I realized the comment had quietly exposed a hole in my own design.\n\nSKILLmama has two entry points:\n\n`/skillmama`\n\nwith no args → scan → `/skillmama find me a job queue`\n\n→ scan → searchFlow B asked first. Flow A didn't.\n\nWhen you named a capability directly, SKILLmama scanned your project for stack context — and then went straight to searching and ranking. It reduced the ambiguity it could *see* from your files, but it never reduced the ambiguity it couldn't: budget, license, self-hosted vs. hosted, \"must work with what I already run.\"\n\nSo `/skillmama find me a job queue`\n\non a solo side project would happily return an enterprise-grade, infra-heavy #1 pick — technically the highest score, practically wrong for the person asking. The commenter's principle applied perfectly to Flow B. Flow A was still in answer-generation mode.\n\nI added one step to Flow A: **Confirm Constraints.**\n\n```\nPhase 0   — parse the request\nPhase 1   — scan the project\nPhase 1.5 — if no constraints were stated: ask ONE informed question, then STOP   ← new\nPhase 2   — derive search terms\nPhase 3   — search\n...\n```\n\nThe key word is *informed*. Because Phase 1 already scanned your stack, the question isn't a generic \"any constraints?\" — it's built from what it just found:\n\n```\nSKILLmama: I see you're on Python / FastAPI / PostgreSQL / Docker / OpenAI.\nBefore I search — any constraints? (e.g. self-hosted, open-source only,\nfree tier, must integrate with PostgreSQL). Reply \"none\" to search with no filters.\n```\n\nThen it stops and waits — same hard stop that makes Flow B collaborative.\n\nA clarifying question is only good if it doesn't fire when it shouldn't. So Phase 1.5 has guardrails:\n\n**1. It only fires when you gave no constraints.** If you already said `find me an open-source job queue`\n\n, the constraint is on the table — it skips the question and searches immediately. No nagging.\n\n**2. It degrades gracefully.** If there are no project files to scan (empty folder, fresh repo), it doesn't print a broken `I see you're on [nothing]`\n\nsentence. It falls back to a generic constraint question instead.\n\n**3. It asks once.** No re-prompting loops. One question, your answer (or \"none\"), then it runs.\n\nI could have made Flow A ask the same three questions Flow B asks. I didn't, on purpose.\n\nFlow B earns three questions because it's doing open-ended discovery — it found a handful of gaps and needs to know which ones matter, what your constraints are, and what it missed. Flow A already knows the capability. The only real unknown left is *constraints*. Asking more than that would be friction for its own sake.\n\nThe contract the commenter described — shrink the unknowns before you touch code — doesn't mean \"ask everything.\" It means ask for the **smallest input that most changes the output.** For a scored ranking, that input is constraints: a single \"must be self-hosted\" can reorder the entire top 3.\n\nPhase 1.5 is live in v1.4.0 across all four adapters — Claude Code, Claude.ai, OpenAI Codex, and Antigravity. Both entry points now reduce ambiguity before they act; they just ask the right number of questions for how much they already know.\n\n```\nnpx skills add Magithar/SKILLmama\n```\n\n** github.com/Magithar/SKILLmama** — Apache 2.0.\n\nAnd if you've got a sharp observation about where it still guesses instead of asking — leave a comment. The last one became a release.", "url": "https://wpnews.pro/news/a-reader-pointed-out-my-ask-first-principle-only-covered-half-my-tool-so-i-fixed", "canonical_source": "https://dev.to/magithar/a-reader-pointed-out-my-ask-first-principle-only-covered-half-my-tool-so-i-fixed-it-345c", "published_at": "2026-06-30 22:50:34+00:00", "updated_at": "2026-06-30 23:18:38.462028+00:00", "lang": "en", "topics": ["artificial-intelligence", "developer-tools", "ai-agents"], "entities": ["SKILLmama", "Magithar", "Claude Code", "Claude.ai", "OpenAI Codex", "Antigravity", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/a-reader-pointed-out-my-ask-first-principle-only-covered-half-my-tool-so-i-fixed", "markdown": "https://wpnews.pro/news/a-reader-pointed-out-my-ask-first-principle-only-covered-half-my-tool-so-i-fixed.md", "text": "https://wpnews.pro/news/a-reader-pointed-out-my-ask-first-principle-only-covered-half-my-tool-so-i-fixed.txt", "jsonld": "https://wpnews.pro/news/a-reader-pointed-out-my-ask-first-principle-only-covered-half-my-tool-so-i-fixed.jsonld"}}