MINARA

환경 변수

Agent가 비밀 값을 사용하는 방법과 새 환경 변수를 추가하는 규약

이 페이지에서는 minara-agent-v2가 환경 변수를 로드하는 규약과 새 환경 변수를 도입할 때 필요한 단계를 설명합니다. 모든 변수의 기본값, 형식, 소비 파일, 미설정 시 문제점 등 변수별 참조 정보참조 → 환경 변수를 확인하십시오.

정식 템플릿은 프로젝트 루트의 .env.example에 있습니다. 이 파일을 두 페이지 모두와 동기화하여 유지하십시오.

MINARA_는 Minara 플랫폼 전용 변수(MINARA_API_KEY, MINARA_BASE_URL, MINARA_SKIP_FUND_CONFIRM, MINARA_DATA_DIR, MINARA_OPENAI_BASE_URL, MINARA_OPENAI_CHAT_PATH)를 위해 예약되어 있습니다. 에이전트 루프 인프라 변수(게이트웨이, 로그, 모델, 시나리오, 메모리 조정값)에는 이 접두사를 사용하지 않습니다.

사용자에게 보이는 스위치는 Settings(settings.json#preferences)에 저장합니다. 시크릿은 credentials.json(설정 → API Keys / Messaging)에 저장합니다. 호출부는 prefs.get / secrets.* / infra.get으로 읽습니다. Env는 부팅 시 운영 계층이자, 덮어쓰기 체인에 문서화된 폴백입니다.

TL;DR 규약

API 키, 시크릿, 토큰, 또는 재정의 가능한 URL이 필요한 새 스킬 또는 도구는 다음을 반드시 따라야 합니다.

  1. 올바른 저장소에 쓰고, façade로 읽습니다. 시크릿은 API-key / messaging 레지스트리와 secrets.dataSource / secrets.messaging입니다. 사용자 스위치는 preferences schema와 prefs.get입니다. 운영 인프라(GATEWAY_PORT, MINARA_DATA_DIR)는 config/infra/schema.tsinfra.get입니다. 시크릿을 하드코딩하지 마십시오. CLI 인수로 받아 에코하는 방식도 사용하지 마십시오.

  2. 같은 커밋에 apps/agent/src/config/env-docs/에 문서화된 항목을 추가한 뒤 .env.example을 재생성합니다. 항목에는 다음 내용이 포함되어야 합니다. 제어 대상, 소비하는 스킬/도구, 운영자가 설정하는 시점, 미설정 시 기본 동작, 허용 값 형식. 한 줄 스텁(# FOO_KEY=)은 허용되지 않습니다.

  3. 도메인 스킬(apps/agent/src/skills/builtin/*.ts 또는 apps/agent/src/skills/external/<id>/)의 경우 requires_env에 변수를 선언하여 자격 증명이 없을 때 SkillRegistry가 스킬을 완전히 숨기도록 합니다.

    export const myNewSkill: DomainSkill = {
      id: "research.my_provider",
      // ...
      requires_env: ["MY_PROVIDER_API_KEY"],
    };
  4. 도구(apps/agent/src/tools/*.ts)의 경우 시크릿이 없을 때 팩토리가 빈 ToolEntry[]를 반환해야 합니다. 툴 레지스트리는 등록되지 않은 이름을 자동으로 제외하므로, 다운스트림 스킬의 tool_names 참조는 자연스럽게 저하됩니다.

    export function createMyProviderTools(): ToolEntry[] {
      const apiKey = secrets.dataSource("MY_PROVIDER_API_KEY");
      if (!apiKey) return [];
      // ...
    }
  5. 실제 시크릿을 커밋하지 마십시오. .env는 git에서 무시되며, .env.example이 빈 값으로 커밋되는 공식 템플릿입니다.

.env 로딩 방법

로딩은 apps/agent/src/config/load-env.ts가 처리합니다. 이 모듈은 Node 22의 내장 process.loadEnvFile(".env")를 호출하는 사이드 이펙트 모듈입니다. 모든 진입점의 첫 번째 줄에서 임포트됩니다.

  • apps/agent/src/gateway/cli.ts, REPL 모드
  • apps/agent/src/gateway/server.ts, HTTP 모드

ESM 평가 순서에 따라 임포트 시점에 process.env.<NAME>을 읽는 다운스트림 모듈보다 로더가 먼저 실행됩니다.

우선순위: 셸, CI, systemd에서 이미 내보낸 변수가 .env의 값보다 우선합니다. 로더는 기존 키를 덮어쓰지 않습니다. 이는 Node의 기본 동작과 일치하며, CI에서 주입된 시크릿이 예상치 못하게 가려지지 않으므로 가장 안전한 규칙입니다.

dotenv 의존성 없음. Node 22.5부터 안정화된 process.loadEnvFile만 사용합니다. .env가 없어도 오류 없이 무시됩니다.

목록

변수별 상세 문서(기본값, 형식, 소비 파일, 미설정 시 문제점)는 참조 → 환경 변수를 확인하십시오. 아래 표는 빠른 참조 요약입니다.

LLM 공급자

적어도 하나가 확인되어야 합니다(직접 설정 또는 minara auth login에서 저장된 OAuth 프로필을 통해). 하나도 확인되지 않으면 Agent 시작이 거부됩니다.

변수기본값형식효과
ANTHROPIC_API_KEY,sk-ant-...기본 Claude 자격증명. 미설정 시 저장된 OAuth, 이후 OpenRouter 순으로 시도합니다.
OPENROUTER_API_KEY,sk-or-...대체 멀티 모델 라우터. 미설정 시 Anthropic 경로가 모두 실패한 경우에만 시도합니다.
OPENAI_API_KEY,sk-...이미지 생성, KB 임베딩, TTS, (선택) LLM. 이 변수만 설정해도 LLM 공급자로 OpenAI 가 자동 선택되지는 않습니다. LLM 경로를 활성화하려면 minara auth login openai --api-key $OPENAI_API_KEY 를 실행하세요. 이미지/오디오/KB 도구는 이 변수만으로 동작합니다.
OPENAI_BASE_URLhttps://api.openai.com/v1URLOpenAI API 베이스 URL 의 선택적 재정의 : Azure 호환 게이트웨이나 사내 프록시용.
OPENAI_ORG_ID,org-...청구 라우팅용 선택적 OpenAI-Organization 헤더.
XAI_API_KEY,불투명 문자열네이티브 xAI(Grok) LLM 공급자 키 : xai-api-key 공급자로 api.x.ai/v1 에 직접 호출. auto-select 에서 최저 우선순위로, 기존 Anthropic/OpenRouter 설정을 대체하지 않습니다.
XAI_BASE_URLhttps://api.x.ai/v1URLxAI API 베이스 URL 의 선택적 재정의.
MINARA_XAI_OAUTH_CLIENT_IDxAI Grok-CLI 공개 idUUIDauth.x.ai 로 전송되는 OAuth public client_id 재정의. 기본값은 Hermes Agent 와 공유되는 공개 id 재사용(RFC 8252 §8.4 허용). xAI 가 통보 없이 취소할 수 있음.

Minara 코어

변수기본값형식효과
MINARA_API_KEY,불투명 문자열Minara REST 자격증명. 미설정 시 저장된 OAuth 프로필(웹 UI 로그인)로 폴백합니다.
MINARA_BASE_URLhttps://api.minara.ai절대 URL백엔드 API 오리진. 스테이징 환경이나 로컬 mock을 지정할 때만 덮어씁니다.
MINARA_FRONTEND_BASE_URLhttps://minara.ai절대 URL웹 프론트엔드 오리진. 터미널 하이퍼링크와 딥리서치 보고서의 token:// / address:// 딥링크가 해석되는 URL. 스테이징 프론트엔드나 로컬 Next.js dev server를 지정할 때 덮어씁니다.
AGENT_MODELclaude-sonnet-4-6모델 id메인 에이전트 루프 모델. /model 명령으로도 설정 가능합니다.
MINARA_DATA_DIR~/.minara절대 경로SQLite, 샌드박스, 인증, 로그의 루트 경로.
MINARA_TERMINAL_CWD절대 경로에이전트의 작업 디렉터리를 재정의합니다(파일 읽기/쓰기 및 셸 명령의 cwd). 해석 순서: 세션 단위 재정의 → 이 변수 → process.cwd(). 시작 디렉터리와 작업 디렉터리가 다른 gateway/cron 상주 프로세스에 사용합니다. 로컬 CLI는 보통 미설정 상태로 셸 cwd로 폴백합니다. 존재하지 않는 경로는 무시됩니다.
FILES_URL_BASE/v1/filesURL 또는 경로공개 파일 링크 접두사(리버스 프록시 뒤).
OFFLINE_MODEoff1/true/yes/on샌드박스 도구에서 아웃바운드 HTTP를 강제 비활성화합니다.
LOG_LEVELinfodebug|info|warn|error로거 임계값. debug는 안전하지만 약 4배 로그 볼륨이 증가합니다.

HTTP 게이트웨이

변수기본값형식효과
GATEWAY_HOST127.0.0.1IP / 호스트명바인딩 인터페이스. 루프백 = 로컬 전용. 루프백이 아닌 경우 인증 필요(가드는 대화형 모드에서 시작을 거부하거나, Docker/CI 모드에서 토큰을 자동 생성).
GATEWAY_PORT8080정수게이트웨이가 바인딩하는 TCP 포트.
GATEWAY_AUTH_TOKEN불투명 문자열모든 /v1/... 경로의 Bearer 토큰. 루프백에서 미설정 시 인증 비활성화. 루프백이 아닌 바인드에서 미설정 시 자동 생성되거나 시작이 거부됩니다.
MINARA_ALLOW_INSECURE_BIND1/true/yes/on보안 바인드 가드를 우회하여 루프백이 아닌 주소에서 인증 없이 서비스를 제공합니다. 신뢰할 수 있는 방화벽 보호 호스트 전용.
WEB_UI_DIST_DIR절대 경로동일 오리진으로 /에서 제공하는 web-ui dist/ (데스크톱 / 단일 포트). 미설정 시 정적 UI 없음(API 전용).
WEBHOOK_PORT정수선택적 전용 인바운드 웹훅 포트.

안전 및 자금 이동

변수기본값형식효과
DISABLE_STRICT_PLAYBOOK미설정(엄격 모드 활성)비활성화 시 1/truebuildPlaybookBlock을 기존의 소프트 권고 헤더로 되돌립니다. 기본 동작은 "이 턴에 대한 AUTHORITATIVE 명세" 체크리스트 어조를 렌더링합니다.
DISABLE_METHODOLOGY_INJECTION미설정(주입 활성)비활성화 시 1/true세 가지 온디맨드 방법론 경로(시나리오 플레이스홀더, 도구 출력 <methodology_reminder>, methodology_lookup 도구)의 비활성화 스위치. 기본 동작은 졸업된 등급(Wilson ≥ 0.55)에서 저장소를 쿼리합니다.
DISABLE_METHODOLOGY_INSTANCE_DISPATCH미설정(디스패치 활성)비활성화 시 1/trueBO 튜닝된 방법론 인스턴스 오버라이드의 비활성화 스위치. 기본 동작은 인스턴스 임계값을 템플릿 기본값에 병합하며, 비활성화 시 템플릿 전용 결정을 사용합니다.
DISABLE_KNOWLEDGE_BUDGET미설정(예산 활성)비활성화 시 1/true지식 예산 협상기의 비활성화 스위치. 기본값: 시나리오/메모리/역할 블록의 합산 token을 KNOWLEDGE_BUDGET_TOKENS로 제한합니다. 비활성화 시 전체 길이를 출력합니다.
ROLE_MEMORY_MODEshadowoff / shadow / active시작할 때 고정되는 Role Memory 모드입니다. off는 기존 데이터를 감사용으로 보존하지만 새 생성·평가·검색·주입을 중지합니다. shadow는 연결되고 실행된 수동 거래만 생성·평가하며 prompt에 주입하지 않습니다. active는 회고가 끝난 사례를 일치하는 분석 역할과 Institution Trader / PM prompt에 추가합니다. 자동 또는 출처 불명 perps는 항상 제외되고 실행 도구에도 사례 텍스트가 전달되지 않습니다. 잘못된 값은 경고 후 shadow로 돌아가며 변경 후 재시작해야 합니다.
DISABLE_PARALLEL_TOOL_CALLS미설정(병렬 활성)비활성화 시 1/true에이전트 루프에서 턴당 병렬 도구 디스패치의 비활성화 스위치. 기본값: META_UNSAFE 거부 목록(activate_skills)에 없는 READ_ONLY 등급 도구는 Promise.all로 동시 실행되며, CONFIRM_ONCE+ 등급 도구(자금 이동/쓰기/출금)는 항상 직렬로 실행됩니다. 비활성화 시 모든 도구 호출이 레거시 for-await 루프처럼 하나씩 실행됩니다. tool_result 메시지 순서는 어느 경우에도 보장됩니다.
CHAT_INTENT_GATING_ENABLED미설정(꺼짐)활성화 시 1/true인텐트 게이팅 방식의 개인화 주입. 켜짐: 캐시되는 프리픽스에는 항상 주입되는 개인화 코어(거래 요약, 핵심 지식 / 리스크 태그, 최근 메모리, 커스텀 프롬프트, 활성 선호도)가 들어가고, 원샷 분류기가 해당 턴에 필요한 나머지 행동 태그 차원만 휘발성 블록에 추가하므로 캐시를 흐트러뜨리지 않습니다. 꺼짐: 매 턴 전체 개인화 블록이 캐시 프리픽스에 주입됩니다(레거시). 켜져 있을 때는 턴마다 짧은 분류기 호출이 1회 추가됩니다.
POSITION_MEMORY_ENABLED미설정(꺼짐)활성화 시 1/true포지션 / 세션 인식 메모리 주입. 켜짐: 자산과 관련된 턴(메시지에 티커가 있거나 사용자의 최근 현물 상위 종목인 경우)에 해당 자산에 대한 저장된 메모리를 최대 5개까지 휘발성 블록에 주입합니다. 조언성 질문에는 과거 견해와 거래 노트를, 펀더멘털 질문에는 사용자의 분석 선호와 습관을 가져옵니다. 결정적이며 로컬로 동작합니다(키워드 인텐트 라우팅과 SQLite 조회만 사용, 추가 LLM 호출 없음). 거래 신호는 거래 요약 재구축이 갱신하는 사전 구축된 현물 상위 종목 아티팩트를 읽습니다. 런타임에는 personalization.positionMemory 선호로도 변경할 수 있습니다.
SHADOW_MODEsampledoff|sampled|onA/B 관측 레코더. 분류기/메모리 스냅샷/역할 힌트 결정 지점에서 (현재, 제안) 변형 쌍을 shadow_runs SQLite 테이블에 기록합니다.
SHADOW_SAMPLE_RATE0.1[0, 1]SHADOW_MODE=sampled일 때의 샘플링 확률.
SHADOW_RETENTION_DAYS30양의 정수유지할 shadow_runs 행의 일수. 부팅 시 1회 정리가 실행됩니다.
MEMORY_SNAPSHOT_PREF_LIMIT50비음의 정수세션 메모리 스냅샷에서 preference 카테고리 행의 할당량.
MEMORY_SNAPSHOT_STRAT_LIMIT30비음의 정수strategy 카테고리 행의 할당량.
MEMORY_SNAPSHOT_TRADE_LIMIT50비음의 정수trade_note 카테고리 행의 할당량.
MEMORY_SNAPSHOT_OBS_LIMIT30비음의 정수observation 행의 기본 할당량. pref/strategy/trade 버킷의 미사용 슬롯이 이 버킷으로 오버플로됩니다.
MEMORY_REFRESH_WRITES3비음의 정수소프트 스냅샷 갱신을 위한 재빌드 이후 쓰기 횟수 임계값.
MEMORY_REFRESH_TURNS10비음의 정수재빌드 이후 턴 수 임계값. 두 임계값이 모두(AND) 충족되어야 세션 중간 재빌드가 실행됩니다. 0으로 설정하면 갱신을 완전히 비활성화합니다(스냅샷이 세션 동안 고정).
MEMORY_WRITE_MAX_LEN2000양의 정수(200~8000)에이전트가 memory_write(observation / preference / trade_note / strategy)로 메모리를 저장할 때 유지하는 최대 문자 수. 긴 내용은 저장 전에 잘려서, 하나의 과도한 항목이 프롬프트나 검색 인덱스를 넘치게 하지 않습니다. 런타임에서는 memory.writeMaxLen 환경설정으로도 조정할 수 있습니다. 더 엄격한 개인화 사실 경로는 자체의 더 짧은 한도를 유지하며 영향을 받지 않습니다.
KNOWLEDGE_BUDGET_TOKENS15000비음의 정수시나리오 플레이북, 메모리 컨텍스트, 역할 힌트를 합산한 token 상한선. 초과 시 우선순위가 낮은 항목부터 제거합니다(역할 → 메모리 → 시나리오 순). 0은 상한선을 비활성화합니다. 제거를 완전히 우회하려면 DISABLE_KNOWLEDGE_BUDGET=1을 설정하십시오.
KNOWLEDGE_SOURCE_TAGSfalsetrue|false각 동적 지식 블록에 HTML 주석 출처 태그를 추가합니다. 사람이 읽거나 로그 감사 목적으로만 사용합니다.
PREFERENCE_LEARNING00/1M2 선호도 진화 플로우의 마스터 스위치(주기적 LLM 제안자 + 인챗 졸업 카드). 0일 때 M1 PreferenceStore + REPL/CLI/REST 수동 관리는 계속 사용 가능하지만, 제안자는 실행되지 않고 카드도 주입되지 않습니다.
PREFERENCE_PROPOSER_INTERVAL30양의 정수연속 제안자 실행 사이의 턴 수. 실행은 파이어-앤-포겟 비동기 방식으로, 사용자 응답 전송 후에 실행됩니다. 따라서 이 값은 분산된 비용이며 사용자 지연 시간에는 영향을 주지 않습니다.
PREFERENCE_WEEKLY_QUOTA3양의 정수7일 롤링 윈도우 내 허용 최대 졸업 횟수. 초과 시 제안자가 해당 주기를 건너뜁니다. 수동 /preferences approve는 할당량을 무시합니다. AutoClaw의 "주당 1~3회 깊은 진화" 원칙을 반영합니다.
PREFERENCE_DEDUP_THRESHOLD0.85[0, 1]후보가 기존 활성 선호도(state ∈ active/proposed/deprecated)의 중복으로 처리되어 저장 전 제거되는 TF-IDF 코사인 점수 임계값.
PREFERENCE_PROPOSER_BATCH_SIZE200양의 정수단일 제안자 LLM 호출에 포함할 최근 후보 최대 수.
PREFERENCE_MIN_CLUSTER_SIZE3양의 정수(≥ 2)제안을 저장하기 위해 제안자 LLM이 하나의 클러스터에 대해 보고해야 하는 지원 후보 메시지의 최소 수. 3의 하한선은 단일 항목이 큐에 들어가지 않도록 합니다.
PREFERENCE_ASK_COOLDOWN_HOURS24양의 정수동일 선호도에 대한 연속 졸업 요청 사이의 최소 시간(시간). "나중에" 또는 무응답 후 해당 행은 proposed 상태를 유지하되, 이 윈도우가 지나기 전까지 요청 큐에서 숨겨집니다.
PREFERENCE_ASK_MIN_GAP_TURNS5양의 정수동일 REPL 세션 내에서 서로 다른 선호도에 대한 연속 졸업 요청 사이의 최소 턴 수. 연속적인 카드 요청을 방지합니다.
PREFERENCE_SKIP_IN_CHAT_ASK00/1인챗 졸업 카드를 완전히 비활성화합니다. 제안자는 계속 실행되어 제안을 기록하며, 운영자는 /preferences pending + approve(REPL/CLI/REST)로 검토합니다.
PREFERENCE_HARD_AUTO_ACTIVATE10/1M3. 활성화 시 강한 신호 키워드(never, 绝不, kill switch 등)가 포함된 사용자 메시지가 카드 없이 hard_constraint를 자동 활성화합니다. 사용자는 24시간 동안 /preferences undo <id>로 실행 취소할 수 있습니다.
PREFERENCE_STYLE_AUTO_ACTIVATE10/1M3. 동일 dedup_key가 N회 관측된 후 personal_style 선호도를 자동 활성화합니다. 카드는 더 높은 영향의 선호도를 위해 예약됩니다.
PREFERENCE_STYLE_MIN_OBSERVATIONS2양의 정수M3. 스타일 자동 활성화에 필요한 동일 문장 관측 횟수. 높을수록 사용자가 자신과 모순될 기회가 많아집니다.
PREFERENCE_HARD_UNDO_WINDOW_HOURS24양의 정수M3. 강한 신호 자동 활성화 후 사용자가 /preferences undo <id>를 사용할 수 있는 시간. 이 윈도우를 벗어난 행은 /preferences deprecate를 사용해야 합니다.
MINARA_SKIP_FUND_CONFIRMoff1/true/yes/on모든 자금 이동 도구의 확인 게이트를 우회합니다. 비대화형 환경 전용.
DISABLE_SCRIPT_RISK_GATEoff1/true/yes/onexecute_code / terminal / write_file / patch 앞에서 실행되는 정적 분석 스크립트 위험 게이트의 비활성화 스위치입니다. 미설정 시 RED 적중(대량 rm *, 워크스페이스 외부 경로 삭제, IMDS / SSRF, 컨테이너 탈출, 자격 증명 / 지갑 스토어 읽기, 간접 난독화 + 싱크)은 강제 거부되고, YELLOW 적중(자금 이동 CLI 셸 아웃, 온체인 위험 메서드, env 오염, 특정 경로 rm, 위험한 패키지 설치)은 AskUserQuestion으로 확인을 요청합니다. truthy로 설정 시 RED와 YELLOW 모두 우회되며, 사건 대응이나 완전한 오프라인 CI 환경에서만 사용합니다. 일상적인 워크플로우 예외는 워크플로우 정의의 script_risk_policy(body_sha256 + 카테고리)를 사용하고, 이 전역 env는 설정하지 마세요. 감사 시 script_risk_decisions.bypassed_by="env_global"이 기록됩니다.
MINARA_TOOL_RESULT_RETAIN_HOURS24[1, 720] 범위의 정수<dataDir>/sandbox/files/.tool-results/에 저장된 대용량 도구 결과가 주기적 스윕에 의해 삭제되기까지의 유지 시간(시간). 컴플라이언스/분기 검토 윈도우에는 168(7일)로 설정하고, 임시 CI 실행에는 1로 설정합니다. 형식이 잘못되거나 범위를 벗어난 값은 경고 로그와 함께 24시간으로 폴백됩니다.

하이브리드 메모리 검색

EMBEDDING_PROVIDER=disabled(기본값)일 때 하이브리드 검색 코드 경로는 비활성 상태입니다. 모든 메모리 행은 embedding_state='pending'NULL embedding 열을 유지하며, searchMemoriesHybrid는 기존 FTS5 BM25 경로로 폴백하여 바이트 동일한 결과를 반환합니다. 교차 어휘 검색 향상이 필요할 때만(예: 중국어 쿼리 山寨币最近怎么样으로 영어 altcoin drawdown 교훈 검색) 활성화합니다. 쓰기 경로는 동기 방식을 유지합니다. 임베딩은 행이 커밋된 후 queueMicrotask에서 처리되므로 사용자 대면 지연 시간에는 영향이 없습니다.

변수기본값형식효과
EMBEDDING_PROVIDERdisableddisabled|openai|voyage임베더를 선택합니다. disabled = 팩토리가 null 반환, 하이브리드 경로 비활성. 다른 값은 EMBEDDING_API_KEY가 필요합니다.
EMBEDDING_API_KEY,불투명 문자열Bearer 토큰. OpenAI: sk-.... Voyage: pa-.... 비비활성화 공급자에서 미설정 시 팩토리는 여전히 null을 반환하고 경고를 로그에 기록합니다.
EMBEDDING_MODEL공급자 기본값(text-embedding-3-small/voyage-3)모델 id모델 식별자. EMBEDDING_DIM과 차원이 일치하는지 검증한 경우에만 재정의합니다.
EMBEDDING_DIM1536양의 정수벡터 차원. 부팅 시 vec0 가상 테이블 선언에 사용됩니다. 모델 불일치 시 행이 embedding_state='failed'로 유지됩니다. 기존 DB에서 변경하려면 vec0 테이블을 수동으로 삭제 후 재생성해야 합니다.
EMBEDDING_BASE_URL공급자 기본값/embeddings로 끝나는 URL자체 호스팅 게이트웨이 또는 프록시를 위한 선택적 오버라이드.
SQLITE_VEC_EXTENSION_PATH번들된 sqlite-vec npm 바이너리절대 파일 시스템 경로sqlite-vec 로드 가능 확장의 명시적 경로. 바이너리를 직접 관리하는 경우에만 설정합니다(커스텀 빌드, 시스템 경로, node_modules를 제거한 Docker 레이어 등). 로드 실패는 치명적이지 않으며, 하이브리드 경로가 자동으로 BM25로 저하됩니다.

공급자가 활성화되었으나 일시적인 API 오류가 발생하면 행이 embedding_state='failed'로 기록됩니다. minara doctor(Phase E1)는 운영자가 대량의 실패를 발견할 수 있도록 상태별 수를 표시합니다. minara doctor --fix --apply(Phase E2)는 MemoryStore.backfillEmbeddings()를 통해 백필을 수행합니다. failedpending 모두 백필 대상입니다. 성공적으로 임베딩이 완료되어 embedded 상태가 될 때까지 동일한 행이 반복될 수 있습니다. 10자 미만이거나 방법론 주입 스캐너에 걸리는 행은 skipped 상태로 설정되며 임베딩되지 않습니다.

백테스팅 피드백 루프(Sprint 6, 온라인 결과 채우기)

대상 실행의 학습 루프를 마무리하는 주기적 작업입니다. 결정론적 거래 후 시장 결과("+5.20% in 24h")를 계산·저장하고 선택적 추론 평가를 실행합니다. 통합 Trading Memory 출처 규칙이 먼저 적용되므로 자동 또는 출처 불명 perps는 수동 평가 경로에 들어오지 않습니다.

과거 결정을 다시 실행하지 않습니다. trade_executions의 pending 행만 평가합니다. 활성화 시 정규 간격 전에 gateway 시작 시 지연 작업을 한 번 처리합니다. 기본값은 비활성입니다(BACKTEST_ENABLED=false).

변수기본값형식효과
BACKTEST_ENABLEDfalsetrue|false마스터 스위치. false = 러너 및 스케줄러가 등록되지 않음(런타임 비용 없음). true = 스케줄러가 BACKTEST_CRON_HOURS마다 실행됩니다.
BACKTEST_DRY_RUNfalsetrue|false드라이런: 결과를 계산하고 shadow_runs(facet='backtest_outcome')에 출력하되, updateTradeOutcomerecordUsage는 건너뜁니다. 첫 주 롤아웃 프로토콜.
BACKTEST_MIN_TRADE_AGE_MS86400000(24h)양의 정수(ms)거래가 평가 대상이 되기 위한 최소 경과 시간. ReviewEngine.minTradeAgeForEvalMs에 전달됩니다.
BACKTEST_OUTCOME_HORIZON_HOURS24양의 정수(h)created_at 이후 결과 가격을 샘플링할 시간. 결과 문자열에 렌더링되어 평가자가 윈도우 길이를 확인할 수 있습니다.
BACKTEST_BATCH_LIMIT20양의 정수실행당 가져올 최대 대기 행 수. ReviewEngine.maxEvalsPerBatch에 전달됩니다.
BACKTEST_CRON_HOURS24양의 숫자스케줄러 간격. setInterval().unref()를 사용합니다. 1분 미만의 값은 반올림됩니다.
BACKTEST_PRICE_PROVIDERautoauto|hyperliquid|yahoo단일 역사적 가격 소스를 강제 지정합니다. auto는 암호화폐 → Hyperliquid → Yahoo -USD, 주식/알 수 없음 → Yahoo, 스테이블코인 → 1.0으로 라우팅합니다.
BACKTEST_MAX_COST_USD_PER_RUN2.00비음의 부동소수점실행당 비용 상한. 러너는 전후로 BudgetTracker.getDailySpend("learning")을 스냅샷하며 초과 시 status=stopped_budget으로 중지됩니다. 0은 비활성화합니다. BudgetTracker의 일별/월별 상한과 누적됩니다.
LEARNING_RECORD_USAGEfalsetrue|false귀속 검증 후 live 추론 품질과 방법론 feedback을 활성화합니다. 귀속 거래는 methodology_observations와 promoted benchmark run을 통해 갱신되며 runner는 이전 Wilson 카운터를 일괄 증가시키지 않습니다. shadow 행을 확인한 뒤 마지막에 활성화하십시오.

롤아웃 프로토콜(plan dapper-coalescing-shell §Sprint 6):

  1. BACKTEST_ENABLED=true + BACKTEST_DRY_RUN=true를 설정하고 하나의 크론 주기를 실행합니다. shadow_runs WHERE facet='backtest_outcome'을 검사하여 결과 문자열이 ±N.NN% in Xh 형식과 일치하고 건너뜀 이유가 합리적인지 확인합니다.
  2. BACKTEST_DRY_RUN=false로 전환합니다. Runner가 결정론적 outcome과 종료 state를 trade_executions에 기록하며 evaluation run과 observation은 append-only로 유지됩니다.
  3. 귀속이 깨끗한 경우에만 LEARNING_RECORD_USAGE=true로 전환합니다. evaluation_runs, methodology_observations, methodology_metric_stats를 profile version별로 모니터링합니다. promoted primary run만 새 통계에 영향을 줍니다.

개인화 재빌드(M3.2 이벤트 기반 임계값)

Minara는 PersonalizationRebuilder를 통해 모든 대화에서 거래 선호도를 학습합니다. M3.2 이전에는 재빌더가 쿨다운 방식으로 10분마다 실행되었습니다. M3.2는 이를 이벤트 기반 + 임계값 게이팅 방식으로 전환합니다. 데이터 쓰기(거래, 메모리, 채팅 턴)가 이벤트를 발생시켜 재빌더를 깨우며, 각 재빌드는 두 개의 독립적인 게이트를 통과해야 합니다. 최소 새 입력 수와 마지막 재빌드 이후 최소 경과 시간이 모두 충족되어야 합니다. 하나만으로는 재빌드가 실행되지 않습니다.

60분 안전망 스케줄러는 손실된 이벤트(예: 쓰기와 구독자 사이의 프로세스 재시작)를 처리하기 위해 여전히 작동하지만, 조용한 시스템에서는 LLM 호출과 info 로그가 전혀 발생하지 않습니다.

거래 요약 임계값

변수기본값형식효과
FIN_PROFILE_TRADING_SUMMARY_MIN_NEW_TRADES3양의 정수게이트 2가 거래 요약 재빌드를 허용하기 전 마지막 재빌드 이후 최소 새 거래 수.
FIN_PROFILE_TRADING_SUMMARY_MIN_INTERVAL_MIN30양의 정수, 분마지막 재빌드 이후 최소 경과 시간.
FIN_PROFILE_TRADING_SUMMARY_MAX_TRADES100양의 정수콜드 스타트/강제 재생성 시 LLM에 전달할 거래 수 상한.
FIN_PROFILE_TRADING_SUMMARY_INCREMENTAL_MAX_TRADES50양의 정수기존 요약에 병합할 때 LLM에 전달할 새 거래 수 상한.

거래 빈도로 인해 요약이 너무 자주 변경된다면 임계값을 높이십시오. 백테스트 또는 온보딩 중에 요약을 최대한 빨리 수렴시키려면 임계값을 낮추십시오.

메모리 추출 임계값

변수기본값형식효과
FIN_PROFILE_MEMORIES_MIN_NEW_TURNS5양의 정수rebuildMemories 실행 전 마지막 추출 이후 기록된 최소 새 채팅 턴 수.
FIN_PROFILE_MEMORIES_MIN_INTERVAL_MIN10양의 정수, 분마지막 메모리 추출 이후 최소 경과 시간.
MEMORY_CONSOLIDATION_ENABLED미설정(기본 켜짐)0/false/no/off이면 비활성채팅에서 추출한 사실의 모순 해소. 기본 켜짐: 재빌드마다 백그라운드 LLM 호출이 한 번 늘어나 각 사실이 기존 사실을 중복·정제·대체 중 무엇인지 판단합니다. 대체된 사실은 소프트 삭제(복구 가능)되고 모든 결정이 memory_consolidation_events 감사 테이블에 기록됩니다. agent가 기록한 사실의 근접 중복 조정에도 사용됩니다. 0으로 두면 추가 전용(ADD)으로 되돌아갑니다.
MEMORY_CONSOLIDATION_GUIDANCE비어 있음자유 텍스트, 최대 500자통합이 사실을 어떻게 병합·폐기할지에 대한 선택적 비권위 지침(예: "내 최신 발언 우선"). 강한 안전 규칙을 절대 무시하지 않습니다. 사용자가 설정한 하드 제약은 더 새로운 명시적 사용자 발언이 없는 한 삭제되지 않으며, 사용자가 진술한 사실은 항상 어시스턴트 추론 사실보다 우선합니다. 통합이 꺼져 있으면 효과가 없습니다.

rebuildMemories는 커서 last_indexed_chat_id 이후 기록된 chat_turns 행을 스캔하여 개별 사실을 추출합니다. 기본적으로 ADD 전용 프롬프트(UPDATE/DELETE 없음)를 사용하므로 모순은 이전 사실과 함께 ADD되어 검색 시 해결됩니다. MEMORY_CONSOLIDATION_ENABLED가 켜져 있으면 후속 리졸버 단계가 각 사실에 대해 ADD / UPDATE / SUPERSEDE를 판단하여 오래되고 모순된 행을 기록 시점에 정리합니다(Minara Memory 참고). 추출된 각 사실은 fact_type, attributed_to, entities_json, linked_memory_ids 메타데이터와 함께 공유 memories 테이블의 행으로 기록됩니다.

공유 조정값

변수기본값형식효과
FIN_PROFILE_EVENT_DEBOUNCE_SEC30양의 정수, 초scheduleCheck(dim)의 디바운스 윈도우. 빠른 버스트를 게이트 확인 재빌드 하나로 합칩니다.
CHAT_TURN_RECORDING1(활성)비활성화: 0/false/no/offchat_turns에 턴당 (user_message, final_response, tool_calls)를 저장합니다. rebuildMemories의 입력 소스입니다.

운영 팁: 새 배포 첫날에는 FIN_PROFILE_TRADING_SUMMARY_MIN_NEW_TRADES=1FIN_PROFILE_MEMORIES_MIN_NEW_TURNS=2로 설정하여 재빌더가 빠르게 워밍업되도록 하십시오. 프로필이 안정화되면 기본값으로 복원합니다.

에이전트 외 거래 이력 미러

개인화 재빌더는 세 가지 소스를 사용합니다: 로컬 trade_history(에이전트 내), perps_fills(Minara /v1/perp-wallets/fills 서브월렛 미러), external_spot_activities(Minara /v1/tx/cross-chain/activities). 아래 조정값은 MinaraHistorySync의 동기화 전략과 LLM이 읽는 양을 제어합니다.

변수기본값형식효과
FIN_PROFILE_HISTORY_SYNC_WINDOW_DAYS90양의 정수, 일롤링 동기화 윈도우. 이보다 오래된 기록은 가져오지 않습니다.
FIN_PROFILE_HISTORY_SYNC_MIN_INTERVAL_MIN5양의 정수, 분연속 동기화 트리거 사이의 스로틀 하한. 윈도우 내 scheduleSync() 호출은 한 번으로 합쳐집니다.
FIN_PROFILE_HISTORY_SYNC_TIMEOUT_SEC8양의 정수, 초syncAll() 1회당 하드 타임아웃. AbortController로 진행 중인 HTTP 요청도 취소됩니다.
FIN_PROFILE_HISTORY_SYNC_PAGE_HINT500양의 정수, 행perps fills 엔드포인트의 "페이지 가득 찼을 수 있음" 휴리스틱. getPerpSubAccountFills가 ≥ 이 값을 반환하면 startTime을 앞당겨 다시 요청합니다.
FIN_PROFILE_HISTORY_SYNC_OVERLAP_SEC60양의 정수, 초잘렸을 가능성이 있는 페이지에서 startTime을 슬라이딩할 때 겹치는 시간. fill_uid 중복 제거 덕분에 무해합니다.
FIN_PROFILE_HISTORY_SYNC_MAX_ROUNDS_PER_SUB10양의 정수서브어카운트당 잘림-슬라이딩 루프의 하드 상한.
FIN_PROFILE_HISTORY_SYNC_MAX_FAILURES5양의 정수(source, sub_account_id)별 연속 실패 임계값. 도달하면 일반 스케줄에서 해당 키를 건너뜁니다.
FIN_PROFILE_HISTORY_SYNC_FAILURE_COOLDOWN_MIN30양의 정수, 분MAX_FAILURES 도달 후 다음 프로브 시도는 이 쿨다운으로 게이트됩니다. 성공 시 카운터 초기화, 실패 시 증가. 영구 멈춤 방지.
FIN_PROFILE_HISTORY_SYNC_SPOT_MAX_PAGES20양의 정수spot 페이지네이션 루프의 하드 캡.
FIN_PROFILE_HISTORY_SYNC_SPOT_PAGE_SIZE100양의 정수spot 페이지네이션 배치 크기. limit으로 Minara에 전달됩니다.
FIN_PROFILE_TRADING_SUMMARY_PERPS_RECENT_FILLS30양의 정수LLM 재빌드가 읽는 최신 perps fills 수. 집계 데이터는 항상 전체로 전송됩니다.
FIN_PROFILE_TRADING_SUMMARY_SPOT_RECENT_ACTIVITIES20양의 정수spot에 대해 동일.
FIN_PROFILE_TRADING_SUMMARY_AGGREGATE_WINDOW_DAYS90양의 정수, 일LLM에 전달되는 per-symbol / per-pair 집계 윈도우.
FIN_PROFILE_MEMORY_SOFT_DELETE_RETENTION_DAYS30양의 정수, 일소프트 삭제된 메모리의 복구 가능 기간. 초과 시 30분 purge cron이 물리 삭제합니다.

동기화 트리거 모델. MinaraHistorySync.scheduleSync()는 세 경로로 발화됩니다: (1) 임의의 trade:recorded 이벤트(에이전트가 거래를 실행했다면 사용자도 web/mobile에서 무언가 했을 가능성이 높음), (2) PersonalizationRefreshTask의 매시간 세이프티넷 tick(이벤트 누락 보완), (3) 명시적인 /refresh-personalization --force / POST /v1/profile/refresh 경로. 5분 스로틀로 윈도우당 API는 한 번만 호출됩니다.

워터마크 단위. minara_history_sync_state 키는 (source, sub_account_id). 단일 서브어카운트의 일시적 실패는 동료 워터마크나 전역 spot 커서를 오염시키지 않습니다.

Hyperliquid 무기한 선물

MINARA_HL_DEX_DISCOVERY는 무기한 선물 스냅샷을 구성하고 거래 내역을 동기화할 때 Minara가 Hyperliquid 명명된 무기한 DEX를 얼마나 폭넓게 탐색할지 제어합니다.

변수기본값형식효과
MINARA_HL_DEX_DISCOVERYoff활성화: 1/true/yes/on무기한 선물 스냅샷과 내역 동기화에서 Hyperliquid perpDexs 라이브 디스커버리를 활성화합니다. 기본 동작은 현재 사용자 코호트가 포지션을 보유한 두 개의 덱스만 쿼리합니다("" 기본값 + "xyz" 주식/상품). 이는 스윕당 팬아웃을 4 sub × 2 dex × 2 call = 16 HL 요청으로 유지하여 HL의 IP당 속도 제한 내에서 동작합니다. 활성화 시 스냅샷은 perpDexs(10분 캐시)도 호출하여 HL이 현재 노출하는 모든 명명된 덱스(xyz, flx, vntl, hyna, km, abcd, cash, para, 약 9개)에 팬아웃합니다. 4 sub 사용자의 경우 스윕당 약 72개의 요청이 발생하여 공개 /info 엔드포인트에서 429 오류가 안정적으로 발생합니다. 기본 쌍 이외의 덱스에 포지션이 실제로 있는 경우에만 설정하십시오.

Strategy Studio(베타)

하나의 운영자 조정값이 strategy-rl 벤치마크 러너가 사용하는 오프라인 전략 코드젠 서브에이전트를 제어합니다. 기본값이 적절하므로 미설정 상태도 괜찮습니다.

변수기본값형식효과
MINARA_SS_CODEGEN_MAX_ITER3양의 정수, [1, 10]으로 제한벤치마크 실행 1회당 오프라인 코드젠 서브에이전트의 "코드 생성 → 임시 백테스트 → 개선" 루프의 스텝 예산. 서브에이전트는 이 스텝 수까지 실행합니다. 모델이 이 예산 내에서 언제 백테스트하고 언제 멈출지 스스로 결정합니다. 반환 시 성공 여부는 최종 백테스트에서 재계산됩니다(status COMPLETED + 0이 아닌 거래 + drawdown < 0.95). 빠르고 저렴한 llmClient(예: Haiku) 사용 시 수렴을 향상시키려면 높이고, 느리고 비싼 모델 사용 시 낮추십시오(1~2). apps/agent/src/core/strategy-code-subagent.tsrunStrategyCodeSubagent에서 사용합니다.

Harness RL

환경 변수기본값허용 값용도
MINARA_SKILL_ROUTER_RL_ENABLED미설정(꺼짐)1 / true / yes / on운영자 전용 Skill Router Harness RL 파일럿을 활성화합니다. 버전 관리형 순위 정책, 교체 가능한 벤치마크 Case, 제한된 후보 탐색, 명시적 승격 및 롤백, 승격된 정책을 통한 턴별 Skill 카탈로그 정렬을 제공합니다. 미설정 시 skill_router_* 테이블을 만들지 않고 카탈로그는 기존 priority 순서를 유지합니다. Skill 텍스트, 도구 권한 등급, 안전 게이트 또는 모델 가중치는 변경하지 않습니다.

기관 모드(멀티 에이전트 운용팀 시뮬레이션)

minara_institution_analyze 도구는 고위험 단일 자산 분석을 위해 6단계 파이프라인(4명의 분석가 병렬 → 강세/약세 리서치 토론 → 리서치 매니저 → 트레이더 → 3자 리스크 토론 → 포트폴리오 매니저)을 소집합니다. TradingAgents를 참고하여 설계되었으며, 라운드 수의 기본값은 해당 프로젝트의 default_config.py와 동일하게 설정되었고, 타임아웃/token 상한은 Minara의 deep-research와 에이전트 루프 규약을 따릅니다.

아래 모든 변수는 에이전트 루프 인프라이므로 프로젝트 규약에 따라 MINARA_ 접두사를 사용하지 않습니다. 모두 미설정 상태로 두면 TradingAgents 기준 기본값이 적용됩니다.

변수기본값형식효과
INSTITUTION_MAX_DEBATE_ROUNDS1정수, [1, 5]로 제한Phase 2의 강세/약세 교대 라운드 수. 1라운드 = 2턴(강세 1회 + 약세 1회). TradingAgents의 max_debate_rounds: 1과 일치합니다. 자산에 추가적인 대립적 검토가 필요하면 2로 높이고, 일상적인 분석에는 1로 유지합니다. apps/agent/src/tools/institution/orchestrator.tsrunInstitution에서 사용합니다.
INSTITUTION_MAX_RISK_ROUNDS

메소돌로지 감사 서브시스템(수동 옵저버)

학습 루프 위에 얹는 읽기 전용 감사 서브시스템으로 종합 건강 점수를 출력합니다. 6개 차원이 종합 점수를 구성: synthesis 판단 안정성, 졸업 후 단기 강등률, 귀속 건강도, 자산 클래스 커버리지, 격리 반복 검출, cron 건강도. 서브시스템은 학습 상태를 절대 변경하지 않으며, 유일한 쓰기는 methodology_audit_reports로 패스당 한 행입니다. 종단간 테스트가 매 감사 패스 전후 4개 학습 테이블을 해시하여 쓰기를 도입하는 회귀를 즉시 잡습니다.

cron은 에이전트 루프와 협력합니다. 각 tick은 공유 BusyTracker를 확인하고, 사용자 턴이 진행 중이거나 에이전트 유휴 시간이 임계값 미만이면 tick을 연기합니다. 연속 N회 연기 후 굶주림 가드가 강제 실행하여 항상 바쁜 배포에서도 감사 커버리지를 잃지 않게 합니다. 패스 실행 중 오케스트레이터가 SQL 단계 사이에서 이벤트 루프에 양보하고, 턴이 들어오면 busy tracker에서 즉시 일시 정지합니다.

기본 주기는 하루 한 번. cron_healthmethodology_cron_runs 하트비트 테이블(src/learning/methodology-cron.ts가 매 학습 tick 끝에 기록)을 읽습니다. 귀속 레인이 조용해도(처리할 case 없음) 죽은 루프로 오판하지 않습니다.

변수기본값효과
METHODOLOGY_AUDIT_CRON_ENABLED0프로세스 내 감사 스케줄러의 옵트인 스위치. 멀티워커 배포에서는 IS_PRIMARY_WORKER도 따름.
METHODOLOGY_AUDIT_CRON_INTERVAL_MS86400000(24h)tick 간격. 런타임에 [5min, 30d]로 제한.
METHODOLOGY_AUDIT_WINDOW_DAYS30윈도우형 차원의 회고 기간. [1, 365]로 제한.
METHODOLOGY_AUDIT_RETENTION_DAYS90methodology_audit_reports 행 보관 기간, 로컬 일자당 최대 1회 정리. [7, 3650]로 제한.
METHODOLOGY_AUDIT_SKIP_BUSY_THRESHOLD_MS180000(3min)BusyTracker가 busy 또는 idle 윈도우가 이 값보다 짧다고 보고하면 tick 연기. [0, 1h]로 제한. 0이면 프리플라이트 비활성화.
METHODOLOGY_AUDIT_MAX_DEFERRED_TICKS4굶주림 가드. 연속 연기가 이 값에 도달하면 다음 tick은 busy여도 강제 실행. [0, 100]로 제한.
METHODOLOGY_AUDIT_YIELD_TIMEOUT_MS60000(60s)패스 내 각 양보 지점에서 idle 대기 최대 시간, 타임아웃 후 busy여도 계속. [0, 10min]로 제한.
DISABLE_METHODOLOGY_AUDITunset1/true이면 쓰기 경로(cron + CLI audit run) 단락. band=disabled 플레이스홀더를 반환하고 영속화하지 않음. 읽기 경로(audit show/trend/findings)는 이용 가능.

CLI:

minara learning audit run [--window-days N]  # 인라인 단일 패스
minara learning audit show [--latest|--pass <id>]
minara learning audit trend [--days N]       # 복합 점수 이력 + sparkline
minara learning audit findings [--severity high|medium|low]

프로액티브 자산 관리 에이전트

활성화된 각 맨데이트를 백그라운드에서 운용하는 감독 루프(포지션 시가 평가, 익절/손절/리밸런싱, 손익 스냅샷, 작업 로그 기록)와 새로운 기회를 찾는 느린 재탐색입니다. 세 가지 모두 설정 → 프로액티브(및 프로액티브 모듈 자체의 설정 탭)에서 실시간으로 편집할 수 있으며, 아래 환경 변수는 부팅 시 폴백입니다. 멀티 워커 배포에서는 IS_PRIMARY_WORKER=1 워커에서만 루프가 실행됩니다.

변수기본값효과
PROACTIVE_SUPERVISOR_ENABLED1(켜짐)백그라운드 감독의 마스터 스위치. 0은 활성화된 모든 맨데이트의 자율 동작을 일시 중지합니다(맨데이트는 활성 상태로 유지되며, 다시 켤 때까지 동작만 멈춤).
PROACTIVE_SUPERVISOR_INTERVAL_SEC900(15분)각 맨데이트가 포지션을 확인하는 주기(초 단위). 런타임에 [10s, 1h]로 제한됩니다.
PROACTIVE_REDISCOVER_INTERVAL_SEC1800(30분)맨데이트가 새로운 기회를 찾는 주기(유료 재계획 단계, 초 단위). [1min, 24h]로 제한. 매 사이클 실시간으로 읽으므로 재시작 없이 변경이 적용됩니다. 모델이 구성되지 않은 경우 정상적으로 건너뜁니다.

Point-in-time 재무 스냅샷

변수기본값용도
SEC_USER_AGENT설정 안 됨SEC EDGAR 조회에 필수입니다. SEC가 운영자를 식별하고 연락할 수 있도록 ProductName [email protected] 형식을 사용합니다. 설정하지 않으면 모드가 shadow 또는 enforce여도 PIT 스냅샷 구성이 비활성화됩니다.
PIT_FINANCIAL_SNAPSHOT_MODEshadowdata.pitFinancialSnapshots.mode의 시작 폴백입니다. off는 기존 Fundamentals 흐름을 유지하고, shadow는 기존 입력을 유지하면서 스냅샷을 구성하고 기록합니다. enforce는 PIT 스냅샷과 Fundamentals 분석 캐시를 공식 입력으로 사용합니다. Settings의 기본 설정이 이 값보다 우선합니다.

과거 스냅샷에는 SEC accepted time이 요청 기준 시각 이전인 fact만 포함됩니다. FMP 데이터는 SEC filing과 명확하게 일치할 때만 fact를 보완합니다. Yahoo 현재 요약, 시가총액, 섹터, 산업, TTM 값, DCF는 latest-only approximation으로 처리합니다.

행동 메모리

BEHAVIOR_MEMORY_ENABLED=true로 옵트인합니다. 범주는 개별 제어되며 자산 컨텍스트, 거래, 대화는 명시적으로 켜지 않으면 수집되지 않습니다. 본문, 비밀, 주소, 주문 매개변수, 개별 포지션은 저장하지 않습니다.

변수기본값용도
BEHAVIOR_MEMORY_ENABLEDfalse마스터 옵트인
BEHAVIOR_MEMORY_CAPTURE_{ENGAGEMENT,FEATURE_USAGE,CONFIGURATION,AUTOMATION,STRATEGY}true비민감 범주
BEHAVIOR_MEMORY_CAPTURE_{FINANCIAL_CONTEXT,TRANSACTION,CONVERSATION}false민감 집계 옵트인
BEHAVIOR_REFLECTION_ENABLED / BEHAVIOR_REFLECTION_INCLUDE_IN_MEMORYtrue / false성찰 및 채팅 연동
BEHAVIOR_REFLECTION_CUSTOM_PROMPT비어 있음최대 1,000자의 성찰 전용 지침
BEHAVIOR_MEMORY_RAW_RETENTION_DAYS / BEHAVIOR_MEMORY_MAX_MB90 / 128보존 기간 / SQLite 상한
BEHAVIOR_MEMORY_BATCH_SIZE / BEHAVIOR_MEMORY_BATCH_KB / BEHAVIOR_MEMORY_FLUSH_MS / BEHAVIOR_MEMORY_QUEUE_MAX256 / 256 / 500 / 10000버퍼 쓰기 제한
BEHAVIOR_MEMORY_PRESSURE_FREE_MB / BEHAVIOR_MEMORY_CRITICAL_FREE_MB / BEHAVIOR_MEMORY_DISK_CHECK_MS5120 / 1024 / 60000GC·중단·확인 임계값

목차