Files
OpenSpec/docs-lab/help/faq.md
Clay GoodandClaude Opus 5 7de24044ef fix(init): make the universal tool target findable in the picker (#1778)
* fix(init): make the universal tool target findable in the picker

Closes #653

`openspec init`'s tool picker is a searchable list of product names. The
vendor-neutral target every unlisted assistant is meant to use was named
"Shared .agents skills" — after the directory it writes, which is not a
word anyone in that position searches for. Typing "universal", "other" or
"generic" returned "No matches", so the escape hatch was unreachable and
the reporter had to open an issue to find it.

Rename the entry to "Other / Universal (shared .agents skills)" and give
choices optional `searchAliases` the filter also matches. The picker also
dropped every non-alphanumeric keystroke: readline reports punctuation
only in `key.sequence`, leaving `key.name` undefined, so ".agents" and
"amazon-q" could not be typed at all.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(init): point at the universal target when a tool search matches nothing

"No matches" is where someone whose assistant is not on the list gives
up — the picker knows the answer and does not say it. Add an optional
`emptyHint` to the searchable multi-select, and have init name the
vendor-neutral entry there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(init): close every dead end that hides the universal tool target

Hardening pass over the same defect. Reviewing the first fix turned up
four more places the answer was withheld:

- `openspec update`'s tool picker builds its own choices and never
  passed searchAliases through, so the same search failed there.
- `--tools <unknown>` printed a bare list of ids. It now names the
  fallback, the scripted counterpart of the picker's empty hint. The
  hint I first put on validateTools sat on an unreachable branch; the
  path users actually hit is the "Invalid tool(s)" parse error, and a
  test now pins it.
- The search box dropped pasted text as well as punctuation. Any
  sequence whose characters are all printable is now accepted, which
  also lets a space reach the box so "claude code" filters. Escape
  sequences carry control characters and are still rejected, and the
  `name` fallback stays single-character so readline names like 'tab'
  are never typed.
- docs-lab still taught the old label in two places.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs: keep the FAQ a router and finish the alias list

- help/faq.md is a one-liner surface (README's "FAQ is one-liners" rule),
  so the answer points at the support matrix's Other / Universal section
  instead of restating the picker's search terms. Drops the em dash that
  writing.md forbids.
- reference/supported-tools.md keeps the search terms, now all nine the
  picker actually matches: `vendor-neutral` and `agents.md` were added to
  searchAliases after the first draft of this page. Same correction in the
  legacy docs/supported-tools.md paragraph.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* chore(init): keep the tool-not-listed hint ASCII

The non-interactive fallback hint is new terminal output and carried an em
dash, an ambiguous-width glyph in the class #983 covered. A colon reads the
same and cannot misalign a terminal.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs: drop the legacy docs/ tool-matrix edit

docs-lab/reference/supported-tools.md already carries the label and search terms.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* test(init): prove picker punctuation through real readline key events

The prompt tests fed a multi-character sequence that readline never emits:
it splits a paste into one key per character, so a pasted space still
toggles. Drive the handler with real emitKeypressEvents output (fails on
main with 'amazonq'), pin the space limit, and stop claiming multi-word
paste in the changeset and code comment.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 15:47:10 +00:00

1.3 KiB

FAQ

Short answers to the questions that don't need a page.

Should openspec/ be checked into git?

What runs in the terminal, and what in chat?

Does OpenSpec work with my tool?

If it has a row in the support matrix, yes. Pick its id at init. If it isn't listed but reads the shared .agents/skills/ folder, pick Other / Universal (--tools agents), covered by the support matrix's Other / Universal section. If neither, request it in the OpenSpec repo.

Where did the old /openspec:* commands go?