Communitygithub.com

getshareout/shareout-skill

AI 에이전트가 파일을 공유 가능한 라이브 웹 페이지로 만들고, 게시하고, 관리하도록 가르치는 ShareOut 스킬입니다. shareout.site/v1/skill 에서 제공됩니다.

shareout-skill란 무엇인가요?

ShareOut Skill은 AI 에이전트(Claude Code, Cursor, Codex 등)가 정적 파일을 동적이고 공유 가능한 웹 아티팩트로 변환할 수 있도록 설계된 공식 스킬입니다. HTML 앱, CSV, Markdown, JSON, TXT 뷰어를 지원하며, 영구 데이터 저장, 실시간 협업, 파일 저장소, 통합 및 자동화 기능을 제공합니다. 이 스킬은 버전 확인, 계획(개인/팀)에 따른 모드 라우팅, SDK 로딩 규칙, HTML 아티팩트 편집 준비 상태 체크리스트, 디자인 가이드라인 등 포괄적인 지침을 포함합니다. 에이전트는 이 스킬을 통해 사용자의 의도를 파악하고 적절한 API 모듈과 SDK 기능(JSON, Table, Grid, Realtime, Blobs, Live Data 등)을 안내하며, 인증 토큰 발급부터 게시까지 전 과정을 자동화합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add getshareout/shareout-skill

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

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

문서

ShareOut Skill

ShareOut은 파일을 지속적 데이터, 실시간 협업, 파일 저장소, 통합 및 자동화 기능을 갖춘 공유 가능한 웹 아티팩트로 변환합니다. HTML 앱과 CSV, Markdown, JSON, TXT 뷰어를 지원합니다.

이것은 공식 스킬입니다. 모든 ShareOut 작업에 대해 먼저 로드하세요.

버전 확인 — 필수 첫 단계

다른 작업을 수행하기 전에 최신 스킬을 보유하고 있는지 확인하세요. 이 파일의 프론트매터 version이 현재 보유한 버전입니다(현재 2.21.0).

  1. GET https://shareout.site/v1/skill/version → { "version": "...", "updated_at": "..." }.
  2. 반환된 version이 이 파일의 프론트매터 version보다 최신이면, 에이전트가 오래된 것입니다: GET https://shareout.site/v1/skill (전체 스킬 폴더의 zip)을 다운로드하고, 압축을 풀고, 이전 복사본을 폐기한 후, 추출된 파일로 계속 진행하세요.
  3. 일치하면 진행하세요.

이 확인을 건너뛰지 마세요. 오래된 스킬로 작업하면 잘못된 엔드포인트와 동작이 발생합니다.

계획 모델

ShareOut에는 두 가지 계획이 있습니다:

계획스킬 사용 방법
개인기본 스킬만 사용하세요. 사용자 자신의 아티팩트를 빌드, 게시, 업데이트, 자동화 및 관리합니다.
팀먼저 기본 스킬을 사용한 다음, 워크스페이스 관리 또는 팀 전용 기능을 위해 Teams 오버레이를 로드하세요.

Teams는 추가 기능입니다. 기본 스킬 대신 Teams 오버레이를 사용하지 마세요.

에이전트 로딩 프로토콜

  1. 이 파일로 시작합니다.
  2. 사용자가 팀, 워크스페이스, 멤버, 내부 워크스페이스 공유, 서브도메인, 워크스페이스 하우스 스타일, 워크스페이스 스케줄 또는 관리자 제어에 대해 언급하면, 아직 명확하지 않은 경우 Teams 요금제인지 물어보세요.
  3. 사용자가 Teams 요금제가 아닌 경우 Personal 모드를 유지하고 Teams 전용 지침을 로드하거나 적용하지 마세요.
  4. 사용자가 Teams 요금제인 경우 team/SKILL.md을 로드하세요. 워크스페이스 slug/id와 토큰을 사용할 수 있는 경우 GET /v1/skill?workspace={slugOrId}를 가져오세요. zip에는 하우스 규칙이 포함된 추가 workspace-context.md가 포함되어 있습니다.
  5. INDEX.md를 사용하여 필요에 따라 세부 파일을 로드하세요.

첫 번째 질문

