Warp One-Time Launch Modal
warpdotdev/warp
Steps for adding a one-time launch or announcement modal to the Warp desktop GUI, gated by a feature flag and tracked by a settings field.
Guides building desktop interfaces with the Yoga Go framework: Body views, layout nodes, widgets, dialogs and headless builds.
$ npx skills add chapar-rest/chapar --skill yoga-ui -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install chapar-rest/chapar yoga-ui --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/chapar-rest/chapar.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/yoga-ui .claude/skills/yoga-ui && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "yoga-ui" agent skill from https://github.com/chapar-rest/chapar/tree/main/.cursor/skills/yoga-ui into .claude/skills/yoga-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yoga-ui", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/chapar-rest/chapar/tree/main/.cursor/skills/yoga-uiType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add chapar-rest/chapar --skill yoga-ui -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install chapar-rest/chapar yoga-ui --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/chapar-rest/chapar.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.cursor/skills/yoga-ui .agents/skills/yoga-ui && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "yoga-ui" agent skill from https://github.com/chapar-rest/chapar/tree/main/.cursor/skills/yoga-ui into .agents/skills/yoga-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yoga-ui", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add chapar-rest/chapar --skill yoga-ui -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install chapar-rest/chapar yoga-ui --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/chapar-rest/chapar.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.cursor/skills/yoga-ui .cursor/skills/yoga-ui && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "yoga-ui" agent skill from https://github.com/chapar-rest/chapar/tree/main/.cursor/skills/yoga-ui into .cursor/skills/yoga-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yoga-ui", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/chapar-rest/chapar.git --path .cursor/skills/yoga-ui--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add chapar-rest/chapar --skill yoga-ui -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install chapar-rest/chapar yoga-ui --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/chapar-rest/chapar.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.cursor/skills/yoga-ui .gemini/skills/yoga-ui && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "yoga-ui" agent skill from https://github.com/chapar-rest/chapar/tree/main/.cursor/skills/yoga-ui into .gemini/skills/yoga-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yoga-ui", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install chapar-rest/chapar yoga-uiInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add chapar-rest/chapar --skill yoga-ui -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/chapar-rest/chapar.git skills-src && mkdir -p .github/skills && cp -r skills-src/.cursor/skills/yoga-ui .github/skills/yoga-ui && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "yoga-ui" agent skill from https://github.com/chapar-rest/chapar/tree/main/.cursor/skills/yoga-ui into .github/skills/yoga-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yoga-ui", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add chapar-rest/chapar --skill yoga-ui -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install chapar-rest/chapar yoga-ui --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/chapar-rest/chapar.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.cursor/skills/yoga-ui .opencode/skills/yoga-ui && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "yoga-ui" agent skill from https://github.com/chapar-rest/chapar/tree/main/.cursor/skills/yoga-ui into .opencode/skills/yoga-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yoga-ui", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
yoga-uiGuides building desktop interfaces with the Yoga Go framework: Body views, layout nodes, widgets, dialogs and headless builds.
The skill explains Yoga's mental model: app state is kept between frames and the interface is rebuilt declaratively each frame, much like SwiftUI state. The app struct holds durable data, and Body runs on every drawn wake and returns a ui.View tree, while the GPU loop skips presenting when nothing visual changed. Widget micro-state such as hover, caret and scroll lives under c.Widget with a window-unique id, and a Ctx pointer must not be kept across frames, except the dialog, file, toast, focus and invalidate services, which are safe to capture in click handlers. Async work has to call Invalidate.
Heavy widgets (Editor, Table, Tree, FileTree, ListView) are built once in a Build function and placed with ui.ViewOf, while stateless nodes such as Column, Button and TextField can be created inside Body. yoga.Run creates the window and text engine and then calls build, so anything that measures text belongs inside build. The skill also covers the GPU entry point and the headless nogpu entry point, optional Close and OnKey hooks, and a layout table for Column, Row, Stack, Center and Spacer. Companion files widgets.md and examples.md list constructors and demo patterns.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 5a27fd5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
goFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Yoga Go Desktop UI loads about 2.8k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 1,005 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from chapar-rest/chapar at commit 5a27fd5, republished under its BSD-3-Clause licence (© chapar-rest). 1,005 words, ~2,805 tokens.
.claude/skills/yoga-ui/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Module github.com/mirzakhany/yoga. Public UI surface is ui/. Read widgets.md for constructors and examples.md for example/ patterns.
Retained app state + per-frame declarative rebuild (SwiftUI @State analogue):
*ui.Editor, *ui.Table).Body(c) runs on every drawn wake and returns a ui.View tree. The GPU loop skips present (and the second Body rebuild) when nothing visual changed; idle WaitEvents does no work. There is no host widget cache / React reconciliation.ui.View is Layout(c *ui.Ctx) *layout.Element. *ui.Node implements it.c.Widget(id, alloc) keyed by a unique-per-window id. App data does not.*ui.Ctx fields across frames. The Ctx pointer is window-lifetime: c.Dialogs(), c.Files(), c.Toasts(), c.Focus(), c.Invalidate(), and c.MarkNeedsPaint() are safe to capture in OnClick. Async work must Invalidate() so the next wake paints.Heavy widgets (Editor, Table, Tree, FileTree, ListView) are constructed once in Build* and placed with ui.ViewOf(w). Stateless DSL nodes (Column, Button, TextField, …) may be allocated in Body. Dialogs, file picker, and toasts are window services on c — do not construct or thread hosts.
yoga.Run creates the window/text engine then calls build. Construct widgets that measure text inside build, never before Run.
package main
import (
"github.com/mirzakhany/yoga"
"github.com/mirzakhany/yoga/ui"
)
type App struct{ name string }
func Build() *App { return &App{} }
func (a *App) Body(c *ui.Ctx) ui.View {
th := c.Theme()
return ui.Column(
ui.Title("Hello"),
ui.TextField("name", a.name).
Placeholder("Your name").
OnChange(func(s string) { a.name = s }).
DefaultFocus().
Grow(1),
ui.Button("ok", ui.Text("OK")).Primary().OnClick(func() {}),
).Gap(th.Spacing.M).Padding(th.Spacing.L).Grow(1).Background(ui.TokenSurface)
}
func main() {
cfg := yoga.Config{Title: "App", Width: 640, Height: 480}
if err := yoga.Run(cfg, Build); err != nil { panic(err) }
}
Custom title bar (VS Code-style): set `CustomTitleBar: true` in `yoga.Config`, then put menus and tools in `ui.TitleBar(...)` at the top of `Body`. macOS keeps native traffic lights; Windows/Linux get framework min/max/close buttons. Empty title-bar area drags the window; double-click toggles maximize.GPU entry: //go:build !nogpu + yoga.Run. Headless: //go:build nogpu + shape.NewEngine → yoga.SetResources → ui.BuildFrame. Dual mains live side-by-side in example/*/.
Optional App capabilities (type-asserted by the runtime):
Close() — release workers/files when the window closes.OnKey(c *ui.Ctx, k input.KeyEvent) bool (yoga.KeyHook) — global shortcuts after command Dispatch and before focus routing; return true to consume. Prefer c.Commands().Register for palette-visible actions.*ui.Node)| Constructor | Behavior |
|---|---|
Column(children...) | Vertical flex, stretch cross-axis |
Row(children...) | Horizontal flex, vertically centered |
Stack(children...) | Z-order layers |
Center(child) | Fill parent, center child |
Spacer() | Flex-grow filler |
Grid(cols, children...) | Equal-width columns (fr tracks) |
Scroll(id, child) | Clip + scroll; id keys offset |
ViewOf(v) | Wrap any View so Node modifiers chain |
Raw(el) | Wrap a bare *layout.Element |
HLine(thick, color) / VLine(...) | Rules |
Icon(icon, size, color) | Lucide atlas sprite |
Image(id, data) | PNG/JPEG from bytes; ImageFile, ImageFS helpers |
SVG(id, data) | Custom SVG from bytes; SVGFile, SVGFS helpers |
TitleBar(children...) | Custom window title bar; platform controls auto-included |
WindowControls() | Min/max/close buttons for undecorated windows (usually via TitleBar) |
Children are ui.View. Nil children are skipped. Split a pane into helpers that return ui.View.
Fluent modifiers (chain on *Node): Gap, Padding/PaddingXY/PaddingLeft|Right|Top|Bottom, Margin/MarginXY/sides, Wrap, Grow, Shrink, Width, Height, Frame, Size (font size on Text, else square), Align, Justify, Style(Spec), Background(Token), BackgroundColor, Border/BorderTop|Right|Bottom|Left, BorderStyle, Radius/RadiusTopLeft|TopRight|BottomRight|BottomLeft, Disabled, DefaultFocus.
Alignment constants: ui.AlignStart|Center|End|Stretch, ui.JustifyStart|Center|End|Between.
Fill remaining space with .Grow(1) on the expanding child and its ancestors up to the window root. Root Body trees almost always .Grow(1).Background(ui.TokenSurface).
Use c.Theme().Spacing.* (XXS 2 … XXXL 32) — not magic numbers. Common: S 8, M 12, L 16.
Pass current value each frame; callbacks mutate the app struct. Stable unique id strings.
ui.TextField("url", app.url).Placeholder("https://…").IconStart(icons.Search).
OnChange(func(s string) { app.url = s }).OnSubmit(func(s string) { app.go(s) }).Grow(1)
ui.EditableLabel("title", app.title).Placeholder("Untitled").
OnSave(func(s string) { app.title = s })
ui.Button("send", ui.Text("Send")).Primary().Hint("⌘↵").IconStart(icons.Play).OnClick(app.send)
ui.Checkbox("n", "Notify").Check(app.on).OnToggle(func(v bool) { app.on = v })
ui.Radio("ra", "A").Check(app.radio == 0).OnClick(func() { app.radio = 0 })
ui.Select("lang", opts).Width(200).Selected(i).OnChange(func(v string) { app.lang = v })
ui.Slider("vol", app.vol).Min(0).Max(100).OnFloatChange(func(v float64) { app.vol = v })
ui.Button("tip", ui.Text("Save")).Tooltip("Save document")Button variants: default Secondary; .Primary() / .Subtle() / .Ghost(). Ghost is text-like (no padding or chrome) for footers; chain .HoverFill() for a hover background. Supports .IconStart() and .Tooltip(). IconButton(id, iconName).
Do not construct NewEditor / NewTable / NewTree inside Body. Construct in Build*, then ui.ViewOf(app.table).Height(220) / .Grow(1).
theme.Use(name) mutates the live theme in place. Default yoga-dark. theme.Use("system") applies yoga-dark or yoga-light from the OS appearance and keeps syncing while selected. Prefer ui.Token* fills so widgets recolor on switch. c.Theme() for spacing, radius, stroke, typography, semantic colors (th.Success, th.Error, …).
ui.Text("hi").Style(ui.Spec{}.TextColor(ui.TokenForegroundMuted))
ui.Column(...).Background(ui.TokenChrome)Typography helpers: Text, Title, Subtitle, Caption, Strong, Muted. Color/size inherit from parent env (e.g. a Button’s TextColor).
Select a theme before yoga.Run if the app is not dark-default (example/apitest uses yoga-midnight).
c.Dialogs(), c.Files(), and c.Toasts() are window-owned. BuildFrame lays them out after the body — do not put them in the view tree. Capture c in OnClick to Show.c.Commands() is the window-owned command registry + searchable palette. Register from Body each frame; default toggle is ⌘K / Ctrl+K. Dispatch runs before KeyHook and focus.FileDialog: pure-Go picker with open file/folder and save modes. Footer holds filename (save), filter, optional New Folder (AllowCreateFolder), Cancel, and Open/Select/Save. See widgets.md.c.Dialogs().Show(DialogOpts): custom size, body layout, and footer actions (same modal behavior as FileDialog). ShowInfo / ShowWarning / ShowError / ShowAction / ShowInput are built on this path.Form: labeled settings rows (switch, select, number, text, slider, stepper). Switch: pill toggle for compact rows..Tooltip(text) on any node; Popover (no scrim); ContextMenu (right-click → Menu). Dropdowns/Selects/Menus call c.Overlay themselves.c.Focus().EnsureFocus(w) / .DefaultFocus() on a control when nothing is focused. Tab order = Layout registration order.c.Invalidate() (any goroutine). Capture c only for the current frame’s Invalidate closure, or keep a wake func — prefer storing results on the app and calling Invalidate from a handle the runtime already has. Pattern in example/apitest: poll a channel in Body, c.Animate(30*time.Millisecond) while pending.c.Animate(d) during Layout.Implement ui.View:
func (w *Panel) Layout(c *ui.Ctx) *layout.Element {
return ui.Column(...).Grow(1).Layout(c)
}Low-level: layout.New(layout.Box().…, children...), set Paint / OnMouse, wrap with ui.Raw. Hit-test: e.Frame.Contains(m.X, m.Y); stop bubbling with m.Consumed = true. Overlays: el.Overlay = true then c.Overlay(el).
Store hover in c.Widget(id, func() any { return &state{} }).
"send", "todo-%d"). Colliding ids share hover/caret.Row children that should stretch vertically: parent .Align(ui.AlignStretch).ui.Splitter(id, ui.Horizontal|Vertical, a, b).Sizes(240, 0).Grow(1) — 0 means flex. Prefer .Percents(30, 70) for ratio splits; .MinSizes / .MaxSizes (px, 0 max = none); .HandleOnHover() hides the handle line until hover/drag.ui.Drawer(id, panel, page).Open(v).Edge(ui.EdgeRight).Overlay().Size(320).Grow(1) — or .Push(); nest for IDE-style terminal + chat; .Swipe(true) for drag gestures. Panel content fills a clipped viewport — use .Grow(1) on the panel view, not fixed width.github.com/mirzakhany/yoga/icons (icons.Search, icons.Plus, icons.Settings, …). Full list in icons/catalog for the component gallery. Regenerate: go run ./cmd/generate-lucide.Invalidate or Animate; idle loop otherwise waits forever.go test ./... and go build -tags nogpu ./....| Package | Why read it |
|---|---|
example/todo | Smallest complete app: form, list, controlled fields |
example/gallery | Shell + editor workspace + widget gallery |
example/catalog | Sidebar catalog + live showcases; custom title bar demo |
example/apitest | Splitter, editors, Select colors, pending Animate |
example/chapar | Multi-page nav shell, sub-Layout helpers |
example/: examples.md© chapar-rest, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in .cursor/skills/yoga-ui of chapar-rest/chapar.
Open the folder on GitHubat commit 5a27fd5
Yoga Go Desktop UI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Yoga Go Desktop UI this skillchapar-rest/chapar | 714 | — | ~2.8k | Automated safety check: Pass | BSD-3-Clause | |
| Warp One-Time Launch Modalwarpdotdev/warp | 65k | 1 repos | ~3.1k | Automated safety check: Pass | AGPL-3.0 | |
| Design Dnazanwei/design-dna | 1.9k | 1 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Figma Design to Codewarpdotdev/warp | 65k | 4 repos | ~2.9k | Automated safety check: Pass | AGPL-3.0 | |
| AO Desktop App LauncherOrchestratorInc/agent-orchestrator | 13k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Design Guidepaperclipai/paperclip | 99k | 1 repos | ~3.1k | Automated safety check: Pass | MIT |
warpdotdev/warp
Steps for adding a one-time launch or announcement modal to the Warp desktop GUI, gated by a feature flag and tracked by a settings field.
zanwei/design-dna
Extract, define, and apply design DNA across three dimensions: design system (tokens), design style (qualitative feel), and visual effects (Canvas, WebGL, 3D, particles, shaders, scroll effects…
warpdotdev/warp
Turns a Figma frame or component into production code that matches the design, using the Figma MCP server and the project's own design system.
OrchestratorInc/agent-orchestrator
Launches, restarts and troubleshoots the real AO Electron desktop app from a checkout, with isolated or real local data and checks for stale processes.
paperclipai/paperclip
Paperclip UI design system guide for building consistent, reusable frontend components.
xiaopu-ai/web-design
Web 视觉设计 SKILL。输入 PRD / 参考 URL / 截图 / 关键词(任意组合),先产出一份标准化 DESIGN.md 设计规范,用户确认后据此生成 UI/UX、视觉、动效、响应式全部达标的 web 代码。专攻 web 端:Landing Page、Portfolio、产品页、博客、个人站、SaaS 介绍页等。当用户说"帮我做个网站""设计一个页面""参考 XX…
Works with
Categories
Guides building desktop interfaces with the Yoga Go framework: Body views, layout nodes, widgets, dialogs and headless builds. The skill explains Yoga's mental model: app state is kept between frames and the interface is rebuilt declaratively each frame, much like SwiftUI state.View tree, while the GPU loop skips presenting when nothing visual changed.
Yoga Go Desktop UI fits situations like: writing or changing a Yoga desktop app; adding a widget such as a table, tree or editor; showing dialogs, toasts or file pickers from a click handler; setting up a headless nogpu build of an example.
Run `npx skills add chapar-rest/chapar --skill yoga-ui -a claude-code`. Or copy the skill folder (.cursor/skills/yoga-ui in chapar-rest/chapar) into .claude/skills/yoga-ui in your project. Claude Code loads it when a task matches its description.
Run `npx skills add chapar-rest/chapar --skill yoga-ui -a codex`. Or copy the skill folder (.cursor/skills/yoga-ui in chapar-rest/chapar) into .agents/skills/yoga-ui in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add chapar-rest/chapar --skill yoga-ui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/yoga-ui, .gemini/skills/yoga-ui, .github/skills/yoga-ui and .opencode/skills/yoga-ui in your project.
Going by SKILL.md and its folder, Yoga Go Desktop UI needs the command-line tools its instructions call (go). Our summary lists: A Go toolchain; The Yoga module github.com/mirzakhany/yoga.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Yoga Go Desktop UI is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Yoga Go Desktop UI: Warp One-Time Launch Modal (warpdotdev/warp, 65k stars), Design Dna (zanwei/design-dna, 1.9k stars), Figma Design to Code (warpdotdev/warp, 65k stars) and AO Desktop App Launcher (OrchestratorInc/agent-orchestrator, 13k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
chapar-rest (a GitHub organization) maintains it in chapar-rest/chapar, which has 714 GitHub stars. The repository was last updated on October 5, 2026.
Source: chapar-rest/chapar on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.