Agent skill

Create Ryos App

by ryokun6 in ryokun6/ryos

Create new applications for ryOS following established patterns and conventions.

AGPL-3.0Auto-check passedDevelopment

Install Create Ryos App

skills CLI
$ npx skills add ryokun6/ryos --skill create-ryos-app -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ryokun6/ryos create-ryos-app --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ryokun6/ryos.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/create-ryos-app .claude/skills/create-ryos-app && rm -rf skills-src

Use ~/.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/

Facts

Skill name
create-ryos-app
GitHub stars
1.3k
Token cost
~3.7k tokens
SKILL.md length
621 words
Files
1
Skills in repo
10
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Create new applications for ryOS following established patterns and conventions.

  • Works in 8 steps: Metadata (metadata.ts) → Main Component ([AppName]AppComponent.tsx) → Logic Hook (use[AppName]Logic.ts) → …
  • Building a new app
  • SKILL.md covers Quick Start Checklist, Directory Structure, 1. Metadata (metadata.ts) and 2. Main Component…, plus 10 more sections
  • Calls bun; reaches ryo.lu

What it does

Create Ryos App is an agent skill from ryokun6/ryos. Create new applications for ryOS following established patterns and conventions. Use when building a new app, adding an application to the desktop, creating app components, or scaffolding app structures.

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Project scaffolding and React components. The repository describes itself as: ryOS, made with Cursor. The licence is AGPL-3.0.

When your agent uses it

  • Building a new app
  • Adding an application to the desktop
  • Creating app components
  • Scaffolding app structures

Example prompts

  • “/create-ryos-app”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Metadata (metadata.ts)
  2. Main Component ([AppName]AppComponent.tsx)
  3. Logic Hook (use[AppName]Logic.ts)
  4. Menu Bar ([AppName]MenuBar.tsx)
  5. Register the App ID (appRegistryData.ts)
  6. Register in appRegistry.tsx
  7. Register help keys
  8. Localize (Do Last)

What it can do on your machine

Read from SKILL.md and the folder at commit 4a6e61e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • bun

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • ryo.lu

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Create Ryos App loads about 3.7k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 621 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~55
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from ryokun6/ryos at commit 4a6e61e, republished under its AGPL-3.0 licence (© ryokun6). 621 words, ~3,726 tokens.

