Communitygithub.com

runapps/skills

RunApps(https://www.runapps.ai)를 통해 AI 웹 앱을 빌드하고 게시합니다. MCP 도구와 RunApps JavaScript SDK(@runappsai/sdk)를 사용하며, 인증, 플랫폼 모델, 번들 규칙 및 안전 규칙을 다룹니다.

skills란 무엇인가요?

이 스킬은 AI 웹 애플리케이션을 구축하고 RunApps 플랫폼에 게시하는 전체 워크플로우를 설명합니다. runapps MCP 서버가 연결되었거나 작업에서 RunApps, runapps.dev, 앱 게시, RunApps SDK 또는 rk_ 키를 언급할 때 사용됩니다. 스킬은 장치-코드 흐름, 에이전트 키 및 Bearer 헤더를 통한 인증, 앱/슬러그/번들/가시성/검토/크리에이터 수수료로 구성된 플랫폼 모델, 그리고 SDK(로그인, 채팅, 이미지, 오디오, 비디오, 사용자별 파일, IndexedDB 동기화, 비공개 프롬프트)를 다룹니다. 또한 ZIP 레이아웃, dot 파일 규칙, 진입 페이지 요구 사항을 포함한 번들 규칙과 게시 전 안전 검사를 설명합니다. Claude Code, Cursor, Codex 등 MCP를 지원하는 모든 에이전트에서 작동하며, create_app, upload_bundle, update_app 같은 도구로 앱 수명 주기를 관리합니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/runapps/skills/tree/HEAD/runapps

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

MCP를 통한 RunApps

RunApps (https://www.runapps.ai)는 AI 웹 앱을 게시합니다: 크리에이터가 정적 프론트엔드 번들(zip)을 업로드하면 자체 https://<slug>.runapps.dev에서 서비스되며, 사용자는 하나의 RunApps 계정으로 로그인하여 자신의 모델 사용량을 지불하고, 크리에이터는 모든 호출에 대해 수수료를 받습니다. 아래 모든 작업은 runapps MCP 서버와 SDK를 통해 수행됩니다. 아직 연결되지 않았나요? "연결하기"를 참조하세요.

이 파일은 진입점입니다: 연결, 플랫폼 모델, 도구 카탈로그, 워크플로우 및 규칙. SDK(앱 코드가 모델 및 파일과 통신하는 방법)는 references/sdk.md에 있습니다. 정확한 도구 매개변수는 references/tools.md를 참조하세요. 작업에 필요한 부분만 읽으세요.

연결하기 (인증)

권위 있는 최신 버전은 https://www.runapps.ai/agent/setup.md입니다. 이것은 간략한 형식입니다. 사용자는 절대 비밀번호를 입력하지 않으며, 당신도 절대 비밀번호를 보지 않습니다: 키를 요청하면 사용자가 브라우저에서 한 번 승인을 클릭합니다.

  1. 키 요청: POST https://www.runapps.ai/api/agent/device/code에 JSON {"name": "<당신의 이름> @ <기계>", "scopes": "read,develop,publish,gateway"}를 보냅니다. 응답에는 device_code, user_code, verification_uri_complete (https://www.runapps.ai/agent/authorize?code=XXXX-XXXX), expires_in (600초) 및 interval (5초)이 있습니다. verification_uri_complete을 사용자에게 그대로 보여주고 열어서 승인하도록 요청하세요. name은 키의 식별자입니다: 동일한 이름으로 요청을 승인하면 이전 키가 취소되므로 재실행해도 키가 쌓이지 않습니다.
  2. 폴링: POST https://www.runapps.ai/api/agent/device/token에 {"device_code": "…"}를 interval초마다 보냅니다. status는 pending(대기), slow_down(지연), denied / expired(중단하고 사용자에게 알림) 또는 approved이며, approved는 api_key (rk_…), key_prefix, scopes 및 mcp_url을 반환합니다 — 한 번만. 즉시 MCP 구성에 기록하세요. 대화, 로그 또는 리포지토리에 절대 기록하지 마세요.
  3. 연결: MCP Streamable HTTP https://www.runapps.ai/api/mcp에 헤더 Authorization: Bearer <api_key>를 사용합니다. Claude Code: claude mcp add --transport http runapps "https://www.runapps.ai/api/mcp" --header "Authorization: Bearer <api_key>". Codex: [mcp_servers.runapps] url = "https://www.runapps.ai/api/mcp", http_headers = { Authorization = "Bearer <api_key>" }. 다른 클라이언트: 동일한 URL과 헤더. 그런 다음 tools/list; initialize의 instructions가 권장 워크플로우를 제공합니다.

범위: read, develop, publish, gateway는 기본적으로 부여됩니다. danger (삭제/게시 취소)는 명시적으로 요청하고 사용자에게 이유를 설명하지 않는 한 포함되지 않습니다. 사용자는 승인 페이지에서 범위를 선택 해제할 수 있으며, 나중에 https://www.runapps.ai/dashboard/api에서 키 이름을 변경하거나, 범위를 변경하거나, 키를 취소할 수 있습니다 (범위 변경은 다음 호출에 적용되며 새 키가 필요하지 않습니다). 범위 없이 호출된 도구는 범위 이름을 오류로 응답합니다: 사용자에게 다시 승인을 요청하고, 우회하지 마세요.

동일한 키는 gateway 범위가 있을 때 게이트웨이 (https://www.runapps.ai/v1, OpenAI 호환, Authorization: Bearer rk_…)에서도 작동합니다 — 빌드한 앱을 테스트하기 위해; 각 호출은 사용자에게 청구됩니다. 영구적으로 연결을 끊으려면 confirm: true와 함께 revoke_my_key를 호출하세요.

플랫폼 모델

객체설명접근 방법
앱 (프로젝트)플랫폼이 할당한 slug, 이름, 한 줄 설명, Markdown 긴 설명, 카테고리, 아이콘, 가시성 및 크리에이터 수수료(rebate_rate)가 있는 게시된 번들. 번들 없이 초안으로 생성되므로 코드가 있기 전에 slug가 존재합니다.list_apps, get_app, create_app, update_app
번들앱 빌드의 zip. 전체가 저장됨; 파일은 https://<slug>.runapps.dev에서 제공됩니다. Dot 파일(.private/…)은 절대 제공되지 않음; zip 루트의 index.html이 기본 진입점입니다.upload_bundle (+ PUT), upload_bundle_base64, check_bundle
가시성draft(크리에이터만) → private(비공개: 링크가 있는 사람 누구나, 검토 없음) 또는 public(라이브러리; 처음 public으로 전환 시 검토되며 pending으로 표시됨, 이후 업데이트는 즉시 라이브; 거절 시 review_note 포함).update_app with visibility, get_review
사용자 및 로그인사용자는 앱 내에서 RunApps 계정으로 로그인합니다(SDK가 수행; 키 없는 new RunApps()). 각 사용자는 자신의 모델 사용량과 크리에이터 수수료를 지불합니다. 앱은 절대 키를 보유하지 않습니다.SDK (references/sdk.md)
비공개 프롬프트앱이 제공하지만 브라우저는 절대 볼 수 없는 프롬프트 파일: zip 내 .private/prompts/<id>.md; 앱이 prompt: { id, vars }를 보내면 게이트웨이가 채워서 앞에 추가합니다.get_app / check_bundle이 발견된 id 목록 제공
사용자별 파일 및 동기화각 사용자는 앱당 파일 공간(client.files)을 가지며, IndexedDB 동기화(client.sync)는 로컬 데이터베이스를 미러링합니다.SDK
모델채팅, 비전, 이미지, 음성, 전사, 비디오, 임베딩 및 실시간 모델 카탈로그; 요청은 카탈로그 이름으로 모델을 지정합니다.list_models
에이전트 키당신이 보유한 rk_ 키: kind = agent, 범위 지정됨; 사용자의 API 키 아래에 나열됨.revoke_my_key

카테고리: Creative, Content, Productivity, Marketing, Engineering, Design, Research, Data Analysis, Business, Finance.

워크플로우

  1. 생성: name(및 description, category)와 함께 create_app. 결과에는 slug (proj-xxxxxxxx, 플랫폼이 할당하며 당신이나 사용자가 선택하지 않음; 관리자가 나중에 목록 앱에 읽기 쉬운 slug를 부여할 수 있음) 및 url이 있습니다. slug를 사용자에게 알리세요.
  2. slug에 대해 로컬 개발 (references/sdk.md, "앱 빌드"):
    <script src="https://www.runapps.ai/sdk/latest.js"></script>
    <script>
      const client = new RunApps({ project: "<slug>" });
      const r = await client.chat.create({ model: "Claude Sonnet 4.6", messages: [{ role: "user", content: "hi" }] });
    </script>
    
    http://localhost:<port>에서 로그인이 작동하며 호출은 실제 게이트웨이를 통해 이동합니다. list_models에서 모델을 선택하세요(정확한 이름). 앱 코드에 rk_ 키를 절대 넣지 마세요.
  3. 빌드 폴더 내용물을 빌드하고 압축: cd dist && zip -r ../app.zip . 그래서 index.html이 zip 루트에 있도록 합니다(폴더 자체를 압축하는 것이 가장 흔한 실수입니다). 절대 자산 경로는 작동합니다; dot 폴더는 숨겨집니다.
  4. 업로드: upload_bundle → PUT zip을 upload_url로 (curl -sS -X PUT -H 'Content-Type: application/zip' --data-binary @app.zip '<upload_url>'). PUT 응답은 번들 보고서입니다: 모든 경고를 수정하세요(SDK 로드 안 됨, 진입점이 루트에 없음, 페이지에 키 포함). check_bundle은 언제든지 다시 읽습니다.
  5. 설명: description (한 줄, 무엇을 하는지), long_description (Markdown: 사용자가 얻는 것, 사용 방법, 실제 비용), category, icon_url (정사각형 PNG/SVG, https 또는 data URL)와 함께 update_app.
  6. 출시: update_app visibility: "private"는 공유 링크용, 또는 "public"은 라이브러리용. "public" 이후 get_review는 검토자가 결정할 때까지 pending을 표시합니다; rejected는 review_note와 함께 오며 조치를 취한 후 다시 public으로 설정하세요. 게시 전에 직접 url을 열어보세요(또는 사용자에게 요청): 404 또는 빈 페이지를 표시하는 번들은 거부됩니다.

업데이트: 언제든지 새 번들을 업로드하거나 메타데이터를 변경하세요. 공개 앱은 공개 상태를 유지합니다.

규칙

  • [danger] 도구 (unpublish_app, delete_app)는 다른 사람이 사용 중인 것을 제거합니다. 먼저 사용자에게 물어보고 동의한 후에만 confirm: true를 전달하세요. danger 범위가 없으면 어차피 거부됩니다.
  • gateway 범위로 이루어진 모든 모델 호출과 사용자 앱이 만드는 모든 호출은 실제 비용이 발생합니다. 짧은 프롬프트와 저렴한 모델로 테스트하세요; list_models가 가격을 제공합니다.
  • 키는 사용자의 것입니다: 기계당 하나 (name으로 구분), 절대 공유되지 않으며 MCP 구성 외에는 절대 기록되지 않습니다. 연결 해제 요청 시 revoke_my_key로 취소하세요.
  • 모델 이름을 임의로 만들지 마세요. list_models를 사용하세요. 알 수 없는 이름은 400 오류이며, 조용히 변경되지 않습니다.
  • 비공개 프롬프트의 텍스트는 비공개로 유지되어야 합니다: 게이트웨이는 이를 반향하는 응답을 보류합니다.

다음에 읽을 내용

작업읽을 문서
앱 작성: 로그인, 채팅, 스트리밍, 이미지, 오디오, 비디오, 파일, 동기화, 비공개 프롬프트, 오류references/sdk.md
정확한 도구 매개변수 및 결과 형태references/tools.md
연결(전체 텍스트, 항상 최신)https://www.runapps.ai/agent/setup.md
번들 빌드, 게시, 수익references/sdk.md → "앱 빌드", "게시하기"

관련 스킬