Skip to content
Agentmart
Submit a tool

a2ui-ask

When the user must choose among options or fill in structured config, spawn a browser form (powered by schemaui Web UI, bound to 0.0.0.0), open the user's…

Skill by YuniqueUnic

IndexedMIT★ 27
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/yuniqueunic-a2ui-ask

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

When the user must choose among options or fill in structured config, spawn a browser form (powered by schemaui Web UI, bound to 0.0.0.0), open the user's browser, and write the result to .schemaui/answers/. Never use a terminal/TUI prompt — the agent process has no TTY attachment. Supports rich content: figures on questions and answer options (Mermaid/SVG/Markdown via x-content / x-options) and a live Mermaid editor (x-control: mermaid). Trigger phrases: "give me a form", "ask me via form", "configure", "pick a deploy environment", "I need to choose", "grill me", "a2ui", "给我个表单", "配置一下", "用表单问我", "问我几个问题", "拷问我".

Use cases: documents, design, devops, writing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 6

  • :: · found in code
  • api.github.com · found in code
  • codeload.github.com · found in install command
  • gitee.com · found in code
  • github.com · found in code
  • raw.githubusercontent.com · found in code

Files it touches

  • ~/.claude/skills/a2ui-ask

What's inside

Skill name
a2ui-ask
Description
When the user must choose among options or fill in structured config, spawn a browser form (powered by schemaui Web UI, bound to 0.0.0.0), open the user's browser, and write the result to .schemaui/answers/. Never use a terminal/TUI prompt — the agent process has no TTY attachment. Supports rich content: figures on questions and answer options (Mermaid/SVG/Markdown via x-content / x-options) and a live Mermaid editor (x-control: mermaid). Trigger phrases: "give me a form", "ask me via form", "configure", "pick a deploy environment", "I need to choose", "grill me", "a2ui", "给我个表单", "配置一下", "用表单问我", "问我几个问题", "拷问我".
License
MIT
Instructions
383 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Agent Skills spec issues

  • files: referenced but missing: examples/themes/midnight.css

Files (36)

  • ci.yml · .github/workflows/
  • publish.yml · .github/workflows/
  • .gitignore
  • LICENSE
  • README.ZH.md
  • README.md
  • SKILL.md
  • a2ui-ask-site.png
  • controls-gallery.png · docs/
  • mermaid-editor.png · docs/
  • rich-options.png · docs/
  • web-ui.png · docs/
  • deployment-architecture.defaults.json · examples/
  • deployment-architecture.schema.json · examples/
  • ecommerce-main-image.defaults.json · examples/
  • ecommerce-main-image.schema.json · examples/
  • env-defaults.json · examples/
  • env-schema.json · examples/
  • feature-brief.defaults.json · examples/
  • feature-brief.schema.json · examples/
  • invoice-reimbursement.defaults.json · examples/
  • invoice-reimbursement.schema.json · examples/
  • seo-diagnosis.defaults.json · examples/
  • seo-diagnosis.schema.json · examples/
  • web-research-brief.defaults.json · examples/
  • web-research-brief.schema.json · examples/
  • install.md
  • package.json
  • ask-user.prompt.md · prompts/
  • ask.prompt.md · prompts/
  • ask.ps1 · scripts/
  • ask.py · scripts/
  • ask.sh · scripts/
  • install.ps1 · scripts/
  • install.sh · scripts/
  • test_ask.py · tests/

SKILL.md (first lines)

# a2ui-ask — collect user input via a browser form (file output)