Download SKILL.mdSave it as .claude/skills/create-ryos-app/SKILL.md (or your agent's skills folder).
name
create-ryos-app
description
Create new applications for ryOS following established patterns and conventions. Use when building a new app, adding an application to the desktop, creating app components, or scaffolding app structures.

Creating ryOS Applications

Quick Start Checklist

- [ ] 1. Create app directory: src/apps/[app-name]/
- [ ] 2. Create main component: components/[AppName]AppComponent.tsx
- [ ] 3. Create menu bar: components/[AppName]MenuBar.tsx
- [ ] 4. Create logic hook: hooks/use[AppName]Logic.ts
- [ ] 5. Create metadata: metadata.ts (appMetadata + exactly 6 help items)
- [ ] 6. Create app definition: index.tsx (re-export metadata, declare initialData type)
- [ ] 7. Add icon: choose from existing icons or the resource catalogs, then place active assets under `public/icons/<theme>/[app-name].png`
- [ ] 8. Register the app id: add to appIds + appNames in src/config/appRegistryData.ts
- [ ] 9. Register the app: lazy component + registry entry in src/config/appRegistry.tsx
- [ ] 10. Register help key order in src/hooks/useTranslatedHelpItems.ts
- [ ] 11. Add translation keys to src/lib/locales/en/translation.json
- [ ] 12. Localize (last): add en strings, sync locales; use the localize skill to finish

Directory Structure

src/apps/[app-name]/
├── components/
│   ├── [AppName]AppComponent.tsx  # Main component (required)
│   └── [AppName]MenuBar.tsx       # Menu bar (required)
├── hooks/
│   └── use[AppName]Logic.ts       # Logic hook (recommended)
├── metadata.ts                    # appMetadata + helpItems (required)
└── index.tsx                      # App definition: re-export metadata, initialData types (required)
Why metadata lives in its own file

appRegistry.tsx imports appMetadata/helpItems eagerly so the dock, About/Help dialogs, and search can show app info without loading the (lazy) component bundle. Keep these in a tiny metadata.ts that imports nothing heavy. Most current apps follow this split (@/apps/<id>/metadata). index.tsx then re-exports from metadata.ts and is the home for initialData types and any app-specific exported types.

1. Metadata (metadata.ts)

Keep app metadata and help items in metadata.ts so the registry can load them eagerly without pulling in the component.

tsx
export const appMetadata = {
  name: "[App Name]",
  version: "1.0.0",
  creator: { name: "Ryo Lu", url: "https://ryo.lu" },
  github: "https://github.com/ryokun6/ryos",
  icon: "/icons/default/[app-name].png",
};

// Always include exactly 6 help items (icon, title, description each).
export const helpItems = [
  { icon: "🚀", title: "Getting Started", description: "How to use this app" },
  { icon: "📂", title: "Open & Save", description: "Open and save files from the File menu" },
  { icon: "✏️", title: "Editing", description: "Use the Edit menu for cut, copy, paste" },
  { icon: "👁️", title: "View Options", description: "Adjust view and layout from the View menu" },
  { icon: "⌨️", title: "Shortcuts", description: "Use keyboard shortcuts for faster workflows" },
  { icon: "❓", title: "Help & About", description: "Open Help from the Help menu for more info" },
];
App icon sourcing

Before creating a new app icon from scratch, check the active icon themes and the historical icon resource catalogs:

  1. Look for an existing logical icon in public/icons/default, public/icons/macosx, public/icons/win98, and public/icons/xp.
  2. Search the resource catalogs for historically appropriate source art:
    • Mac OS X: public/resources/macos-icon-catalogs/{panther,tiger}/catalog.md
    • Windows: public/resources/windows-icon-catalogs/{win98,xp}/catalog.md
  3. If a catalog asset is the right source, copy or adapt it into the active icon tree (public/icons/<theme>/...) instead of referencing public/resources/... directly from app metadata.
  4. Add at least public/icons/default/[app-name].png; add theme-specific variants when the catalog has a better era-matched asset.
  5. Run bun run generate:icons after adding or moving active files under public/icons.

Keep public/resources/*-icon-catalogs as source libraries. Do not replace unrelated active icons just because a catalog contains a historical equivalent.

App Definition (index.tsx)

Re-export the metadata and declare any initialData type. This is what other files import as @/apps/[app-name].

tsx
export { appMetadata, helpItems } from "./metadata";

// Optional: typed startup payload for launchApp("[app-name]", { ... })
export interface [AppName]InitialData {
  // e.g. filePath?: string;
}

2. Main Component ([AppName]AppComponent.tsx)

tsx
import { WindowFrame } from "@/components/layout/WindowFrame";
import { [AppName]MenuBar } from "./[AppName]MenuBar";
import { AppProps } from "@/apps/base/types";
import { use[AppName]Logic } from "../hooks/use[AppName]Logic";
import { HelpDialog } from "@/components/dialogs/HelpDialog";
import { AboutDialog } from "@/components/dialogs/AboutDialog";
import { appMetadata } from "..";

export function [AppName]AppComponent({
  isWindowOpen,
  onClose,
  isForeground,
  skipInitialSound,
  instanceId,
}: AppProps) {
  const {
    t,
    translatedHelpItems,
    isHelpDialogOpen,
    setIsHelpDialogOpen,
    isAboutDialogOpen,
    setIsAboutDialogOpen,
    isWindowsTheme,
  } = use[AppName]Logic({ isWindowOpen, isForeground, instanceId });

  const menuBar = (
    <[AppName]MenuBar
      onClose={onClose}
      onShowHelp={() => setIsHelpDialogOpen(true)}
      onShowAbout={() => setIsAboutDialogOpen(true)}
    />
  );

  if (!isWindowOpen) return null;

  return (
    <>
      {!isWindowsTheme && isForeground && menuBar}
      <WindowFrame
        title={t("apps.[app-name].title")}
        onClose={onClose}
        isForeground={isForeground}
        appId="[app-name]"
        skipInitialSound={skipInitialSound}
        instanceId={instanceId}
        menuBar={isWindowsTheme ? menuBar : undefined}
      >
        <div className="flex flex-col h-full bg-os-window-bg font-os-ui">
          {/* App content */}
        </div>
      </WindowFrame>
      <HelpDialog
        isOpen={isHelpDialogOpen}
        onOpenChange={setIsHelpDialogOpen}
        appId="[app-name]"
        helpItems={translatedHelpItems}
      />
      <AboutDialog
        isOpen={isAboutDialogOpen}
        onOpenChange={setIsAboutDialogOpen}
        metadata={appMetadata}
        appId="[app-name]"
      />
    </>
  );
}

