Skill

hmmm

Durable thinking session—frame, delegated discovery, synthesis, options. Parent holds the question and ledger; subagents hold codebase reads and web research. Use when the user says hmmm followed by a question, or needs to think through a design without bloating chat.

Compatibility: Requires git for artifact paths; jq and bash for session scripts.

Install this skill

npx skills add adiutama/skills --skill hmmm

Invoked as /hmmm <your question> — say it like you'd ask a colleague. Or /hmmm resume (new chat OK).

Examples:

  • /hmmm should we use OAuth or magic link for orgs?
  • /hmmm where should rate limiting live — edge or Convex?
  • /hmmm is it worth migrating notifications to push before mobile v2?

Bare /hmmm with no question → ask once: "What's on your mind?" — then stop.

Discovery belongs in subagents; the parent holds the question and the ledger. Chat stays conversational—synthesis, not grep dumps.

Layout: session-layout.md.

Step 1 — Parse intent

Everything after /hmmm (before any flags) is the question — keep the user's words; don't rewrite into spec-speak.

Field Required Notes
Question yes* *verbatim from invocation, or session when resuming
Constraints no from question or follow-up
Mode no rapid (default) or deep
Lanes no auto from question

Bare /hmmm: one line — "What's on your mind?" — stop. No session until they answer.

Resume

resume, /hmmm resume, continue, resume <hint> — no new question.

bash <SKILL_DIR>/scripts/resolve-resume.sh [hint]

No sessions → stop. Recommend one (id, question, phase, path). Wait yes / pick / cancel—never auto-continue. yes → load meta.md + master.md; jump to saved phase. pick → ≤5 candidates; confirm again.

Frame gate

Too vague to act on (e.g. "make it better") → one conversational follow-up; do not spawn discovery. frame-examples.md.

Confirm (new session)

Mirror the question back in plain language (1–2 sentences), then: planned lanes, mode, session path. Ask "Sound right?" — broad scope needs explicit yes before subagents.

Step 2 — Session

New: bash <SKILL_DIR>/scripts/init-session.sh [kebab-slug] → skeleton (master-template.md). Fill meta.md problem: with the verbatim question, mode, phase=frame. Resume: Step 1.

Step 3 — Frame (parent)

Write to master.md: question (user's words), constraints, success criteria, open questions, non-goals. Set meta.md phase=discover when frame is solid.

Talk like a colleague—short sentences, no report voice. Parent does not codebase-wide search or web fetch here—only clarify with the user.

Step 4 — Discover (subagents, parallel)

Run only lanes the problem needs. Skip when scope is narrow and user already supplied context.

Lane When Subagent Output
codebase repo patterns, prior art, blast radius explore, readonly: true discovery/codebase.md
external libs, docs, industry patterns docs-researcher or generalPurpose discovery/external.md
compare evaluate 2+ approaches against repo explore, readonly: true discovery/compare.md

Prompt from discovery-prompt.md. Launch in parallel when multiple lanes apply. Each child: read master.md; write only its output file; chat reply = one line.

After all finish:

bash <SKILL_DIR>/scripts/validate-discovery.sh <session_dir>/discovery/<lane>.md

Invalid → retry that lane once; then mark partial in meta.md and continue.

Parent reads: validation JSON + each report's ## Summary and ## Findings only—not full tool traces. Distill into brief.md (brief-template.md), ≤80 lines. Set phase=synthesize.

Step 5 — Synthesize (parent)

From brief.md + user constraints, draft 2–4 options → options.md (options-template.md). Each option: approach, pros, cons, fits repo because, risks, effort (S/M/L).

Present options conversationally—≤15 lines in chat; full detail stays on disk. Set phase=ideate.

Step 6 — Ideate (parent + user)

Mode Behavior
rapid Present options; user picks, combines, or rejects—one round unless they ask to dig
deep One decision fork at a time; wait for answer before next (deep-forks.md)

Log each resolved fork to master.md Decisions and decisions.md. Unknowns → back to Step 4 (targeted lane only) or ask user once.

When user picks a direction (or session goal met): phase=outcome.

Step 7 — Outcome

Write recommendation.md (recommendation-template.md): chosen approach, rationale, evidence pointers (discovery/*, decisions.md), open risks, suggested next step (spike, ADR, implementation—no code unless asked).

Set meta.md status=done. Close with a short conversational summary (≤20 lines) + session path.

Context budget (parent)

Do in parent Delegate to subagent
Frame, questions, synthesis, options Codebase search/read
Read brief.md, options.md summaries Web/docs research
Merge decisions Directory walks, large file reads
compact-master.sh before long ideate Comparing patterns across many files

Before ideate rounds beyond 3: bash <SKILL_DIR>/scripts/compact-master.sh <session_dir>/master.md 120

Voice

  • User's question → stored and echoed verbatim in master.md / meta.md.
  • Replies: colleague at the whiteboard—not a spec, not a ticket description.
  • One question at a time in deep mode; in rapid, still readable, not a wall of bullets.
  • Discovery and files stay structured; chat stays human.

Anti-patterns

Parent greps/reads codebase during discover · dumping discovery files into chat · skipping session files · discovery before frame · rewriting the user's question into jargon · multiple questions at once in deep mode · auto-resume · child edits master.md or brief.md

References

session-layout.md · discovery-prompt.md · brief-template.md · options-template.md · recommendation-template.md · frame-examples.md · deep-forks.md

skills/hmmm/SKILL.md