Interactive UI for AI agents: turn structured questions into browser forms. The
rendering engine is the `schemaui` binary (`schemaui web`) from
[YuniqueUnic/schemaui](https://github.com/YuniqueUnic/schemaui); this skill
wraps it with scripts that handle binding, browser wakeup, timeout, and the
file-output contract.

## Prerequisite: the schemaui engine

Check for the binary first: `command -v schemaui` (or just run the ask script —
it exits with code 3 when the engine is missing).

If missing, offer to install it — you can do this yourself, unattended:

```bash
bash scripts/install.sh        # macOS / Linux / FreeBSD: auto-detect & install
pwsh scripts/install.ps1       # Windows / PowerShell 7+
```

Both default to a prebuilt-binary download (no toolchain needed) and support
`--dry-run` / `-DryRun` to preview. They fetch from GitHub first and fall back
to the [Gitee mirror](https://gitee.com/Credhat/schemaui) — same tags, same
asset names — which is what makes them work from mainland China. If a user
reports a stalled or failed install, re-run with the mirror pinned rather than
retrying GitHub:

```bash
bash scripts/install.sh --source gitee
pwsh scripts/install.ps1 -Source gitee
```

The brew / scoop / winget manifests still hardcode GitHub download URLs, so on a
blocked network prefer `--source gitee` or `cargo install schemaui-cli`. Full
channel list: see `install.md` in this repository.

## Non-negotiables

1. Web form only, via `schemaui web`. Terminal prompts are forbidden — your
   process has no TTY, so a TUI renders nowhere and blocks forever.
2. Bind `0.0.0.0` so the form is reachable from localhost, LAN, SSH tunnels, and
   port-forwards.
3. Output to a FILE under `.schemaui/answers/` — stdout-only is forbidden.
4. Tell the user the URL and the answer file path in your response, in the same
   turn as the tool call.
5. Block on the subprocess; read the answer file when it exits.
6. Fall back to plain text on any failure — never abort the task.
7. `-o` is greedy: every other flag goes BEFORE `-o`; extra destinations are
   space-separated in the same `-o` (`-o answer.json -`), never repeated.

## Asking well (grill-me discipline, form edition)

- **Explore before asking.** If the codebase, git history, or
  `.schemaui/answers/` can answer the question, answer it yourself. The form is
  for decisions only the user can make.
- **One form per decision cluster.** Batch the questions of one topic (e.g.
  "deployment config") into a single form; do not spawn ten forms for ten
  questions, and do not interrogate serially in chat either.
- **Every question ships a recommended answer.** Put your recommendation in the
  field's `default` so the user can confirm with one click instead of typing.
  Say in chat what you recommended and why.
- **Keep the recommendation out of the option label.** `default` is the one
  place the recommendation lives; the label is what lands in the answer file.
  Suffixing options with `(推荐)` / `(recommended)` duplicates the hint and
  then leaks it into the data, so every downstream consumer has to strip it.
  Explain the recommendation in the field's `description` instead ("推荐
  X:因为…"), where it stays readable without contaminating the value.
- **Speak the user's language.** Write every `title` and `description` in the
  language the user is chatting in, and say in the description what the answer
  changes downstream ("drives whether we need rate limiting").
- **Pick the control, don't settle for text boxes.** A slider for a scale, a
  two-handle range for a window, a colour picker for a colour, a segmented
  control for a handful of short options, `x-visible-when` for anything that
  only matters sometimes. Choosing from the gallery is what makes the form
  pleasant to fill in — see
  [Picking the control](#picking-the-control-use-the-gallery).
- **Always leave an escape hatch, and keep it out of the way.** Your options and
  defaults are guesses, so every select gets an `其他`/`other` option plus a
  sibling `<field>_custom` text input. Gate that input with `x-visible-when` so
  it only shows up once the user actually picks the escape option — a
  permanently visible empty box reads as a question they still owe you an answer
  to:

  ```json
  "delivery_form": { "enum": ["单个 HTML 文件", "其他"], "default": "单个 HTML 文件" },
  "delivery_form_custom": {
    "type": "string",
    "title": "交付形式 · 自定义说明",
    "description": "选了「其他」时填写:你想要的交付形式。",
    "x-visible-when": { "field": "delivery_form", "op": "equals", "value": "其他" }
  }
  ```

  Use `"op": "contains"` when the controlling field is a multi-select (the
  option list has to _contain_ the escape value). The rule must name a sibling
  of the same object: a typo is rejected when the form loads rather than hiding
  the field forever. The controlling field's `default` must not be the escape
  value, or the input would be visible from the start.

## Grilling: which interview skill to use

Open-ended designs sometimes need a relentless interview before they become a
form. When the user asks to be grilled (or a plan needs stress-testing before
you can draft the schema), use an existing grilling skill if the user named or
installed one — check their skills directory for something like `grill-me`,
`grilling`, or a skill they explicitly referenced, and defer to it. Only when
none exists, fall back to the one bundled here:
[`skills/grill-with-docs/SKILL.md`](./skills/grill-with-docs/SKILL.md) — the
same one-question-at-a-time, recommend-then-ask discipline, plus a rule to
ground every question in the project's docs and the galleries referenced above,
and to end by turning the settled decisions into a form. The bundled skill is a
convenience so a fresh install works out of the box; it never overrides a
grilling skill the user chose themselves.

## Question type → schema cheat sheet

| You need               | Schema shape                                                                                                                     | Renders as                                          |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| short text input       | `{"type": "string", "minLength": …, "pattern": …}`                                                                               | inline text field                                   |

From YuniqueUnic/a2ui-ask, MIT.

Signals

Stars
27
Forks
0
Open issues
1
Last commit
Sep 25, 2026 (1 month ago)
Last release
Sep 24, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from YuniqueUnic

Cite this page

a2ui-ask skill. Agent Mart. https://agentmart.dev/skills/yuniqueunic-a2ui-ask (last updated 2026-10-24)