구현을 권장하기 전에 다음을 파악하세요:

  1. 무엇을 만들고 있나요? 대시보드, 폼, 보고서, 도구, 문서, 데이터 그리드, 프레젠테이션, 자동화.
  2. 누가 사용하나요? 소유자만, 초대된 사람, Teams 워크스페이스, 또는 공개.
  3. 어떤 데이터가 필요하나요? 없음, 간단한 상태, 구조화된 레코드, 파일, 실시간 외부 데이터, 실시간 협업.
  4. 게시 후 어떤 일이 일어나야 하나요? 링크 공유, 데이터 수집, 알림 전송, 예약 전달, 메트릭 알림, 수신 이메일 수신 및 처리, 또는 뷰어가 AI와 채팅.

모드 라우터

사용자 의도먼저 로드필요한 경우 그 다음
HTML/CSV/Markdown/JSON/TXT 게시api/artifact-types.mdapi/artifacts.md, core/source-editor.md, auth.md
HTML 앱/페이지/대시보드/폼 빌드core/html-spec/overview.mdmodules/ui/overview.md, patterns/overview.md
예쁘게 보이기 / 좋은 디자인 감각 / 일반적인 AI 모양 피하기modules/ui/taste.mdmodules/ui/overview.md
간단한 상태 저장sdk/json.mdcore/html-spec/manifest.md
레코드/제출 저장sdk/table.mdpatterns/forms.md, patterns/tables.md
편집 가능한 스프레드시트 그리드sdk/grid.mdsdk/table.md, integrations/google-sheets.md
파일/이미지 업로드sdk/blobs.mdpatterns/uploads.md
실시간 외부 데이터 사용sdk/live-data.mdsdk/connections.md, integrations/overview.md
실시간 협업 빌드sdk/realtime.mdmodules/_shared/permissions.md
댓글 추가sdk/comments.mdmodules/_shared/permissions.md
아티팩트 내 AI 채팅 추가agents/overview.mdagents/context.md
Telegram에서 페이지와 채팅agents/telegram.mdapi/jobs.md
Slack(DM 봇)에서 페이지와 채팅agents/slack.mdintegrations/slack.md, agents/telegram.md
브라우저에서 Python 실행sdk/python.mdsdk/overview.md
이메일 또는 템플릿 전송sdk/email.mdapi/templates.md
이메일 수신 / 아티팩트로 메일 전달 / 수신 메일 트리거integrations/inbound-email.mdapi/jobs.md
예약된 웨어하우스/JSON 스냅샷 새로고침 (결정적)api/jobs.mdagents/crew.md, sdk/connections.md
아티팩트 크루 (질의 → 요약 → 전달)agents/crew.mdapi/jobs.md, integrations/slack.md
비공개 페이지에 대한 액세스 요청modules/_shared/permissions.mdcore/access-policy.md
예약 전달 또는 웹훅api/jobs.mdapi/destinations.md
메트릭이 임계값을 넘을 때 알림api/metric-alerts.mdpatterns/dashboards.md
Teams 워크스페이스/관리자/서브도메인/컨텍스트team/SKILL.mdteam/INDEX.md
Teams 게시 거버넌스 (공개 시 멤버 승인)team/publish-governance.mdteam/SKILL.md, modules/_shared/publishing.md
Teams 스킬 마켓플레이스 (재사용 가능한 플레이북)team/skill-marketplace.mdteam/workspace-context.md, agents/overview.md

데이터 선택

가장 작은 저장소를 선택하세요:

간단한 상태: 테마, 필터, 마지막으로 연 항목 -> sdk.json
구조화된 레코드: 작업, 제출, 주문 -> sdk.table()
실시간 편집: 문서, 보드, 멀티플레이어 UI -> sdk.realtime()
파일: 이미지, PDF, 첨부 파일 -> sdk.blobs
실시간 외부 시스템: REST, BigQuery, Mixpanel, 웨어하우스 -> sdk.connection / live-data

데이터 선택을 계정 요금제와 혼동하지 마세요. sdk.json, sdk.table(), sdk.realtime()은 데이터 저장소이며, 결제 요금제가 아닙니다.

SDK 로딩

<head>
  <link rel="stylesheet" href="https://shareout.site/sdk/shareout.css">
  <script src="https://shareout.site/sdk/shareout-ui.js" defer></script>
  <script src="https://shareout.site/sdk/shareout.js"></script>
</head>
<script>
(async () => {
  const sdk = await ShareOut.create();
})();
</script>

