본문으로 건너뛰기
5분 AI.
TRENDSHIFT 18위 딥다이브 · 2026-10-25 분석

Octopus Superintelligence OS 딥다이브
— 에이전트를 ‘루프’가 아니라 ‘운영체제’로 설계하면

플랫폼

빠른 판단

무엇
작은 Rust 커널과 JSON 서술자로 에이전트·도구·권한을 구성하는 macOS용 에이전트 운영체제 연구 프리뷰
이럴 때
에이전트 권한을 도착 시점마다 계산하고 모든 이동을 장부에 남기는 설계를 읽거나, macOS에서 별도 Home으로 시험할 때
입력
ChatGPT 계정 로그인과 macOS 14+, Node 24, Rust 소스 빌드
결과
Electron 데스크톱 앱과 터미널 클라이언트, 실행 장부(ledger/movements.jsonl)
도입 전 확인
연구 프리뷰이며 저장 형식이 바뀔 수 있다. 도구가 내 컴퓨터에서 실행되므로 별도 Home에서 최소 권한으로 시험한다
Octopus-SI-OS는 모델과 에이전트 루프를 중심에 두지 않고, 작은 Rust 커널 + 수천 개의 JSON 서술자로 에이전트 실행을 짜는 macOS용 연구 프리뷰입니다. 이 글은 README의 주장을 그대로 옮기지 않고, 커밋 c44cede의 Rust 크레이트·레지스트리·보안 문서를 따라가며 “무엇이 실제로 구현돼 있고, 무엇이 아직 연구 질문인지”를 구분합니다.
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 하드웨어 / 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

에이전트 프레임워크가 아니라, 에이전트가 ‘살 수 있는 환경’을 정의하는 시스템

Octopus는 “산출물(artifact)이 선언된 인터페이스를 건널 때마다 정책을 새로 계산하고 장부에 기록하는” 작은 Rust 커널 위에, 모델 제공자·도구·에이전트(worker)·작업 공간을 JSON 폴더로 붙이는 에이전트 운영체제입니다. 데스크톱 클라이언트(Electron)와 터미널 클라이언트(./octopus)가 같은 Home(~/.octopus)을 공유합니다. 저장소 라이선스는 MIT, 상태는 README가 직접 “research preview”라고 밝힙니다.

README의 표현으로 “self-evolving”은 에이전트가 목표·트리거·도구·작업자·컨텍스트 같은 미래 작업의 조건을 정책 안에서 바꿀 수 있다는 뜻입니다. 반면 “self-improvement”(실제로 더 좋아지는가)는 아직 연구 목표로 분리해 적어 두었습니다.

핵심 비유

앱 서랍을 가진 운영체제 vs. 기능이 계속 붙는 하나의 프로그램

일반적인 에이전트는 “모델 호출 → 도구 실행 → 관찰”을 도는 하나의 프로그램에 메모리·스킬·스케줄을 덧붙여 갑니다. Octopus는 반대로 커널이 최소한만 알고, 나머지(모델, 채널, 도구, 에이전트 역할)는 설치되는 앱처럼 취급합니다.

이때 에이전트는 코드가 아니라 interface.json과 policy.json 두 파일로 된 ‘서술’입니다. 새 에이전트 역할 = 폴더 복사 + 목록 수정이라는 설계가 이 비유의 핵심입니다.

용어 먼저
Artifact · Interface · Run
Artifact는 경계를 건너는 모든 데이터(메시지, diff, 도구 호출, 결과)로, 내용 해시로 고정된 매니페스트로 표현됩니다. Interface는 “산출물 in, 산출물 out”인 타입 있는 포트이고, Run은 프로세스가 아니라 ‘체크포인트에서 대기하는 실행 기록(데이터)’입니다.

1-1. README가 약속하는 일곱 가지 표면

