A plugin for Claude Code

Every open decision,
made clickable.

qna watches your session, parks the choices that slip by, and hands them back as batched, dependency-ordered questions — each with real alternatives, never a yes-or-no trap.

Install
$ curl -fsSL https://raw.githubusercontent.com/jinhuang712/claude-code-qna/main/reinstall.sh | bash

Then just work. Run /qna:ask whenever you'd otherwise type "so what do I need to decide?"

The problem it fixes

A wall of text is not a question.

Ask Claude Code what's outstanding and you get ten numbered questions in one message. Answering means scrolling and typing Q1: … Q2: … by hand — then watching them scroll away.

claude · ~/projects/cache-service Without qna
user
>so what do I still need to decide?
claude
1.Here's my cache proposal — does it look right?
2.Should we use SQLite or files?
3.What TTL makes sense?
4.Want a --no-cache flag?
5.Logging level for cache hits?
five more you've already scrolled past
your reply
>Q9: no idea what this even is
>Q1: too thin — needs more structure
>Q3: 300s
claude · ~/projects/cache-service With qna
qna — scanned 11, 7 left to ask. 2 already decided, 1 no longer applies.
Overview Cache key Write failure Concurrency Submit ↵
Should the cache key include the auth identity?
Same machine, multiple tokens → A's response can be hit by B. That's data crossover, not just a perf hit.
Include token fingerprint Recommended
Hash the token into the key. Safest against crossover.
Previewkey = sha256(url + sorted(query) + tokenhash[:8])
# cold start +200ms on profile switch · 3 call sites
Include profile name
Profile-scoped, lighter key. Cross-token within one profile still crossovers.
Keep as-is, don't include
Simplest. Accepts the crossover risk entirely.
Other… (type your own)
Enter to selectTab / Arrow keys to navigateEsc to cancel
What it does

Three things, done with teeth.

The interesting part isn't the prompt — it's which parts are not prompt.

Clickable, not typed

Every question renders as real options with a preview panel. Free text is only the "Other" fallback — you answer in clicks, batched four at a time.

Recorded as they happen

Choices Claude makes without your sign-off get parked in a per-session log. So the options you're offered later are the ones actually weighed at the time — not three invented on the spot.

Enforced in code

"Give three options" and "always show a preview" aren't polite requests. Scripts and hooks refuse anything that doesn't measure up — on both the recording side and the asking side.

How it works

Park while working, settle when you ask.

No interruption to your flow. Decisions accumulate silently; you collect them on your terms.

1

It injects a recording protocol at session start

Three rules: when Claude decides something you didn't sign off on, when you defer something, and when a parked item gets settled. Each runs qna-add or qna-resolve — which refuse bad entries.

2

It survives context compaction

Decisions live in .qna/<session>.md, not in context. After a compaction the protocol and backlog re-inject automatically. Nothing evaporates.

3

You run /qna:ask and collect

It scans the conversation and the log, reconciles what's already settled, ranks by dependency, and asks — batched, with previews. A hook validates every question: no yes/no traps, no preview-less options.

Get started

One line. No global side effects.

No settings.json edits, no PATH changes, no CLAUDE.md edits.

1 · Install

One line, from your terminal:

$ curl -fsSL https://raw.githubusercontent.com/jinhuang712/claude-code-qna/main/reinstall.sh | bash

2 · Ask when ready

Work as usual inside Claude Code, then:

> /qna:ask
# or limit to one topic:
> /qna:ask architecture