규칙:

  • ShareOut.create()를 호출하기 전에 https://shareout.site/sdk/shareout.js를 로드하세요.
  • new ShareOut()보다 await ShareOut.create()를 선호하세요. 그러면 포함된 Bearer 토큰이 준비됩니다.
  • 게시된 HTML은 {hex}.shareoutcdn.site의 샌드박스 iframe에서 실행됩니다. SDK 메서드를 사용하고, /v1/data/...에 fetch를 사용하지 마세요. sdk/live-data.md를 참조하세요.
  • https://shareout.site/sdk/shareout.css를 링크하고 사용자 정의 CSS를 작성하기 전에 .so- 클래스를 사용하세요. modules/ui/overview.md를 참조하세요.
  • cdn.jsdelivr.net ShareOut SDK URL을 사용하지 마세요.

HTML 아티팩트 규칙

HTML 아티팩트는 ShareOut의 구조적 마커를 포함하든 포함하지 않든 작동합니다. 게시가 차단되지 않습니다. 그러나 아티팩트가 더 많이 선언할수록 비주얼 편집기가 더 많은 작업을 수행할 수 있습니다 (개요 탐색, 인라인 편집, 행 추가/제거). 기본적으로 편집기 준비 상태를 목표로 하세요. 의도적으로 일회성 정적 페이지인 경우에만 건너뛰세요.

편집기 준비 상태 체크리스트 (편집기가 찾는 것):

  • 문서 head에 유효한 JSON이 포함된 script type="shareout/manifest" 태그.
  • 사용된 모든 sdk.json 키와 sdk.table() 이름이 매니페스트 sources에 선언됨.
  • 동적 콘텐츠에는 data-shareout-binding이 있고, 각 바인딩은 선언된 소스를 참조함.
  • 페이지는 data-shareout-page를 사용하고 (편집기 개요를 구동합니다); 반복되는 콘텐츠는 data-shareout-template을 사용함.
  • 대화형 대상이 해결됨: data-shareout-link / data-shareout-action은 실제 페이지/섹션/모달/탭을 가리킴; 모달에는 열기 트리거가 있음; 폼에는 제출 버튼이 있음.
  • sources에 default 샘플 데이터 선언 — json, tables, 및 connections (BigQuery/Snowflake/Sheets와 같은 라이브 커넥터: sources.connections.<name>.default는 샘플 행의 배열입니다). 비주얼 편집기는 라이브 가져오기나 쿼리 없이 데이터를 미리 봅니다 (sdk.connection(...).query()를 포함한 모든 SDK 읽기를 이러한 기본값 또는 빈 값에서 해결함). 따라서 await sdk.table(...).exec() / 커넥터 쿼리 뒤에 UI를 게이트하는 아티팩트도 렌더링되고 편집 가능하게 유지됩니다. default가 없는 소스는 빈 상태로 미리 봅니다.

HTML 아티팩트를 게시할 때마다 조언 editor_readiness 프로필이 반환됩니다 (api/artifacts.md 참조). 이 프로필은 각 항목을 등급화하고 각 격차가 비활성화하는 항목의 이름을 지정합니다. 사용자에게 한 줄 요약을 공유하지만 지침으로 취급하고 게이트로 취급하지 마세요. 사용자는 원하는 것을 정확히 게시할 수 있습니다.

전체 사양: core/html-spec/overview.md.

디자인 감각

편집기 준비 상태는 구조에 관한 것이지 모양에 관한 것이 아닙니다. 모양은 별개의 의도적인 결정입니다. 그리고 AI가 구축한 페이지의 기본값은 "템플릿화되고 일반적인" 것입니다. 시각적인 것을 구축하기 전에 modules/ui/taste.md를 읽으세요: 전문적으로 디자인된 것처럼 보이고 자동 생성된 것처럼 보이지 않는 아티팩트를 제공하는 방법이 설명되어 있습니다. 짧은 버전:

  • 디자인 시스템 사용 (.so- 클래스 + 토큰) — 브랜드 폰트, 따뜻한 밝은 팔레트, 조화로운 간격/그림자를 제공하므로 무료로 좋은 감각을 물려받습니다. modules/ui/overview.md를 참조하세요.
  • 감각은 절제입니다: 하나의 강조 색상, 하나의 폰트 시스템, 화면당 하나의 기본 작업, 넉넉한 여백, 동기는 필요한 경우에만.
  • AI 슬롭 징후 피하기: 보라색/네온 광채, 세 개의 동일한 카드 행, 눈썹 스팸, 가짜 완벽한 숫자, 마케팅 클리셰, 누락된 빈/오류 상태. 전체 금지 목록과 출시 전 체크리스트는 modules/ui/taste.md에 있습니다.

