@adia-ai/adia-ui-factory
Author and verify apps built ON the adia-ui (@adia-ai) light-DOM web-component framework — orient, scaffold, compose, wire, verify, and migrate across SPA and SSR rendering modes. Wires the a2ui MCP for catalog retrieval, UI generation, and validation.
Package details
Install @adia-ai/adia-ui-factory from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@adia-ai/adia-ui-factory- Package
@adia-ai/adia-ui-factory- Version
0.8.55- Published
- Aug 28, 2026
- Downloads
- 5,406/mo · 1,543/wk
- Author
- kimgish-adia
- License
- MIT
- Types
- extension, skill, prompt
- Size
- 1.1 MB
- Dependencies
- 0 dependencies · 0 peers
Pi manifest JSON
{
"skills": [
"./skills"
],
"prompts": [
"./prompts"
],
"extensions": [
"./pi/ui-architect.extension.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
adia-ui-kit-factory
Consumer plugin for building apps ON the adia-ui (@adia-ai) framework —
orient, scaffold, compose, wire, verify, migrate, across SPA/SSR/hybrid
hosts. Maintainer counterpart: adia-ui-kit-forge.
Re-engineered 2026-07 for the Fable 5 harness (design:
.claude/docs/specs/plugin-estate-v2.md).
Install
Via Git (Claude Code plugin marketplace — requires access to this repo, which is private):
/plugin marketplace add adiahealth/gen-ui-kit
/plugin install adia-ui-kit-factory@adia-ui-kit
(adia-ui-kit-factory@adia-ui-kit, not @gen-ui-kit — the marketplace registers under
its own manifest name, adia-ui-kit (.claude-plugin/marketplace.json), not the repo name.)
Sources the in-repo manifest at .claude-plugin/marketplace.json (repo
root — claude plugin marketplace add always expects the manifest there,
with or without --sparse; it does not resolve a subdirectory manifest).
The LIVE public install path (ADR-0045's npm-sourced manifest,
@adia-ai/adia-plugins, live since v0.1.0 — gh#1160; see
packages/plugins/adia-plugins/README.md for its own current version, which
cuts on its own Class-B schedule independent of the framework lockstep):
/plugin marketplace add https://unpkg.com/@adia-ai/adia-plugins/marketplace.json
/plugin install adia-ui-kit-factory@adia-plugins
The manifest's entries are unpinned npm sources, so installs track each
plugin's published latest — no manifest republish per plugin cut.
Via npm (package content only):
npm install @adia-ai/adia-ui-factory
Published in lockstep with the framework packages — pulls this plugin's
skills/agents/commands/references/hooks into
node_modules/@adia-ai/adia-ui-factory for vendoring or inspection. This
does not by itself register the plugin with Claude Code's /plugin
system — no marketplace manifest currently sources it from npm. The bare-repo
posture (ADR-0040) is about this plugin working standalone in any consumer
repo once installed some other way (no monorepo path assumptions in its own
scripts) — it does not add an npm-sourced marketplace entry.
Skills (19 — skills/ on disk is the roster; check:plugin-count-claims guards this header count)
| Skill | Species | Job |
|---|---|---|
app-planning |
procedural | classify a GREENFIELD app (mode/shape/shell/state) → Orientation Record |
domain-planning |
procedural | reasoning ladder (intent/domain/roles/tasks/decisions → scored wireframe) → Domain Plan block; preloaded by app-planning-agent |
app-audit |
procedural | diagnose an EXISTING/brownfield consumer repo — recon, gap classes, root-cause triage → ranked report |
project-scaffolding |
procedural | project shapes + scaffolding decisions |
pattern-catalog |
knowledge | index of pre-assembled patterns/template screens — check BEFORE composing from primitives |
screen-composition |
procedural | compose screens from the catalog; consumes the Domain Plan for PRD/spec input (§SpecToUi walked planning-side, gh#1207) |
shell-selection |
procedural | shell-family selection + per-shell contracts |
wave-coordination |
procedural | team-wave mechanics — parallel-branch integration, PR/conflict rules, shared-file ownership, wave sizing; preloaded by ui-architect |
ui-architect |
procedural | portable (runtime-neutral) whole-deliverable coordination workflow — gear selection, wave decomposition, generator-≠-reviewer separation, the four-lap cap, failure routing, the closing VerifyProof; the Claude-only dispatch mechanics live in agents/ui-architect.md + wave-coordination instead |
data-wiring |
knowledge | data/state patterns (signals, controllers, DataClient, hybrid) |
chart-selection |
knowledge | which component renders a chart/graph/sparkline/gauge/heatmap, and data/legend/theming wiring |
table-composition |
knowledge | table-ui usage — chrome, striping, sort/resize, inline-edit-grid, tree rows |
host-wiring |
procedural | wire the host — SPA / SSR / hybrid; icons + module barrels + CDN |
gen-ui-wiring |
procedural | generative-UI experiences on the a2ui runtime + MCP; agentic-UX patterns |
llm-wiring |
knowledge | consuming @adia-ai/llm (client, streaming, proxy security) |
token-selection |
knowledge | which color token/role — the --a-* / --md-sys-color-* layer choice |
app-migration |
procedural | version upgrades + port-to-adia sweeps (breaking changes) |
find-unused |
procedural | what a non-breaking upgrade left unused — inert opt-in layers, stale workarounds |
surface-qa |
procedural | browser + a11y + composition exit gate |
Agents (4)
ui-architect (whole-deliverable coordinator — GEAR 1 novice one-shot through
GEAR 2 PRD-driven decompose/plan/iterate; dispatches the other three, never
duplicates their charters, holds no Write/Edit) · app-planning-agent (read-only
planner → Orientation Record) · screen-composition-agent (builder; holds the
validate-before-serialize trust gate on generated A2UI) · surface-qa-agent
(read-only QA/composition-quality seat; VerifyProof + the COMPOSE/REALIZE
rubric).
Plugin-root references (composed against by multiple skills)
agentic-ux-patterns.md (the six agent-surface UX patterns → gen-ui-wiring) ·
composed-surface-rubric.md (the two-axis COMPOSE/REALIZE quality rubric →
surface-qa-agent) · component-model.md · the references/contracts/ twins.
Hooks
adia-lint — PostToolUse advisory consumer-smell repair loop (selftest ships).
Commands
/project-scaffolding · /app-planning · /surface-qa · /app-migration · /find-unused · /gen-ui-wiring · /app-audit
MCP
adia-gen-ui server pinned: @adia-ai/mcp@0.8.55 (tool SoT:
packages/gen-ui/mcp/TOOLS.md — the gen-ui section; stability rule in
references/contracts/; pin lives in .mcp.json — check:plugin-count-claims
guards this README copy against it). The server is adia-mcp gen-ui,
published as @adia-ai/mcp (gh#1240 folded the ADR-0048 P2 rename target
@adia-ai/gen-ui-mcp and P4's @adia-ai/a2ui-protocol-mcp into one package
before either ever published; the pin name and the mcpServers key flipped
in the P7 release commit per the 2026-08-14 config-key ruling — new entries
for the other subcommands use adia-protocol / adia-factory).
Non-Claude harnesses
External install beyond Claude Code (AGENTS.md's own "Non-Claude harnesses"
section carries the shared degradation table this summarizes). The MCP
story is the one place neither non-Claude harness matches Claude Code's
plug-and-play install — read this section before promising Pi/Hermes
support for this plugin specifically, since its whole value proposition is
wiring the adia-gen-ui MCP server.
- Codex (gh#1888):
.codex-plugin/plugin.json+ per-skillagents/openai.yaml, derived;mcpServerspoints at the same.mcp.jsonClaude Code uses. No manifest key for hooks/commands/agents — a command degrades to invoking its skill directly, andui-architect's whole-deliverable coordination — gear selection, wave decomposition, generator-≠-reviewer separation, the four-lap cap, failure routing, the closingVerifyProof— ships as its own portableui-architectskill instead of a Claude subagent (ADR-0091): invoke it by name ("use theui-architectskill…"); it runs planning/composition/QA as isolated dispatches where the installed Codex runtime supports that, or serially in one context otherwise. Install via npm (see theadia-pluginspackage README) or straight from Git, for anyone with repo access:
Sourced from the repo-rootcodex plugin marketplace add adiahealth/gen-ui-kit --ref main codex plugin add adia-ui-kit-factory@adia-ui-kit codex plugin add adia-ui-kit-forge@adia-ui-kit.agents/plugins/marketplace.json— the Codex-side sibling of this repo's own in-repo Claude channel (.claude-plugin/marketplace.json), hand-authored the same way, never generated (ADR-0091 D2/D3). Both plugins register under the manifest's own name,adia-ui-kit— not the repo name, and a distinct marketplace name from the npm-sourced channel above it (adia-plugins), mirroring the existing Claude-side split exactly, kept deliberately parallel rather than merged. - Hermes (gh#1954):
plugin.yaml+__init__.pyat this package's root — point Hermes's plugin loading at the installednode_modules/@adia-ai/adia-ui-factorydirectory. MCP is user-level config in Hermes, not a plugin field — merge the generatedhermes-mcp.yamlinto your own~/.hermes/config.yamlby hand; there is no automatic wiring.__init__.pyregisters the portableui-architectskill (ADR-0091) alongside every other skill, and a generated/ui-architectcommand — verified against the installed Hermes Agent's realPluginContext.register_command+dispatch_toolandtools/delegate_tool.py'sdelegate_task(goal, context, role, …)(not assumed from documentation): each of planning, composition, and QA runs as its own isolateddelegate_taskchild (role="leaf"), gated by the sameOrientationRecord/BuildResult/VerifyProoflinters every other runtime calls, capped at four plan→build→QA laps per wave (LLD §C6, SPEC REQ-012/013). Generated byscripts/build/harness-manifests.mjs— never hand-edit__init__.py. Verified live viahermes plugins doctor --ci(clean registration against the realPluginContext) plus a Python-level selftest (check:harness-manifests-selftest) driving the actual generated orchestration logic against a scripteddelegate_taskdouble and the real linters; a live interactive/ui-architectdispatch was not completed (sandboxed dev environment blocks mutating Hermes's global plugin-enable state) — the mechanism itself is real and independently verified, not simulated. No hooks/agents surface otherwise. - Pi (gh#1954): discovered via the
pi-packagekeyword and the"pi"field inpackage.json;prompts/*.mdgives every/commanda genuine Pi prompt template. Pi core has no native MCP support at all — theadia-gen-uiserver only reaches Pi through the third-partypi-mcp-adapterpackage, which reads this plugin's.mcp.jsonunmodified (same shape, no substitution needed). Install that adapter first; without it, this plugin's headline feature — the a2ui MCP wiring — silently does nothing on a stock Pi install. The portableui-architectskill (ADR-0091) is discoverable via the"pi": {"skills": [...]}glob like every other skill, andpi/ui-architect.extension.ts("pi": {"extensions": [...]}) registers a real/ui-architectcommand: verified against the installed@earendil-works/pi-coding-agentv0.84.3 — its own shipped (if not core-builtin)examples/extensions/subagent/proves the pattern this extension reuses — dispatching planning, composition, and QA as isolated nestedpi --mode json -p --no-sessionchild processes, each tool-walled to mirror this plugin's Claude seats (read,grep,find,ls,bashfor planning/QA; addedit,writeonly for composition) and gated by the same three portable-contract linters (LLD §C5, SPEC REQ-011). Live-verified end to end in this change's own development — a realpi -e ./pi/ui-architect.extension.tssession ran/ui-architectagainst a live model, dispatched all three isolated passes, wrote a real file, took a real screenshot, and returned a cleanVerifyProof— not simulated against an unverified API. No hooks/agents surface otherwise.
Requirements
Python 3 (hook) + Node 22. Installs standalone in consumer repos (no monorepo path assumptions — ADR-0040 bare-repo posture).
Feedback / bugs
npm view @adia-ai/adia-ui-factory bugs — a monitored address reachable with
no adiahealth repo access; triage owner: kimba. Filed an issue in-session
via the report_issue MCP tool? It writes a local
qa/findings/issues/<id>.md + .json and transmits nothing — attach the
generated markdown to that address yourself.
Versioned with the @adia-ai lockstep (npm run check:lockstep) — see CHANGELOG.md for the current version;
content merged between cuts is invisible to the installed plugin cache until
the next lockstep bump or a manual sync.