에이전트 루프 컨트롤
에이전트 루프 컨트롤
Kill-switch (차세대 기본값 옵트아웃)
차세대 동작이 기본으로 활성화되어 있습니다. 아래 각 DISABLE_* env 는 1 / true / yes / on 으로 설정하면 개별 기능 하나를 되돌립니다. 일상 운영이 아니라 회귀 이분 탐색에 사용하세요.
DISABLE_STRICT_PLAYBOOK
1이면 buildPlaybookBlock이 기본 명령형 체크리스트("The playbook below is the AUTHORITATIVE specification for this turn — not guidance. …") 대신 소프트 권고형 헤더("Follow the playbooks below…")로 되돌아갑니다. 더 엄격한 어조가 특정 시나리오에서 LLM을 과도하게 제약하거나 운영자가 그 차이를 A/B로 비교하려는 경우에 유용합니다.
- 사용처: src/skills/scenarios/session.ts (buildPlaybookBlock).
- 형식:
1/true/yes/on이면 비활성화합니다(기본값 미설정). - 설정 위치: 설정 → 환경설정 (schema 키)
DISABLE_METHODOLOGY_INJECTION
1이면 온디맨드 methodology 경로를 모두 억제합니다: 시나리오 플레이스홀더 해석({{methodology:key|default:val}}은 default:로 폴백), tool 출력의 <methodology_reminder> 융합, 그리고 methodology_lookup tool 조회입니다. 기본 동작(미설정)에서는 세 경로 모두 graduated tier(Wilson ≥ 0.55)에서 store를 조회합니다.
- 사용처: src/skills/scenarios/methodology-placeholder.ts,
- src/core/tool-output-hints.ts, src/tools/methodology-lookup.ts.
- 형식:
1/true/yes/on이면 비활성화합니다(기본값 미설정). - Compat: legacy
METHODOLOGY_INJECTION_MODE=off도 여전히 별칭으로 - 지원됩니다(부팅 시 일회성 deprecation 경고 출력).
- legacy
readonly/full값은 새 기본값(활성화)에 매핑되는데, - 이전 tri-state에서 둘 다 "on" 상태였기 때문입니다.
- 설정 위치: 설정 → 환경설정 (schema 키)
DISABLE_METHODOLOGY_CASE_RECORDING
1이면 case recorder 쓰기 경로를 단락시킵니다(recordHint / finalizeTurn이 no-op이 됨). DISABLE_METHODOLOGY_INJECTION보다 좁은 범위로, 읽기 경로는 계속 작동합니다. case 스키마가 의심되어 LLM에 보이는 methodology 힌트를 잃지 않으면서 학습을 멈추고 싶을 때 사용하세요.
- 사용처: src/learning/case-recorder.ts via
- src/learning/methodology-kill-switches.ts.
- 형식:
1/true/yes/on이면 비활성화합니다(기본값 미설정). - web-UI의 Settings → Preferences →
safety.methodologyCaseRecording(긍정형)에서도 접근할 수 있습니다.- 설정 위치: 설정 → 환경설정 (schema 키)
DISABLE_METHODOLOGY_MUTATIONS
1이면 모든 methodology mutation을 단락시킵니다: recordUsage / recordOutcome / requantize / synthesis cron / case-attribution이 모두 no-op이 됩니다. 읽기(retrieve / findByKey / fusion / lookup)는 계속 작동합니다. 가장 광범위한 kill 스위치로, learning 쓰기 경로 자체가 의심스러울 때의 인시던트 대응용입니다.
- 사용처: src/learning/methodology-store.ts,
- src/learning/case-attribution.ts, src/learning/methodology-synthesis.ts
- via src/learning/methodology-kill-switches.ts.
- 형식:
1/true/yes/on이면 비활성화합니다(기본값 미설정). - web-UI의 Settings → Preferences →
safety.methodologyMutations(긍정형)에서도 접근할 수 있습니다.- 설정 위치: 설정 → 환경설정 (schema 키)
MINARA_RETRIEVAL_ENGINE
메모리 recall에 사용할 retrieval 엔진을 선택합니다. bm25(기본값)는 항상 제공되어 온 키워드 전문 검색 엔진이며, hybrid는 BM25에 벡터 캐시를 결합해 지연 시간과 메모리를 대가로 재구성된 질의에서 더 나은 recall을 제공합니다. 알 수 없는 값은 bm25로 폴백합니다.
- 사용처: src/learning/contracts/learning-services.ts (Phase 5C
- 스캐폴딩, wiring은 후속 PR에서 반영).
- 형식:
bm25/hybrid(기본값bm25). - 설정 위치: 사용자 대상 설정 아님
PROMPT_COMPOSER_ENABLED
true이면 새로운 provider-registry 기반 PromptComposer를 사용해 시스템 프롬프트를 조립합니다. Phase 5B는 composer를 shadow 모드(출력이 legacy 어셈블러와 바이트 단위로 동일)로 제공하므로, 이 플래그는 composer가 기본값이 되기 전에 스트레스 테스트하려는 운영자를 위한 opt-in입니다. 기본값 비활성화는 golden 스냅샷을 안정적으로 유지합니다.
- 사용처: src/core/prompt-composer.ts.
- 형식:
1/true/yes/on이면 활성화합니다(기본값 미설정). - 설정 위치: 사용자 대상 설정 아님
방법론 감사 서브시스템
방법론 학습 루프에 대한 수동적 읽기 전용 관찰자입니다. 기존 학습 테이블에 대해 SQL 집계를 매일 실행하고 종합 상태 리포트를 methodology_audit_reports 에 기록합니다. 학습 상태를 절대 변경하지 않습니다. 에이전트 루프와 협조적입니다: 사용자 턴이 진행 중이면 틱을 건너뛰고, 한 패스 도중 SQL 단계 사이에서 양보합니다. src/learning/methodology-audit.ts 및 docs-site env-vars 문서를 참조하세요.
METHODOLOGY_AUDIT_CRON_ENABLED
인프로세스 audit 스케줄러의 opt-in 스위치입니다. 기본값은 0(off)이며, learning 루프가 점수를 매길 만큼 충분한 데이터를 축적한 뒤(보통 METHODOLOGY_LEARNING_CRON_ENABLED 활성화 후 1~2주) 운영자가 명시적으로 활성화해야 합니다. 멀티 워커 배포에서는 IS_PRIMARY_WORKER=1인 워커만 스케줄러를 실행하며, 레플리카는 조용히 no-op 처리됩니다.
- 사용처: src/learning/methodology-audit-cron.ts.
- 형식:
1/true/yes/on이면 활성화합니다. - 설정 위치: 설정 → 환경설정 (schema 키)
METHODOLOGY_AUDIT_CRON_INTERVAL_MS
audit 스케줄러의 tick 간격입니다. 기본값 86400000(24h). 런타임에 [5min, 30d]로 제한되므로 오타가 에이전트 프로세스를 스팸하거나 audit을 조용히 비활성화할 수 없습니다.
- 사용처: src/learning/methodology-audit-cron.ts.
- 설정 위치: 설정 → 환경설정 (schema 키)
METHODOLOGY_AUDIT_WINDOW_DAYS
윈도우 제한 점수 차원(synthesis_quality, attribution_integrity, quarantine_churn)의 lookback 윈도우입니다. 기본값 30. 런타임에 범위가 [1, 365]로 제한됩니다. 윈도우가 클수록 추세가 평활해지지만 급격한 저하에 대한 시스템의 반응이 느려집니다.
- 사용처: src/learning/methodology-audit-cron.ts.
- 설정 위치: 설정 → 환경설정 (schema 키)
METHODOLOGY_AUDIT_RETENTION_DAYS
audit 리포트를 얼마나 오래 보관할지 정합니다. 기본값 90. 범위는 [7, 3650]으로 제한됩니다. audit cron은 일일 tick 이후 로컬 하루에 최대 한 번만 정리합니다.
- 사용처: src/learning/methodology-audit-cron.ts.
- 설정 위치: 사용자 대상 설정 아님
METHODOLOGY_AUDIT_SKIP_BUSY_THRESHOLD_MS
busy 프리플라이트 검사의 idle 임계값입니다. 기본값 180000(3min). BusyTracker가 inFlight > 0 또는 idleSinceMs < threshold를 보고하면 audit tick이 지연되고 deferred_count가 증가합니다. 범위는 [0, 1h]로 제한됩니다. 0으로 설정하면 프리플라이트 게이트가 비활성화됩니다(에이전트 상태와 무관하게 매 tick마다 audit이 즉시 실행). 테스트에는 유용하지만 프로덕션에서는 권장하지 않습니다.
- 사용처: src/learning/methodology-audit-cron.ts.
- 설정 위치: 사용자 대상 설정 아님
METHODOLOGY_AUDIT_MAX_DEFERRED_TICKS
기아 방지 가드입니다. 이 횟수만큼 tick이 연속으로 지연되면 에이전트가 여전히 바쁘더라도 audit 패스가 실행되므로, 영구적으로 바쁜 설치 환경도 audit 커버리지를 잃지 않습니다. 기본값 4(24h 기본 간격에서 약 4일). [0, 100]으로 제한됩니다. 0으로 설정하면 busy 상태와 무관하게 매 tick이 실행되도록 강제합니다.
- 사용처: src/learning/methodology-audit-cron.ts.
- 설정 위치: 사용자 대상 설정 아님
METHODOLOGY_AUDIT_YIELD_TIMEOUT_MS
각 SQL 단계 사이에서 audit 오케스트레이터는 이벤트 루프에 양보하고 BusyTracker가 idle을 보고하기를 기다립니다. 이 값은 그 대기 시간을 제한하여 끝나지 않는 턴이 audit을 무한히 굶기지 않도록 합니다. 기본값 60000(60s). [0, 10min]으로 제한됩니다. 타임아웃 이후에는 busy 상태와 무관하게 audit이 재개됩니다.
- 사용처: src/learning/methodology-audit-cron.ts,
- src/learning/methodology-audit.ts.
- 설정 위치: 사용자 대상 설정 아님
DISABLE_METHODOLOGY_AUDIT
audit 하위 시스템의 최상위 kill 스위치입니다. 1이면 cron 패스와 audit run CLI를 모두 단락시킵니다: band=disabled인 플레이스홀더 리포트가 반환되며 저장되지 않습니다. CLI 읽기 경로(audit show, audit trend, audit findings)는 영향을 받지 않습니다. 기존 DISABLE_METHODOLOGY_MUTATIONS kill 스위치를 그대로 따릅니다.
- 사용처: src/learning/methodology-audit.ts.
- 형식:
1/true/yes/on이면 비활성화합니다. - 설정 위치: 사용자 대상 설정 아님
DISABLE_METHODOLOGY_INSTANCE_DISPATCH
1이면 MethodologyInstanceStore.resolveThresholds가 항상 템플릿 기본값을 반환하도록 강제하며, BO로 튜닝된 자산군별 인스턴스 재정의를 무시합니다. 기본 동작(미설정)에서는 인스턴스 재정의가 있을 때 템플릿 기본값에 병합됩니다.
- 사용처: src/learning/methodology-instance-store.ts.
- 형식:
1/true/yes/on이면 비활성화합니다(기본값 미설정). - 설정 위치: 사용자 대상 설정 아님
Proactive Wealth Agent
각 활성화된 위임(mandate)을 실행하는 백그라운드 감독 루프입니다: 포지션을 시가 평가하고, 익절 / 손절 / 리밸런스를 수행하며, 곡선을 위한 PnL 스냅샷을 찍고, 작업 로그를 기록합니다. 두 노브 모두 Settings → Proactive 및 Proactive 모듈 자체의 설정 탭에서 실시간으로 편집할 수 있습니다 (proactive.* preferences 에 매핑됨).
PROACTIVE_SUPERVISOR_ENABLED
백그라운드 supervisor의 마스터 스위치입니다. 기본값 1(on): 활성화된 mandate가 설정한 한도 내에서 스스로 계속 작동합니다. 0으로 설정하면 모든 mandate의 자율 활동이 일시 중지됩니다. mandate는 활성 상태로 유지되며, 다시 켤 때까지 행동만 멈춥니다. 멀티 워커 배포에서는 IS_PRIMARY_WORKER=1만 루프를 실행하고 레플리카는 no-op 처리됩니다.
- 사용처: src/proactive/supervisor-cron.ts.
- 형식:
1/true/yes/on이면 활성화합니다(기본값 활성화). - 설정 위치: 설정 → 환경설정 (schema 키)
PROACTIVE_SUPERVISOR_INTERVAL_SEC
각 mandate가 포지션을 확인하는 주기(초)입니다. 기본값 900(15min). 런타임에 [10s, 1h]로 제한되므로 오타가 프로세스를 스팸하거나 루프를 멈출 수 없습니다. 간격이 짧을수록 더 빠르게 반응하지만 더 많은 작업을 수행합니다.
- 사용처: src/proactive/supervisor-cron.ts.
- 설정 위치: 설정 → 환경설정 (schema 키)
PROACTIVE_REDISCOVER_INTERVAL_SEC
mandate가 새로운 기회를 탐색하는 주기(유료 re-plan 단계)로, 단위는 초입니다. 기본값 1800(30min). 런타임에 [1min, 24h]로 제한됩니다. 매 사이클마다 실시간으로 읽으므로 변경 사항이 재시작 없이 적용됩니다. 재탐색은 더 빠른 supervisor 패스 위에서 실행되며, 빈도가 낮을수록 LLM 호출 비용이 줄어듭니다. 모델이 구성되지 않은 경우 정상적으로 건너뜁니다.
- 사용처: src/app.ts (runProactiveMandateCycle).
- 설정 위치: 설정 → 환경설정 (schema 키)
DISABLE_KNOWLEDGE_BUDGET
1이면 Knowledge Budget 네고시에이터를 완전히 우회합니다. 시나리오 플레이북 + 메모리 스냅샷 + 역할 힌트가 전체 길이로 출력되며, Anthropic 컨텍스트 한도만 적용됩니다. 기본 동작(미설정)에서는 합산 크기가 KNOWLEDGE_BUDGET_TOKENS(기본값 15000 ≈ 60k chars)를 초과하면 잘라냅니다.
- 사용처: src/core/knowledge-budget.ts via src/core/agent-loop.ts.
- 형식:
1/true/yes/on이면 비활성화합니다(기본값 미설정). - 설정 위치: 설정 → 환경설정 (schema 키)
ROLE_MEMORY_MODE
부팅 시점의 role-case 학습 및 주입 모드입니다.
- 제어 대상:
off는 기존 role case를 audit API에서 계속 사용할 수 있게 하지만 새로운 것을 생성·평가·recall·주입하지 않습니다.shadow(기본값)는 일치하는 수동 거래가 실행된 후에만 case를 저장하고 평가하며, recall을 등록하거나 모델 프롬프트를 변경하지 않습니다.active는 여기에 더해 반영된 수동 case를 일치하는 분석 skill과 institution Trader / PM 프롬프트로 recall합니다. Autopilot, Strategy Studio, workflow, 출처 불명 perps는 이 경로에 진입하지 않습니다. 실행 tool은 role-memory 텍스트를 절대 받지 않습니다. - 설정 시점: case 품질을 검증하는 동안에는
shadow를 유지하고, reflection을 검토한 후에만active를 사용하며, 새로운 role 학습을 멈추려면off를 사용하세요. - When unset or invalid:
shadow(잘못된 값은 시작 시 경고를 출력). - 변경 사항은 시작 시 한 번 읽으며 에이전트 재시작이 필요합니다.
- 형식: 정확히
off,shadow, 또는active. - 설정 위치: 설정 → 환경설정 (schema 키)
DISABLE_PARALLEL_TOOL_CALLS
DISABLE_PARALLEL_TOOL_CALLS는 턴 단위 도구 스케줄러를 제어합니다. 1로 설정하면 모든 도구 호출을 직렬로 실행합니다. 설정하지 않으면 READ_ONLY 도구가 기본적으로 한도 있는 FIFO 병렬 실행 창을 공유합니다. 옵트아웃한 도구, 쓰기, 자금 이동, 알 수 없는 도구, 동적 도구, tool_invoke, META_UNSAFE 도구는 계속 독점 실행됩니다.
- 사용처: 턴 단위 도구 실행 스케줄러가 읽습니다.
- 형식:
1/true/yes/on이면 비활성화합니다(기본값 미설정). - 변경 사항은 다음 턴부터 적용됩니다.
- 설정 위치: 설정 → 환경설정 (schema 키)
MAX_PARALLEL_TOOL_CALLS
MAX_PARALLEL_TOOL_CALLS는 한 턴에서 동시에 실행할 수 있는 안전한 읽기 전용 도구의 최대 수를 설정합니다.
- 기본값: 기본값은
16입니다. - 형식: 형식은
1부터32까지의 10진 정수입니다. - 잘못된 값은
16으로 대체되며 구조화된 시작 경고를 한 번만 출력합니다. 사용자 Preference override가 이 값보다 우선합니다. - 변경 사항은 다음 턴부터 적용됩니다. 도구 병렬 실행이 꺼져 있으면 이 한도는 무시됩니다.
- 설정 위치: 설정 → 환경설정 (schema 키)
MINARA_SUBAGENT_FOREGROUND_MAX_CONCURRENT
MINARA_SUBAGENT_FOREGROUND_MAX_CONCURRENT는 일반 도구 한도를 사용하지 않고 포그라운드 하위 에이전트 동시 실행 수를 제한합니다.
- 기본값: 기본값은
8입니다. - 형식: 형식은
1부터16까지의 정수입니다. - 초과 작업은 독립 FIFO 대기열에서 기다리며 사용자 설정이 우선하고 다음 턴부터 적용됩니다.
- 설정 위치: 설정 → 환경설정 (schema 키)
MINARA_SUBAGENT_BACKGROUND_MAX_CONCURRENT
MINARA_SUBAGENT_BACKGROUND_MAX_CONCURRENT는 포그라운드와 독립된 대기열에서 백그라운드 하위 에이전트 동시 실행 수를 제한합니다.
- 기본값: 기본값은
8입니다. - 형식: 형식은
1부터16까지의 정수입니다. - 초과 작업은 독립 FIFO 대기열에서 기다리며 사용자 설정이 우선하고 다음 턴부터 적용됩니다.
- 설정 위치: 설정 → 환경설정 (schema 키)
MINARA_SUBAGENT_TIMEOUT_SECONDS
MINARA_SUBAGENT_TIMEOUT_SECONDS는 각 하위 에이전트가 실제로 시작된 뒤의 기본 실행 제한 시간을 설정합니다.
- 기본값: 기본값은
600초입니다. - 형식: 형식은
30부터3600까지의 정수이며 대기 시간은 포함하지 않습니다. - 개별 호출은
subagent.timeout_s로 재정의할 수 있고 사용자 설정이 우선합니다. - 설정 위치: 설정 → 환경설정 (schema 키)
Shadow Mode (A/B 관찰 로거)
계측된 결정 지점에서 (현재 동작, 제안 동작) 변형 쌍을 오프라인 분석용 shadow_runs SQLite 테이블에 기록하는 경량 레코더입니다. LLM 이중 실행은 없습니다. Sprint 2+ 최적화(메모리 스냅샷 버킷팅, 캐시 적중률, 역할 힌트 주입)를 실제 트래픽에 대해 검증하기 위한 것입니다.
SHADOW_MODE
recorder 모드입니다. off — 기록하지 않습니다. 오버헤드 없음. sampled — SHADOW_SAMPLE_RATE 비율로 무작위 샘플링합니다. 기본값. on — 모든 호출을 기록합니다. 짧은 audit 윈도우에만 사용하세요.
- 형식:
off/sampled/on. - 설정 위치: 사용자 대상 설정 아님
SHADOW_SAMPLE_RATE
SHADOW_MODE=sampled일 때 기록할 적격 호출의 비율입니다. 기본값 0.1(10%). 범위 [0, 1].
- 형식: 0과 1 사이의 float.
- 설정 위치: 사용자 대상 설정 아님
SHADOW_RETENTION_DAYS
shadow_runs 행을 며칠 동안 보관할지 정합니다. 부팅할 때마다 일회성 정리가 실행되어 이 임계값보다 오래된 행을 삭제하므로, 장기 운영 배포에서 테이블이 무한히 커지는 것을 방지합니다. 기본값 30. 트래픽이 많거나 디스크가 제한된 환경에서는 낮추세요.
- 형식: 양의 정수.
- 설정 위치: 사용자 대상 설정 아님
Memory Snapshot 버킷팅
MemoryStore.loadSnapshot() 는 세션 시작 시 한 번 실행되어 FIFO 50행 메모리 목록을 시스템 프롬프트에 주입합니다. Sprint 2 이전에는 최근 observation 행이 몰리면 오래 유지되던 preference / strategy 행이 밀려날 수 있었습니다. Sprint 2 는 FIFO 를 카테고리별 쿼터로 대체합니다. 고우선순위 버킷에서 쓰지 않은 슬롯은 observation 으로 넘쳐흐르므로, 희소한 프로파일에서도 총합이 50 으로 유지됩니다. 방출 순서: preference → strategy → trade_note → observation. 소비 위치: app.ts 배선을 통한 src/memory/memory-store.ts. 튜닝 가이드: 프로파일 중심 사용자에게는 preference / strategy 를 높이고, 노이즈가 많은 단기 분석 워크플로에는 observation 을 높이세요.
MEMORY_SNAPSHOT_PREF_LIMIT
사용자 환경설정 슬롯입니다. 핵심 프로필 데이터.
- 설정 위치: 사용자 대상 설정 아님
MEMORY_SNAPSHOT_STRAT_LIMIT
사용자의 장기 전략 노트입니다.
- 설정 위치: 사용자 대상 설정 아님
MEMORY_SNAPSHOT_TRADE_LIMIT
거래 불만 / 사후 분석 노트입니다.
- 설정 위치: 사용자 대상 설정 아님
MEMORY_SNAPSHOT_OBS_LIMIT
롤링 관찰 할당량과 미사용 pref / strategy / trade 슬롯의 이월 풀입니다.
- 설정 위치: 사용자 대상 설정 아님
Memory Snapshot 소프트 리프레시 (P1-2)
세션 시작 시 로드된 스냅샷은 보통 세션 전체 동안 고정되어 있습니다 (프롬프트 프리픽스 캐시를 보존). 긴 세션에서는 정보 신선도가 떨어집니다 — 사용자가 10번째 턴에서 선언한 preference 가 다음 세션 전까지 프롬프트에 도달하지 못합니다. 소프트 리프레시는 마지막 재빌드 이후 두 임계값(쓰기 횟수 AND 턴 횟수)이 모두 충족되면 세션 도중에 스냅샷을 재빌드합니다. MEMORY_REFRESH_TURNS=0 으로 설정하면 기존의 세션 고정 동작으로 되돌아갑니다.
MEMORY_REFRESH_WRITES
마지막 스냅샷 재구축 이후의 memory_write 호출 횟수입니다. 기본값 3.
- 설정 위치: 사용자 대상 설정 아님
MEMORY_REFRESH_TURNS
마지막 스냅샷 재구축 이후의 턴 수입니다. 기본값 10. 0으로 설정하면 soft refresh가 완전히 비활성화됩니다(스냅샷이 세션 동안 고정 유지). 재구축하려면 이 값과 MEMORY_REFRESH_WRITES가 모두 도달해야 하며, 이는 단일 대용량 쓰기로 인한 캐시 스래싱을 방지합니다.
- 설정 위치: 사용자 대상 설정 아님
MEMORY_WRITE_MAX_LEN
에이전트가 memory_write tool로 메모리를 저장할 때 유지되는 최대 문자 수입니다(observation / preference / trade_note / strategy 범주). 더 긴 내용은 저장 전에 이 길이로 잘리므로, 지나치게 크거나 오염된 단일 항목이 시스템 프롬프트나 FTS 인덱스를 넘치게 할 수 없습니다. 더 엄격한 personalization-fact 경로는 자체적인 더 짧은 한도를 유지하며 영향을 받지 않습니다. src/tools/memory-tool.ts에서 소비되며, Settings 환경설정 memory.writeMaxLen으로도 노출됩니다. 미설정 시 기본값 2000. 허용 범위 200–8000(양의 정수, 문자).
- 설정 위치: 설정 → 환경설정 (schema 키)
Memory 통합 (FactLayer, Phase 1)
MEMORY_CONSOLIDATION_ENABLED
백그라운드 재구축기가 학습하는 채팅 추출 personalization fact에 대한 모순 해소 기능입니다.
- ON by default: 재구축기는 메모리 재구축마다 백그라운드 LLM 호출을 한 번 더 실행해
- fact별로 기존 fact를 중복 / 정제 /
- 대체하는지 판단하므로, 메모리 스냅샷이 오래되거나
- 모순된 행을 더 이상 쌓지 않습니다.
0/false/no/off로 설정하면 - 해제되며, 그러면 추출된 각 fact가 새 행으로 추가됩니다
- (오래된 기본 동작). 대체된 fact는 soft-delete되고(복구 가능),
- 모든 결정은 memory_consolidation_events audit
- 테이블에 기록됩니다. memory/consolidation-config.ts +
- memory/fact-consolidation.ts에서 소비됩니다. 또한 근사 중복 조정도
- agent가 기록한 fact(memory/general-fact-service.ts)에 대해 구동합니다.
- 형식: 미설정 /
1/true/yes/on이면 활성화되고, 명시적인 0/false/no/off만 비활성화합니다. Settings →- Experimental "Tidy duplicate and outdated memories" 토글로 노출됩니다.
- 설정 위치: 설정 → 환경설정 (schema 키)
MEMORY_CONSOLIDATION_GUIDANCE
consolidation이 fact를 병합하거나 폐기하는 방식에 대한 선택적 자유 텍스트 지침입니다(예: "가장 최근 진술을 우선", "자산별로 노트를 분리"). resolver 프롬프트에 비권위적 환경설정으로 주입되며, 강력한 안전 규칙을 절대 재정의하지 않습니다(사용자가 설정한 강한 제약은 더 새로운 명시적 사용자 진술이 아닌 한 제거되지 않으며, 사용자가 진술한 fact는 항상 어시스턴트가 추론한 fact보다 우선합니다). 최대 500자로 제한됩니다. MEMORY_CONSOLIDATION_ENABLED가 off이면 효과가 없습니다.
- 형식: 일반 텍스트, 기본값 비어 있음(내장 정책 사용).
- 설정 위치: 설정 → 환경설정 (schema 키)
FACT_LIFECYCLE_ENABLED
fact 노후화 lifecycle을 사용합니다. off(기본값)이면 저장된 모든 fact가 영원히 전체 가중치를 유지합니다(오래된 기본 동작). on이면 백그라운드 메모리 재구축이 결정론적이고 LLM을 쓰지 않는 스윕을 실행하여 유형별로 fact를 노후화합니다: market view(observation.market_view)는 약 14일 후 warm으로 강등되고 약 45일 후 주입 프로필에서 빠집니다(cold), 거래 노트는 약 90일 / 270일 후에 그렇게 되며, 사용자가 설정한 강한 제약(constraint.hard)과 목표는 절대 노후화되지 않습니다. 강등은 되돌릴 수 있습니다. 아무것도 삭제되지 않고 cold fact도 계속 검색 가능하며, 새로운 언급(consolidation 업데이트)이 fact를 다시 hot으로 승격시킵니다. personalization 재구축기를 통해 memory/consolidation-config.ts + memory/fact-lifecycle.ts에서 소비됩니다. 형식: 1 / true / yes / on이면 활성화하고, 미설정 / 그 외 값은 off로 둡니다. Settings → Experimental "Let old memories fade" 토글로 노출됩니다.
- 설정 위치: 설정 → 환경설정 (schema 키)
FACT_LIFECYCLE_AGE_MULTIPLIER
모든 fact-lifecycle 나이 임계값에 적용되는 전역 배율입니다. 1(기본값)은 내장된 유형별 나이를 사용하고, 2는 강등 전까지 모든 fact가 두 배 오래 지속되게 하며, 0.5는 절반만 지속되게 합니다. 운영자가 fact 유형별 노브를 노출하지 않고도 감쇠 곡선 전체를 이동할 수 있게 합니다. [0.25, 10]으로 제한되며, 양수가 아니거나 파싱할 수 없는 값은 1로 폴백합니다. FACT_LIFECYCLE_ENABLED가 off이면 효과가 없습니다. memory/consolidation-config.ts에서 소비됩니다. 형식: 양수.
- 설정 위치: 설정 → 환경설정 (schema 키)
사이드 작업 동시 실행
사이드 작업 세션 수에는 제한이 없지만 모델 턴은 한도가 있는 인프로세스 스케줄러를 공유합니다. 기본 세션 턴은 이 제한을 거치지 않습니다.
MINARA_SIDE_TASK_MAX_CONCURRENT_TURNS
Gateway 전체에서 동시에 실행할 수 있는 사이드 작업 에이전트 턴 수입니다. 한도를 넘는 턴은 공정한 대기열에서 기다립니다. 열려 있기만 하거나 유휴 상태인 탭은 슬롯을 사용하지 않습니다. 기본 세션은 이 제한을 받지 않습니다.
- 사용처: src/gateway/side-task-concurrency.ts에서 사용합니다.
- 설정 시점: 모델 제공자가 동시 사이드 작업을 반복적으로 속도 제한할 때 값을 낮추세요.
- 미설정 시: 설정하지 않으면 동시 사이드 작업 턴 8개가 기본값입니다.
- 형식: 형식: 1~32의 정수. 잘못된 값은 8로 돌아갑니다. 변경 후 Gateway를 다시 시작하세요.
- 설정 위치: 사용자 대상 설정 아님
Knowledge budget (동적 블록 상한)
KNOWLEDGE_BUDGET_TOKENS
시스템 프롬프트에 있는 세 개의 동적 knowledge 블록(시나리오 플레이북 + 메모리 컨텍스트 + 역할 힌트)의 합산 크기에 대한 숫자 상한(토큰 단위)입니다. 합산 크기가 이를 초과하면 네고시에이터가 우선순위가 가장 낮은 것부터 잘라냅니다: roleHints → memoryContext → scenarioPlaybook.
- 기본값 15000 토큰(~60k chars ≈ 200k 컨텍스트의 7.5%). 대부분의
- 턴에 충분한 여유입니다. 이 env로 명시적으로 재정의할 수 있습니다.
- 네고시에이터를 완전히 비활성화하려면(블록이 전체 길이로 출력되도록)
DISABLE_KNOWLEDGE_BUDGET=1을 설정하세요. 위의 kill-switch 블록을 참조하세요.- 형식: 음이 아닌 정수.
0이면 비활성화합니다. - 설정 위치: 사용자 대상 설정 아님
KNOWLEDGE_SOURCE_TAGS
각 동적 knowledge 블록 앞에 HTML 주석 출처 태그를 붙입니다(<!-- source: memory:snapshot -->, <!-- source: role:case-memory -->). 순전히 사람 / 로그 기반 프롬프트 audit를 위한 것이며, LLM은 HTML 주석을 노이즈로 취급합니다. 기본값 off.
- 형식:
true/false. - 설정 위치: 사용자 대상 설정 아님