Repository navigation
Expand file tree
/
Copy pathconfig.yaml.example
More file actions
103 lines (103 loc) · 4.71 KB
/
Copy pathconfig.yaml.example
File metadata and controls
103 lines (103 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
allowed_paths:
- .
use_real_browser: false
browser_provider:
browser_headless: false
cdp_url: http://localhost:9222
# When Chrome isn't already listening on cdp_url (visible mode), open it for
# you with remote debugging so you can sign in, instead of erroring out with
# manual launch instructions. Set false to require launching Chrome yourself.
browser_auto_launch: true
max_history_messages: 6
max_inject_chars: 12000
# Stateful web-chat threads (experimental): one Kim session = one browser
# thread. The system prompt is sent once per thread; follow-up tasks are
# small delta messages. Near the context budget (compact_at_ratio) or the
# turn cap (max_thread_turns), the thread compacts itself into a handoff
# and Kim continues in a fresh chat seeded with it. When off (default),
# every message starts a fresh chat and re-sends full context.
stateful_threads: false
compact_at_ratio: 0.8
max_thread_turns: 40
# Force the browser provider to launch headless Chromium directly, bypassing
# the CDP auto-launch/connect flow. Optional; defaults to false.
browser_force_headless: false
# Reasoning effort for browser LLM turns (chatgpt/gemini/deepseek): low |
# medium | high. Best-effort — clicks the site's own model/thinking
# picker on the first turn of a fresh chat; unset (default) leaves the
# site at whatever mode it already has selected. KIM_BROWSER_EFFORT env
# var overrides this. See orchestrator/providers/browser/reasoning_effort.py.
effort: null
custom_sites: {}
# Optional map of user-defined third-party MCP servers to merge alongside
# Kim's own MCP server (name -> {command, args, cwd, env, ...}). Defaults to
# empty (no extra servers).
mcp_servers: {}
# Site-connector allowlist. `enabled` is a list of connector ids whose
# tools get merged into the MCP dispatch map at startup, so the LLM only
# sees toolkits you've explicitly opted into.
# Optional; defaults to an empty list (no connectors enabled).
connectors:
enabled: []
codex_bridge:
# Whole-run budget for one Codex code-mode task (seconds). Browser relays
# are slow — a single one can take minutes — so keep this comfortably above
# the per-relay browser waits (600s).
task_timeout_s: 1800
# Codex transport. "app-server" (the default) speaks JSON-RPC to
# `codex app-server`: native per-command approvals, plan/diff/output
# streaming, workspace-write sandbox, and true session resume via a
# persisted thread id — i.e. code mode remembers the conversation.
# "exec" is the legacy per-message `codex exec --json` spawn, kept as a
# fallback for older/drifted codex binaries (Kim also degrades to it
# automatically for a run when the binary's protocol major version doesn't
# match its snapshot).
transport: app-server
# App-server path only — Codex-native sandbox + approval policy.
# sandbox_mode: read-only | workspace-write | danger-full-access
sandbox_mode: workspace-write
# approval_policy: untrusted | on-failure | on-request | never
approval_policy: on-request
# Seconds to wait for the user's decision on a native command/file-change
# approval before auto-declining it.
approval_timeout_s: 120
# Codex-side transcript token budget: when thread/tokenUsage/updated exceeds
# this, Kim fires a native thread/compact/start. 0 disables.
codex_compact_tokens: 300000
logging:
level: INFO
max_iterations: 25
# Timeout duration in seconds for in-app browser completions
bridge_timeout_secs: 720
# Duration in milliseconds for the screenshot white flash animation overlay
screenshot_flash_duration_ms: 3300
# IPC event protocol format: "typed" (recommended) or "legacy"
# "typed" emits structured kim:* Tauri events alongside legacy kim-agent-output (dual-emit).
ipc_protocol: typed
max_tokens: 4096
memory_keep_screenshots: 4
memory_max_messages: 40
model:
claude: claude-opus-4-6
deepseek: deepseek-chat
gemini: gemini-2.0-flash
openai: gpt-4o
openai_oauth: gpt-5.6-terra
openai_api_key_env: OPENAI_API_KEY
openai_base_url: ''
# Base URL of the local `openai-oauth` proxy (npx openai-oauth@latest). Blank = default.
openai_oauth_base_url: ''
preview_mode: false
project_root: .
provider: openai_oauth
screenshot_scale: 0.75
# The shell command deny-list is CODE-OWNED and is NOT configurable here.
# It lives in mcp_server/tools/shell.py (_DENY_COMMANDS / _DENY_PATTERNS),
# mirrored at the policy chokepoint (mcp_server/policy.py). Config must never
# be able to weaken a code-owned safety gate, so there is deliberately no
# `blocked_cmds` key — a previous one existed but was read by nothing
# (F-G-4), giving operators false confidence. Config can only ADD allowed
# binaries via `shell.allowlist_extra` / `shell.safe_extra`; denied commands
# stay denied regardless of config.
shell:
timeout: 30