3. Logic Hook (use[AppName]Logic.ts)

tsx
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { useTranslatedHelpItems } from "@/hooks/useTranslatedHelpItems";
import { useThemeStore } from "@/stores/useThemeStore";
import { helpItems } from "..";

export function use[AppName]Logic({ instanceId }: { instanceId: string }) {
  const { t } = useTranslation();
  const translatedHelpItems = useTranslatedHelpItems("[app-name]", helpItems);
  const currentTheme = useThemeStore((state) => state.current);
  const isWindowsTheme = currentTheme === "xp" || currentTheme === "win98";

  const [isHelpDialogOpen, setIsHelpDialogOpen] = useState(false);
  const [isAboutDialogOpen, setIsAboutDialogOpen] = useState(false);

  return {
    t,
    translatedHelpItems,
    isWindowsTheme,
    isHelpDialogOpen,
    setIsHelpDialogOpen,
    isAboutDialogOpen,
    setIsAboutDialogOpen,
  };
}

4. Menu Bar ([AppName]MenuBar.tsx)

Match existing app menubars: structure, classes, and spacing.

  • Wrapper: <MenuBar inWindowFrame={isWindowsTheme}> — no extra gap between menus (layout uses space-x-0).
  • Trigger: MenubarTrigger className="text-md px-2 py-1 border-none focus-visible:ring-0".
  • Content: MenubarContent align="start" sideOffset={1} className="px-0".
  • Items: MenubarItem className="text-md h-6 px-3".
  • Separators: MenubarSeparator className="h-[2px] bg-black my-1".
tsx
import { MenuBar } from "@/components/layout/MenuBar";
import {
  MenubarMenu,
  MenubarTrigger,
  MenubarContent,
  MenubarItem,
  MenubarSeparator,
} from "@/components/ui/menubar";
import { useThemeStore } from "@/stores/useThemeStore";
import { useTranslation } from "react-i18next";

interface [AppName]MenuBarProps {
  onClose: () => void;
  onShowHelp: () => void;
  onShowAbout: () => void;
}

