Provenance and scope
- Original URL
- https://github.com/Prism-Shadow/penguin-harness
- Canonical URL
- https://github.com/Prism-Shadow/penguin-harness
- Object kind
- repository · Prism-Shadow / penguin-harness
- Requested ref
not supplied- Analysis ref
refs/heads/main→b90f5aa76534ee714f0336e6b98827f58240d298(sha1)- Root tree
36212e4ba1c2e6de1854555ec2d1969320e836fd- Capture window
- 2026-08-26T05:18:00Z → 2026-08-26T05:28:03Z (UTC)
- Axes
- visibility public · auth unauthenticated · sensitivity clear · publication allow
- Acquisition
- GitHub REST 2022-11-28 (13 responses) + bare-git
--depth 1(no LFS, no submodules) at pinned commit · no checkout, no build, no run - Capture ID
bf9905ea-0bbf-4ee3-9d39-95ae77865fec
PenguinHarness — 무엇을 하는 물건인가
10분 경로
- README → 광고 (Why 1~3), Skill/모델 주장
- cli/src/index.ts → CLI 명령 셋
- cli/src/commands/serve.ts → 서버 기동
- server/src/app.ts → 런타임 + 비즈니스 표면 조립, /api/hmr
- Skill 예시: agent-initialization
3분 점검 질문
- 서버 기본 바인딩 주소·포트, 이유는?
- 초기 admin 비밀번호는 어떻게 만들어지고 언제 폐기되는가?
- HMR 스왑이 교체하는 것과 유지하는 것은 무엇인가?
지금 채택할 만한가
▶ 채택 판단
개인/팀 자체 호스팅 실험에는 지금 채택 가능 — Apache-2.0 + loopback 기본 + HMR로 로컬 반복 용이. 프로덕션·다중 사용자 배포는 실행 리뷰 및 자체 벤치마크 재현 이후.
- 레포 나이 약 5주, top-1 컨트리뷰션 79.94% — 성숙도는 "제품 작동"이 아니라 "핵심 저자가 밀고 있음"에 걸려 있다.
- 기본 loopback을 벗어나 배포하려면
PENGUIN_TRUST_PROXY· preview 오리진 · CSRF · throttle을 자체 재검토. - README의 비용·정확도 랭킹은 벤치마크 스위트가 아직 공개되지 않은 벤더 벤치마크 — 자체 프로파일로 재현 필요.
커밋 b90f5aa76534에서 코드가 실제로 하는 일
| 영역 | 상태 | 파일 (커밋 고정) | 메모 |
|---|---|---|---|
| CLI | verified | cli/src/index.ts | Commander 프로그램. config/run/chat/server/web/update/version 등록. |
| penguin server/web | verified | serve.ts:39-149 | PORT/HOST 우선순위 CLI > env > 기본 7364/127.0.0.1. |
| 동시성 락 (한 data root, 한 서버) | verified | serve.ts:100-120 | liveServerLock(resolveRoot()). |
| Hono 런타임 조립 | verified | app.ts:206-281 | bootAppDeps → HmrHost.ensure(). |
| 비즈니스 표면 (HMR) | verified | app.ts:519-726 | buildAppDeps가 서비스 그래프를 매번 재조립. |
| 인증 (쿠키 세션) | verified | auth/service.ts | 세션 토큰 32B, sha256 저장, TTL 7일 슬라이딩. |
| 초기 admin 시드 | verified | auth/service.ts:26-60 | penguin-<4 digits>; 5회 실패 → exp backoff 1→60s. |
| Preview 오리진 격리 | verified | app.ts:317-334 | hostname 기준, port로는 세션 쿠키 공유됨. |
| body cap + jsonOnlyWrites (CSRF MVP) | verified | app.ts:336-373 | 스트림 바이트 기준 재계산. |
| Desktop shell | verified | desktop/src/main.ts | Electron utilityProcess로 서버 fork, 원샷 토큰. |
| Skill 표면 | verified | packages/skills/skills | 15개 하위 디렉터리에 SKILL.md. |
| 모델 카탈로그 | partial | core/src/llm | 실행 동작 검증은 정적에서 불가 (C013). |
| 공개 벤치마크 스위트 | roadmap | README §Roadmap | 재현 아티팩트 미공개 (C012). |
런타임 shell vs 비즈니스 surface — HMR 씨움
| 층 | 소유 | 교체 시점 | 근거 |
|---|---|---|---|
| 런타임 shell | DB, AuthService, ChannelHub, HmrHost, /api/auth, /api/desktop, /api/hmr, 정적 hosting | 새 설치 (릴리즈 채널) | createRuntimeApp |
| 비즈니스 surface | Session/Agent/Project/Skill/Benchmark 서비스, Scheduler, /preview | HMR push로 언제든 | buildAppDeps + createApp |
사용자 요청 하나의 여정
- 웹 UI/CLI가 /api/…를 호출 → Hono body cap → jsonOnlyWrites → runtime-owned 프리픽스 분기
- 비즈니스 라우트면 platformHttpSeam으로 현재 세대의 createApp 라우트 도달 → authMiddleware가 auth_session 쿠키 확인
- Session 실행이면 SessionManager.loader가 core의 Agent/Session을 로드, per-tool approve가 승인 결정
- 결과는 ChannelHub 브로드캐스트, 사용량은 UsageRecorder append
설치 경로 — 문서화된 명령 그대로 (실행하지 않음)
필수: OS Linux/macOS/Windows 10+, x64/arm64, 모델 API 키 최소 1개, npm 설치는 Node ≥ 24. 데스크톱/온라인 installer는 자체 Node 런타임 번들.
1) 데스크톱 (더블클릭)
다운로드 페이지에서 플랫폼별 인스톨러 (macOS dmg / Windows exe / Linux AppImage · deb). 서명 없음 — OS 방어 우회 절차는 README 문서화.
2) CLI 온라인 installer (Linux / macOS)
# commands — not run
curl -fsSL https://penguin.ooo/install.sh | sh
penguin web # http://127.0.0.1:7364
3) CLI (Windows PowerShell)
# commands — not run
irm https://penguin.ooo/install.ps1 | iex
penguin web
4) npm (Node ≥ 24)
# commands — not run
npm install -g @prismshadow/penguin-cli
penguin web
첫 로그인 신호: 데스크톱은 원샷 토큰으로 admin 로그인 상태. CLI 설치는 admin 사용자에 penguin-<4 digits> 초기 비밀번호가 서버 콘솔에 한 번 인쇄된다 (auth/service.ts:52-60).
Non-execution receipt: checkout=no · worktree=no · install=no · build=no · test=no · run=no · import=no · container=no · hooks=no · submodules=no · lfs=no · filters=no · textconv=no.
역할별 순서
| 역할 | 순서 | 이유 | 예상 시간 |
|---|---|---|---|
| 일반 유저 | README → Skills 표 → Requirements → Installation | 제품 표면 + 최소 환경 파악 | 10분 |
| 운영자 | config.ts → app.ts → desktop/main.ts | 바인딩·격리·프록시·업데이트 경계 | 25분 |
| 컨트리뷰터 | CONTRIBUTING.md → core/src → skills/skills | 워크스페이스 명령 · 확장 지점 | 40분 |
| 보안 리뷰어 | auth/service.ts → middleware.ts → app.ts:317-402 → ci.yml | 세션 · throttle · CSRF · preview 격리 · CI 표면 | 60분 |
정량 지표 (커밋 관측 시점 기준)
릴리즈 리듬
| 지표 | 값 |
|---|---|
| 샘플 릴리즈 수 | 10 |
| 최신 릴리즈 | v0.2.4 @ 2026-08-22T05:48:28Z |
| 릴리즈 간 간격 (일) — 중앙값 | 2.73 |
| 릴리즈 간격 min/max (일) | 0.02 / 7.81 |
HEAD 신선도 & CI
| 지표 | 값 |
|---|---|
| 레포 생성일 | 2026-07-19T03:15:21Z |
| 최신 push | 2026-08-26T05:16:33Z |
| HEAD 나이 (시간) | 15.84 |
| 워크플로우 런 최근 20건 결론 | success=16, cancelled=4, failure=0 |
이슈 · PR 응답 (샘플 20건)
| 지표 | 값 |
|---|---|
| 오픈 이슈 (PR 제외) | 0 |
| 오픈 PR / 클로즈드 PR | 20 / 20 (병합 15) |
| PR close 지연 중앙값 (시간) | 1.49 |
컨트리뷰터 집중도 (bus factor 아님)
fetch된 유니크 컨트리뷰터 13명, 총 컨트리뷰션 344 (샘플). top-1 79.94%, top-3 90.12%. 첫 페이지 기반 concentration estimate.
어텐션 시그널 (참고용)
Stars 1674 · Forks 175 · Watchers 1674. GitHub open_issues는 오픈 PR 포함.
보안 · 프라이버시 표면
| 축 | 사실 (커밋 고정) | unknown |
|---|---|---|
| 기본 바인딩 | loopback 127.0.0.1:7364 | 비-loopback 배포 시 자체 리버스 프록시/TLS/인증 정책 |
| 세션 저장 | 토큰 32B, sha256만 DB; TTL 7일 슬라이딩 | 회수/rotate/강제 로그아웃 UX 실행 확인 필요 |
| 초기 비밀번호 | keyspace 10,000; 5회 실패 exp backoff 1→60s cap; process-local | flapping 우회 여부 정량 확인 |
| CSRF / body cap | JSON-only writes + 요청별 body cap 재계산 | 세부 위협모델 재검토 권장 |
| Preview 격리 | hostname 기준 격리; port는 쿠키 공유 | 리버스 프록시 라우팅 강제 검증 |
| Update 채널 | GitHub latest-release (fail-soft), 서명 없음 | 서명/SBOM 자동 검증은 정적 미확인 |
| 공급망 | pnpm-lock.yaml, ci.yml, pages.yml, THIRD-PARTY-NOTICES.md | Dependabot/CodeQL은 unauthenticated로 unknown; public advisories 0 |
커뮤니티 문서: CONTRIBUTING · LICENSE · README 있음 · CODE_OF_CONDUCT · Issue/PR template · SECURITY.md 부재.
라이선스 실체
| 축 | 값 |
|---|---|
| SPDX | Apache-2.0 |
| 파일 | LICENSE |
| NOTICE | root NOTICE 없음 |
| THIRD-PARTY-NOTICES | 있음 |
| 파생 문서화 허용 | 허용 (귀속 필요) |
| 미디어 · 스크린샷 · 로고 | 레포 라이선스와 별도. 본 도시에는 authored 미디어를 재발행하지 않음. |
※ 라이선스 요약은 법률 자문이 아니다.
도시에 안에서 만들어진 주장 15건
| ID | 주장 | 증거 종류 | 판정 | 신뢰도 | 미해결 질문 |
|---|---|---|---|---|---|
C001 | Default server listener binds to 127.0.0.1:7364. | static-support/project-stated | supported | high | - |
C002 | Initial admin password is randomized as 'penguin-<4 digits>' and printed once to server console (CLI install; desktop mode uses a fully random unprintable value). | static-support/project-stated | supported | high | - |
C003 | Server exposes a business surface hot-swappable via /api/hmr (HMR push) while runtime capabilities stay stable across generations. | static-support | supported | high | - |
C004 | CLI is a Commander program registering config/run/chat/serve/update/version; `penguin server` and `penguin web` boot the same @prismshadow/penguin-server via dynamic import. | static-support/static-support | supported | high | - |
C005 | Login throttling: after 5 consecutive failed logins per userId, next attempt admitted only after exponential backoff (1s → 60s cap); throttle is process-local memory, cleared by restart. | static-support | supported | high | - |
C006 | Repository is Apache-2.0 licensed with a THIRD-PARTY-NOTICES.md; no top-level NOTICE file. | static-support/static-support/project-stated | supported | high | - |
C007 | Skill set shipped in-tree includes at least 14 SKILL.md files under packages/skills/skills/ covering evaluation, initialization, optimization, agenthub-models, benchmark-design, and category-specific developer skills. | static-support/project-stated | supported | high | - |
C008 | Data root is ~/.penguin/data (or PENGUIN_HOME); a single data root can only run one server at a time (attach semantics). | static-support/static-support/project-stated | supported | high | - |
C009 | Latest published release is v0.2.4 (2026-08-22); repository was created 2026-07-19 (roughly 5 weeks old at capture) with 10 published releases in the sample. | static-support/static-support | supported | high | - |
C010 | CI badge points to actions/workflows/ci.yml; latest 20 workflow runs on main show 16 success + 4 cancelled (0 failure in the sample). | static-support/static-support | supported | medium | Older windows may show more failures; sample is latest 20 only. |
C011 | Contributor concentration is high: top-1 contributor holds ~80% of counted contributions (275/344 in fetched sample); top-3 ~90%. This is a concentration estimate, NOT a bus factor. | static-support | supported | medium | A deeper page or true code-ownership map would refine this; contributions count commits, not effort. |
C012 | Cost/benchmark claim: 'Best accuracy on data analysis — at 1/70 of Claude Code's cost' and 'RAG app for $0.02 on DeepSeek V4 Pro' are README project statements without an in-repo reproducible benchmark artifact at the pinned commit. | project-stated/inference | partially-supported | medium | Awaiting the promised benchmark suite for reproducible verification; treat as vendor benchmarking claim until then. |
C013 | Model coverage: DeepSeek V4, Kimi K3, GLM 5.2, Hunyuan 3, Qwen 3.8 Max, GPT 5.6, Gemini 3.6 Flash, Claude 5, Inkling — all reachable via each family's provider and OpenAI-protocol endpoints (with the note that only 'each family's latest generation' ships as presets). | project-stated/inference | partially-supported | medium | End-to-end provider behavior not verified statically. |
C014 | Preview origin isolation: if PENGUIN_PREVIEW_ORIGIN is set it must differ by hostname (cookies ignore port); otherwise a loopback counterpart is derived per request and preview host is restricted to /preview/*. | static-support | supported | high | - |
C015 | Runtime execution not observed in this dossier: no install/build/test/run/import/container/hooks/submodules/LFS/filters/textconv occurred. All claims are commit-pinned static-only. | static-support | supported | high | - |
원문 README 저자 삽입 링크·이미지 (전수, 43개)
본 리포지토리 루트 도시에의 대상은 코드다 (2026-08-24 유저 지시: 소스가 SSOT/팩트, README는 주장). 따라서 README 전문 완역 대신,
저자가 README에 삽입한 모든 authored 링크·미디어를 커밋 고정 앵커로 보존하고, 소셜 CDN/원격 이미지 등 재발행할 수 없는 미디어는
data-disposition="omitted"로 표시한다. blocked 미디어의 원격 URL은 이 페이지 어디에도 노출되지 않는다.
- #1 document start
- #2 https://penguin.ooo/download/ ⬇️ Click to Download
- #3 https://www.producthunt.com/products/penguinharness?embed=true&utm_source=badge-featured&utm_medium=badge&utm_campaign=badge-penguinharness ⬇️ Click to Download
- #4 ⬇️ Click to Download
- #5 https://www.npmjs.com/package/@prismshadow/penguin-core ⬇️ Click to Download
- #6 ⬇️ Click to Download
- #7 https://github.com/Prism-Shadow/penguin-harness/actions/workflows/ci.yml ⬇️ Click to Download
- #8 ⬇️ Click to Download
- #9 https://github.com/Prism-Shadow/penguin-harness/actions/workflows/pages.yml ⬇️ Click to Download
- #10 ⬇️ Click to Download
- #11 https://github.com/Prism-Shadow/penguin-harness/blob/b90f5aa76534ee714f0336e6b98827f58240d298/LICENSE ⬇️ Click to Download
- #12 ⬇️ Click to Download
- #13 ⬇️ Click to Download
- #14 https://penguin.ooo/ ⬇️ Click to Download
- #15 ⬇️ Click to Download
- #16 https://penguin.ooo/docs/ ⬇️ Click to Download
- #17 ⬇️ Click to Download
- #18 https://penguin.ooo/blog ⬇️ Click to Download
- #19 ⬇️ Click to Download
- #20 https://discord.gg/eFHKqqcU3D ⬇️ Click to Download
- #21 ⬇️ Click to Download
- #22 https://x.com/code_hiyouga ⬇️ Click to Download
- #23 ⬇️ Click to Download
- #24 https://github.com/Prism-Shadow/penguin-harness-community/blob/main/wechat/group.jpg ⬇️ Click to Download
- #25 ⬇️ Click to Download
- #26 https://github.com/Prism-Shadow/penguin-harness/blob/b90f5aa76534ee714f0336e6b98827f58240d298/README.zh.md ⬇️ Click to Download
- #27 1. 🏆 Outstanding results at tens of times less cost
- #28 1. 🏆 Outstanding results at tens of times less cost
- #29 https://github.com/user-attachments/assets/9b7033e8-f08a-4c3f-bd33-547896664e6e 2. ⚡ One sentence, and an agent builds your agent app
- #30 https://github.com/user-attachments/assets/922d13a6-5ffc-4685-9a39-352f02f9afc0 3. 🧬 Self-evolution: it gets stronger with use
- #31 https://penguin.ooo/docs/skills Built-in Skills
- #32 Installation
- #33 https://penguin.ooo/download 🖥️ Desktop app
- #34 https://github.com/Prism-Shadow/penguin-harness/releases 🖥️ Desktop app
- #35 https://github.com/Prism-Shadow/penguin-harness/releases 📦 npm (any platform, Node >= 24)
- #36 https://github.com/Prism-Shadow/penguin-harness/blob/b90f5aa76534ee714f0336e6b98827f58240d298/CONTRIBUTING.md Development
- #37 https://github.com/Prism-Shadow/penguin-harness/graphs/contributors Contributors
- #38 Contributors
- #39 https://github.com/Prism-Shadow/penguin-harness/blob/b90f5aa76534ee714f0336e6b98827f58240d298/LICENSE License
- #40 https://github.com/hiyouga License
- #41 https://github.com/hiyouga/LlamaFactory License
- #42 https://github.com/Prism-Shadow License
- #43 https://www.anthropic.com/news/claude-fable-5-mythos-5 License
이 도시에가 무엇을 보고 무엇을 보지 않았는가
인벤토리 요약
| 지표 | 값 |
|---|---|
| pinned commit | b90f5aa76534ee714f0336e6b98827f58240d298 |
| root tree | 36212e4ba1c2e6de1854555ec2d1969320e836fd |
| tree entries (recursive) | 1,767 (trees 150 + blobs 1,617) |
| 패키지 수 (pnpm workspaces) | 8 |
| 선정된 substantive files | 29 / 30 default |
| inspected lines | 6,432 / 20,000 default |
| REST 요청 | 13 / 45 default |
| bare-git fetch | depth=1, LFS/submodules disabled |
정적 전용 리시트
다음 액션은 수행하지 않음: checkout, worktree, install, build, test, run, import, container, hooks, submodules, LFS, filters, textconv. execution-observed 증거는 0건이며 runtime confidence는 unknown이다.
공개 리시트 (public evidence)
본 문서와 함께 게시된 공개 증거: evidence/index.json · delivery-receipt.json. 원시 REST 응답·bare-git 오브젝트·사설 캡처 워크스페이스는 발행하지 않음.
bf9905ea-0bbf-4ee3-9d39-95ae77865fec · 생성 2026-08-26 · Prism-Shadow/penguin-harness @ b90f5aa76534 · Apache-2.0.
본 도시에는 원저작자 Yaowei Zheng (hiyouga) 및 PrismShadow AI Team 리포지토리의 커밋 고정 정적 캡처 파생 문서다. 재발행 시 원본 링크와 pinned commit 유지.