cowork 3단계 런처 흐름 + 티어별 크라우니코드 기능·범위 정량분류
개요
cowork.crowny.org(:9720)에서 다른 컴퓨터(맥·윈도우)가 한 줄 명령으로 자기 환경에 맞는 크라우니코드 작업환경을 받아 협업하도록 만드는 설계 문서다. 두 가지를 다룬다.
- 3단계 런처 흐름 — ①받을 프로그램 확인+런처 받기 ②환경(OS/arch)에 맞는 패키지 받기 ③티어별 작업환경 세팅. 각 단계의 엔드포인트·산출물·검증을 맥(.sh)·윈도우(.ps1/.cmd) 양쪽으로.
- 티어별 정량분류 — 일반/티어1/2/3/4/슈퍼 6등급이 각각 무엇을 얼마나 받고·올리고·쓸 수 있는지 숫자 표로.
/setup·/setup.ps1·/api/setting-bundle·/api/packages·/api/download·/cli을 최대한 재활용한다. 새로 추가하는 것은 런처 자체(얇은 부트스트랩)와 환경매칭 엔드포인트 2개뿐이다.권한 방향 주의(헷갈리기 쉬움): 등급 N(1~4)은 티어번호 ≥ N 접근. 즉 티어1이 가장 많이(T1~T4) 접근하고 티어4가 가장 적게(T4만) 접근한다. 권한 오름차순: 일반(게스트) < 티어4 < 티어3 < 티어2 < 티어1 < 슈퍼. (auth-tier.js:134 canAccessTier 근거)1부. 3단계 런처 흐름
큰 그림
[1단계] 디바이스가 "내가 받을 게 뭔지" 확인 → 작은 런처 받기
윈도우PC ──GET /launcher.ps1 (또는 .cmd)──▶ cowork
맥/리눅스 ─GET /launcher (sh)──────────────▶ cowork
▲ 받기 전, GET /api/launcher/manifest?os=&arch= 로
"이 환경에서 받을 수 있는 프로그램 목록"을 먼저 보여줌(무인증, 안내용)
[2단계] 런처가 서버 접속 → 내 환경(OS/arch)에 맞는 패키지 받기
런처가 uname -sm / $env:PROCESSOR_ARCHITECTURE 로 환경 감지
→ POST /api/login (id/비번 → 토큰)
→ GET /api/launcher/resolve?os=win&arch=x64 (서버가 딱 맞는 파일 1개 지목)
→ GET /api/download/<파일>?token=... (인증 스트리밍)
→ 압축 풀기 + sha256 검증
[3단계] 실행하면 티어별 크라우니코드 작업환경 세팅
→ GET /api/me 로 내 등급 확인
→ GET /api/setting-bundle?tier=<허용티어> (등급게이팅 HOME상대 tar.gz)
→ $HOME 복원 + make 한선씨 빌드 + 슬래시스킬 활성
→ .crownycode/tier.json 생성(로컬 기능 게이트) → 끝. 'claude' 실행 가능
핵심 원칙: 런처는 작고(수 KB) 자기완결이어야 한다. 큰 컴파일러·stdlib·패턴DB는 2·3단계에서 인증 후 받는다. 외부에서 :9720 직접 접속은 방화벽에 막히므로 포트 없는 https://cowork.crowny.org 만 쓴다(아래 선결 버그 수정 필수).
1단계 — 받을 프로그램 확인 + 런처 받기
| 항목 | 내용 |
|---|---|
| 엔드포인트(신규) | GET /api/launcher/manifest?os=<win\|mac\|linux>&arch=<x64\|arm64> (무인증, 안내용) |
| 엔드포인트(신규) | GET /launcher(맥/리눅스 sh) · GET /launcher.ps1(윈도우 PS) · GET /launcher.cmd(윈도우 더블클릭) |
| 산출물 | manifest JSON: {os, arch, available:[{kind,file,size,sha256,minTier}], launcherUrl} |
| 산출물 | 런처 스크립트 본문(자기완결, 의존성 0) |
| 검증 | manifest의 available가 빈 배열이 아니면 OK / 런처 파일 크기 > 0 / 첫 줄 shebang(#!/bin/bash) 또는 function 확인 |
minTier로 표시만 하고(로그인 후 강제), 본문 차단은 2·3단계에서 한다.윈도우 한 줄(권장 — 포트 없이 https):
powershellirm https://cowork.crowny.org/launcher.ps1 | iex ; cowork-launch
윈도우 더블클릭(.cmd, PS 정책 회피):
batcurl -L -o cowork-launch.cmd https://cowork.crowny.org/launcher.cmd && cowork-launch.cmd
맥/리눅스 한 줄:
bashcurl -fsSL https://cowork.crowny.org/launcher | bash
2단계 — 환경 매칭 패키지 다운로드
| 항목 | 내용 |
|---|---|
| 엔드포인트(재활용) | POST /api/login {id,password} → 세션토큰(12h) |
| 엔드포인트(신규) | GET /api/launcher/resolve?os=&arch=&tier= → 서버가 환경+등급에 맞는 단일 패키지 지목 {file,url,size,sha256} |
| 엔드포인트(재활용) | GET /api/packages(목록, 인증) · GET /api/download/<파일>?token=(스트리밍, 인증) |
| 산출물 | 환경별 패키지: 한선씨-win-v1.0.zip / 한선씨-mac-v1.0.tar.gz / 크라우니-올인원-v1.0.zip(55MB) 등 (server.js:1829 /api/packages 규칙) |
| 검증 | 다운로드 sha256 == resolve의 sha256 / 압축해제 후 bin/crownyc(.exe) 존재 / bin/crownyc --version 또는 han 예제.한선 1회 성공 |
OS = uname -s (Darwin/Linux) 또는 $PSVersionTable + $env:PROCESSOR_ARCHITECTURE
ARCH = uname -m (arm64/x86_64) 또는 AMD64/ARM64
TOK = POST /api/login
PKG = GET /api/launcher/resolve?os=$OS&arch=$ARCH&tier=$TIER # 서버가 딱 1개 지목
GET /api/download/$PKG.file?token=$TOK → 파일 저장
sha256 검증 → 압축 풀기 → bin 권한(chmod +x)
resolve가 없으면(폴백) 런처가 /api/packages를 받아 platform==os && (arch 매칭||무관)로 직접 고른다. 서버측 매칭(resolve)이 우선 — 클라이언트가 OS 판별 실수해도 서버가 교정.3단계 — 티어별 크라우니코드 작업환경 세팅
| 항목 | 내용 |
|---|---|
| 엔드포인트(재활용) | GET /api/me → {gradeLevel, accessibleTiers, secretsAllowed} |
| 엔드포인트(재활용) | GET /api/setting-bundle?tier=<csv> → 등급게이팅 HOME상대 tar.gz (server.js:1125) |
| 엔드포인트(재활용) | GET /setup·/setup.ps1 (로그인→번들pull→복원→make→스킬활성 — 3단계 본체를 이미 구현) |
| 산출물 | $HOME 복원: .claude/{commands,skills,templates,scripts}, CrownyOS/crownyc(빌드가능), std, 헌법/CLAUDE.md |
| 산출물(신규) | ~/.crownycode/tier.json — 로컬 기능 게이트({gradeLevel, builtinsMax, libsMax, skills:[], patternDB:"none|read|search|contribute|write", concurrency:N}) |
| 검증 | /api/me 등급 == 기대 / 번들 KB > 0 / make crownyc hanseonc_high 성공 / echo '출력값("ok")' \| hanseonc_high \| crownyc run == ok / 슬래시스킬 디렉토리 존재 |
/setup(맥)·/setup.ps1(윈도우)이 이미 수행한다. 런처는 2단계에서 패키지를 깐 뒤 이 setup 스크립트를 호출하면 된다. 단 한 가지 추가: 등급에 맞는 tier.json을 써서 로컬 크라우니코드 기능 범위를 고정(2부 표가 SSOT). 예: 일반=내장함수 50개만, 티어1=225개 전체.TIER_LIST = GET /api/me .accessibleTiers # 예: 티어1 → [4,3,2,1]
curl /api/setting-bundle?tier=$TIER_LIST → $HOME 복원
make -B crownyc hanseonc_high # 한선씨 VM/컴파일러 빌드
write ~/.crownycode/tier.json # 2부 표 기준 기능 게이트
echo "✓ 세팅 완료 — 이 폴더서 claude 실행 → /크라우니코드 /한선씨"
선결 과제 (런처 동작 전 반드시 수정 — 감사 결과)
런처 흐름이 윈도우에서 무한 대기·연결거부 없이 돌려면, UX 감사가 찾은 HTTP 하드코딩 3곳 + 포트 직접접속을 먼저 고쳐야 한다(이게 윈도우 무한제한의 근본원인).
public/portal.html:263-266—http://${host}/setup하드코딩 → 호스트에:없으면https://로. (server.js:370규칙과 동일하게)server.js:692,702,714,759,770— 배포되는 cowork-cli.sh의http://$HOST:$PORT_NUM→ 포트 없으면https://$HOST(포트 제거).public/index.html:199,202—cowork.crowny.org:9720/cli→https://cowork.crowny.org/cli.public/portal.html:370—navigator.clipboard.writeText에.catch(()=>document.execCommand('copy'))폴백(HTTP/권한거부 silently 실패 방지).
if 호스트에 ':' 없으면 https 규칙을 내장한다(generateSetupPs1의 if ($H -match ":") 패턴 복제).산출 파일(구현 시)
- 신규 라우트:
server.js에/launcher·/launcher.ps1·/launcher.cmd·/api/launcher/manifest·/api/launcher/resolve추가. - 동반 한선씨(헌법 70% 준수):
런처.한선(manifest/resolve 4상 결정 — 티=즉시매칭/옴=arch폴백탐색/타=미지원OS거부/음=등급부족 상급이관), 셀코어 룰로 OS·arch→패키지 매핑 규칙 누적. tier.json생성기 동반:티어게이트.한선.
2부. 티어별 크라우니코드 기능·범위 정량분류
6등급 각각이 다운로드/업로드/한선씨 내장함수/라이브러리/슬래시스킬/패턴DB/컴파일·배포/동시작업에서 얼마를 갖는지 숫자로 고정한다. 이 표가 tier.json과 서버 게이팅의 단일 기준(SSOT) 이다.
내장함수 총 225개, stdlib 라이브러리 약 165개(pkg/libs), 패턴DB all_patterns.dat 약 39,574패턴 기준.종합 표
| 항목 | 일반(게스트, lvl9) | 티어4 (lvl4) | 티어3 (lvl3) | 티어2 (lvl2) | 티어1 (lvl1) | 슈퍼관리자 (lvl0) |
|---|---|---|---|---|---|---|
| 접근 티어 | 없음(카탈로그만) | T4 | T3·T4 | T2~T4 | T1~T4(시크릿 제외) | 전체+시크릿 원본 |
| 다운로드 자원 | 공유자원만(카탈로그·libs 소스 읽기) | 공유+T4 영역 패키지/번들 | +T3 영역 | +T2 영역 | +T1 영역(자기영역 자유) | 전체+시크릿 원본 |
| 업로드 권한 | 불가(차단) | T4 영역 업/커밋 | T3·T4 | T2~T4 | T1~T4 자유 업/다운 | 전역(packages/ 배포)+계정관리 |
| 한선씨 내장함수 | 50 (입력/출력/문자열/기초수학) | 90 (+배열/맵/파일) | 130 (+네트워크/소켓/버퍼) | 175 (+3진/셀/추적) | 225 (전체) | 225 (전체+시크릿/네이티브 트릿옵) |
| 라이브러리 수 | ~30 (읽기전용) | 60 | 100 | 140 | 165 (전체) | 165 (전체+시크릿 설정) |
| 슬래시스킬 | 없음(문서 열람) | 한선씨 | 한선씨+크라우니코드 | +KPS | +분별 (4종 전체) | 전체+관리스킬(AYS집사 등) |
| 패턴DB 접근 | 없음 | 없음(검색 API만) | 읽기(T3 번들에 agent+all_patterns.dat) | 읽기+검색 | 읽기+검색+기여(학습추가) | 전체 읽기/쓰기/룰 진화 |
| 컴파일 권한 | 불가(툴체인 미수령) | 로컬 컴파일 | 로컬 컴파일 | 로컬 컴파일 | 로컬 컴파일 | 로컬 컴파일 |
| 배포 권한 | 없음 | T4 영역만 | T3·T4 영역 | T2~T4 영역 | T1~T4 영역 | 전역 packages/ 배포 |
| 동시작업 한도 | 1 | 2 | 3 | 4 | 6 | 12 |
| 세팅 번들 | 불가(server.js:1128 게스트 403) | 받음(T4) | 받음(T3·T4) | 받음(T2~T4) | 받음(T1~T4) | 받음(전체+원본) |
| 블록체인 커밋 | 불가(server.js:1204) | 가능 | 가능 | 가능 | 가능 | 가능+승인권 |
| 싱크 모드 | — | 완전싱크 | 정기싱크 | 선택싱크 | 로컬보관(T1)+상위 | 전체 |
내장함수 225개 배분(예시 — tier.json builtinsMax 근거)
| 등급 | 누적 수 | 추가되는 묶음 |
|---|---|---|
| 일반 | 50 | 출력값·입력·글자수·부분·포함·문자열변환·숫자변환·거듭제곱·루트·반올림 등 기초 I/O·문자열·수학 |
| 티어4 | 90 | +길이·추가·설정·정렬(배열), 맵생성·맵넣어·맵꺼내(맵), 읽기·쓰기·덧쓰기·파일존재(파일) |
| 티어3 | 130 | +TCP대기/수락/읽기/쓰기, 소켓생성/바인드/보내기/받기, 버퍼생성/쓰기/읽기/잘라(네트워크·버퍼) |
| 티어2 | 175 | +삼진인코딩/디코딩/덧셈, 셀생성/연결/읽기/설정, 추적시작/추적끝(3진·셀·디버그) |
| 티어1 | 225 | +나머지 전체(고급 수학·시스템·확장) |
| 슈퍼 | 225 | 전체 + 시크릿 경로 함수 + 네이티브 트릿 연산(ISA729 489 opcode 직접) |
게이팅 방식: 서버가 컴파일을 강제 제한하지는 않되(로컬 빌드는 자유), cowork 원격 컴파일/배포 API(/api/compile·upload dest:package)와 패턴 학습(/api/learn)에서 등급별로builtinsMax초과 함수·금지영역을 거부한다. 로컬tier.json은 IDE/스킬이 자가 안내·경고에 사용.
등급 판정 코드 근거
- 등급 모델:
auth-tier.js:34GRADES(0 슈퍼/1~4 티어/9 게스트),canAccessTier(N,t)= t>=N(:134),accessibleTiers(:140),canSecrets= N==0(:143). - 게스트 차단 지점(전부 lvl9 또는 비슈퍼 검사): 세팅번들
server.js:1128, 커밋:1204, 작업제출:1358, 업로드:1543, 태스크:1428. - 슈퍼 전용(lvl0): 계정관리
:1087/1097/1105, 오너피드:1272, 작업승인:1404.
4상 결정으로 본 등급 처리(런처/게이트 공통 규칙)
요청이 들어오면 등급·자원으로 4상 판정한다(셀코어 룰로 누적):
- 티(예스/즉시): 등급이 자원 티어 ≥ 요구, 내장함수 한도 내 → 바로 실행.
- 옴(연구·검색 후 예스): arch 불일치 등 → 폴백 패키지 탐색 후 매칭되면 실행.
- 타(노): 미지원 OS, 게스트 업로드 등 권한 밖 → 거부(401/403).
- 음(상급 이관): 슈퍼 승인 필요 작업(전역 배포·계정생성) → 오너 피드로 이관.
잔여 이슈 / 다음 단계
- 선결 버그 4건 수정(portal.html·index.html http 하드코딩, cli.sh 포트, clipboard 폴백) — 런처 동작 전제. 수정 후
data/updates.jsonrev+1. - 신규 라우트 5개 구현 —
/launcher·/launcher.ps1·/launcher.cmd·/api/launcher/manifest·/api/launcher/resolve+ 동반런처.한선. - tier.json 게이트 — 2부 표를 기계가 읽는 SSOT(예:
data/tier-capability.psv)로 두고 서버/api/compile·/api/learn·upload dest:package에서 강제. 동반티어게이트.한선. - 패키지 sha256 노출 —
/api/packages·resolve 응답에 sha256 추가(현재 size·mtime만,server.js:1858). - resolve용 arch 메타 — 패키지 파일명에 arch가 없으면(현재 mac/win만) arm64/x64 구분 추가 빌드 또는 universal 표기.
- 한선씨 비율: 신규 로직은
.한선먼저(런처.한선/티어게이트.한선) — 현재 cowork 한선씨 비율 12.5%(헌법 70% 미달) 개선 겸.