export function [AppName]MenuBar({ onClose, onShowHelp, onShowAbout }: [AppName]MenuBarProps) {
  const { t } = useTranslation();
  const currentTheme = useThemeStore((state) => state.current);
  const isWindowsTheme = currentTheme === "xp" || currentTheme === "win98";
  const isMacOSTheme = currentTheme === "macosx";

  return (
    <MenuBar inWindowFrame={isWindowsTheme}>
      <MenubarMenu>
        <MenubarTrigger className="text-md px-2 py-1 border-none focus-visible:ring-0">
          {t("common.menu.file")}
        </MenubarTrigger>
        <MenubarContent align="start" sideOffset={1} className="px-0">
          <MenubarSeparator className="h-[2px] bg-black my-1" />
          <MenubarItem onClick={onClose} className="text-md h-6 px-3">
            {t("common.menu.close")}
          </MenubarItem>
        </MenubarContent>
      </MenubarMenu>
      <MenubarMenu>
        <MenubarTrigger className="text-md px-2 py-1 border-none focus-visible:ring-0">
          {t("common.menu.help")}
        </MenubarTrigger>
        <MenubarContent align="start" sideOffset={1} className="px-0">
          <MenubarItem onClick={onShowHelp} className="text-md h-6 px-3">
            {t("apps.[app-name].menu.help")}
          </MenubarItem>
          {!isMacOSTheme && (
            <>
              <MenubarSeparator className="h-[2px] bg-black my-1" />
              <MenubarItem onClick={onShowAbout} className="text-md h-6 px-3">
                {t("apps.[app-name].menu.about")}
              </MenubarItem>
            </>
          )}
        </MenubarContent>
      </MenubarMenu>
    </MenuBar>
  );
}

5. Register the App ID (appRegistryData.ts)

The AppId union type, dock/search ordering, and store lookups all derive from src/config/appRegistryData.ts. Add the id here first — otherwise appRegistry.tsx (and everything typed against AppId) will not compile.

tsx
// src/config/appRegistryData.ts
export const appIds = [
  // ...existing ids...
  "[app-name]",
] as const;

export const appNames: Record<AppId, string> = {
  // ...existing names...
  "[app-name]": "[App Name]",
};

If you ever rename an app's id, add the old id to LEGACY_APP_ID_ALIASES so persisted/bookmarked references still resolve.

6. Register in appRegistry.tsx

createLazyComponent lives in src/config/lazyAppComponent.tsx (already imported at the top of appRegistry.tsx) and registers the chunk for intent-based prefetch. Import metadata from the lightweight metadata.ts, not the component.

tsx
// Metadata import (eager, lightweight) — note the /metadata path
import { appMetadata as [appName]Metadata, helpItems as [appName]HelpItems } from "@/apps/[app-name]/metadata";

// Lazy component (loaded on open). Use your initialData type instead of unknown if you declared one.
const Lazy[AppName]App = createLazyComponent<unknown>(
  () => import("@/apps/[app-name]/components/[AppName]AppComponent")
    .then(m => ({ default: m.[AppName]AppComponent })),
  "[app-name]" // cache key = app id, keeps refs stable across HMR + enables prefetch
);

// Add to the appRegistry object
["[app-name]"]: {
  id: "[app-name]",
  name: "[App Name]",
  icon: { type: "image", src: [appName]Metadata.icon },
  description: "App description",
  component: Lazy[AppName]App,
  helpItems: [appName]HelpItems,
  metadata: [appName]Metadata,
  windowConfig: {
    defaultSize: { width: 650, height: 475 },
    minSize: { width: 400, height: 300 },
  } as WindowConstraints,
},
Show full SKILL.md (247 more words)Show less

7. Register help keys

useTranslatedHelpItems("[app-name]", helpItems) needs a matching key list in APP_HELP_I18N_KEYS in src/hooks/useTranslatedHelpItems.ts. Keep the list in the same order as metadata.ts helpItems; the hook preserves the icons and swaps in apps.[app-name].help.[key].title and .description.

For longer help lists, create src/apps/[app-name]/helpKeys.ts and spread that exported list into APP_HELP_I18N_KEYS. Calculator, Maps, and Internet Explorer are good examples.

Run bun test tests/unit/i18n/test-help-i18n-alignment.test.ts after adding the app. It catches missing help keys and row-count drift across every registered app.

AppProps Interface

PropTypeDescription
isWindowOpenbooleanWindow visibility
onClose() => voidClose handler
isForegroundbooleanWindow is active
instanceIdstringUnique instance ID
skipInitialSoundbooleanSkip open sound
initialDataTInitialDataOptional startup data