아티팩트 유형

ShareOut은 MIME 유형 또는 파일 확장자에서 유형을 자동 감지합니다:

유형확장자용도
html.html, .htm전체 SDK 앱, 대시보드, 도구, 프레젠테이션
csv.csv정렬/필터 가능한 데이터 그리드
markdown.md, .markdown렌더링된 HTML 및 TOC가 포함된 문서
json.json접을 수 있는 트리 뷰어
txt.txt일반 텍스트/로그 뷰어

세부 정보: api/artifact-types.md.

첫 실행 — 토큰 받기

모든 인증된 작업에는 토큰이 필요합니다. ~/.shareout/credentials가 아직 없으면 사용자에게 계정이 없는 것입니다. 게시 또는 기타 인증된 호출 전에 계정을 부트스트랩하세요:

  1. POST https://shareout.site/v1/auth/create-account (유일한 인증되지 않은 엔드포인트, 본문 없음) → { "token": "so_…", "user_id": "usr_…" }.
  2. token을 ~/.shareout/credentials에 { "token": "so_…" } (chmod 600)로 저장하세요.
  3. 이후 모든 요청은 Authorization: Bearer so_…를 사용합니다.

계정 생성은 IP당 속도 제한이 있습니다 (code: RATE_LIMIT_EXCEEDED, 429). 계정은 익명이며 헤드리스입니다. 게시하는 데 이메일이 필요하지 않습니다.

그런 다음 사용자에게 Gmail/Google에 연결할지 물어보세요. 부트스트랩 계정에는 이메일이 없으므로 저장된 토큰을 통해서만 사용할 수 있습니다. 이메일을 연결하면 https://shareout.site 웹 UI에 로그인할 수 있습니다 (홈 대시보드, 비주얼 편집기, 셀프 서비스 API 토큰). 두 가지 경로를 모두 제공하세요:

  • Google: 브라우저에서 GET https://shareout.site/v1/auth/link-google (Bearer 토큰)을 열어 Google 계정을 연결합니다.
  • 이메일 코드: POST /v1/auth/link-email/start { "email" } → POST /v1/auth/link-email/verify { "email", "code" } (6자리 코드, 10분 만료).

거부하면 토큰 전용 흐름이 계속 작동합니다. 전체 온보딩 및 연결 참조는 auth.md를 참조하세요.

게시

ShareOut은 Cloudflare로 보호됩니다. Python requests는 1010 블록을 트리거할 수 있습니다. 원하는 방식으로 페이로드를 빌드한 다음 curl로 파이프하세요:

TOKEN=$(python3 -c "import json,os; print(json.load(open(os.path.expanduser('~/.shareout/credentials')))['token'])")
python3 build_payload.py | curl -sS -X POST 'https://shareout.site/v1/publish' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  --data-binary @-

전체 API: api/overview.md.

Teams 경계

개인 아티팩트는 여전히 비공개, 협업자와 공유, 공개 또는 미등록 상태일 수 있습니다. Teams 문서는 Teams 요금제 워크스페이스 기능에 대해서만 로드하세요:

  • 워크스페이스 멤버 및 역할.
  • 내부 워크스페이스 가시성 (visibility: "workspace").
  • 이메일/도메인별 워크스페이스 멤버십 정책.
  • 워크스페이스 서브도메인.
  • 하우스 스타일을 위한 워크스페이스 컨텍스트 파일.
  • 워크스페이스 수준 스케줄, 자동화, 기능 플래그 및 관리자 보기.

중요한 용어 구분:

용어의미
access_policy행 수준 아티팩트 데이터 필터링: 각 뷰어는 허용된 행만 봅니다. core/access-policy.md 참조.
워크스페이스 멤버십 정책Teams 이메일/도메인 멤버십 규칙: 워크스페이스에 가입할 수 있는 사람. team/SKILL.md 참조.
협업자 역할아티팩트 수준 owner, editor, viewer.
워크스페이스 역할Teams 워크스페이스 owner, admin, member.

버전 확인

각 작업 전에 필수 버전 확인을 실행하세요. 보유한 version을 라이브 버전과 비교하는 세 가지 동등한 방법:

GET  https

…

[번역을 위해 잘림]

관련 스킬