1. 프로젝트 개요: AI 에이전트에 결정성 기반 거버넌스 코어 도입
LLM 기반 에이전트를 설계하고 운영할 때 우리는 두 가지 상충되는 요구 사이에서 균형을 잡아야 한다. 한편으로는 복잡한 작업을 자율적으로 수행할 수 있는 강력한 에이전트가 필요하며, 다른 한편으로는 그 행동이 항상 안전하고 통제 가능한 범위 내에 있어야 한다. 단순한 프롬프트 조정이나 실행 후 감사는 마치 고속 주행 중인 차량에서 사고 발생 후 블랙박스만 확인하는 것과 같다. 예를 들어, 에이전트가 rm -rf 명령을 실행하거나 승인되지 않은 외부 API 호출을 시도할 경우, 그 결과는 돌이킬 수 없는 피해로 이어질 수 있다.
NeuroVerseOS/OpenClaw Governance는 이러한 문제를 해결하기 위한 결정적 거버넌스 코어이다. 이는 단순한 접근 제어 플러그인이 아니라, OpenClaw 프레임워크 내에서 동작하는 자율 에이전트에게 컴파일 타임에 정의되고 런타임에 강제 적용되는 거버넌스 체계를 제공한다. 핵심 원칙은 다음과 같다: 동일한 이벤트 입력 + 동일한 세계 상태 = 동일한 거버넌스 판정 결과. 판정 과정 자체는 외부 AI 모델이나 네트워크 요청 없이 내부 로직으로만 이루어지며, 모델 환각이나 네트워크 지연으로 인한 불확실성을 근본적으로 차단한다.
즉, 이 시스템은 엄격한 조직 규정을 가진 팀처럼 AI 에이전트 군단을 관리할 수 있게 해준다. 위반 불가능한 '원칙'(Invariants), 인간 승인이 필요한 '경계선'(Guards), 맥락 기반 판단을 위한 '규칙'(Rules), 그리고 에이전트별 역할 기반 권한(Roles)을 설정할 수 있으며, 모든 도구 사용 요청(Tool Call) 시점에 이 모든 규칙이 실시간으로 검증된다.
2. 핵심 설계 철학 및 아키텍처 분석
2.1 결정성 우선: "비-네트워크 의존"의 중요성
일부 AI 보안 솔루션은 런타임에 또 다른 LLM(감시자 모델)을 호출해 에이전트의 행동을 검토하는 방식을 사용한다. NeuroVerseOS는 이를 배제하는데, 그 이유는 불확실성의 재도입이라는 근본적인 결함 때문이다.
외부 LLM 기반 리뷰는 다음과 같은 치명적 문제를 야기한다: (1) 감시 모델 자체도 환각 또는 오류를 낼 수 있음; (2) 네트워크 지연이나 장애로 인해 거버넌스가 실패할 수 있음; (3) 동일한 입력에 대해 서로 다른 판정이 나올 수 있어 감사 추적이 불가능해짐. 반면 NeuroVerseOS는 컴파일 시점에 로직이 고정되며, 런타임에는 미리 정의된 논리 트리를 순수하게 평가하므로 행동이 절대적으로 예측 가능하고 재현 가능하다.
이러한 결정성 설계 덕분에 시스템은 일반 소프트웨어 코드처럼 추론하고 테스트할 수 있다. 거버넌스 규칙에 대한 유닛 테스트를 작성하거나 특정 조건에서 어떤 판정이 나오는지를 정확히 알 수 있으므로, 신뢰성과 안정성이 중요한 프로덕션급 AI 애플리케이션 구축에 필수적이다.
2.2 네 가지 계층의 거버넌스 모델: 원칙에서 맥락 판단까지
NeuroVerseOS의 규칙 체계는 단순한 리스트가 아니라 우선순위가 명확한 네 가지 계층으로 구성되어 있다. 각 계층의 이해는 올바른 활용을 위해 중요하다.
첫 번째 계층: 불변 원칙 (Invariants)
최상위 규칙으로, 절대적으로 위반될 수 없는 '핵심 원칙'이다. 시스템의 기본적인 안전 및 윤리 기준을 정의한다. 예:
no-data-leak: 데이터 유출 금지no-unauthorized-network: 비허용 외부 네트워크 접속 금지no-elevate-privilege: 권한 상승 시도 금지
Invariant가 위반되면 해당 작업은 즉시 BLOCK 처리되며, 추가 승인 요청 없이 강제 종료된다. 이는 최후의 방어선이다.
두 번째 계층: 조건 기반 경계 (Guards)
절대 금지는 아니지만 특정 조건 하에서만 허용해야 하는 고위험 작업을 정의하며, 대부분 인간 승인이 필요하다. 예:
destructive-cmd-pending: 파괴적 쉘 명령(rm -rf 등) 실행 전 승인 요청expensive-api-pending: 과금 비용이 높은 API 호출 승인 요청payment-action-pending: 외부 결제 관련 작업 승인 요청
Guard가 발동되면 작업은 PAUSE 상태가 되며, 관리자나 사용자에게 승인 요청이 전달된다. 승인 선택지는 일회성 허용(yes), 영구 허용(always), 거부(no)로 구성된다.
세 번째 계층: 맥락 기반 규칙 (Rules)
가장 유연한 계층으로, 현재 세계 상태, 작업 내용, 과거 기록 등을 기반으로 복합적인 판단을 수행할 수 있다. 예:
project-budget-limit: 특정 프로젝트의 월간 API 예산 초과 여부 확인user-rate-throttle: 사용자의 최근 시간 내 요청 빈도 초과 여부 판단content-filter: 생성된 콘텐츠 내 민감 키워드 포함 여부 검사
Rules는 ALLOW, PAUSE, BLOCK 중 하나를 반환할 수 있으며, 단순한 허용/차단을 넘어 맥락 인식 능력을 부여한다.
네 번째 계층: 역할 기반 권한 (Roles)
각 에이전트(ctx.agentId로 식별)에 할당된 역할을 기반으로 권한을 정의한다. 역할은 다음을 포함한다:
allowedActions: 수행 가능한 작업 목록forbiddenActions: 명시적으로 금지된 작업 목록approvalRequiredActions: 추가 승인이 필요한 작업 목록
역할 기반 권한의 핵심 가치는 '최소 권한 원칙(Principle of Least Privilege)'을 적용할 수 있다는 점이다. 예를 들어 '데이터 분석가' 역할은 DB 조회와 차트 생성만 가능하도록 제한하면, 해당 에이전트가 아무리 강력한 LLM 기반이라도 삭제나 외부 통신 등의 작업은 원천 차단된다.
우선순위 및 오버라이딩 규칙
네 계층의 평가 순서는 고정되어 있다: Invariants → Guards → Rules → Roles → Default(ALLOW). 상위 계층에서 BLOCK 판정이 나오면 이후 계층은 평가되지 않고 즉시 종료된다. 따라서 역할에서 허용된 작업이라도 Invariant나 Guard에 의해 차단될 수 있다. 이 구조는 전역 규칙의 절대적 권위를 보장한다.
2.3 월드 파일: 거버넌스의 단일 진실 공급원(Single Source of Truth)
NeuroVerseOS의 중심은 world.json이라는 JSON 형식의 '월드 파일'이다. 이 파일은 모든 거버넌스 규칙의 컴파일 결과물이며, 런타임 동안 유일한 참조 대상이다.
월드 파일 생성 과정
복잡한 world.json을 직접 편집하지 않는다. 대신 Markdown(.md) 파일을 사용해 사람이 읽기 쉬운 형태로 에이전트, 도구, 규칙을 정의한 후, /world bootstrap 명령어로 이를 구조화된 world.json으로 컴파일한다. 이 방식은 '규칙 정의'(사람 중심)와 '규칙 실행'(머신 중심)을 분리하여 효율성을 높인다.
월드 파일의 생명주기
모든 변경은 '제안-검토-적용'이라는 엄격한 절차를 따른다:
- ACTIVE: 현재 적용 중인 월드 상태
- PENDING:
.md수정 후/world bootstrap실행 시 생성되는 새로운 버전 (미적용 상태) - APPROVED:
/world diff로 변경 사항을 검토한 후/world approve로 승인 - ACTIVE: 승인 완료 후 새 버전이 활성화됨
이 절차는 명시적인 인간 승인을 강제하며, 어떠한 거버넌스 규칙도 무단으로 적용되지 않도록 한다. /world diff 명령은 변경된 항목을 명확히 보여주어 팀 협업과 감사 추적에 필수적이다.
3. 실습 가이드: 제어된 AI 에이전트 환경 구축
3.1 환경 준비 및 설치
내부 데이터 분석 팀을 위한 AI 어시스턴트를 구축한다고 가정하자. 이 어시스턴트는 데이터베이스 조회 및 리포트 생성은 가능하지만, 데이터 삭제나 외부 인터넷 접근은 금지되어야 한다.
Node.js 및 OpenClaw 프레임워크 설치 후, 작업 공간에서 거버넌스 코어를 설치한다:
# NPM을 통한 설치
npm install @neuroverseos/openclaw-governance
# 권장: OpenClaw 플러그인으로 설치
openclaw plugins install @neuroverseos/openclaw-governance
설치 후 .neuroverseos/ 디렉터리가 생성되며, 이곳에 모든 거버넌스 상태가 저장된다. 각 작업 공간은 독립적인 상태를 유지하여 충돌을 방지한다.
3.2 첫 번째 거버넌스 월드 정의
Markdown 파일을 이용해 규칙을 정의하자. 작업 공간 내 governance/ 디렉터리를 생성한다.
파일 1: governance/invariants.md
# 시스템 불변 원칙
## 데이터 보호
- **id**: no-data-leak
**description**: 모든 외부 데이터 전송 금지
**condition**: `tool.name`에 'curl', 'wget', 'scp' 포함 시 외부 IP로의 전송 차단
## 데이터베이스 무결성
- **id**: no-table-drop
**description**: 테이블 삭제 금지
**condition**: SQL에 `DROP TABLE`, `TRUNCATE TABLE` 포함 시 차단
파일 2: governance/guards.md
# 조건 기반 경계
## 시스템 안전
- **id**: destructive-cmd-pending
**description**: 시스템 파괴 명령은 승인 필요
**condition**: 쉘 명령어가 `rm -rf .*`, `mkfs`, `dd` 패턴과 일치
**action**: PAUSE
파일 3: governance/roles.md
# 역할 정의
## 역할: data_analyst
- **allowedActions**:
- SELECT 쿼리 실행
- 차트 생성 도구 사용
- **forbiddenActions**:
- DDL 명령(CREATE, DROP 등)
- 외부 API 호출
- **approvalRequiredActions**:
- PII(Personally Identifiable Information) 포함 쿼리
파일 4: agents/data-bot.md
# 데이터 분석 보조 에이전트
**agentId**: analyst-bot-v1
**role**: data_analyst
**description**: 데이터 조회 및 시각화 지원
**tools**:
- query_db
- create_visualization
- read_temp_file
3.3 컴파일 및 활성화
Markdown 파일 정의 후, 아래 명령어로 컴파일:
/world bootstrap
성공 시 .neuroverseos/proposals/에 PENDING 상태의 새 월드 파일이 생성된다. 변경 사항을 확인:
/world diff
예시 출력:
+ ADDED invariant: no-table-drop
+ ADDED guard: destructive-cmd-pending
+ MODIFIED role ‘data_analyst‘: added approval for PII queries
내용 확인 후 승인:
/world approve
성공 시 새로운 거버넌스 규칙이 즉시 적용된다.
3.4 런타임 바인딩 및 검증
에이전트의 agentId가 설정되면, 시스템은 자동으로 해당 역할과 연결한다. 바인딩 상태는 다음 명령어로 확인 가능:
/world bindings
/world bind analyst-bot-v2 data_analyst
4. 런타임 동작 및 문제 해결
4.1 거버넌스 판정 흐름 예시
에이전트가 DELETE FROM users WHERE 1=1 쿼리를 실행하려 할 경우:
- Invariants 검사:
no-table-drop조건 만족 → BLOCK - 종료: 상위 계층에서 BLOCK 발생 → 하위 계층 생략
- 로그 기록:
.neuroverseos/audit.jsonl에 차단 기록 저장
4.2 무결성 검사 및 변조 방지
시스템은 매번 판정 전 무결성 검사를 수행하여 'Fail-Closed' 원칙을 준수한다.
| 검사 항목 | 동작 | 처리 방법 |
|---|---|---|
| 월드 파일 해시 검증 실패 | BLOCK | /world restore로 복구 |
| 월드 파일 누락 | BLOCK | /world bootstrap 재실행 |
| PENDING 상태 존재 | WARN | 세션 시작 시 경고 메시지 출력 |
실수 경험: 초기에
world.json을 직접 수정했다가 모든 작업이 BLOCK되는 현상을 겪었다. 원인은 수동 수정으로 인한 해시 불일치였다. 교훈: 반드시.md파일 수정 →bootstrap→diff→approve절차를 따르고,world.json은 읽기 전용 바이너리 파일로 취급해야 한다.
4.3 주요 문제 해결 가이드
| 현상 | 원인 | 해결 방법 |
|---|---|---|
| 모든 작업 BLOCK | 무결성 검사 실패 또는 역할 미할당 | /world status 확인 후 restore 또는 /world bind로 재할당 |
| 허용되어야 할 작업이 BLOCK/Pause | 상위 규칙 충돌 또는 조건식 오류 | 로그의 reason 필드 확인 후 조건식 수정 |
/world approve 실패 |
PENDING 상태 없음 또는 문법 오류 | bootstrap 재실행 및 오류 메시지 분석 |
4.4 고급 기능: 모듈화 및 조합형 거버넌스
대규모 프로젝트에서는 규칙을 모듈화할 수 있다:
security-base.md: 공통 보안 원칙finance-guard.md: 재무 관련 경계project-beta-rules.md: 특정 프로젝트 정책
메인 부트스트랩 파일에서 다음과 같이 가져오기 가능:
import: ./modules/security-base.md
import: ./policies/finance-guard.md
이를 통해 다양한 프로젝트 간 공통 기준을 공유하면서도 맞춤형 정책을 적용할 수 있다.
5. 통합 및 모범 사례
OpenClaw 에이전트에 거버넌스를 통합하려면 도구 호출 전후 훅에 검사 로직을 삽입해야 한다:
const { GovernanceEngine } = require('@neuroverseos/openclaw-governance');
const governance = new GovernanceEngine('/workspace/path');
async function interceptToolCall(agentId, toolName, input) {
const result = await governance.evaluate({
agentId,
tool: toolName,
input: JSON.stringify(input),
context: getCurrentState()
});
switch (result.decision) {
case 'ALLOW':
return executeTool(toolName, input);
case 'BLOCK':
throw new Error(`Denied: ${result.reason}`);
case 'PAUSE':
const userResponse = await requestApproval(result);
return userResponse.approved ? executeTool(toolName, input) : Promise.reject();
}
}
모범 사례
- 엄격하게 시작하고 점진적으로 완화: 초기에는 더 많은 PAUSE를 설정하고, 운영 중 불필요한 항목을 점진적으로 제거한다.
- 감사 로그 분석 활용:
audit.jsonl을 ELK 등에 연계해 행동 패턴과 보안 위협을 분석한다. - 규칙 파일의 버전 관리: 모든
.md파일을 Git으로 관리하여 변경 이력을 추적한다. - 최소 권한 기반 역할 설계: '슈퍼 유저' 역할을 만들지 말고, 필요한 최소한의 권한만 부여한다.
- 규칙 테스트 자동화: 유닛 테스트를 통해 다양한 입력에 대한 판정 결과를 검증한다.
NeuroVerseOS는 AI 에이전트를 '검은 상자'에서 '투명한 상자'로 전환하며, 사후 대응이 아닌 사전 예방과 실시간 제어를 가능하게 한다. 프로덕션 환경에 AI 에이전트를 도입하는 모든 팀에게 이와 같은 감사 가능하고 검증 가능한 거버넌스 코어는 선택이 아닌 필수 요소가 되고 있다. 이는 창의성을 억누르는 것이 아니라, 안전하고 신뢰할 수 있는 무대 위에서 창의성을 발휘할 수 있도록 돕는다.