Menu Bar Placement

  • macOS/System7: Render outside WindowFrame when isForeground
  • XP/Win98: Pass via menuBar prop to WindowFrame
tsx
const isWindowsTheme = currentTheme === "xp" || currentTheme === "win98";
return (
  <>
    {!isWindowsTheme && isForeground && menuBar}
    <WindowFrame menuBar={isWindowsTheme ? menuBar : undefined}>

WindowFrame Options

PropValuesUse
material"default", "transparent", "notitlebar"Window style
interceptClosebooleanShow save dialog before close
keepMountedWhenMinimizedbooleanPreserve state when minimized

Common Patterns

Initial Data
tsx
interface ViewerInitialData { filePath: string; }
export function ViewerAppComponent({ initialData }: AppProps<ViewerInitialData>) {
  const filePath = initialData?.filePath ?? "";
}
Launch Other Apps
tsx
import { useLaunchApp } from "@/hooks/useLaunchApp";
const launchApp = useLaunchApp();
launchApp("photos", { path: "/image.png" });
Global Store (Zustand)
tsx
// src/stores/use[AppName]Store.ts
import { create } from "zustand";
import { persist } from "zustand/middleware";

export const use[AppName]Store = create<State>()(
  persist((set) => ({ /* state and actions */ }), { name: "[app-name]-storage" })
);

8. Localize (Do Last)

After the app is built and wired up, finish by localizing:

  1. Add translation keys for all user-facing strings (menu labels, dialogs, status, help).
  2. Add English entries under apps.[app-name].* in src/lib/locales/en/translation.json.
  3. Sync other locales with bun run i18n:sync:mark-todo.
  4. Validate with bun run i18n:sync:dry-run, bun run i18n:audit, and the help alignment test.

Use the localize skill for the full workflow: extract strings → t() calls → en keys → sync. Do this step last so all UI copy is stable before extracting and syncing.

© ryokun6, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .cursor/skills/create-ryos-app of ryokun6/ryos.

Open the folder on GitHubat commit 4a6e61e

Compare with similar skills

Create Ryos App 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.

Create Ryos App compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Create Ryos App this skillryokun6/ryos1.3k—~3.7kAutomated safety check: PassAGPL-3.0
Design Importyonatangross/orchestkit289—~2.9kAutomated safety check: NotesMIT
South Admin CRUD Generatorsouthliu/south-admin-react580—~1.7kAutomated safety check: PassMIT
Creating Luna Appmizchi/luna.mbt173—~1.4kAutomated safety check: PassNone
Component Refactoringlangflow-ai/langflow156k—~3.5kAutomated safety check: PassMIT
@pierre/diffs Code Renderingpierrecomputer/pierre6.2k2 repos~803Automated safety check: PassApache-2.0

Similar skills

  • Design Import

    yonatangross/orchestkit

    Scaffolds React components from a Claude Design handoff bundle and stops at files on disk: no stories, no tests, no pull request.

    289 GitHub stars~2.9k tokensUpdated today
    DevelopmentAuto-check: notes
  • South Admin CRUD Generator

    southliu/south-admin-react

    Generates a full CRUD page - page component, data model and API client - from the south-admin-react project's own VS Code snippet templates.

    580 GitHub stars~1.7k tokensUpdated 18 days ago
    Frontend & DesignAuto-check passed
  • Creating Luna App

    mizchi/luna.mbt

    A skill your agent uses when scaffolding a new standalone CSR app that uses luna (@lunaui/luna) outside the luna.mbt monorepo — running npx @lunaui/luna new, choosing TSX vs MoonBit, or fixing a…

    173 GitHub stars~1.4k tokensUpdated 22 days ago
    DevelopmentAuto-check passed
  • Component Refactoring

    langflow-ai/langflow

    Refactor high-complexity React components in Langflow frontend.

    156k GitHub stars~3.5k tokensUpdated today
    DevelopmentAuto-check passed
  • @pierre/diffs Code Rendering

    pierrecomputer/pierre

    Guides an agent through using @pierre/diffs to render syntax-highlighted files and diffs, and to build editing and review surfaces in React or plain JavaScript.

    6.2k GitHub starsUsed in 2 repos~803 tokens
    DevelopmentAuto-check passed
  • Domodomo New Tool Workflow

    darknecrocities/DomoDomo---All-in-one-Tool

    Mandatory end-to-end procedure for adding or materially changing a DomoDomo tool or category.

    239 GitHub stars~1.3k tokensUpdated 2 days ago
    DevelopmentAuto-check passed

More from ryokun6/ryos

All 10 skills in this repo
  • Add AI Chat Tool

    ryokun6/ryos

    Add or modify an AI chat tool ("Ask Ryo" capability) in ryOS.

    1.3k GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Create Store

    ryokun6/ryos

    Create or modify ryOS Zustand stores following repo conventions — persist middleware, partialize, versioned migrations, the debounced write-behind storage adapter for large slices, and cloud-sync…

    1.3k GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Desktop Release

    ryokun6/ryos

    Cut and publish ryOS Electron desktop releases on GitHub. An agent skill from ryokun6/ryos.

    1.3k GitHub stars~1k tokensUpdated yesterday
    Auto-check: notes
  • Localize

    ryokun6/ryos

    Localize ryOS apps and components by extracting hardcoded strings, replacing with translation keys, and syncing across languages.

    1.3k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • React performance optimization guidelines from Vercel Engineering (vercel-labs/agent-skills).

    1.3k GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • UI Design Styling

    ryokun6/ryos

    Design and style ryOS UI using the current OS theme token system, Tailwind variants, shared primitives, Aqua Glass, dark mode, and accent conventions.

    1.3k GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed

Questions about Create Ryos App

What does Create Ryos App do?

Create new applications for ryOS following established patterns and conventions. Create Ryos App is an agent skill from ryokun6/ryos. Create new applications for ryOS following established patterns and conventions.

When should I use Create Ryos App?

Create Ryos App fits situations like: building a new app; adding an application to the desktop; creating app components; scaffolding app structures.

How do I install Create Ryos App in Claude Code?

Run `npx skills add ryokun6/ryos --skill create-ryos-app -a claude-code`. Or copy the skill folder (.cursor/skills/create-ryos-app in ryokun6/ryos) into .claude/skills/create-ryos-app in your project. Claude Code loads it when a task matches its description.

How do I install Create Ryos App in Codex?

Run `npx skills add ryokun6/ryos --skill create-ryos-app -a codex`. Or copy the skill folder (.cursor/skills/create-ryos-app in ryokun6/ryos) into .agents/skills/create-ryos-app in your project. Codex loads it when a task matches its description.

Can I use Create Ryos App in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ryokun6/ryos --skill create-ryos-app -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-ryos-app, .gemini/skills/create-ryos-app, .github/skills/create-ryos-app and .opencode/skills/create-ryos-app in your project.

What does Create Ryos App need to run?

Going by SKILL.md and its folder, Create Ryos App needs the command-line tools its instructions call (bun).

Does Create Ryos App access the network?

SKILL.md names 1 domain. In commands or code: ryo.lu; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Create Ryos App safe to install?

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.

What licence does Create Ryos App use?

Create Ryos App is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Create Ryos App use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Create Ryos App?

Skills that share tags, products or a category with Create Ryos App: Design Import (yonatangross/orchestkit, 289 stars), South Admin CRUD Generator (southliu/south-admin-react, 580 stars), Creating Luna App (mizchi/luna.mbt, 173 stars) and Component Refactoring (langflow-ai/langflow, 156k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Create Ryos App?

ryokun6 (a GitHub user) maintains it in ryokun6/ryos, which has 1,264 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 7, 2026.

Source: ryokun6/ryos on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.