표면README의 설명저장소에서 확인한 대응물
Home시스템과의 하나의 연속 대화, 위젯 표시app/src React UI, registry/interface/system_worker_operator_home
Projects목표 + 고유 컨텍스트/권한registry/ee_template/project (allowed_child_ee_templates: ["project"])
Agents모델·역할·접근 범위, JSON 두 개registry/interface/system_worker_* 폴더들
Tasks에이전트에게 맡긴 작업, 나중에 이어받기system_worker_operator_task, 실행 기록(run record)
Terminal client같은 Home을 쓰는 CLI루트 octopus 셸 스크립트 → app/cli/index.cjs
Applications채널·MCP·다른 모델 제공자app/distribution/local-packages/packages/world_*.json
Drivers폴더·worktree·브라우저·데스크톱·컨테이너·원격registry/worker_environment_kind/* 12종
README 스스로의 경고
“평범한 코딩 작업에서는 Codex CLI 이상을 주지 않는다”

README의 NOTE는 현재 모델들이 스스로 주도권을 잡지 않으며, 일반 코딩 작업에서는 Codex CLI가 이미 주는 것 이상을 Octopus가 주지 않는다고 적습니다. 즉 이 프로젝트는 “지금 더 잘 되는 코딩 도구”가 아니라 아키텍처 가설을 시험하는 연구물로 읽어야 합니다. 또 OpenAI와 무관한 독립 소프트웨어이며 저장 형식은 프리뷰 빌드 사이에 바뀔 수 있다고 명시합니다.

2왜 주목받는가

트렌딩 이유로 추정되는 요소와, 코드에서 확인되는 차별점

GitHub API 확인 기준(2026-10-25) 저장소는 2026-10-09에 생성됐고 최근 push는 10-24입니다. 스타 118개·포크 10개로 규모는 아직 작지만, 생성 2주 만에 TrendShift 목록 18위에 올랐습니다. 순위 이유를 저장소가 설명해 주지는 않으므로 아래는 소스와 문서에서 확인되는 특징입니다.

2-1. 에이전트 ‘루프’를 아키텍처로 끌어내린다

docs/architecture.md는 에이전트 루프가 런타임 안의 메커니즘이 아니라 산출물의 흐름에서 따라 나오는 결과라고 설명합니다. 커널은 페이로드를 해석하지 않고("blind"), 어떤 제공자·채널·도구도 이름으로 알지 못합니다. AGENTS.md의 제1원칙도 “커널은 작고 눈이 멀었다”입니다.

2-2. 정책을 저장하지 않고 매 도착마다 계산한다

권한은 저장된 목록이 아니라 worker 천장 ∩ EE 체인 ∩ run의 바인딩의 교집합으로 산출물이 도착할 때마다 형성됩니다. 모델이 run 기록에 뭘 써도 권리가 되지 않는다는 점이 보안 문서의 핵심 주장입니다.

2-3. 경쟁 접근과의 차이

축전형적 에이전트 CLI/프레임워크Octopus(문서·소스 기준)
에이전트의 정체프로세스(루프 + 프롬프트 + 도구 목록)JSON 서술(역할 + 접근 상한)
권한설정 파일/프롬프트 지시도착 시점마다 결정적으로 재계산 + 방 안쪽 집행
기록대화 로그/트레이스append-only 장부 ledger/movements.jsonl, 거부도 행으로 기록
완료 판정모델의 “끝났다” 선언verifier 통과 후 런타임만 mark 기록
성숙도다양연구 프리뷰, macOS 14+ 한정, 형식 변경 가능
공부 가치
“에이전트 안전성”을 설계 문서 수준에서 볼 수 있다

프롬프트 인젝션을 “막았다”고 주장하는 대신, 문서가 폭발 반경을 좁힐 뿐 위험을 없애지 않는다고 인정하고 계층(정책 vs 프로세스 샌드박스)을 나눠 설명합니다. 에이전트를 만드는 사람이 참고하기 좋은 태도입니다.

3기술 스택 전체 지도

추적 파일 4,181개 — 커널은 Rust, 표면은 Electron·React, 데이터는 JSON

커밋 c44cede의 git ls-files 기준입니다. 줄 수는 확장자별 물리 줄이며 테스트·주석·생성물이 섞여 있어 “순수 코드량”이 아닙니다.

영역기술근거(경로)규모
커널 + 호스트Rust 2021 (rust-version 1.91), tokio, serde, blake3, ed25519-dalek, schemars, notifyCargo.toml, crates/* 19개crates 아래 .rs 58,785줄
레지스트리 내 드라이버Rust 패키지(도구 실행기, 방 구현)registry/interface/*/packages/*, registry/worker_environment_kind/*/packages/*전체 .rs 709,820줄(레지스트리 포함)
데스크톱 클라이언트Electron, React/TSX, Vite, TypeScript, xterm.js, Shiki, Mediapipe(제스처)app/package.json, app/src, app/electron.tsx 71,219 · .ts 36,730 · .cjs 116,402줄 · .css 29,369줄
네이티브 조각Swift 58개 파일(확장자 집계)22,028줄
터미널 클라이언트Node.js 24 CommonJSapp/cli/*.cjs 9개, 루트 octopus 셸 래퍼—
계약·데이터JSON Schema, JSON 서술자 828개schemas/, registry/, app/schemas.json 169,119줄
샌드박스macOS sandbox-exec (deny-by-default)docs/security-model.mdmacOS 전용
테스트·CIcargo nextest, Node test, 스냅샷 618개.config/nextest.toml, .github/workflows/quality.yml워크플로 3개(quality, release, doomsday)

패키지 스크립트에서 볼 수 있는 흥미로운 점은 check:public-source, export:package, verify:publication처럼 공개 배포용 소스 검사와 패키지 내보내기가 별도 명령으로 분리돼 있다는 것입니다. 레지스트리 패키지를 “설치 가능한 단위”로 다루려는 설계 흔적입니다.

3-1. 서술자(registry)의 종류

registry/
  interface/              86개  모델 제공자·채널·에이전트(system_worker_*)·방의 문(door)
  worker_environment_kind/ 12개  filesystem_workspace, git_worktree, browser_session,
                                 code_mode, container_session, desktop_session,
                                 process_session, mcp_stdio_session, remote_exec_server ...
  tool/                  192개  browser.click, coder.apply_patch, coder.exec ...
  verifier/               15개  build_success, ocr_text_contains, operator_approval ...
  ee_template/             9개  existence, operator_space, project, self_improvement ...
  artifact/              35개  역할·가이드·스킬 같은 선언된 컨텍스트
  mark/                   14개  coder.build.ok 등

폴더 수는 각 디렉터리의 직속 하위 폴더를 센 값이며, 이후 커밋에서 늘어날 수 있습니다. 한 도구 서술자(browser.click/tool.json)에는 실행 바이너리, 읽기·쓰기·실행 권한 슬롯, 네트워크/로컬 IPC 허용 여부, 지원하는 방 종류, 인자 JSON Schema가 한꺼번에 선언돼 있습니다.

4아키텍처 심화 분석

System과 World, 여덟 개의 프리미티브, 그리고 ‘도착할 때마다 계산되는 권한’

4-1. 전체 구조도

World (통제 밖) System (통제 안) ┌──────────────────────────┐ ┌──────────────────────────────────────┐ │ 모델 제공자 world_provider_*│◀──────▶│ EE: existence (루트 목표) │ │ 사람 world_operator_chat │ │ └ EE: project (더 좁은 정책) │ │ 채널·장치·API world_* │ │ ├ run (worker를 '입은' 기록) │ └──────────────────────────┘ │ └ run │ ▲ artifact in / out │ worker = system_worker_* 인터페이스 │ │ (선언된 인터페이스만 통과) │ room(방) ── door 인터페이스 ── 도구 │ ▼ └──────────────────┬───────────────────┘ ┌────────────────────────────────────────────────────────┴───────────────┐ │ Kernel (Rust) : 도착 시 grant 형성 → 승인/거부 → ledger/movements.jsonl │ │ 페이로드를 해석하지 않음, 이름으로 아는 것이 없음 │ └────────────────────────────────────────────────────────────────────────┘

4-2. 여덟 프리미티브 한눈에

프리미티브한 줄 정의(문서)어디서 볼 수 있나
Interface산출물 in/out 타입 포트. 폴더 이름이 곧 IDregistry/interface/<id>/interface.json
Artifact경계를 건너는 데이터. 내용 해시로 고정docs/contracts/ARTIFACTS.md
Run / Checkpoint실행 기록. 체크포인트에서 대기·재개crates/octopus-runtime/src/run_record.rs
Worker에이전트의 서술(역할 + 접근 상한)system_worker_*/policy.json
EE (실행 환경)“왜, 무엇이 허용되나”. 중첩 시 안쪽이 더 좁음registry/ee_template/*, crates/octopus-ee
Worker environment (방)“효과가 물리적으로 어디서 일어나나”registry/worker_environment_kind/*
Policy저장하지 않고 도착마다 형성crates/octopus-policy/src/lib.rs
Markverifier를 통과한 뒤 런타임만 찍는 성공 표시registry/mark/*, crates/octopus-marks

4-3. 정책 형성: 교집합과 “더 좁은 쪽이 이긴다”

docs/architecture.md가 요약한 식은 아래와 같습니다.

grant = worker-interface ceiling  ∩  the EE chain the run lives in  ∩  the run's authored bindings

이 식이 코드에서 어떤 모양인지 crates/octopus-policy/src/lib.rs에서 확인할 수 있습니다. 집합형 권한은 CapSet::intersect(BTreeSet 교집합)로, 읽기/수정/생성/삭제 같은 산출물 권리는 ArtifactRights::intersect로 각 항목을 AND 합니다. 그리고 masked_by_verbs의 주석은 “바인딩이 더 넓게 적어도 천장이 허용하지 않은 권리는 제거된다 — 좁은 쪽이 이긴다, 넓히는 것은 불가능”이라고 적고 있습니다. 한 줄로 정리하면 권한은 합쳐질수록 줄어든다는 것이 이 정책 모델의 불변식입니다.

// crates/octopus-policy/src/lib.rs (발췌 — 주석은 요약)
pub fn intersect(&self, other: &Self) -> Self {
    Self {
        read:   self.read   && other.read,
        change: self.change && other.change,
        create: self.create && other.create,
        delete: self.delete && other.delete,
    }
}

정책 변수는 선언부(InterfacePolicyDeclaration)에서 reduce 방식을 정의하고, form_interface_policy가 worker 층과 EE 층을 받아 boundary(집행용)와 context(모델에게 보여줄 컨텍스트) 두 가지로 값을 만듭니다. POLICY.md가 말하는 “정책의 두 소비자 — 런타임/방은 집행 경계로, 모델은 컨텍스트로 소비”가 함수 반환 타입(FormedInterfacePolicy { boundary, context })에 그대로 대응됩니다.

비유

출입증을 한 번 발급해 두는 방식이 아니라, 문을 지날 때마다 “직원 등급 ∩ 오늘 들어가는 층의 규칙 ∩ 방문 목적서”를 다시 계산해 통과 여부를 정하는 건물과 같습니다. 어제 허용됐다는 기록은 오늘의 권한이 아닙니다.

4-4. 한 턴이 지나가는 길

README의 시퀀스를 줄이면 이렇습니다: 사람이 Home에서 메시지 입력 → 채팅 인터페이스가 산출물을 커널에 전달 → 커널이 grant 형성·승인·기록 → 모델 제공자 인터페이스가 도구 호출 산출물을 돌려줌 → 작업 공간 방의 문(door)이 grant를 검사하고 도구 실행 → 결과 산출물 → 모델 응답 → 사람에게 렌더링. 커널은 아무것도 먼저 밀어넣지 않고(push 없음), 각 인터페이스가 자기 ‘움직임(movement)’을 읽는 살아있는 프로세스입니다.

4-5. 장부(ledger)가 기록하는 것

crates/octopus-ledger/src/lib.rs에는 움직임 종류와 거부 사유가 열거형으로 정의돼 있습니다.

열거형값
MovementKindArtifactMoved, MarkOutcomeAdmitted(MarkId), VerificationFailed, DeliveryRefused, InterfaceArrival, InterfaceOutbound
RefusedReasonno_binding, policy, verification_failed, unknown_interface, unknown_run, stale_epoch, checkpoint_spent, settled, registry_unstable, malformed

거부 사유가 열 가지로 타입화돼 있다는 점이 설계의 핵심입니다. 문서가 말하는 “거부도 장부의 한 행이며 조용한 누락(silent drop)은 없다”가 이 열거형으로 구현됩니다. verifier가 실패해도 ‘도착’과 ‘검증 실패’는 영속 행으로 남고, mark(성공 표시)만 찍히지 않습니다.

4-6. 방(Worker environment)과 이중 방어

방은 종류(kind) + 문(door) 인터페이스 + 형성된 정책으로 구성됩니다. 예로 git_worktree의 서술자는 substrate_family: process_exec, 기능 filesystem, process_exec, git, 읽기 루트(repo_root, tool_cache_root, toolchain_root)와 쓰기 루트(git_common_root, worktree_root 등)를 선언합니다.

보안 문서는 두 겹의 독립 방어를 구분합니다. 정책은 “run이 무엇을 요청할 수 있는가”를 정하고, 프로세스 권한은 “프로세스가 물리적으로 무엇을 건드릴 수 있는가”를 정합니다. 기본 sandbox_mode: "enforced"에서는 도구·verifier·인터페이스 프로세스가 환경 변수를 비운 채 deny-by-default macOS sandbox-exec 안에서 시작합니다. 단, 서술자가 sandbox_mode: "disabled"를 고르면 그 프로세스는 OS 샌드박스 없이 돕니다. 문서도 “정책 허용을 물리적 격리와 같다고 보지 말라”고 명시합니다.

한계
프롬프트 인젝션은 ‘제거’가 아니라 ‘축소’

보안 문서는 신뢰할 수 없는 콘텐츠를 읽으면서 쓰기/실행 도구도 가진 run은 조종당할 수 있다고 적습니다. 완화책은 프로젝트별 최소 드라이버, 격리를 위한 git_worktree 방, 검증된 산출물을 요구하는 체크포인트이며, 위험을 없앤다고 주장하지 않습니다.

4-7. 체크포인트 + verifier 예시

{
  "id": "c1",
  "run": "run_web",
  "epoch": 0,
  "interface_binding": { "interface": "world_provider_codex" },
  "required_verified_artifacts": [
    {
      "mark": "ocr.text.contains",
      "artifact_label": "screen.captured",
      "verifier": "ocr_text_contains",
      "params": { "expected_text": "OCTOPUS" }
    }
  ]
}

(docs/contracts/VERIFIERS.md의 예시입니다.) 이 체크포인트는 screen.captured 산출물이 도착하고 OCR verifier가 “OCTOPUS” 문자열을 확인해야만 닫힙니다. 모델이 “화면을 확인했다”고 말하는 것은 mark가 되지 못하고, 검사를 통과한 산출물만 장부에 성공으로 남는다는 점이 이 구조의 핵심 계약입니다.

5디렉토리 구조 해부

커널은 crates/, 나머지는 거의 전부 ‘붙는 쪽’
Octopus-SI-OS/ ├─ Cargo.toml 워크스페이스: crates/* + registry/**/packages/* ├─ AGENTS.md / README.md 설계 원칙, 제품 표면 ├─ octopus 셸 래퍼 → node app/cli/index.cjs (OCTOPUS_NODE로 노드 지정) ├─ crates/ 커널과 범용 호스트 (19개) │ ├─ octopus-app `octopus` 바이너리: up / down / doctor │ ├─ octopus-app-server 합성 루트: 레지스트리 스냅샷, 도착 처리 │ ├─ octopus-runtime 도착마다 grant 형성, run 기록, 승인 │ ├─ octopus-policy 정책 형상과 축약(교집합) │ ├─ octopus-ledger* 장부, 저장소, 색인 │ ├─ octopus-interface-* 인터페이스 전송·투영, 활성화 │ ├─ octopus-worker-env 방 서술자·임대·인가 관문 │ └─ octopus-verifiers / -marks / -descriptors / -schemas ... ├─ registry/ "수천 개의 JSON"이 사는 곳 │ ├─ interface/ 모델 제공자·채널·worker·문 (86개 폴더) │ ├─ worker_environment_kind/ 방 종류 12개 + 실행 파일 패키지 │ ├─ tool/ verifier/ ee_template/ artifact/ mark/ ├─ schemas/ run 기록·움직임·grant·verdict용 JSON Schema ├─ app/ Electron + React 클라이언트, CLI, 배포 번들 정의 │ ├─ src/ electron/ cli/ schemas/ distribution/ client-surfaces/ └─ docs/ architecture, contracts/ (11개), security-model ...

5-1. 읽는 순서 제안

  1. README.md → docs/architecture.md: 용어와 그림.
  2. docs/contracts/POLICY.md: 설계 목표(“동시 1,000개 EE에서도 각 worker가 자기 권한을 정확히 안다”)와 형성 원리.
  3. crates/octopus-policy/src/lib.rs (997줄): 교집합·마스킹 구현.
  4. crates/octopus-ledger/src/lib.rs: 움직임·거부 사유 타입.
  5. registry/interface/system_worker_coder/{interface,policy}.json: 에이전트가 ‘두 파일’이라는 말의 실물.

5-2. 에이전트의 실물: system_worker_coder

interface.json은 "interface_type": "system", "role": "worker" 같은 몇 줄뿐이고, policy.json의 ceiling이 접근 상한을 담습니다. 이 저장소의 coder worker 상한은 인터페이스 37개, 도구 33개(coder.apply_patch, coder.write_file, coder.exec, coder.build 등), 방 종류 3개(filesystem_workspace, git_worktree, system_room)입니다. 새 역할을 만든다는 것은 이 폴더를 복사해 id와 목록을 고치는 일이며, 커널 코드를 바꾸지 않는다는 것이 AGENTS.md의 두 번째 원칙(“능력은 레지스트리에 산다”)입니다.

6학습 포인트 (기술별)

이 저장소에서 가져갈 수 있는 설계 아이디어와 실습 방향
기술/주제배울 것확인할 위치
정책 모델링권한을 목록이 아니라 ‘도착 시 계산되는 교집합’으로 만들면 무엇이 쉬워지는가(결정성, 재생 가능)POLICY.md, octopus-policy
이벤트 소싱 감각append-only 장부, 거부도 기록, 해시로 고정한 서술자 바이트 보존octopus-ledger*, POLICY.md “Replayability”
Rust 워크스페이스 설계19개 크레이트로 책임을 쪼개고 레지스트리 패키지를 같은 workspace 멤버로 편입루트 Cargo.toml
OS 샌드박스 연동서술자가 선언한 슬롯·경로·명령만 허용하는 프로파일 생성 구조docs/security-model.md, registry/tool/*/tool.json
데이터 주도 확장인터페이스 추가 = 폴더 + interface.json (+ life.json로 프로세스 수명 선언). 비밀 값은 JSON에 넣지 않고 환경 변수 이름만 참조registry/interface/GUIDE.md
검증 주도 완료 판정모델의 선언 대신 verifier + mark로 ‘끝남’을 정의VERIFIERS.md, registry/verifier/*

6-1. 비판적으로 읽을 지점

7하드웨어 / 시스템 요구사항

macOS 14+ 전용 프리뷰 — 읽기만 할 때는 요구사항이 없습니다

아래는 docs/getting-started.md와 README에 적힌 소스 빌드 조건입니다. 이 글은 설치·빌드를 실행하지 않고 소스를 읽어 작성했으므로, 실제 빌드 시간·메모리 사용량은 확인하지 못했습니다.

항목요구비고
OSmacOS 14 이상, 체크아웃은 APFS 볼륨샌드박스가 sandbox-exec에 의존. 다른 OS는 프리뷰 대상 아님
도구체인Xcode Command Line Tools (Clang, Swift, macOS SDK, /usr/bin/python3)xcode-select --install
Node.js24 LTS + npm (Node 20은 네이티브 재빌드 불가)네이티브 헤더는 Node 24.15.0용을 별도로 내려받아 체크섬 검증
Ruststable, 최소 1.91 (Cargo.toml의 rust-version)워크스페이스 크레이트 + 레지스트리 패키지 모두 빌드
CPUApple Silicon 권장패키저가 실행 중인 Node의 아키텍처로 빌드. Intel은 “소스 경로는 있으나 테스트된 프리뷰 배포로 확립되지 않음”
계정/네트워크의존성 내려받기 + ChatGPT 계정(선택 모델 접근 권한)모델 이용 한도는 제공자 계정에 귀속
쓰기 전 확인
내 컴퓨터에서 도구가 실제로 움직인다

README는 “컴퓨터 위에서 도구를 가진 모델은 여전히 컴퓨터 위에서 도구를 가진 모델”이라며, 부여할 권한만 부여하라고 합니다. 데이터는 ~/.octopus에 저장되고 Codex 로그인 정보는 ~/.codex에 남습니다. 앱을 지워도 두 폴더는 남으므로 직접 삭제해야 합니다.

패키지된 앱은 이 머신용으로 ad-hoc 서명되며 공증(notarize)되지 않아 Gatekeeper 경고가 뜰 수 있다고 README가 밝힙니다. 처음에는 별도 Home(OCTOPUS_HOME으로 짧은 경로 지정)에서 시험하는 편이 안전합니다.

8직접 해볼 수 있는 실습 과제

읽기 전용 과제부터 시작해 서술자 작성까지
과제 1 · 입문설치 없이, 읽기만

두 worker의 ‘천장’을 비교하기

저장소를 클론한 뒤 두 정책 파일의 항목 수를 비교해 봅니다. 이 커밋에서 coder는 도구 33개를 가집니다. planner와 reviewer는 어떤 도구·방을 갖는지 직접 확인해 “역할 = 접근 상한”이 코드가 아니라 데이터임을 체험하세요.

git clone https://github.com/miuuyy/Octopus-SI-OS.git
cd Octopus-SI-OS
git checkout --detach c44cede5f5c884cdcaff17ac7a422a76f49fd8cc
python3 - <<'PY'
import json
for w in ("coder", "planner", "reviewer"):
    c = json.load(open(f"registry/interface/system_worker_{w}/policy.json"))["ceiling"]
    print(w, {k: len(v) for k, v in c.items() if isinstance(v, list)})
PY
과제 2 · 입문설치 없이, 읽기만

거부 사유 열 가지가 어디서 쓰이는지 추적

RefusedReason의 각 값(stale_epoch, checkpoint_spent 등)이 어떤 상황에서 생기는지 crates/octopus-runtime/src/lib.rs(4,281줄)에서 grep으로 찾아 표로 정리합니다. 문서의 “거부도 행이다”를 코드로 확인하는 과제입니다.

과제 3 · 중급설계 문서 작성

새 worker 서술자 초안 쓰기

system_worker_planner를 복사해 system_worker_notes라는 읽기 전용 에이전트를 종이 위에서 설계합니다. interface.json은 몇 줄뿐이므로 policy.json의 ceiling에서 도구와 방을 어디까지 줄일지 정하고, 줄인 근거를 POLICY.md의 “narrower wins” 원칙으로 설명해 보세요. 실제 레지스트리에 넣을 때는 별도 Home에서만 시도하고 스키마 검증이 통과하는지 확인합니다.

과제 4 · 중급macOS, 별도 Home

터미널 클라이언트로 설정 화면까지

README의 순서대로 npm ci --prefix app 후 CLI를 빌드하고 빈 Home에서 setup을 열어 봅니다. 모델 응답까지 가려면 ChatGPT 로그인이 필요하므로, 설정 화면의 선택지(애플리케이션 팩, 워크스페이스 이름, 모델)를 확인하는 데까지만 해도 구조 파악에 충분합니다.

export OCTOPUS_HOME="$HOME/.octopus-preview"   # 짧은 경로 권장(유닉스 소켓 경로 길이 제한)
npm ci --prefix app
npm --prefix app run build:cli
./octopus --home "$OCTOPUS_HOME"

(위 명령은 README/docs/cli.md에 적힌 절차이며 이 글에서 직접 실행해 검증하지는 않았습니다.)

과제 5 · 심화verifier 작성 연구

나만의 verifier 설계하기

registry/verifier/payload_json_valid와 build_success를 읽고, “결과 JSON의 특정 필드가 있고 diff가 N줄 이하”를 확인하는 verifier의 서술자·입력·verdict 모양을 설계해 보세요. docs/contracts/VERIFIERS.md가 요구하는 결정성(같은 입력 → 같은 판정)이 지켜지는지가 평가 기준입니다.

9관련 기술 심화 학습 로드맵

4주 읽기 중심 계획
주차주제할 일
1주개념 지도README → architecture.md → glossary.md. System/World, 8개 프리미티브를 자기 말로 다시 그리기
2주정책과 장부POLICY.md → octopus-policy 코드 읽기 → octopus-ledger의 열거형 정리. 정책 교집합 개념은 집합 연산과 Rust BTreeSet 문서로 보강
3주방과 샌드박스ENVIRONMENTS.md, security-model.md, 도구 서술자 3개 정독. macOS sandbox-exec/Seatbelt 개념 조사
4주확장 표면EXTENSION_SURFACES.md, registry/interface/GUIDE.md의 life.json. 직접 만든 서술자 설계서를 작성하고 scenarios.md의 ‘카메라 추가’ 시나리오와 비교
배우는 순서 팁

클라이언트(TSX·CJS 약 22만 줄)부터 읽으면 길을 잃기 쉽습니다. 이 프로젝트의 중심은 crates/의 작은 커널과 docs/contracts/의 계약이라 문서 → 타입 정의 → 서술자 순으로 내려가는 편이 효율적입니다.

10핵심 키워드 사전

용어는 저장소의 docs/glossary.md 정의를 한국어로 풀어 쓴 것입니다
용어의미
System / World위치가 아니라 통제로 나눈 두 영역. 선언된 인터페이스에서만 만난다
Interface산출물 in/out 포트. 제공자·채널·센서·방의 문·worker 모두 인터페이스
Artifact경계를 건너는 데이터. 내용 해시로 고정된 매니페스트
Run / Checkpoint실행 기록 / 산출물이 경계를 건너는 도착·출발 지점. run은 데이터이지 프로세스가 아니다
Worker에이전트에 해당하는 서술. system_worker_* 폴더의 JSON 두 개
EE (Execution Environment)목표와 정책으로 분류한 범위. 중첩되며 안쪽일수록 좁다. 루트 목표는 existence
Worker environment(방/room)도구 효과가 실제로 일어나는 장소. 종류 + 문 + 정책
Door방의 입구 인터페이스. grant를 검사하고 도구를 실행
Grant도착 시점에 천장 ∩ EE 체인 ∩ 바인딩으로 계산된 실제 권한
Ceilingworker가 어떤 경우에도 넘을 수 없는 접근 상한(policy.json)
Movement / Ledger경계 통과 기록 한 행 / append-only 장부(ledger/movements.jsonl)
Verifier / Mark산출물 검사기 / 검사 통과 뒤 런타임이 찍는 성공 표시. 모델은 mark를 만들 수 없다
Self-evolution정책 하에서 에이전트가 목표·트리거·도구·작업자·컨텍스트를 바꿔 미래 작업 조건을 형성하는 것
HomeOctopus 상태가 저장되는 디렉터리(기본 ~/.octopus, OCTOPUS_HOME으로 변경)

11참고 링크

모든 링크는 분석 커밋 c44cede 기준입니다

11-1. 저장소 문서

11-2. 본문에서 특히 중요한 소스

11-3. 관련 기술의 공식 학습 자료

외부 문서는 바뀔 수 있습니다. 이 글의 구조·수치 설명은 커밋 c44cede에 맞춘 것이며, 연구 프리뷰의 저장 형식은 이후 빌드에서 달라질 수 있습니다.

현재 상태 (2026-10-25 확인)

항목내용기준
저장소miuuyy/Octopus-SI-OSGitHub
스타 / 포크118 / 102026-10-25 GitHub API
주 언어RustGitHub 분류
생성일 / 최근 push2026-10-09 / 2026-10-24GitHub API
분석 커밋c44cede (커밋 시각 2026-10-25 00:03 +0300)본문 설명의 기준점
릴리스없음 (소스 빌드만)수집 시점 릴리스 목록 비어 있음
추적 파일4,181개해당 커밋의 파일 목록
라이선스MITLICENSE
한계와 사용 조건
이 글이 확인하지 못한 것

실행 검증 없음. 설치·빌드·테스트를 돌리지 않고 소스와 문서만 읽었습니다. 클라이언트 UI 동작, 음성·제스처, 모델 응답 품질은 확인하지 않았습니다.

README의 주장은 설계 의도. “스스로 진화”가 실제 성능 향상을 낳는지는 저장소 스스로 열린 질문으로 둡니다. 스타 수가 작은 신생 프로젝트이며 저장 형식이 바뀔 수 있습니다.

제공자 의존. Home을 쓰려면 ChatGPT 계정이 필요하고 첫 번째로 이식된 제공자는 Codex입니다. OpenAI와 제휴 관계가 아니라고 README가 밝힙니다.