OriginTrail DKG V10 노드 — 다중 에이전트 메모리 🦞
<video src="https://github.com/user-attachments/assets/869cecf2-c7e7-4d29-9a6e-9e5e6108b6a1" poster="https://github.com/OriginTrail/dkg/raw/main/docs/assets/dkg-v10.png" width="1536" autoplay loop muted playsinline controls>
<img width="1536" height="1024" alt="dkg_img" src="https://raw.githubusercontent.com/OriginTrail/dkg/HEAD/docs/assets/dkg-v10.png" />
</video>
CI
npm
Releases
License
Discord
세션이 끝나도 살아남는 궁극의 메모리를 AI 에이전트에게 제공하세요.
Decentralized Knowledge Graph V10은 다중 에이전트(multi-agent) AI 시스템을 위한 공유되고 검증 가능한 메모리 계층입니다. 에이전트가 생성하는 모든 발견물은 개인 초안에서 팀 공개 공유, 그리고 영구적이고 암호학적으로 고정된 기록으로 흐를 수 있으며 — 허가된 에이전트가 쿼리할 수 있고 발행자가 소유합니다. 블랙박스도 없고, 공급업체 종속성(vendor lock-in)도 없으며, 세션이 종료될 때 사라지는 컨텍스트도 없습니다.
DKG V10이란 무엇인가?
이것은 Decentralized Knowledge Graph V10 노드를 위한 모노레포(monorepo)입니다. 이 노드는 DKG 노드를 실행하고 네트워크에 참여하는 데 필요한 노드 소프트웨어, CLI(Command Line Interface), 대시보드 UI, 프로토콜 패키지, 어댑터 및 도구들을 포함합니다.
OpenClaw, ElizaOS, Hermes 또는 기타 커스텀 프레임워크로 구축된 어떤 AI 에이전트라도 중앙 권한, API 게이트웨이 또는 공급업체 플랫폼 없이 네트워크 전반의 다른 에이전트들과 지식을 교환하기 위해 DKG 노드를 실행할 수 있습니다.
왜 분산형 지식 그래프인가?
오늘날 대부분의 에이전트 메모리는 평면적(flat)입니다: 대화 로그, 벡터 임베딩, Markdown 파일 등입니다. 지식 그래프는 사실을 구조화된 관계(주어 → 술어 → 목적어)로 저장하므로, 에이전트는 단순히 유사한 텍스트를 검색하는 것을 넘어 연결성을 통해 추론할 수 있습니다. 만약 Agent A가 "Company X가 3월 5일에 Company Y를 인수했다"라는 내용을 게시하면, 다른 모든 에이전트는 사전에 무엇을 검색해야 할지 알 필요 없이 Company X의 모든 인수 건, 3월 5일의 모든 이벤트, 또는 Company Y와 관련된 모든 개체에 대해 질의할 수 있습니다. 그래프 구조는 고립된 발견들을 조합 가능하고(composable), 쿼리 가능한 집단 지능으로 변환합니다. 이 그래프를 DKG Knowledge Assets로 패키징하면 명확한 소유권, 기록, 무결성을 부여받게 됩니다.
지식 자산이 신뢰를 구현하는 이유
**지식 자산(Knowledge Asset, KA)**은 게시된 지식의 단위입니다. 이는 블록체인에 앵커링된 머클 루트(Merkle root)로 커밋된 RDF 명제(RDF statements)들의 집합입니다. 각 게시된 버전은 온체인 커밋먼트와 무결성적으로 연결되어 있어, 나중에 업데이트되더라도 그 역사를 조용히 다시 쓸 수 없습니다. 따라서 에이전트는 데이터 제공자를 신뢰하는 대신 이 커밋먼트를 기준으로 콘텐츠를 검증할 수 있습니다.
컨텍스트 그래프가 협업을 가능하게 하는 이유
**컨텍스트 그래프(Context Graph)**는 구성 가능한 접근 및 거버넌스를 가진 범위가 지정된 지식 영역입니다 (UI에서는 이를 "프로젝트"라고 부릅니다). 에이전트는 컨텍스트 그래프를 비공개로 유지하거나, 특정 피어에게 공개할 수 있으며, 심지어 그룹의 합의가 이루어져야만 무언가가 최종 확정되도록 온체인 M-of-N 서명으로 백업할 수도 있습니다. 모든 컨텍스트 그래프는 동일한 영역 내에서 지식을 더 세밀하게 구성하기 위해 이름이 지정된 **하위 그래프(sub-graphs)**로 추가 분할될 수 있습니다.
3가지 메모리 계층
DKG V10은 모든 에이전트에게 3계층 검증 가능한 메모리 시스템을 제공합니다. 지식은 가장 저렴하고 사적인 계층에 먼저 기록되며, 성숙함에 따라 바깥쪽으로 승격됩니다.
| Layer | Scope | Cost | Trust | Persistence |
|---|
| Working Memory (WM) | 에이전트 전용 (Private to your agent) | 무료 (Free) | 자체 증명됨 (Self-attested) | 로컬, 재시작 후에도 유지 (Local, survives restarts) |
| ... | | | | |
| 새로운 단언(assertion)의 표준 흐름은 WM → SWM → VM입니다: | | | | |
create KA ──► write triples ──► finalize ──► share ──► publish ──► (optional) M-of-N verify
(WM) (WM) (WM) (WM→SWM) (SWM→VM) (VM)
모든 온체인(on-chain) 발행은 먼저 SWM을 거칩니다. 체인 트랜잭션은 이미 Gossip를 통해 데이터 피어들이 보유하고 있는 데이터를 봉인하는 최종성 신호(finality signal)입니다. 단언 자체는 컨텍스트 그래프의 _meta 그래프에 영구적인 생명주기 기록(created → promoted → published → finalized, 또는 discarded)을 가지고 있어, 그 역사는 데이터와 독립적으로 감사 가능합니다.
SWM Gossip는 노드가 로컬 에이전트 개인 키를 가질 때 서명됩니다. 컨텍스트 그래프가 DKG_ALLOWED_AGENT 또는 DKG_PARTICIPANT_AGENT를 선언하는 경우, 해당 에이전트 주소 중 하나로부터 서명된 GossipEnvelope가 필요합니다. 서명이 없는 레거시 SWM 페이로드(payload)는 에이전트 게이트가 없는 컨텍스트 그래프에 한해서만 허용됩니다. 서명은 작성자를 인증하지만, GossipSub 페이로드 바이트를 암호화하지는 않습니다.
빠른 시작 (Quick Start)
필수 조건: Node.js 22.23.4 이상, 24.22.1 이상 또는 26.12.1 이상, npm 10 이상. DKG는 Node.js 22.13 이상(또는 23.4 이상)에서 시작되지만, 이전 버전은 2026-10-21 Node.js 보안 패치를 놓쳤으며, dkg start 및 dkg doctor는 이에 대해 경고합니다. macOS, Linux, Windows(PowerShell 5.1 이상 또는 WSL2) 모두 지원됩니다.
Hermes 어댑터 (Hermes adapter)
두 개의 명령어:
npm install -g @origintrail-official/dkg
dkg hermes setup
dkg hermes setup은 DKG 노드 설정을 초기화하며(별도의 dkg init 필요 없음), 데몬을 시작하고, 선택적으로 지갑에 자금을 지원하며, Hermes 프로필을 replace-by-default 제공자 선출과 연결합니다 (제외하려면 --preserve-provider 사용, 고급 흐름에는 --no-start / --no-fund 사용). 자세한 내용은 adapter 가이드를 참조하세요.
네트워크: 설정은 기본적으로 mainnet-gnosis로 지정되며, 다른 네트워크를 선택하려면 --network <mainnet-gnosis | mainnet-base | testnet>을 전달하세요. 메인넷 노드는 파우스트(faucet)가 없으며, 테스트넷 노드는 파우스트에 접근할 수 있을 때 자동으로 지갑에 자금을 지원합니다.
OpenClaw adapter
두 개의 명령어:
npm install -g @origintrail-official/dkg
dkg openclaw setup
dkg openclaw setup은 비대화형(non-interactive)이며 반복 실행해도 동일한 결과를 보장하는(idempotent) 방식입니다. 이 명령어는 ~/.dkg/config.json을 작성하고, 어댑터를 ~/.openclaw/openclaw.json에 병합합니다 (경로: plugins.entries.adapter-openclaw.config — daemonUrl, memory.enabled, channel.enabled). 또한 표준 DKG 노드 스킬(skill)을 OpenClaw 작업 공간의 skills/dkg-node/SKILL.md에 동기화하고 설치를 검증합니다. 노드 UI의 오른쪽 패널에 있는 "OpenClaw 연결" 버튼은 동일한 인프로세스 흐름을 실행합니다.
자동 새로고침되지 않는 경우 OpenClaw 게이트웨이를 다시 시작하세요:
최초 실행 검증. 정상적인 설정은 다음 네 가지를 모두 충족해야 합니다:
dkg_status가 OpenClaw 에이전트에서 작동하는지 확인
- DKG 노드 UI가
http://127.0.0.1:9200/ui에서 로드되는지 확인
- 오른쪽 채팅 영역이 OpenClaw에 연결되고 전송된 메시지가 왕복(round-trips)되는지 확인
- 대화 내용이 UI 새로고침 후에도 유지되는지 확인 (DKG 기반 채팅 지속성 증명)
네트워크: 설정은 기본적으로 mainnet-gnosis로 지정되며, 다른 네트워크를 선택하려면 --network <mainnet-gnosis | mainnet-base | testnet>을 전달하세요. 메인넷 노드는 파우스트가 없으며, 테스트넷 노드는 파우스트에 접근할 수 있을 때 자동으로 지갑에 자금을 지원합니다.
플래그(Flags). --network <이름> (네트워크 선택), --no-fund (Faucet 건너뛰기), --no-start (설정만 수행), --no-verify (검증 건너뛰기), --dry-run (쓰지 않고 미리 보기). Faucet 자금 공급은 최선 노력(best-effort) 방식입니다. 호출이 실패하면 복사하여 붙여넣을 수 있는 curl 블록이 기록되며 설정은 계속 진행됩니다. 전체 요청/응답 구조는 아래 Funding 섹션을 참조하십시오.
전체 어댑터 참고 자료 — 데몬 URL 구성, 채널 포트 재정의, 연결 끊기/재연결 의미론(semantics) — 은 packages/adapter-openclaw/README.md에 있습니다.
문제 해결 (OpenClaw)
- 게이트웨이에서 어댑터가 보이지 않음 →
~/.openclaw/openclaw.json에 plugins.entries.adapter-openclaw가 채워져 있는지 확인하고, dkg openclaw setup을 다시 실행하십시오.
- Faucet 실패 → 설정 시 수동 자금 공급용
curl 블록이 기록됩니다. 노드는 여전히 온체인(on-chain) 흐름이 아닌 경우(P2P, 쿼리, WM/SWM 쓰기)에 작동합니다.
- 연결 끊기 / 재연결 주기 동안 사용자 지정 설정이 지워짐 → Reconnect 후
dkg openclaw setup --port <N>을 다시 실행하십시오. 기본 포트 사용자는 이 주기를 거치면서 눈에 띄는 차이를 느끼지 못합니다.
- 채널 포트
9201 이미 사용 중 → ~/.openclaw/openclaw.json의 plugins.entries.adapter-openclaw.config 아래에서 channel.port를 수동으로 설정하십시오.
Model Context Protocol (MCP)
두 개의 명령어를 사용하여 DKG V10을 MCP 인식 클라이언트(Cursor, Claude Code, Claude Desktop, Windsurf, VSCode + GitHub Copilot Chat, Cline, Codex CLI)에 연결합니다:
npm install -g @origintrail-official/dkg
dkg mcp setup
dkg mcp setup은 DKG 노드 구성을 초기화하고(별도의 dkg init 필요 없음), 데몬을 시작하며, 선택적으로 지갑에 자금을 공급하고, 감지된 각 클라이언트에 MCP 항목을 등록합니다(옵션으로 --yes를 전달하지 않는 한 클라이언트별로 확인해야 합니다). 클라이언트별 경로, 모드 재정의(--installed / --monorepo), 수동 JSON 구조, 기여자 모노레포 개발 워크플로우 및 문제 해결 방법(Windows 측 MCP 클라이언트에 대한 WSL2 주의 사항 포함)은 MCP 통합 가이드를 참조하십시오.
네트워크(Network): 설정은 기본적으로 mainnet-gnosis로 지정되며, 다른 네트워크를 선택하려면 --network <mainnet-gnosis | mainnet-base | testnet>을 전달하십시오. 메인넷 노드는 faucet가 없으며, 테스트넷 노드는 faucet에 접근 가능할 때 자동으로 지갑에 자금을 지급(auto-fund)합니다.
독립형 노드 (Standalone node)
프레임워크 와이어링은 건너뛰고 데몬을 직접 실행한 후 CLI 또는 HTTP API를 사용하십시오:
npm install -g @origintrail-official/dkg
dkg init
dkg start
dkg init은 참여할 네트워크를 묻습니다 — mainnet-gnosis(기본값), mainnet-base, 또는 testnet입니다. 메인넷 노드는 faucet가 없으며, 테스트넷 노드는 faucet에 접근 가능할 때 자동으로 지갑에 자금을 지급합니다. 프롬프트를 건너뛰려면 --network <이름>을 전달하십시오.
Core Node의 경우, 설정 중 core 역할을 선택하거나 명시적으로 전달하십시오:
dkg init --role core --network mainnet-gnosis
dkg start
Core 노드는 온체인 노드 프로필(identityId)이 필요합니다. 데몬은 Core 시작 시 자동으로 등록을 시도합니다. 주요 운영 지갑(primary operational wallet)은 초기 스테이킹 확신(staking conviction)을 위해 네이티브 가스(native gas)와 TRAC가 필요하며, 관리자 지갑(admin wallet)은 프로필 및 키 관리 트랜잭션을 위해 네이티브 가스가 필요합니다. 노드가 이미 실행 중이고 자금을 지급하거나 지갑을 수리한 경우, 동일한 identity 생성 경로를 수동으로 트리거하십시오:
TOKEN=$(dkg auth show)
curl -X POST -H "Authorization: Bearer $TOKEN" \
http://127.0.0.1:9200/api/identity/ensure
GET /api/identity 또는 /api/status로 확인하십시오: identityId가 0이 아니고 hasIdentity가 true일 때 Core 등록이 완료된 것입니다. 두 가지 노드 역할은 edge와 core입니다. 전체 Core 프로필 체크리스트는 Daemon Lifecycle를 참조하십시오.
실행 후, http://127.0.0.1:9200/ui에서 대시보드를 열거나 직접 쿼리할 수 있습니다:
TOKEN=$(dkg auth show)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:9200/api/agents
노드 업데이트하기
DKG를 업데이트하려면 다음 명령 중 하나를 실행합니다:
dkg update
dkg update --check
dkg update --allow-prerelease
...
NPM/dist-tag 업데이트가 권장되는 프로덕션 경로입니다. 빌드(build)된 소스에서 업데이트가 명시적으로 필요한 코어 운영자들은 ~/.dkg/config.json에 다음 블록을 작성하여 고급 git 업데이트 기능을 선택할 수 있습니다:
{
"autoUpdate": {
"enabled": true,
...
Git 모드는 데몬(daemon) 폴링 방식이며 실험적입니다. 이는 감시하는 참조(watched ref)를 비활성 블루-그린 슬롯에 빌드하고, 슬롯을 교체한 다음, 감독된 재시작 흐름(supervised restart flow)을 통해 종료됩니다. 롤백은 npm/dist-tag 모드와 다릅니다: 임의의 패키지 버전(arbitrary package version)을 npm에서 다시 설치할 수는 없고, 이미 빌드된 슬롯으로만 되돌릴 수 있습니다.