Wyvern
What You View, Engine Renders Natively

A lightweight CLI tool that opens native webview windows for user interaction and returns structured JSON results — with zero browser dependency, declarative CLI extensions, and an MCP-ready JSON schema (MCP server ships in Phase E).
Current release: v0.4.0 — Phase H XHTML reporting (view + review), Phase I wizard native path pickers, and wyvern examples list on the extension runtime (wizard flows since v0.2.0).
Quickstart
- Download the latest release for your platform from GitHub Releases.
- Extract the archive. Keep
wyvern,wyvern-viewer, andshare/wyvern/ui/together (same layout as the tarball). - Add the extract directory to your
PATH(so both binaries resolve as siblings). - Try (default viewer is embedded — launches
wyvern-viewer):
HTTP host notes
- Dialogs are served by an ephemeral local HTTP host (
wyvern-host) from packagedshare/wyvern/ui/. - Product default:
--viewer embedded(optionalwyvern-viewersibling binary). - CI / agents / headless: set
WYVERN_VIEWER=noneor pass--viewer none(no native window).
WYVERN_VIEWER=none
Release artifacts (no clone required):
| Platform | Artifact |
|---|---|
| macOS Apple Silicon | wyvern-macos-aarch64.tar.gz |
| macOS Intel | wyvern-macos-x86_64.tar.gz |
| Windows x86_64 | wyvern-windows.zip |
| Linux x86_64 | wyvern-linux.tar.gz |
Each archive contains wyvern, wyvern-viewer, and share/wyvern/ui/ (message, input, markdown, question, chrome).
Quick examples
# Discover shipped skills (copy-paste examples)
# Visual welcome guide (multi-page wizard hub)
# Skill catalog (text, JSON, or detail view)
# Bundled example catalog (README frontmatter)
# Extension-specific help at match time
# Open a markdown file as a dialog
# Bundled wizard examples (auto-infers --ui-root from wizard.json)
# XHTML report panels (view or review mode)
# Interactive CSV table (sort / filter / Finish → JSON)
# Requires `python3` on PATH. On Windows, install Python 3 and ensure the
# `python3` command resolves (the Windows `py` launcher is not used).
# CSV as a markdown pipe table
Shipped examples live under share/wyvern/examples/ (path-picker, template-picker, agent-dag, askuserquestion-hook, xhtml-review). Each folder includes a README with launch commands.
Optional: Compose render
If sc-compose is installed, wyvern can render Jinja2 templates to HTML previews:
What it does
Wyvern bridges the gap between CLI tools and rich user interaction. Pass it a JSON command, get back a JSON result — or use argv shorthands for common file types and prefix skills. No Electron. No Chrome. Just the OS's built-in webview rendering your HTML.
v0.4.0 adds XHTML reporting and wizard native pickers on top of the core dialog API and extension runtime:
- Blocking dialog commands:
message,input,markdown,question,chrome - Multi-page
wizardflows with browser-history navigation (since v0.2.0) - Wizard native pickers — in-page file/folder choosers via
WyvernApiduring wizard sessions (Phase I) - XHTML reporting —
.xhtmlsuffix,report-xhtmlmanifests, and review finish flow (Phase H) - Extensions — suffix and prefix argv skills (
.html,.csv,compose render,md,guide, and more via bundled registry) - Discoverability —
wyvern help,wyvern guide,wyvern extensions list, andwyvern examples listfor agent-facing skill and example discovery (Phase G)
# Show a dialog
# → {"button": "yes"}
# Collect input
# → {"button": "ok", "input": "feature/my-branch"}
# Render a markdown doc
Why Wyvern
| Wyvern | Electron | OS dialogs | |
|---|---|---|---|
| Bundle size | ~5MB | ~150MB | 0 |
| HTML/CSS/JS UI | ✅ | ✅ | ❌ |
| No browser required | ✅ | ❌ | ✅ |
| Custom wizards | ✅ | ✅ | ❌ |
| Declarative CLI extensions | ✅ | ❌ | ❌ |
| MCP-compatible | Phase E | ❌ | ❌ |
| JSON I/O | ✅ | custom | ❌ |
Dialog types
message— blocking modal with title, body, icon, and standard button combos (ok,yes_no,ok_cancel,yes_no_cancel,retry_cancel, or custom)input— text entry, multiline, or file/folder choosermarkdown— styled markdown viewer (file, inlinecontent, orwyvern file.mdshorthand)question— blocking native renderer based on Claude's publicAskUserQuestionAPIchrome— foundation chrome frame and platform safe zones (used by other dialog types)wizard— multi-page flows with stack navigation (POST /api/wizard/navigate,finish, visited-stack JSON on dismiss); in-page native file/folder pickers viaWyvernApi.postPickerFile/postPickerFolder(Phase I)
Platform support
| Platform | Engine | Load time | Memory |
|---|---|---|---|
| macOS | WebKit (system) | ~instant | ~30–50MB |
| Windows | WebView2 | fast | ~40–60MB |
| Linux | WebKitGTK | moderate | ~100–150MB |
Docs
Deferred (post–v0.4.0)
--interactive— persistent stdin loop withshow,hide, andexitlifecycle actions (Phase E)wyvern --mcp— MCP server; JSON schema is MCP-ready today, binary ships Phase E- User extension registry —
~/.config/wyvern/extensions.json(post–Phase F) notification— future fire-and-forget path for ephemeral updates;messagestays blocking
Wyvern: Defy the digital chasm. Unleash native clarity.