- **명확한 구문 분석** — 단일 밑줄 체계와 달리 `__` 구분 기호는 서버 이름에 밑줄이 포함된 경우에도 정확한 역방향 구문 분석을 허용합니다.
- **권한 격리** — 접두사가 붙은 MCP 도구 이름은 내장 도구와 충돌하지 않으므로 실수로 권한 우회를 방지할 수 있습니다.
- **추적성 감사** — 모든 도구 호출 로그 항목은 원래 MCP 서버를 식별합니다.
### SSRF 예방
DNS 고정은 에이전트가 HTTP 리디렉션을 통해 내부 네트워크에 액세스하도록 속이는 것을 방지합니다.
- **통합 아웃바운드 HTTP 계층**: 에이전트가 시작한 모든 HTTP 종료(web_fetch, HTTP 도구, OpenAPI 실행기, 기술 ZIP 설치, 미디어 확인자, 로봇/사이트맵 가져오기, 채널 미디어 다운로드, Feishu 첨부 파일)가 `secure_fetch` / `async_pin_url`에 수렴 — 단일 구현, 베어 httpx 사각지대 없음
- **수동 리디렉션 루프**: 홉별 재검증이 포함된 `follow_redirects=False` — 모든 리디렉션 대상은 팔로우하기 전에 완전히 확인됩니다.
- **DNS 고정**: 확인된 IP가 HTTP 연결에서 호스트 이름을 대체하여 DNS 리바인딩 TOCTOU 공격을 제거합니다.
- **포괄적인 IP 차단 목록**: RFC1918 프라이빗, CGNAT, 링크-로컬, 멀티캐스트, 예약, 클라우드 메타데이터 엔드포인트(AWS/GCP/Alibaba/Tencent) 및 IPv4 매핑 IPv6 감지
- **데이터 유출 감지**: 6가지 패턴 카테고리(API 키, 파일 경로, base64, JWT, 비밀 키, DB 연결 문자열)로 URL 매개변수를 통한 민감한 데이터 유출을 방지합니다.
- **도메인 HITL 승인**: 허용 목록에 없는 도메인은 `domainHitlEnabled`가 활성화될 때 인간 개입(Human-In-The-Loop) 승인을 트리거합니다. UI를 통해 에이전트별 네트워크 허용 목록 구성 가능
- **파서 혼동 문자 방어**: 파서 간 호스트 이름 추출 분기를 방지하기 위해 URL의 탭, 줄 바꿈 및 백슬래시를 차단합니다(CVE 클래스 SSRF 우회 방지).
- **내부 호스트 이름 접미사 차단**: `.local`, `.svc`, `.cluster.local`, `.home.arpa` 접미사는 mDNS 및 Kubernetes 내부 네트워크 액세스를 방지하기 위해 차단됩니다.
- **감사 추적**: 차단된 요청은 SIEM 및 프런트엔드 감사 보기에 대한 `SSRF_BLOCKED` 보안 결정을 내보냅니다.
- **에이전트 API 범위**: `/v1/chat/completions`은 Myrm 에이전트만 실행합니다(원시 LLM 패스스루 없음). 사용자 구성 공급자 apiUrl SSRF 검사는 에이전트 내 LLM 호출에 유지됩니다. 배포 모드 인식: 로컬 모드는 루프백 호스트(Ollama/vLLM)를 허용하고, 클라우드/샌드박스 모드는 개인 네트워크 및 클라우드 메타데이터 엔드포인트를 차단합니다.
- **461개 이상의 전용 SSRF 테스트**: 핵심 보호, 에이전트 보안, 브라우저 탐색, DNS 고정, 미디어 검증, A2A 확인자, 웹 가져오기, SessionVault, 권한 엔진 및 공급자 URL 검증에 대한 적용 범위
### 악성 URL 아키텍처 면역
Myrm은 정적 피싱 도메인 차단 목록(예: 250만 개의 사기 도메인)을 유지하는 대신 아키텍처 수준에서 위협을 제거합니다.
- **SessionVault 도메인 바인딩**: 자격 증명(쿠키/비밀번호)은 도메인별로 엄격하게 격리됩니다. — `bank.com` 로그인 상태는 `bank-secure-login.xyz`와 같은 피싱 도메인으로 전송되지 않으므로 자격 증명 도용을 방지하도록 설계되었습니다.
- **에이전트 수준 세션 격리**: 구성된 각 에이전트는 자체 물리적 SessionVault 하위 디렉터리를 갖습니다. 동일한 웹 사이트에 액세스하는 "작업 도우미" 및 "개인 비서"는 완전히 독립적인 로그인 상태를 유지하여 에이전트 간의 신원 오염을 방지합니다.
- **브라우저 샌드박스 격리**: 에이전트 브라우저는 격리된 샌드박스에서 실행됩니다. 악성 사이트를 방문하더라도 사용자의 호스트 시스템은 영향을 받지 않습니다.
- **4계층 심층 도메인 필터링**: CSP 정책(커널 수준 네트워크 제한) + 프로토콜 차단(context.route가 허용 목록에 없는 도메인 차단) + 메인 스레드 강화(WebRTC/WebTransport/ServiceWorker 차단) + CDP 감사 모니터링
이 아키텍처를 사용하면 대규모 피싱 도메인 데이터베이스를 불필요하게 유지할 수 있습니다. 매일 수천 개의 새로운 도메인이 나타나고 정적 목록은 빠르게 구식이 되며 50~100MB의 메모리를 소비합니다.
### 구성 보안 검색
모든 MCP 서버 구성은 활성화 전에 13가지 위협 유형을 검사합니다.
| Threat Type | What It Catches |
|-------------|----------------|
| `prompt_injection` | Malicious system prompts embedded in config |
| `name_injection` | Tool names designed to mislead the LLM |
| `concealment` | Hidden instructions in descriptions |
| `exfiltration` | Data theft via outbound channels |
| `credential_harvesting` | Attempts to collect user secrets |
| `context_leak` | Leaking conversation context to external services |
| `arbitrary_execution` | Unrestricted code execution capabilities |
| `risky_profile` | Known high-risk server profiles |
| `suspicious_url` | Non-HTTPS or suspicious domain patterns |
| `sensitive_path` | Access to sensitive filesystem paths |
| `hardcoded_secret` | Credentials embedded in configuration |
| `supply_chain` | Dependency chain compromise indicators |
| `supply_chain_malware` | Known malicious package signatures |
조사 결과는 심각도 배지와 함께 `ScanConfirmDialog`에 표시됩니다. 사용자는 각 서버를 신뢰하거나 거부하거나 강제로 활성화할 수 있습니다(자신의 책임 하에).
### 악성 패키지 탐지
MCP 도구가 종속성을 설치할 때 OSV(오픈 소스 취약점) API을 실시간으로 참조하여 알려진 악성 패키지를 탐지합니다.
### 동적 공구 교환 안전
MCP 서버가 런타임 시(`tools/list_changed` 알림을 통해) 도구를 추가하거나 제거하면 Myrm은 작업 흐름을 중단하지 않고 보안을 보장합니다.
- **자동 보안 조사** — 새로 추가된 도구는 구성 시 적용된 동일한 13가지 위협 보안 검색을 기준으로 평가됩니다. 도구가 검사에 실패하면 거부되고 경고가 기록됩니다. 안전하지 않은 도구는 자동으로 활성화되지 않습니다.
- **프롬프트 캐시 보존** — 에이전트의 프롬프트 표시 도구 목록이 고정됩니다. 동적 변경은 내부 실행 계층만 업데이트합니다. 이는 프롬프트 접두사 캐시 적중이 외부 MCP 서버 동작에 의해 무효화되지 않도록 보장합니다.
- **사용자 중단 없음** — 수동 `/reload` 확인이 필요한 CLI 기반 경쟁사와 달리 Myrm은 도구 변경을 투명하게 처리합니다. 사용자는 의미 있게 평가할 수 없는 이벤트에 대한 확인 대화 상자로 인해 방해를 받지 않습니다.
### 에이전트별 도구 필터링
서로 다른 에이전트는 동일한 서버에서 서로 다른 MCP 도구를 활성화할 수 있습니다. "코드 검토자" 에이전트는 읽기 전용 도구만 볼 수 있는 반면 "DevOps" 에이전트는 모든 도구를 볼 수 있습니다. `destructiveHint` 주석이 있는 도구는 안전 세트에서 기본적으로 비활성화되어 있습니다.
## 작업 수준 의미론적 위험 감지
전체 웹사이트를 "고위험"(깨지기 쉽고 유지 관리가 많이 필요한 접근 방식)으로 표시하는 대신 Myrm은 **개별 작업 수준**에서 위험을 감지합니다. 모든 클릭, 양식 제출 및 명령이 실시간으로 분석됩니다.
### 7-범주 의미론적 DOM 위험 감지
에이전트가 웹페이지의 버튼이나 링크를 클릭하면 해당 요소의 텍스트가 영어와 중국어로 된 7가지 위험 범주에 대해 분석됩니다.
| Category | Trigger Keywords (EN/ZH) | What Happens |
|----------|-------------------------|--------------|
| **Destructive** | delete, remove / 删除, 移除 | HITL approval required |
| **Financial** | pay, purchase, checkout / 付款, 购买 | HITL approval required |
| **Account** | deactivate, close account / 注销, 关闭账号 | HITL approval required |
| **Admin** | admin settings, permissions / 管理, 权限 | HITL approval required |
| **Publish** | publish, post, submit / 发布, 发表 | HITL approval required |
| **Share** | share, send, transfer / 分享, 发送 | HITL approval required |
| **Sensitive** | password, credit card / 密码, 信用卡 | HITL approval required |
이 접근 방식은 다음과 같은 이유로 도메인 수준 위험 태그보다 우수합니다.
- **유지보수 제로**: "고위험 웹사이트" 목록을 유지 관리할 필요가 없습니다.
- **유니버설 커버리지**: 신규 웹사이트를 포함한 모든 웹사이트에서 작동
- **세부적**: Amazon의 "장바구니 보기"는 자동으로 통과하지만 "주문하기"에는 승인이 필요합니다.
- **법적 위험 없음**: 특정 플랫폼에 대한 차별이 없습니다.
### 스마트 인텐트 가드
AI 분류자(`TranscriptClassifier`)는 도구 호출을 검토하여 사용자의 원래 의도와 일치하는지 확인합니다.
- **Reasoning-Blind**: 사용자 메시지 + 도구 호출 순서만 확인(에이전트 추론 아님)하여 자기 정당화 공격 방지
- **결정적**: `temperature=0`은 동일한 입력이 항상 동일한 결과를 생성하도록 보장합니다.
- **구조화된 출력**: 감사 추적성을 위해 `reason` 필드가 있는 Pydantic 강제 JSON
- **Fail-safe**: 오류나 모호성은 자동 승인이 아닌 HITL로 대체됩니다.
### 리스크 거버넌스 시스템
기본 제공 규칙, 사용자 지정 규칙 관리 및 전체 스택 이벤트 처리를 갖춘 완벽한 양방향 위험 감지 및 거버넌스 프레임워크입니다. 동일한 규칙 엔진이 WebUI 입력과 IM 채널 인바운드 메시지 **모두**를 사각지대 없이 보호합니다.
7개 카테고리의 **31개 기본 제공 규칙**은 민감한 데이터가 LLM에 도달하기 전에 감지합니다.
| Category | Examples | Count |
|----------|---------|-------|
| **Personal** | Email, phone, Chinese ID number, passport, address | 8 |
| **Security** | API keys (OpenAI, AWS, GCP, Azure), SSH private keys, JWT tokens | 7 |
| **Company** | Internal IPs, employee IDs, project codenames, internal URLs | 5 |
| **Customer** | Customer IDs, order numbers, support ticket numbers | 4 |
| **Finance & Legal** | Bank accounts, credit cards, tax IDs, contract numbers | 4 |
| **Political** | Politically sensitive content patterns | 3 |
**대칭 인바운드/아웃바운드 게이트**: IM 채널 메시지는 에이전트에 도달하기 전에 라우터 수준에서 `RiskDetectionService.detect()`을 통과합니다. 차단된 메시지는 현지화된 알림(6개 언어)을 받고 감사 기록됩니다. 아웃바운드 에이전트 응답은 `_apply_outbound_risk_gate`을 통해 동일한 엔진을 통과하여 폐쇄 루프 방어를 형성합니다.
**GUI 규칙 관리**: WebUI 설정 패널을 통한 전체 CRUD — 정규식 패턴을 사용하여 사용자 정의 규칙을 만들고, 규칙 켜기/끄기를 전환하고, 배치 작업을 수행하고, 배포 전에 규칙 테스트를 수행합니다. 코드가 필요하지 않습니다.
**감사 추적**: 모든 위험 적중은 규정 준수 감사를 위한 `trace_id`, `session_id`, 일치 규칙 및 심각도 수준을 기록합니다.
**전체 스택 이벤트 루프**: 입력 위험이 감지되면 서버는 `risk_blocked` SSE 이벤트를 발생시킵니다. 프런트엔드 `riskEvents` 핸들러는 이 이벤트를 가로채고 어떤 규칙이 트리거되었는지 설명하는 사용자 친화적인 토스트 알림을 표시합니다. 자동 실패는 없습니다.
### 테스트 범위
30,000개 이상의 테스트를 통해 PII/DLP/프라이버시 라우팅(1136), 셸 명령 승인(하네스 1209 + 서버 261), 의미론적 DOM 위험(75), 셸 분류(379), SQL 문 가드(68, 99.1% 적용 범위), 보안 엔진 통합(163+74), 자격 증명 검색(35), 도구 가드(9), 권한 엔진을 포함한 전체 보안 파이프라인을 검증합니다. (119), 도구 레지스트리 및 상속(67), 가드레일 미들웨어(15), 아키텍처 레지스트리(4), 서버 권한(18), 에이전트 내장 도구 API(12), 프로필 확인(36), 프런트엔드 승인 및 메시지(15), 위험 거버넌스(117), 웹훅 경로(2), 동적 인증 가드레일(845), MCP 벤치마크 도출(166) 등.
## 셸 명령 보안
명령은 실행 전에 5계층 인용 인식 파이프라인을 통해 분석됩니다.
| Layer | Detection | Response |
|-------|-----------|----------|
| **L1** | Binary characters, 12 invisible Unicode categories (zero-width, direction overrides) | BLOCK |
| **L1.5** | ANSI-C quoting `$'...'` and locale quoting `$"..."` | BLOCK |
| **L2** | 6 injection vectors (`$()`, backtick, `${}`, `;`, process substitution) + 70+ dangerous command patterns | BLOCK → DENY |
| **L2.5** | SQL syntax-level guard: detects destructive SQL in DB client commands (`psql`, `mysql`, `sqlite3`, etc.) — handles multi-statement injection and WITH CTE bypass vectors | ESCALATE → ASK |
| **L3** | Suspicious patterns (`curl\|sh`, `eval`, `base64 -d`, kill/pkill) | ESCALATE → ASK |
| **L4** | Recursive analysis of nested commands in `bash -c '...'`, `sh -lc '...'`, `zsh -c '...'`, `trap '...'` wrappers — depth-limited to prevent DoS | Recursive BLOCK/ESCALATE |
**인용 인식 전처리**: 문자 수준 상태 머신(`_strip_quoted_content`)은 L2/L3 스캔 전에 작은따옴표로 묶인 콘텐츠를 자리 표시자로 대체하여 `echo 'rm -rf /'`에 대한 오탐을 방지하는 동시에 큰따옴표 또는 따옴표가 없는 컨텍스트에서 실제 위협을 포착합니다.
**권한 에스컬레이션 플로어**: `sudo apt install`, `sudo -S`(stdin 비밀번호 파이핑), `env sudo cmd` 및 `bash -c 'sudo ...'`(L4에 의해 재귀적으로 포착됨)을 포함하여 모든 `sudo` 명령은 L2에서 무조건 차단됩니다. 이는 YOLO 모드, 스마트 가드 또는 사용자 승인으로 우회할 수 없습니다. Hermes과 같은 경쟁업체는 `sudo -S`(비밀번호 추측 벡터)만 차단하고 여전히 SUDO_PASSWORD 삽입을 통해 일반 `sudo`을 허용합니다. 즉, 공격 표면이 더 넓습니다. 다른 6명의 경쟁업체에는 sudo 가드가 전혀 없습니다.
**파괴적 명령에 대한 자동 스냅샷**: 파괴적인 패턴(임의 플래그 접두어가 있는 `rm`, `mv`, `git reset/clean/checkout/restore/apply`, `sed -i`, 리디렉션 덮어쓰기)과 일치하는 명령은 실행 전에 자동 작업 영역 스냅샷을 트리거하여 결과에 관계없이 전체 복구를 보장합니다.
**SQL Guard(L2.5)**: 데이터베이스 클라이언트 명령에 포함된 파괴적인 SQL 작업(`DROP`, `DELETE`, `TRUNCATE`, `ALTER`, `INSERT`, `UPDATE`, `CREATE`)을 탐지하기 위해 *original* 명령(따옴표 제거 전)을 분석합니다. 다중 문 삽입(`SELECT 1; DROP TABLE`) 및 WITH CTE 래핑(`WITH x AS (...) DELETE FROM`)이라는 두 가지 고급 우회 벡터를 방어합니다. 플래그 기반(`psql -c '...'`) 및 파이프 기반(`echo '...' | psql`) 패턴과 함께 작동합니다. 어떤 경쟁업체도 셸 실행을 위한 SQL 수준 명령 분석을 구현하지 않습니다.
**안전한 실행 경로**: 셸 메타 문자가 없는 간단한 명령은 `create_subprocess_exec`(셸 인터프리터 없음)를 통해 실행되어 `$IFS`, glob 확장 및 명령 대체 주입 클래스를 구조적으로 제거합니다.
### AI 궤적 분류기(레이어 5.5)
정적 분석이 ASK(불확실함)를 반환하면 AI 분류자는 의미론적 수준의 판단을 제공합니다.
- **추론 맹목적 설계**: 사용자 메시지와 도구 호출 시퀀스만 확인하고 보조 추론이나 도구 출력은 확인하지 않아 에이전트가 분류자를 지나 위험한 행동을 합리화하는 것을 방지합니다.
- **구조화된 출력**: Pydantic 스키마는 JSON 형식(자유 텍스트 아님)을 강제하여 주입 표면을 줄입니다.
- **결정적**: 재현 가능한 결정을 위한 `temperature=0`, `max_tokens=200`
- **실패 안전**: 모든 오류, 시간 초과 또는 구문 분석 실패는 불확실함을 반환 → HITL 승인으로 돌아갑니다.
- **컨텍스트 인식**: 미묘한 판단을 위해 오염 라벨(EXTERNAL_NETWORK, SECRET) 및 신뢰할 수 있는 도메인을 수신합니다.
### 이중 언어 명령 설명
승인을 트리거하는 모든 명령은 결정론적으로 생성된 사람이 읽을 수 있는 이중 언어 설명(`humanize_command`)을 표시합니다(0 LLM 호출, 마이크로초 대기 시간).
- 매개변수 인식 설명(URL, 파일 이름, 패키지 이름 추출)이 포함된 **73개의 일반 명령 포함**
- **sudo 접두사 자동 태그됨**, 위험한 파이프 패턴 강조 표시
- 사용자는 쉘 전문 지식 없이도 승인하기 전에 명령이 수행하는 *작업*을 이해합니다.
- 완전히 규칙 기반: LLM 기반 대안과 달리 프롬프트 주입을 통해 조작할 수 없습니다.
<Note>
**Frontend humanize SSOT (2026-08)** — Beyond harness `humanize_command` for shell, the WebUI module `lib/humanize/` generates the **same plain-language dialect** for ProgressSteps titles and all three approval surfaces (Single / Polymorphic / ToolCall). Scope hints (`local` vs `external` channel) use `resolveScopeNote` + `ApprovalScopeNoteLine` in six locales. Save-skill approvals show a structured preview before you approve. Validated: **49 focused vitest, 0 failures** (Aug 2026).
</Note>
### Slopcheck 설치(슬롭스쿼팅 방지)
모든 `pip install` / `npm install` / `yarn add` / `bun add` 명령 전에 실행 전 검사를 통해 각 패키지 이름이 실제로 공용 레지스트리에 있는지 확인합니다.
| Aspect | Detail |
|--------|--------|
| **Detection** | HEAD probe against PyPI JSON API (`/pypi/{name}/json`) and npm registry (`/{name}`) |
| **Normalization** | PEP 503 rules (underscores, dots, mixed case → canonical lowercase-hyphen) |
| **Concurrency** | All packages probed in parallel via `asyncio.gather()` |
| **Cache** | In-memory set of verified packages — zero repeated network calls within a session |
| **Private registries** | Commands with `--index-url`, `--extra-index-url`, or `--registry` are auto-skipped |
| **Graceful fallback** | Network timeout or DNS failure → allow install (never block legitimate work) |
| **Response** | Unknown package → `ToolError` blocks the install and explains which packages were not found |
이렇게 하면 공격자가 LLMs가 일반적으로 환각을 느끼는 패키지 이름을 등록하여 게시된 패키지에 악성 코드를 삽입하는 **슬롭 스쿼팅 공격**을 방지할 수 있습니다.
## 암호화 및 기업 네트워크 호환성
| Scope | Standard |
|-------|----------|
| **At Rest** | AES-256-GCM for stored data (secrets, API keys, user content) |
| **In Transit** | TLS 1.3 for all network connections |
| **API Keys** | Encrypted secrets vault with per-user isolation |
| **Memory** | Optional encryption for sensitive memory entries |
| **Incognito Mode** | Physical isolation and read-after-burn for sensitive sessions |
### 엔터프라이즈 TLS 호환성
기업 네트워크에서는 모든 HTTPS 연결이 실패할 수 있는 TLS 검사 프록시(Zscaler, Netskope, Palo Alto Prisma)를 배포하는 경우가 많습니다. Myrm은 원클릭 엔터프라이즈 네트워크 호환성을 제공합니다.
- **설정 → 고급 → 기업 네트워크 호환성** 또는 `MYRM_TLS_STRICT=0` 설정
- Python 3.13+ `VERIFY_X509_STRICT` 플래그의 정밀 완화 — 인증서 확인을 비활성화하지 않습니다.
- 사용자 정의 CA 번들 지원: `SSL_CERT_FILE`(시스템 신뢰 저장소 교체) 또는 `NODE_EXTRA_CA_CERTS`(시스템 신뢰 저장소에 추가)
- **MCP서버별 TLS**: 각 MCP 서버는 전체 mTLS에 대해 자체 `ssl_verify`(참/거짓/사용자 지정 CA 경로) 및 `client_cert`/`client_key`/`client_key_password`을 지정할 수 있습니다.
- 4계층 자동 주입: 인프라(`tls_compat.py`) → 서버(`tls_config.py`) → MCP(`client.py`) → LLM(`llm.py`), 28개 이상의 HTTP 클라이언트 호출 사이트 포함
- 자동 TLS 오류 진단: 8개 오류 패턴 감지, 5개 언어 수정 힌트
- **144개의 TLS 관련 테스트 검증**(38개의 TLS 코어 + 31개의 MCP TLS + 75개의 오류 진단)
### 시크릿 모드 심층 분석
메시지 입력 영역의 원클릭 토글은 세션별 개인 정보 격리를 활성화합니다.
- **하네스 레이어**: `IncognitoPolicy`는 MEMORY 및 ARCHIVE 컨텍스트 장면에 대한 모든 쓰기를 물리적으로 건너뜁니다.
- **서버 계층**: 메모리 관리자 바인딩 및 모든 메모리 도구(`memory_search_tool`, `memory_save`, `memory_manage`)를 건너뛰고 메모리 컨텍스트 삽입, 아카이브 체크포인트 및 세션 정리 콜백을 비활성화합니다.
- **데이터베이스 레이어**: `is_incognito` 플래그는 세션이 사이드바 목록에서 숨겨지고 전체 텍스트 검색에서 제외되도록 보장합니다.
- **자체 호스팅 이점**: 데이터를 공급업체 서버에 보관하기 위해 별도의 "로컬 모드" 토글이 필요한 SaaS 경쟁업체와 달리 Myrm의 자체 호스팅 아키텍처는 사용자 데이터가 설계상 시스템 외부로 절대 나가지 않음을 의미합니다. 시크릿 모드는 세션 수준 비지속성을 추가합니다.
## 자격 증명 보호
### 자격증명 보관 양식
비밀번호 및 TOTP 시드는 **LLM 컨텍스트를 입력하지 않습니다**. **설정 → 자격 증명**에서 레이블이 있는 자격 증명을 구성합니다. 에이전트는 라벨 이름(예: `github-personal`)만 보고 `fill_credential`을 호출합니다(브라우저와 데스크톱은 동일한 작업을 사용함). 하네스는 메모리의 레이블을 확인하고 DOM 또는 OS 입력 레이어에 삽입합니다. 일반 텍스트는 결코 채팅, 도구 인수 또는 로그로 다시 흐르지 않습니다.
공급자 API 키(OpenAI, Anthropic, Gemini 등)는 LiteLLM의 `api_key` 매개변수를 통해 전달됩니다 — **제로 `os.environ` 쓰기**. 프로세스 수준 샌드박스 격리와 결합되어 구조적으로 사용자 간 자격 증명 유출을 제거합니다. **279** 자격 증명 보안 테스트를 통과했습니다.
| What you get | Technical basis | Plain-language benefit |
|--------------|-----------------|------------------------|
| **Label-only agent view** | Tool schema exposes labels, not values | Safe to let the agent log in — it cannot "see" or repeat your password |
| **Browser + desktop coverage** | `fill_credential` (unified action) + password-field block on macOS/Windows/Linux | Same vault works for web apps and native desktop login |
| **Built-in TOTP** | RFC 6238 generation inside the vault | 2FA flows without you reading codes aloud or pasting into chat |
| **Encrypted storage** | AES-256-GCM in Server DB, synced to Harness memory vault on startup; partial metadata edits preserve in-memory secrets | Credentials at rest are encrypted; editing description in Settings does not break live automation |
<Note>
Payment-card CVV has no dedicated `use_payment_method` API yet (unlike FSB's browser extension). Password-type fields are covered; card checkout may need manual approval or future API.
</Note>
### 누출 감지
40개 이상의 정규식 패턴이 에이전트 출력에서 자격 증명을 감지합니다.
- API 키(OpenAI, Anthropic, AWS, GCP, Azure 등)
- 데이터베이스 연결 문자열
- JWT 토큰 및 세션 ID
- SSH 개인 키
- 알 수 없는 자격 증명 형식에 대한 엔트로피 기반 감지
### PII 수정 및 개인정보 보호 라우팅
Myrm은 57가지 이상의 탐지 기능을 갖춘 8계층 PII 방어 기능을 제공합니다. 이는 AI 에이전트 플랫폼 중 가장 심층적인 개인 정보 보호 기능입니다.
**탐지(3개 엔진, 57개 이상의 유형):**
- **Regex PII 스캐너**: 12개 이상의 구조화된 유형(전화, ID 카드, 여권, Luhn 검증이 포함된 은행 카드, SSN, 이메일, 주소, 택배 번호, 개인 IP 등)
- **LLM 시맨틱 스캐너**: PL2/PL3/PL4 분류를 갖춘 20개 이상의 비구조적 유형(의료 건강, 정치적 견해, 재무 기록, 정확한 위치, 생체 인식)
- **자격 증명 누출 스캐너**: Shannon 엔트로피 분석이 포함된 25개 이상의 비밀 패턴(AWS, OpenAI, Anthropic, GitHub, Slack, JWT, PEM 키 등)
**보호(사용자 선택 가능 모드 4개):**
| Mode | Action | Use Case |
|------|--------|----------|
| **WARN** | Log detection, pass content through | Monitoring-only environments |
| **REDACT** | Type-aware irreversible masking (e.g., `138****5678`) | Production default for S2 data |
| **PSEUDONYMIZE** | Reversible placeholder replacement via SQLite-backed `PseudonymStore` with streaming-safe chunk-boundary restoration | When AI needs context but user sees originals |
| **BLOCK** | Completely block the message | S3-level confidential data |
**개인 정보 보호 모델 라우팅**: 민감도 수준에 따라 요청을 자동으로 라우팅합니다(S1은 클라우드로, S2는 클라우드 수정 후 또는 로컬로, S3는 로컬 전용으로(데이터가 시스템을 떠나지 않음)). 구성 가능한 대체: 차단 또는 강제 수정 후 클라우드.
**GUI 구성**: 설정의 전체 개인 정보 보호 제어 — 토글 활성화/비활성화, 레벨별 작업 선택, 심층 스캔 토글, 로컬 모델 연결 테스트, 사용자 정의 키워드/정규식/민감한 도구 및 실시간 테스트 일치.
### 요약 경로 보호
긴 대화를 구조화된 요약으로 압축하면 PII와 자격 증명이 요약 프로세스에서 살아남을 수 있습니다. Myrm은 지속성 이전에 모든 요약 필드에 이중 수정(`redact_leaks` + `redact_pii`)을 적용하여 전화번호, 이메일, API 키 및 기타 민감한 데이터가 압축된 대화 기록에 지속되지 않도록 합니다.
### 오염 추적
`TaintTracker`는 에이전트 실행을 통해 민감한 데이터의 정보 흐름을 따라 PII가 간접 채널(예: 자격 증명이 포함된 파일을 읽은 다음 웹 요청에서 해당 데이터를 사용하는 도구)을 통해 유출되지 않도록 합니다.
### 에이전트 내보내기 보안
공유 또는 백업을 위해 에이전트 구성을 내보내면 자격 증명이 자동으로 제거됩니다.
| What's stripped | Where | Why |
|----------------|-------|-----|
| `api_key`, `bearer_token`, `client_secret`, `password`, `username` | `openapi_services[].auth` | Prevent API credential leaks in shared configs |
| `auth_token` | `tool_gateway_config` | Prevent gateway token leaks |
팀 에이전트는 반복적으로 내보내기 - 모든 구성원 구성은 자격 증명이 제거된 상태로 포함됩니다. 가져오기 시 팀 구성원은 원자적으로 생성됩니다(전부 아니면 전무 롤백).
<Note>
The `auth.type` field is preserved so the importer knows which authentication method to configure (e.g. "api_key", "bearer", "oauth2").
</Note>
### 개인 정보 보호 규칙 공유
절차적 메모리 규칙을 공유할 때(예: 팀원 또는 커뮤니티와) 추가 개인정보 보호 계층이 자동으로 적용됩니다.
- **경로 익명화** — 사용자 홈 디렉터리 경로가 `<USER>` 자리 표시자로 대체됩니다.
- **자격 증명 수정** — API 키와 비밀은 안전한 접두사(예: `sk-pro...f456`)로 잘립니다.
- **메타데이터 제거** — 타임스탬프, 업데이트 횟수, 내부 ID가 내보낸 규칙에서 제거됩니다.
이렇게 하면 개인 식별이 가능한 파일 경로나 자격 증명이 공유 규칙을 통해 유출될 수 없습니다. 자세한 내용은 [메모리 시스템 → 개인정보 보호 규칙 공유](/ko/core-concepts/memory-system#privacy-safe-rule-sharing)를 참조하세요.
### 비밀번호로 보호된 공유
아티팩트 및 대화 공유 링크는 상태 비저장, 제로 데이터베이스 설계로 **선택적 비밀번호 보호**를 지원합니다.
| What you get | How it works |
|--------------|-------------|
| **Password gate** | Password SHA-256 hash is mixed into the HMAC signing key — wrong password = invalid signature, no database lookup |
| **Adjustable expiry** | Choose 1, 7, 14, or 30 day TTL when creating the link (server-side min/max clamping) |
| **Rate limiting** | Public endpoints capped at 30 req/min (content) and 60 req/min (static assets) to prevent brute-force |
| **Dark-mode gate page** | Self-contained HTML page with dark/light mode, error feedback, and no external dependencies |
| **Salt isolation** | Artifact and conversation tokens use different HMAC salts — same password produces different signing keys |
비밀번호 보호는 전적으로 선택 사항입니다. 비밀번호 없이 생성된 링크는 UX 변경이나 성능 오버헤드 없이 이전과 동일하게 작동합니다.
<Note>
No competitors (Hermes, OpenClaw, LobsterAI, CoPaw, deer-flow, jiuwenclaw) offer artifact or conversation sharing, let alone password protection. Myrm is the only AI assistant with both capabilities.
</Note>
### 에이전트 비밀 관리 - 일반 텍스트 노출 제로
에이전트별 비밀(사용자 정의 API 키, 토큰, 환경 변수)은 **일반 텍스트 노출 제로 아키텍처**를 사용합니다.
| Security Property | How It Works |
|-------------------|--------------|
| **Frontend never receives values** | `listAgentSecrets` API returns only key names (`string[]`), never values |
| **No reveal endpoint** | Unlike competitors that return plaintext on "reveal," Myrm has no reveal pathway |
| **Edit requires new value** | Password input field, placeholder "Enter new value to overwrite" |
| **Sentinel protection unnecessary** | Since old values never reach the frontend, no "****" round-trip risk exists |
| **Encrypted at rest** | AES-256-GCM via `DatabaseSecretBackend` with server-side master key |
| **Atomic file writes** | `LocalSecretBackend` uses tempfile + `os.replace` + `fsync` for crash safety |
| **Log auto-redaction** | `SensitiveDataFilter` replaces token/key/secret patterns with `***REDACTED***` |
| **Agent isolation** | Each agent can only access its own secrets via `agent_id` scoping |
<Note>
Competitors (e.g., Multica) return plaintext environment variables to the frontend and must rely on sentinel values ("****") to prevent accidental overwrites. Myrm eliminates this entire attack surface by never exposing values.
</Note>
## 감사 추적
### 구조화된 감사 추적
모든 보안 결정은 Prometheus 실시간 지표와 함께 구조화된 감사 로그에 기록됩니다.
- 37가지 유형의 보안 결정(ALLOW, DENY, ASK, SSRF_BLOCKED, PII_REDACTED, TAINT_ESCALATE 등)
- 실시간 이상 탐지를 위한 Prometheus `policy_denial_total` 카운터
- `TaintTracker` 교차 도구 정보 흐름 추적 기능을 갖춘 세션 범위 누산기
- Cron 작업 메타데이터에는 실행 후 분석을 위한 전체 보안 감사가 자동으로 포함됩니다.
### 이벤트 유형
37개 이상의 구조화된 의사결정 유형은 다음을 포함하여 전체 보안 수명주기를 포괄합니다.
- `TOOL_CALL_START` / `TOOL_CALL_END`
- `APPROVAL_REQUESTED` / `APPROVAL_GRANTED` / `APPROVAL_DENIED`
- `MODEL_SWITCHED` / `FALLBACK_ACTIVATED`
- `ITERATION_LIMIT_REACHED` / `BUDGET_EXHAUSTED`
- `LOOP_DETECTED` / `CANCELLED`
- `COMPRESSION_TRIGGERED` / `CHECKPOINT_CREATED`
## 프로필 감사 엔진
**프로필 감사 엔진**은 모든 에이전트 프로필에 대한 실시간 구성 위험 평가를 제공합니다. 에이전트 설정에서 보안 탭을 열면 **상태 점수 카드**에 에이전트의 보안 상태가 즉시 표시됩니다.
- **점수**: 0–100(높을수록 안전함), 발견된 심각도에 따라 차감됩니다.
- **위험도**: 안전 / 낮음 / 중간 / 높음 / 심각 (5단계 색상으로 구분)
- **6차원 그룹 보기**: 차원별 색상 코딩을 사용하여 검사기 차원별로 그룹화된 결과 — 심각도 경계, 제목 및 실행 가능한 권장 사항이 포함된 개별 결과를 보려면 차원을 확장하세요.
- **원클릭 수정**: 정책 격차 발견에는 즉각적인 수정을 위한 수정(전환 전환) 또는 구성(설정 섹션으로 이동) 버튼이 포함됩니다.
### 6가지 감지 차원
| Checker | Color | Detects |
|---------|-------|---------|
| **Tool Exposure** | Orange | Dangerous built-in tool combinations (e.g., shell + file_write + MCP) and large tool surfaces |
| **MCP Auth** | Violet | MCP servers without authentication, insecure transport, or high scan findings |
| **Skill Aggregate** | Sky | Skills flagged as untrusted or rejected during import scanning |
| **Subagent Risk** | Rose | Multi-level delegation chains creating unauditable privilege paths |
| **Cron Risk** | Amber | Unattended scheduled tasks with high-privilege tools |
| **Policy Gap** | Slate | Missing security controls relative to enabled capabilities (with one-click fix) |
각 측정기준에는 문제 수 또는 '통과' 상태가 표시됩니다. 문제가 있는 측정기준을 확장하여 개별 결과를 표시할 수 있습니다.
### 디자인
- **Zero LLM**: 순수 결정론적 규칙 엔진 — 토큰 비용 없음, 즉각적인 응답
- **플러그인 아키텍처**: 각 검사기는 `BaseChecker`을 구현하며 독립적으로 확장 가능
- **자동 새로 고침**: 에이전트 구성 변경 사항을 저장하면 결과가 자동으로 업데이트됩니다.
- **프레임워크 수준**: 제품 UI뿐만 아니라 하네스 엔진을 사용하는 모든 프로젝트에서 사용 가능
- **테스트 범위**: 백엔드 단위 테스트 37개 + 프런트엔드 구성 요소 테스트 15개(총 52개)
## 작업공간 규칙 보안
Myrm은 모든 주요 AI 도구 생태계를 포괄하는 **17개 검색 지점**(루트 수준 파일 이름 13개 + 하위 디렉터리 패턴 4개)에서 프로젝트 수준 규칙 파일을 자동으로 검색하고 로드합니다.
- **루트 파일**: `.myrm.md`, `AGENTS.md`, `CLAUDE.md`, `SOUL.md`, `.cursorrules`, `.clinerules`, `.windsurfrules` 및 해당 대소문자 변형
- **하위 디렉터리**: `.myrm/rules/*.md`, `.cursor/rules/*.mdc`, `.claude/CLAUDE.md`, `.github/copilot-instructions.md`
- **첫 번째 일치 승리**: 디렉터리별로 우선순위가 가장 높은 파일만 로드하여 충돌을 방지합니다.
- **제로 구성 마이그레이션**: Hermes(`SOUL.md`), Cline(`.clinerules`), Cursor(`.cursorrules`), Claude Code(`CLAUDE.md`), Windsurf(`.windsurfrules`)의 사용자는 규칙 파일을 변경하지 않고 가져올 수 있습니다.
발견된 모든 파일은 삽입 전에 보안 검사를 거칩니다.
- 26개 위협 카테고리에 걸쳐 **113개 탐지 패턴**
- **난독화 방지**: Leet 말하기, 보이지 않는 유니코드, 공백 접기, Base64 디코딩
- **중국어 주입 감지**: CJK 문자 기반 프롬프트 주입 지원
- 차단된 콘텐츠는 구조화된 메타데이터가 포함된 `[BLOCKED]` 자리 표시자로 대체됩니다.
## 비상 통제
| Control | Description |
|---------|-------------|
| **E-Stop** | One-click emergency stop that halts all running agents immediately |
| **Session Kill** | Terminate a specific agent session |
| **Tool Blacklist** | Dynamically block specific tools across all agents |
| **Budget Override** | Hard spending cap that overrides all agent budgets |
## 보안 대시보드
전용 `/security` 페이지는 시스템 보안 상태에 대한 완전한 GUI 가시성을 제공합니다. CLI 명령은 필요하지 않습니다.
| Tab | What It Shows |
|-----|---------------|
| **Dependencies** | Vulnerability alerts (Critical/High/Medium/Low counts) + Dependabot PRs + SBOM availability |
| **Rate Limit** | Real-time per-user/per-resource throttle status (current/max/remaining/window) |
| **Audit Logs** | Security event stream with multi-dimension filters (user ID, event type, result) + CSV/JSON export |
| **Audit Stats** | 24-hour analytics: time series, top IPs, event distribution, success-vs-failure breakdown |
추가 기능:
- **설정 패널**: 웹후크, 모니터링되는 저장소 및 GitHub 토큰의 구성 안내
- **다중 소스**: 배포 모드에 따라 GitHub, 제어 영역 또는 병합된 소스에서 데이터를 가져옵니다.
- **원클릭 새로고침**: 탭별 실시간 데이터 다시 로드
- **내보내기**: SIEM 통합을 위해 CSV 또는 JSON 형식으로 내보낼 수 있는 감사 로그
이 GUI 우선 접근 방식은 Hermes' CLI 전용 보안 명령(`hermes config view security`, `hermes pairing list`)보다 우수합니다. 사용자는 터미널 전문 지식 없이도 시각적 분석을 통해 동일한 정보를 얻을 수 있습니다.
## 스마트 승인(자동 모드)
Smart Intent Guard는 모든 신규 사용자에 대해 **기본적으로 활성화**되어 있습니다. 보조 LLM(Transcript Classifier)는 도구 호출을 실시간으로 검토하여 안전을 희생하지 않고 장시간 무인 상담원 세션을 가능하게 합니다. 전용 검토자 모델이 구성되지 않은 경우 Myrm은(는) 자동으로 사용자의 기본 모델을 대체 모델로 사용하므로 지능형 승인의 이점을 누리기 위해 추가 설정이 필요하지 않습니다.
| Layer | What It Does | When It Fires |
|-------|-------------|---------------|
| **Deterministic Rules** | Static permission engine evaluates against rulesets | Always (first) |
| **CommandRiskLevel** | Shell-pipe-aware classifier: SAFE (auto-allow) or UNKNOWN (needs review) | shell_exec with Auto Mode |
| **Allowlist Memory** | "Always Allow" user choice permanently auto-approves identical actions | ASK actions with prior user approval |
| **Taint Escalation** | Session contains PII/credential → even ALLOW tools get LLM review | ALLOW + tainted session |
| **Transcript Classifier** | Reasoning-blind LLM (sees only user messages + tool calls) → ALLOW/DENY/UNCERTAIN | ASK actions in Auto Mode |
| **Outbound Check** | Delegation actions force LLM review regardless of rule result | delegate_agent actions |
| **Shell Escalation** | Non-SAFE shell commands get LLM review even if rules say ALLOW | shell_exec + UNKNOWN risk |
| **Threshold Breach** | Consecutive denials → circuit-break auto-approval, revert to HITL | Too many denials |
오류 방지 보장:
- 분류자 오류 → HITL로 대체(실패 시 자동 승인되지 않음)
- 결정론적이고 재현 가능한 결정을 위한 `temperature=0`
- Pydantic이 시행하는 구조화된 출력(자유 텍스트 조작 없음)
- 상황 인식 판단을 위해 Taint 라벨 삽입
### 스마트 거부 → 사용자 무시(1회)
Transcript Classifier가 DENY를 권장하면 Myrm은(는) 해당 작업을 자동으로 거부하지 **않습니다**. 대신 명확한 승인 카드가 표시됩니다.
| Aspect | Behavior |
|--------|----------|
| **Visual indicator** | Amber warning box displaying the reviewer's denial reason |
| **Available actions** | "Override Once" and "Reject" only (session/always/edit hidden) |
| **Override behavior** | Action executes this one time but is NOT added to the allowlist — next identical action still triggers review |
| **Audit trail** | `LLM_REVIEW_DENY_USER_OVERRIDE` event recorded with reason |
| **Non-interactive sessions** | Cron jobs and shadow agents auto-deny without override option (fail-closed) |
| **High-risk paths** | Taint escalation, outbound delegation, and shell escalation always hard-deny — no override possible (security red line) |
이는 AI 검토자가 합법적인 작업을 잘못 분류하는 "거짓 긍정 잠금"을 방지하는 동시에 전체 감사 가시성을 유지합니다.
**경쟁업체와 비교:** Hermes은 CLI 전용 `once`/`deny` 버튼이 있는 `smart_denied_for_owner`을 제공하지만 시각적 이유 표시, 감사 로깅 및 오염/아웃바운드 경로에 대한 계층화된 하드 거부가 없습니다.
### 고위험 시나리오: 항상 숨김 허용
6가지 고위험 시나리오에서는 "항상 허용" 버튼이 승인 카드에서 자동으로 숨겨집니다. 사용자는 한 번만 승인하거나 거부할 수 있습니다. 이렇게 하면 위험한 작업에 대한 보안 검사가 실수로 영구적으로 우회되는 것을 방지할 수 있습니다.
| Trigger | Why Always Allow Is Hidden |
|---------|---------------------------|
| **Taint Escalation** | Session contains external network data — permanent allow would bypass all future taint checks |
| **Outbound UNCERTAIN** | AI reviewer uncertain about outbound delegation safety |
| **Shell Escalation UNCERTAIN** | Non-safe shell command under AI review uncertainty |
| **LLM Review UNCERTAIN** | General AI reviewer uncertainty about any tool call |
| **Auto Mode Suspended** | Consecutive denial threshold breached — system reverted to HITL |
| **Shell Threat Detected** | ShellCommandAnalyzer flagged a threat pattern |
일반적인 저위험 승인에는 평소와 같이 "항상 허용"이 표시됩니다. 사용자는 안전한 작동을 위해 마찰 변화가 전혀 발생하지 않습니다.
**경쟁업체 대비:** Hermes은 `tirith` 콘텐츠 보안 경고에 대해서만 영구 허용을 숨깁니다(트리거 1개). OpenClaw는 "항상 사용할 수 없음" 경고 메시지와 함께 백엔드 `allowedDecisions` 배열을 통해 제어합니다. Myrm은 업계에서 가장 포괄적인 6가지 트리거 시나리오를 다룹니다.
## 명령 거부 목록(사용자 정의 하드 플로어)
사용자는 YOLO 모드, Smart Intent Guard 결정 또는 권한 규칙에 관계없이 특정 명령을 영구적으로 차단하는 glob 패턴을 정의할 수 있습니다. 이는 어떤 승인 메커니즘으로도 우회할 수 없는 사용자 제어 안전망을 제공합니다.
| Feature | How It Works |
|---------|-------------|
| **Glob Pattern Matching** | Case-insensitive `fnmatch` matching (e.g., `git push --force*`, `rm -rf /*`, `DROP TABLE*`) |
| **Global + Per-Agent** | Set global deny patterns in Security Settings, and per-agent overrides in Agent Configuration |
| **Union Merge** | Per-agent denylist is merged (union) with the global denylist — agents can only add restrictions, never remove global ones |
| **YOLO-Proof** | Denied commands are blocked even in YOLO mode — this is a hard floor below all approval layers |
| **GUI Editor** | Visual pattern editor with add/remove, example placeholders, and validation — no CLI or YAML editing needed |
명령 거부 목록은 승인 파이프라인의 **레이어 2a.5**에서 작동합니다. 즉, 권한 규칙 뒤, YOLO 우회 이전에 거부된 명령이 항상 차단되도록 합니다.
**자연어 정책 생성기**는 일반 언어 설명(예: "모든 강제 푸시 및 데이터베이스 삭제 명령 차단")에서 명령 거부 목록 및 네트워크 차단 목록 규칙을 생성할 수도 있습니다. 생성된 패턴은 검증되고, 사람이 읽을 수 있는 설명으로 미리 보고, 사용자 확인 후에만 적용됩니다.
## 메모리 쓰기 신뢰 격리
모든 메모리 쓰기는 AI에 의해 내부적으로 트리거된 경우에도 통합 보안 파이프라인을 통과합니다.
| Guard | What It Prevents |
|-------|-----------------|
| **Approval Queue** | Implicit preferences extracted by Cognitive Deriver go through the standard approval queue (no bypass). External content cannot silently pollute your Profile |
| **Security Scan** | Every memory write runs through `scan_and_clean_memory` with injection detection (CLEAN/WARN/REDACTED/BLOCKED) |
| **Preference Stability** | Multi-observation lifecycle (Candidate → Provisional → Active) ensures only validated preferences reach your Profile — single-conversation flukes are filtered out |
| **AGENT_SELF Priority Ceiling** | Agent self-generated procedural rules are capped at HIGH priority — they cannot claim CRITICAL (compression-immune) slots, preventing prompt inflation |
| **Profile Promotion** | Core preferences (communication style, cognitive depth, proactivity) promote to Profile only after stability validation, via `set_system_profile_attribute` with security scanning |
어떠한 경쟁업체도 메모리 쓰기 신뢰 격리를 구현하지 않습니다. 대부분의 에이전트는 승인, 검증 또는 우선순위 가드레일 없이 추출된 기본 설정을 사용자 프로필에 직접 기록합니다.
## 보안 프로필: 원클릭 안전 모드
MyRM은 사용자가 설정 UI에서 전환할 수 있는 세 가지 기본 보안 프로필을 제공합니다.
| Profile | Permissions | Use Case |
|---------|------------|----------|
| **Read Only** | All writes denied (files, shell, browser, skills, cron). Reads auto-allowed. | Research, planning, code review |
| **Workspace** | File ops within allowed roots, shell requires approval | Normal development |
| **Full Access** | All operations allowed (YOLO mode) | Trusted local environments |
프로필은 데이터베이스에 유지되며 서버를 다시 시작해도 유지됩니다. 각 에이전트는 자체적인 독립적인 보안 구성을 가질 수도 있어 "전체 액세스 개발자" 에이전트와 함께 "연구 전용 분석가" 에이전트와 같은 시나리오를 활성화할 수 있습니다.
## 크론 작업 실행 정책(작업별 최소 권한)
예약된 에이전트 작업은 바인드된 에이전트 프로필과 관계없이 **이중 계층 정책**을 지원합니다.
| Layer | What it controls | User benefit |
|-------|------------------|--------------|
| **Capability fence** (`required_capabilities`) | PermissionEngine gates shell, file write, MCP, code, etc. | Block dangerous operations even if the Agent profile is broad |
| **Tool scope** (`tools_allowed`) | Narrows which builtin tools mount at Turn1 (intersected with Agent tools at runtime) | Smaller schema, prompt-cache friendly, least-privilege unattended runs |
**편집 위치:** 설정 → 예약된 작업 → 작업 열기 → 실행 기록의 **실행 정책** 편집기(허용된 파일 시스템 루트와 동일한 배치 패턴) 새 작업은 기본적으로 제한되지 않습니다.
**내장된 보호 장치:**
- **기본적으로 실패 시 닫힘** — 명시적인 기능 선언이 없는 작업은 위험한 작업(셸, 코드 실행, MCP)을 자동으로 거부합니다. 경고 배너는 사용자에게 기능 펜스를 구성하거나 에이전트별로 YOLO 모드를 활성화하도록 안내합니다.
- **사전 설정 팩**(웹 전용/연구/devops) 이중 쓰기 기능 펜스 + 도구 범위, 청사진 SSOT에 맞춰 조정됩니다.
- **나중에 읽기 블루프린트**는 **빈 도구**와 함께 **라우터 모드**(`__wiki_source_sync__`)를 사용합니다. — 결정적 서버 측 풀, 제로 LLM 에이전트 회전, 브라우저 또는 코드 실행 없음.
- **Lifecycle Guard**는 Myrm 재시작/중지 또는 `pkill myrm-agent` 패턴을 포함하는 크론 프롬프트/명령/**실행 전 프로브 스크립트**를 거부하여 자체적으로 발생하는 중단 루프를 방지합니다.
- **제한된 작업은 기본 도구를 자동으로 얻지 않습니다** — 파일 전용 크론은 `code_execute`를 자동으로 활성화하지 않습니다. 제한되지 않은 작업은 여전히 에이전트 기준을 상속합니다.
**경쟁업체 대비:** Hermes는 전역 `cron_mode: deny/approve` 부울 토글만 제공합니다. 모든 작업은 동일한 정책을 공유합니다. OpenClaw/LobsterAI/CoPaw/deer-flow/jiuwenclaw에는 크론 기능이 전혀 없습니다. Myrm은 GUI 편집, 청사진 자동 채우기 및 실패 시 닫힘 기본값을 통해 작업별 세분화된 기능 선언을 제공합니다.
## 하위 에이전트 재귀적 격리: 5계층 방어
에이전트가 하위 에이전트에 작업을 위임할 때 일반적인 실패 모드는 제어되지 않은 재귀 생성입니다. 즉, 하위 에이전트는 토큰 예산이 소진될 때까지 더 많은 하위 에이전트를 생성합니다.
MyRM은 5개 계층의 격리를 시행합니다.
| Layer | Mechanism |
|-------|-----------|
| **L0** | Type admission whitelist (only catalog-registered agent types) |
| **L1** | Global blocklist (7 orchestration tools + 2 privileged tools stripped from LEAF agents) |
| **L2** | Config-level blocklist + readonly mode additional blocks |
| **L3** | Child ⊆ Parent tool intersection (child can never have more tools than parent) |
| **L4** | Dual depth limits (global max 3 + per-config max_spawn_depth) |
추가 안전망: 페이로드 해시 중복 제거는 위임 루프를 방지하고, 결과 캐싱은 중복 작업을 방지하며, 3가지 메모리 격리 전략(EPHEMERAL / READ_ONLY_GLOBAL / COLLABORATIVE_SESSION)은 에이전트 간 데이터 오염을 방지합니다.
## 다중 에이전트 파일 보호: 8계층 방어
여러 에이전트가 동일한 작업 공간에서 동시에 작업하는 경우 파일 충돌은 데이터 손상의 가장 큰 원인입니다. MyRM은 8개 계층의 방어를 시행합니다. 모두 코드로 적용되며 프롬프트 의존도가 전혀 없습니다.
| Layer | Mechanism | What It Prevents |
|-------|-----------|-----------------|
| **L1** | **Read-Before-Write** (staleness_guard) | Blind edits on unread files — agent must read a file before writing |
| **L2** | **Version Match** (file_integrity_guard) | Stale edits — rejects writes when file content changed since last read |
| **L3** | **Full-Read-Before-Edit** (file_integrity_guard) | Partial reads — rejects edits if only part of a file was read |
| **L4** | **Line-Level Conflict Detection** (file_conflict_guard) | Overlapping edits — detects when two agents modify the same line range |
| **L5** | **Cross-Agent Activity Tracking** (file_activity_tracker) | Untracked concurrent access — records every agent's write activity per file |
| **L6** | **Automatic Workspace Isolation** (workspace_policy) | Shared-state corruption — auto-upgrades to ISOLATED_COPY when multiple agents write in parallel |
| **L7** | **Deferred Serial Merge** (batch_merge) | Merge conflicts — isolated workspaces merge back one-at-a-time |
| **L8** | **Auto-Cleanup on Completion** (subagent_manager) | Stale tracking data — clears all tracking records when a subagent finishes |
**실제 작동 방식:**
1. 상위 에이전트는 3가지 코딩 작업을 병렬 하위 에이전트에 위임합니다.
2. `workspace_policy`은 2개 이상의 병렬 작성기를 감지 → ISOLATED_COPY로 자동 업그레이드
3. 각 하위 에이전트는 자체 COW(기록 시 복사) 작업 영역 복제본을 갖습니다.
4. 하위 에이전트는 독립적으로 작동합니다. 잠금 경합이나 차단이 없습니다.
5. 완료되면 `batch_merge`은 변경 사항을 상위 작업 공간에 한 번에 하나씩 다시 적용합니다.
6. 두 하위 에이전트가 겹치는 줄을 편집한 경우 `file_conflict_guard`는 병합 시 충돌을 일으킵니다.
**경쟁업체 대비:** AWS Codex 에이전트 팀은 프롬프트 지침을 사용합니다("두 개의 활성 작업이 동일한 파일을 쓸 수 없습니다") — LLMs는 이 제약 조건을 무시할 수 있습니다. MyRM은 애플리케이션 코드의 모든 계층을 적용하므로 모델 동작에 관계없이 우회가 불가능합니다.
## 대 CaMeL 가드(hermes-agent-camel)
CaMeL Guard 프로젝트는 연구 기반 신뢰 경계 모델(신뢰할 수 있는 컨트롤러와 신뢰할 수 없는 데이터)을 구현합니다. Myrm의 보안 아키텍처는 훨씬 더 깊은 적용 범위를 제공합니다.
| Dimension | CaMeL Guard | Myrm |
|-----------|:---:|:---:|
| Defense layers | 1 (trust boundary) | **6** (onion defense-in-depth) |
| Loop detection | Simple threshold (warn after N, block after M) | **5 domain-specific detectors** with targeted suggestions (bash/browser/file/web/memory) |
| Error classification | Single-level FailoverReason enum | **3-layer system** (Recoverability → FailoverReason → ProbePolicy) |
| Credential pool | 2 strategies (fill_first/round_robin) | **4 strategies** + exponential backoff + jitter anti-stampede |
| Path security | Allowlist-based path checking | **PTC process-level sandbox isolation** |
| Context management | Single-file compressor | **20+ module pipeline** (cache healer + anti-thrashing + session notes) |