mcpField
K
korg-ledger

korg-ledger

本地服务
github.com/New1Direction安全52 周前更新

关于 korg-ledger

korgex 是终端中的 AI 编码 Agent,可读取和修改代码、运行测试,并将操作记录到可验证的防篡改因果账本。它面向需要审计 Agent 操作的开发者,并支持多种模型及 MCP 服务连接。

主要功能

  1. 01终端交互式编码与任务执行
  2. 02哈希链账本及完整性验证
  3. 03导入日志并生成审计报告
  4. 04连接 MCP 服务
  5. 05支持多模型提供方

适用场景

  1. 01审计编码 Agent 的文件和命令操作
  2. 02验证会话日志是否被篡改
  3. 03导入既有 Agent 会话以留档
  4. 04在终端中完成代码修改并运行测试

MCP 相关

korgex 可连接 MCP 服务,并将 MCP 工具调用记录到因果账本中。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"new1direction-korg-ledger": {
"command": "uvx",
"args": [
"korgex"
],
"env": {
"KORG_JOURNAL_PATH": "<KORG_JOURNAL_PATH>",
"KORG_LEDGER_HMAC_KEY": "<KORG_LEDGER_HMAC_KEY>"
}
}
}
}
启动命令uvx korgex
需要配置的环境变量
KORG_JOURNAL_PATHPath to the JSONL ledger journal (defaults to .korg/journal.jsonl).
KORG_LEDGER_HMAC_KEY密钥Optional HMAC key — makes the chain tamper-PROOF, not just tamper-evident.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypikorgex0.6.3

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
hmac_keystring否用于防篡改链的可选 HMAC 密钥
journal_pathstring是JSONL 台账日志的路径

详细介绍

korgex——可验证的编码 Agent

PyPI 版本 PyPI 下载量 Python 版本 CI 测试 MCP 注册表 许可证:MIT

English · 简体中文 · 繁體中文

korgex

终端里的 AI 编码伙伴——每一步都有据可查。

用通俗的英语告诉 korgex 你想做什么——“修复失败的测试”“添加一个健康检查端点”——它就会读取你的代码、进行修改、运行测试,并准确展示它做了什么。它免费且开源,支持你喜欢的各种 AI(Claude、ChatGPT、Gemini、Grok,或在你自己的电脑上运行的私有模型),因此你不会被某一家公司的产品锁定。

与众不同之处: korgex 所做的一切都会保存到防篡改记录中,供你日后核查。如果有人改动了这份记录——哪怕只改了一个字符——korgex 都能证明。它是可以审计的编码助手,而不是只能寄希望于值得信任的助手。

面向开发者:原生支持终端、先规划后执行,同时支持 Anthropic 和 OpenAI 的工具调用协议,可运行于任何兼容 OpenAI 或 Anthropic 的模型(包括通过 Ollama 使用本地模型),可连接任意 MCP 服务,支持实时流式输出,并将每次运行记录到哈希链式因果账本中,可通过 korgex verify 核查。采用 MIT 许可证。

$ korgex "add a /healthz endpoint that returns 200 with uptime"
➤ Read(file_path=/app/routes.py)
➤ Edit(file_path=/app/routes.py, old_string=..., new_string=...)
➤ Bash(command=pytest tests/test_routes.py -q)
✓ Added GET /healthz returning {"status": "ok", "uptime_seconds": ...}

$ korgex verify
  ✓ ledger intact — 7 events, hash-chain + causal DAG verified

目录


安装

从 PyPI 安装(推荐)
pip install -U korgex          # or, for an isolated global CLI:
uv tool install korgex@latest

需要 Python ≥ 3.10(已在 3.10、3.11、3.12、3.13 上测试)。

从源代码 / 最新 main 安装
git clone https://github.com/New1Direction/korgex.git && cd korgex && pip install -e .
# or, without cloning:
pip install git+https://github.com/New1Direction/korgex.git

快速入门

# 1. Connect a provider (interactive — saves to ~/.korgex/config.json)
korgex setup
# …or just export a key; any of these works:
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-proj-..."
export KORGEX_API_KEY="sk-or-v1-..." KORGEX_API_URL="https://openrouter.ai/api/v1"   # OpenRouter
export KORGEX_API_URL="http://your-gpu-box:8000/v1"   # self-hosted vLLM/llama.cpp → korgex --model Qwen2.5-Coder-32B "…"

# 2. Run the agent on a naked prompt
korgex "fix the failing test in tests/test_auth.py"

# 3. Or pick a model / mode
korgex --model claude-sonnet-4-6 "refactor src/handler.py"
korgex --mode plan "design a rate limiter for the API"
korgex --quiet "list the python files in src/"     # no TUI — pipe-friendly

# 4. Prove the run wasn't altered afterward
korgex verify

不带提示词直接运行 korgex,即可进入交互式 REPL。


REPL — 实时交互

直接运行 korgex,即可开启流式多轮会话。它会连接你的 MCP 服务,读取项目规则,并为每个会话保留回退日志。

斜杠命令

命令功能
/loop <task>无人值守地处理任务列表——逐轮自动继续,直到完成,并设有硬性上限(按 Ctrl-C 停止)。
/diff [n]查看上一轮(或第 n 轮)的彩色差异。
/rewind [n]列出撤销点,或将文件恢复到提示词 n 之前的状态。
/skills · /skills curate列出 korgex 学到的技能(✦);整理会合并相近的技能。
/tasks · /jobs查看实时任务清单和后台 shell 作业。
/plan [on|off]计划模式——在你批准 Agent 的计划之前只读。
/model [id]显示带价格的模型菜单,或在会话中切换当前模型。
/verify · /cost验证会话账本;根据记录的令牌显示预估花费($)。
/resume [id]将先前会话的转录重新载入上下文,并从上次中断处继续。
/<name> [args]运行自定义命令——来自 .korgex/commands/ 的 Markdown 提示词(或 /code-review、/build-fix、/checkpoint 等内置命令)。
/clear · /help · /exit重置对话 · 帮助 · 退出。

行内快捷方式

  • @path/to/file ——提及文件,其内容会被载入本轮:refactor @src/auth.py to use @src/db.py。
  • !command ——在当前位置运行 shell 命令:!git status、!pytest -q。

项目规则。 korgex init 会生成 AGENTS.md;korgex 会在每次会话中自动读取它,以及目录树中所有上级目录内的 AGENTS.md 和 .korgex/rules/*.md,从而遵循你的团队规范。

提示词缓存会在多轮之间保持系统提示词和工具处于热状态(OpenAI/Gemini/Grok/DeepSeek 上自动启用;Claude/Qwen 使用 cache_control 断点)。设置 KORGEX_CACHE_STATS=1 可查看每轮的缓存命中情况——每次命中都会记录到账本,因此 korgex cost 会按实际折扣费率计算缓存令牌的价格(并显示缓存为你节省的费用),你还可以用 korgex verify 验证。


工作原理

flowchart TD
    U["You — prompt or REPL"] --> CLI["korgex CLI / REPL"]
    CLI --> AG["KorgexAgent loop<br/>plan → act → verify"]
    AG -->|model id| PB{Provider}
    PB -->|"claude / anthropic/*"| ANT["Anthropic SDK"]
    PB -->|everything else| OAI["OpenAI-compatible SDK<br/>OpenAI · OpenRouter · Ollama · Grok · DeepSeek"]
    ANT --> TR["Tool router<br/>(src/tool_abstraction.py)"]
    OAI --> TR
    TR --> BT["Built-in tools<br/>Read · Edit · Bash · Grep · …"]
    TR --> MCP["MCP servers<br/>(any in mcp.json)"]
    TR --> CA["CodeAct kernel<br/>code = the action (opt-in)"]
    BT --> LED[("korg-ledger<br/>hash-chained + causal DAG")]
    MCP --> LED
    CA --> LED
    LED -. "verify · trace · why · cost" .-> U

该 Agent 在设计上与提供商无关:工具架构会针对不同提供商进行转换(Anthropic 使用 {name, description, input_schema},OpenAI 使用 {type:"function", function:{…}}),响应会规范化为通用格式,工具结果则会按提供商所需的消息结构进行格式化。每次工具调用——无论是内置工具、MCP 工具还是 CodeAct——都会在发生时记录到账本。


可验证的认知

简单来说: korgex 会记录自己所做的一切——读取的每个文件、运行的每条命令。每条记录都会与前一条封存连接,就像链条中的环节,因此,之后任何人只要更改、添加或删除哪怕一条记录,链条就会明显断裂。由此产生的是对 AI 实际所做事情诚实、可核验的证明,可用于审计、合规、调试,或只是求个安心。据我们所知,没有其他编码 Agent 能做到这一点。

深入来说:每次运行都会记录到防篡改的因果账本中,而非不透明的日志中。每个事件都会通过哈希(prev_hash/entry_hash)与前一事件相连,并且通过因果关系(triggered_by)与触发它的事件相连——这样就能用密码学方式证明整个会话完好无损,并检测篡改、删除、重排或拼接,将问题定位到违规事件。

flowchart LR
    subgraph chain["korg-ledger — each event hash-linked to the last"]
      direction LR
      E0["prompt<br/>a1f3"] --> E1["Read<br/>7c0e"] --> E2["Edit<br/>b42d"] --> E3["Bash: pytest<br/>9d11"]
    end
    E3 --> V{{"korgex verify"}}
    V -->|chain intact| OK["✓ proven unaltered"]
    V -->|"edit / splice / reorder"| BAD["✗ localized to the bad event"]
korgex verify                 # prove the recorded run wasn't altered (exit 0/1, CI-friendly)
korgex trace                  # the causal trace — what the agent did + what caused it
korgex why src/auth.py        # walk the causal chain back from a file change to its prompt
korgex recall "rate limiter"  # pull lean, verified context for a query — retrieve, don't carry
korgex cost                   # estimated $ spend for the session, from recorded token counts
export KORG_LEDGER_HMAC_KEY=… # make the chain tamper-PROOF, not just tamper-evident

记忆漂移。 记住的事实会锚定到其来源的 sha256 基准值,因此来源发生变化时,过时程度会成为精确的信号——而保留/刷新/丢弃的协调决策本身也会记录到账本中。

korgex drift                  # scan persistent memories for drift vs their source baselines (exit 0/1)

使用你已有的审计日志——并分享证明。 korgex audit 会将已有的会话(自动发现 Claude Code 日志)导入可验证的链中。添加 --html 后,就能生成一个独立的文件,收件人可在浏览器中自行重新验证——其中还包括一个实时的篡改测试,会故意破坏链条,让任何人都能亲身验证证据。无需设置、无需付费,也不会发起网络请求。

korgex audit --html audit.html
#   audited <session> → 2,319 ledger events
#   chain:  ✓ INTACT — tamper-evident, cryptographically verifiable
#   report: audit.html  ← open in any browser; it re-verifies itself

korgex import transcript.json     # replay any vendor's session into a korg-ledger@v1 journal
korgex trajectory --out train.jsonl   # export the journal as a provenance-stamped training trajectory

给对方一份凭证。 korgex receipt 会生成一个便于携带的单文件,用于证明一次运行所做的事情——其中包含事件(因此可在离线状态下验证)、通俗易懂的 --claim、摘要,以及可选的 --sign,用你自己的密钥证明是谁签署的。收件人可通过 korgex receipt verify <file>(退出码 0/1)确认,也可以直接打开 --html 文件,观看它自行重新验证。这是一份可证明的交付物,而不是截图。

korgex receipt --claim "shipped /healthz + passing test" --sign --html receipt.html
#   ✓ receipt minted — 5 events, 3 tool calls, 2 files, $0.0078
#   signed by b251a84c… (your korgex identity) · tip 46263017…
#   receipt.html  ← open in any browser; it re-verifies itself

korgex receipt verify receipt.korgreceipt.json   # ✓ VALID / ✗ INVALID (CI-gateable)

在 CI 中设为门禁。 将 verify-ledger GitHub Action 添加到任意仓库,如果 Agent 的账本或凭证无法通过验证,就让构建失败——对生成它的工具实行零信任:

- uses: New1Direction/korgex/.github/actions/verify-ledger@main
  with:
    path: ".korg/journal.json"            # or "**/*.korgreceipt.json"
    pubkey: ${{ vars.KORG_SIGNER_PUBKEY }}  # optional: pin the signer

查看 Self-Coding Bench,了解跨模型的实时可靠性数据。


工具

Agent 可使用 23 个面向模型的高级工具(Claude-Code 风格),每个工具都附有详细说明,涵盖用法、边缘情况和反模式。底层会将请求路由到约 60 个内部处理程序(src/tools_impl.py)。

工具用途
Read · Write · Edit读取文件;创建/覆盖文件;精确替换字符串(内部会转换为 SEARCH/REPLACE)。
Bash · BashOutput在超时限制内运行 shell 命令;轮询长时间运行的后台任务。
Grep · Glob正则表达式内容搜索(如有则使用 ripgrep);按模式列出文件。
Agent · Orchestrate将子任务委派给子 Agent;运行由子 Agent 组成的并行 DAG(参见功能)。
TaskCreate · TaskUpdate以任务列表的形式跟踪和更新多步骤工作。
AskUserQuestion提出澄清问题,可附带多选项。
Skill · ToolSearch调用已安装的技能;按关键字在运行时发现工具。
WebFetch · WebSearch将 URL 抓取为纯文本;搜索网页。
Recall从跨会话记忆中提取相关事实(已检查漂移)。
Retrieve提取封存到 content-ref 的大型工具结果的确切字节内容。
BusSend · BusInbox通过可验证的 Agent 消息总线发送/接收消息(防篡改协调)。
python (可选启用)CodeAct——将 Python 作为行动来运行,并可将工具用作函数。
NetCapture (可选启用)对你编写的应用进行可审计的 HTTP(S) 捕获——无需 cURL 即可调试 API 调用。
RemoteSignTip (可选启用)通过你控制的远程签名器为账本末端签名(密钥保存在主机之外)。

功能

除了核心的文件/Shell/搜索循环外,korgex 还提供了多个更深入的系统。风险较高的功能默认关闭,需主动启用(只需设置一个环境变量),并且每项操作都会记录到可验证账本中。

  • CodeAct — 以代码作为操作空间(KORGEX_CODEACT_ENABLE=1)。这是一个持久化、按燃料计量的 Python 内核,模型可以编写代码,将工具作为函数调用——比每轮调用一个工具更密集。嵌套执行轨迹会记录到账本中。启用后,若存在相应后端,内核默认会进行 OS 沙箱隔离:Linux 上使用 bubblewrap,macOS 上使用 Seatbelt,将其限制为无网络访问且只能写入工作区(KORGEX_CODEACT_ISOLATION=auto/required/off)。
  • 多 Agent 编排(KORGEX_PARALLEL_AGENTS,以及 Orchestrate 工具)。并发运行由子 Agent 组成的 DAG——原生支持账本且可验证,严格限制为一层嵌套,每次子运行都会链接到其父级之下。
  • 可审计的网络捕获(KORGEX_NETCAPTURE_ENABLE=1)。在本地 CA 签名的捕获代理下运行你编写的应用/脚本,并获取每次 HTTP(S) 交互的结构化、脱敏轨迹。捕获仅限于指定进程,且会在记录前屏蔽机密信息。
  • 可验证浏览器(KORGEX_BROWSER_STEALTH、KORGEX_BROWSER_EVAL)。由 CDP 驱动的快照→操作浏览器自动化,记录到账本中;隐身模式需主动启用。
  • 远程签名(KORGEX_REMOTE_SIGNER_*)。通过由你拥有并控制的 HTTP 签名器,为账本末端签名,因此签名密钥可以存放在 Agent 主机之外(例如另一台机器或 HSM)。失败时默认拒绝:使用 bearer token、主机允许列表、可选的公钥固定,以及本地签名验证。
  • 可验证 Agent 总线(korgex bus、KORG_BUS_*)。Agent 通过由 Ed25519 签名且具备防篡改功能的 korg-ledger 日志进行协调——“谁说了什么”由签名证明,而非仅凭声称。
  • 回忆 + 记忆——跨会话记忆,会根据来源基线检查漂移(可验证认知)。
  • 本地模型(korgex local)。硬件感知顾问(CPU/RAM/GPU/VRAM → 通过 llmfit 提供按适配度评分并排序的推荐,可选),可将本地 Ollama 模型配置为默认模型。在 Apple Silicon 上,korgex local --omlx 会连接正在运行的 omlx MLX 服务(兼容 OpenAI,支持连续批处理和分层 KV 缓存):直接运行命令会列出它正在提供服务的模型,--omlx --use <model-id> 会将指定模型配置为默认模型(非默认端口需添加 --omlx-url)。korgex 不会重新实现推理功能——它只会指向本地端点。

安全与沙箱

  • 破坏性命令防护(默认开启;KORGEX_COMMAND_GUARD)。在 Bash(以及 CodeAct 桥接)上实施白名单优先、识别引号和注释的基础防护,拒绝明显具有破坏性的命令;拦截操作会在账本中记录为防篡改的 command_guard.block 事件。
  • 出站/数据外泄防护(标记模式下默认开启;KORGEX_EGRESS=off|flag|redact|block)。通过出站工具(WebFetch/WebSearch/BusSend/browser_navigate/MCP/网络 Bash)检查离开隔离环境的数据形态:检测机密信息的特征形态(复用账本脱敏器的模式)和大型编码数据块。flag 会发出警告并记录 egress.flag 判定,但绝不会修改或拦截内容(仅附加记录);redact 会在出站载荷离开前遮蔽机密信息;block 会拒绝操作。每次检测都会在账本中记录防篡改判定,且仅包含发现内容的形态——原始机密信息会从记录中脱敏,因此可共享的账本绝不会成为数据外泄渠道。可选择启用目标控制:KORGEX_EGRESS_ALLOW/KORGEX_EGRESS_DENY(以逗号分隔的主机名)。
  • Bash 沙箱(KORGEX_SANDBOX=modal|docker|direct|auto)。控制 Shell 执行的隔离方式。
  • CodeAct 操作系统隔离——代码内核默认使用沙箱(Linux/bubblewrap · macOS/Seatbelt);设置 KORGEX_CODEACT_ISOLATION=required 可在隔离失败时拒绝运行,设置 =off 可禁用。
  • **编辑确认。**在 TUI 中对关键文件执行 Edit/Write 时,会显示差异并提示输入 [y/N];编辑策略可通过 KORGEX_EDIT_POLICY 配置。
  • **所有强大功能默认需选择启用。**CodeAct、NetCapture、远程签名和浏览器隐身功能默认关闭,需手动开启。

CLI 参考

$ korgex --help
usage: korgex [-h] SUBCOMMAND ...

korgex — autonomous coding agent. Pass a naked prompt to run the agent, or use a subcommand.

任何非子命令参数都会被视为提示词:korgex "create hello.txt with 'hi'"。

标志
标志用途
--model MODEL覆盖模型(例如 claude-sonnet-4-6、gpt-4o、openai/gpt-4o-mini)。优先级始终高于 --mode。
--mode {plan,execute,explore,review,debug,research}基于模式选择模型(参见多模型路由)。
--mcp启动时从 mcp.json 加载 MCP 服务。
--quiet / -q禁用流式 TUI;仅输出最终结果。适用于管道、脚本和 CI。
--version / -V打印 korgex 版本并退出。
--resume恢复上次会话——从可验证账本中重放其对话记录。若提供提示词,则恢复会话并运行该提示词;若直接运行 korgex --resume,则在该上下文中重新打开 REPL。
子命令
子命令行为
korgex setup连接模型提供商(可连接任意提供商)——将密钥和默认模型保存到 ~/.korgex/config.json。
korgex init为仓库搭建入门版 AGENTS.md(检测技术栈以及测试/构建命令;绝不覆盖现有文件)。
korgex skills列出技能;install <ref> / search <query> / adopt <dir> 可从开放的 Agent-Skills catalog 获取技能(本地目录、git URL 或 owner/repo[@skill]),并标记为 trust: installed;check/update [name|all] 可刷新从 git 获取的技能;export <name|all> [claude|cursor|codex|<dir>] 可将 korgex 技能(包括自行学习的技能)导出到其他 Agent。
korgex sessions列出此仓库账本中的近期会话(使用 korgex --resume 恢复会话)。
korgex commands列出自定义斜杠命令(内置、项目级、用户级);在 REPL 中使用 /<name> 调用。
korgex local推荐适合此计算机的本地模型(并可选择配置)。
可验证的认知
korgex verify [journal]验证账本的哈希链和因果 DAG 完整无损(退出码为 0/1,适用于 CI)。
korgex trace显示因果认知轨迹——Agent 做了什么,以及是什么导致了这些操作。
korgex why <path>追溯文件被修改的原因,沿因果链回溯至对应提示词。
korgex cost根据账本记录的令牌数估算本次会话的花费。
korgex drift扫描持久记忆,检查其是否偏离源基线(退出码为 0/1)。
korgex audit [--html f]将已运行的会话审计到可验证账本中(自动发现 Claude Code 日志)。
korgex import <file>将其他供应商的会话转录重放到 korg-ledger@v1 日志中。
korgex trajectory将日志导出为带有可验证来源标记的训练轨迹。
korgex bus基于防篡改的 korg-ledger 日志提供可验证的 Agent 消息总线。
MCP 与集成
korgex mcp管理 MCP 服务——在 mcp.json 中添加/列出/移除 stdio 或远程(url+auth)服务。
korgex mcp-server运行 korg-ledger MCP 服务(基于 stdio 的 JSON-RPC)——供任何 MCP 主机执行验证/审计/导入。
korgex diag <path>报告文件的语言服务诊断信息(错误/类型)——尽力而为。
仪表板/编辑器
korgex acp通过 stdio 将 korgex 作为 Agent Client Protocol Agent 运行,以便 ACP 编辑器(如 Zed)驱动它——实时流式传输工具调用活动和回复文本。
korgex serve · dashboard启动 FastAPI 仪表板(默认地址为 127.0.0.1:8090),并可选择是否打开 VS Code 伴随组件。
korgex status · stop报告/终止后台后端。
korgex install-extension将已编译的 .vsix 安装到本地 VS Code。
从编辑器驱动 korgex(ACP)

korgex 以 Agent 的身份支持开放的 Agent Client Protocol,因此支持 ACP 的编辑器可以直接驱动它——在编辑器的 Agent 面板中使用一个可验证、跨厂商的 Agent。在 Zed 中,在 settings.json 里将 korgex 添加为外部 Agent:

{
  "agent_servers": {
    "korgex": { "type": "custom", "command": "korgex", "args": ["acp"], "env": {} }
  }
}

Zed 要求每个外部 Agent 都设置 "type": "custom"——否则 Zed 会拒绝整个 agent_servers 块("missing field type"),korgex 也不会显示。如果 Zed 无法在其(精简的 GUI)PATH 中找到 korgex,请在 command 中使用完整的二进制文件路径(例如 ~/.local/bin/korgex)。编辑设置后,Zed 会热重载;如果 korgex 仍未显示,请完全退出并重新打开 Zed。

然后从 Agent Panel 的 New Thread 菜单中选择 korgex。运行期间,编辑器会实时显示 tool_call 活动(读取/编辑/运行/搜索卡片,编辑时附带内联差异预览),并流式显示回复文本——这些内容由同一防篡改账本支持,因此整个会话都可通过 korgex verify 验证。(编辑器每条消息处理一个提示词轮次;支持嵌入的 @file 上下文和粘贴的资源。)

默认情况下,korgex 会自由执行。若要让编辑器审批编辑(显示包含 Allow / Allow-don't-ask-again / Reject 选项的 session/request_permission 提示),请使用 KORGEX_EDIT_POLICY=ask 运行:

{ "agent_servers": { "korgex": { "type": "custom", "command": "korgex", "args": ["acp"], "env": { "KORGEX_EDIT_POLICY": "ask" } } } }

环境变量

核心

变量用途默认值
ANTHROPIC_API_KEY当模型 ID 包含 "claude" 或以 "anthropic/" 开头时使用。—
OPENAI_API_KEY用于所有非 Anthropic 模型。—
KORGEX_API_KEY / KORGEX_API_URL用于兼容 OpenAI 的端点(OpenRouter、Ollama、vLLM 等)的通用密钥和基础 URL。— / https://api.openai.com/v1
KORGEX_MODEL未指定 --model 或 --mode 时使用的默认模型。claude-sonnet-4-6
KORGEX_PROVIDER强制指定传输方式(openai|anthropic),覆盖基于模型 ID 的自动检测。自动检测
KORGEX_MAX_ITERATIONS放弃前 Agent 循环的最大迭代次数。30
KORGEX_MCP设为 1 可从 mcp.json 自动加载 MCP 服务。未设置
KORGEX_SANDBOXmodal|docker|direct|auto — bash 隔离方式。auto
KORGEX_DASHBOARD_HOST仪表板绑定的主机。默认为 localhost;仅在经过身份验证的代理后方设为 0.0.0.0。127.0.0.1

功能(选择启用)

变量用途
KORGEX_LEAN_CONTEXT · KORGEX_LEAN_CONTEXT_TOKENS注入与提示词相关的精简、已验证账本上下文,而非保留完整历史记录(默认预算为 800),让较小的/可自托管模型也能运行循环。
KORGEX_CODEACT_ENABLE · KORGEX_CODEACT_ISOLATION启用 CodeAct 代码内核;操作系统隔离方式为 auto(默认 — 在可用时使用沙箱:Linux/bubblewrap、macOS/Seatbelt)· required(失败时关闭)· off。
KORGEX_NETCAPTURE_ENABLE启用可审计的 HTTP(S) 捕获工具。
KORGEX_PARALLEL_AGENTS多 Agent 编排的并发数。
KORGEX_REMOTE_SIGNER_TOKEN · _ALLOWED_HOSTS · _PUBKEY · _REQUIRE_HTTPS远程签名器身份验证、主机允许列表、固定公钥、强制使用 https。
KORGEX_BROWSER_STEALTH · KORGEX_BROWSER_EVAL浏览器隐身模式;允许在页面内执行 evaluate。
KORGEX_COMMAND_GUARD切换破坏性命令保护(默认开启)。
KORGEX_EDIT_POLICY编辑确认策略。
KORGEX_WEBHOOK_SECRET · KORGEX_WEBHOOK_ALLOW_UNSIGNEDGitHub webhook HMAC 密钥;除非明确设为 KORGEX_WEBHOOK_ALLOW_UNSIGNED=1 以供本地/开发环境使用,否则会拒绝未签名的 webhook。

账本与总线

变量用途默认值
KORG_JOURNAL_PATH持久化 JSONL 账本;内容寻址的 blob 写入其旁边。.korg/journal.jsonl
KORG_LEDGER_HMAC_KEY设置后,链将使用 HMAC 密钥保护——具备防篡改能力,而不仅仅是篡改可检测。未设置
KORG_BUS_AGENT · KORG_BUS_JOURNAL · KORG_BUS_KEY可验证总线的 Agent ID、总线日志和 Ed25519 密钥。—

提供方检测规则:如果模型 ID 包含 "claude" 或以 "anthropic/" 开头,则使用 Anthropic SDK;否则使用兼容 OpenAI 的 SDK(OpenAI、OpenRouter、Ollama、DeepSeek、vLLM 等)。设置 KORGEX_PROVIDER=openai 可通过兼容 OpenAI 的端点调用 claude/anthropic/* ID(例如通过 OpenRouter 使用 Claude)。


多模型路由

--mode 会根据工作类型选择合适的模型:

模式模型生成参数
planOpus 4.7max_tokens=64000、thinking={budget_tokens: 20000}、temperature=0.7
executeSonnet 4.6max_tokens=64000、temperature=0.3
exploreOpus 4.7max_tokens=32000、temperature=0.5
reviewSonnet 4.6max_tokens=16000、temperature=0.3
debugHaiku 4.5max_tokens=16000、temperature=0.2
researchOpus 4.7max_tokens=32000、temperature=0.7

明确指定的 --model 始终优先于 --mode。两者均未设置时,默认使用 Sonnet 4.6。

korgex --mode plan "architect a multi-tenant billing system"
korgex --mode debug "trace why this 500 is happening"
korgex --mode execute "implement the plan we just made"

MCP 集成

简而言之:MCP 是面向 AI 的开放式“应用商店”标准,可让 korgex 接入外部服务(GitHub、你的文件、数据库,……),无需编写自定义胶水代码。

korgex 内置原生 MCP(Model Context Protocol)客户端。mcp.json 中的任何 MCP 服务都会成为 Agent 工具集的一部分。你可以通过命令行使用 korgex mcp 管理这些服务(添加、列出、移除 stdio 或远程 URL+身份验证服务),也可以使用 korgex mcp catalog / korgex mcp add <alias> 一键应用预设。值得一提的是:korgex mcp add mise 会接入 mise 自带的 Agent 服务,让 Agent 获取项目的工具版本、环境变量和可运行任务(以及 run_task),所有内容都可通过账本验证。

korgex 本身也是 MCP 服务

korgex mcp-server 通过 JSON-RPC/stdio 暴露可验证认知的基础设施,让任何 MCP 宿主(Claude Desktop、Cursor,……)都可以调用:

  • korg_verify — 证明 korg-ledger 日志防篡改且完整;
  • korg_audit — 审计宿主 Agent 自身的 Claude Code 日志(导入并验证),零配置;
  • korg_import — 将供应商会话记录导入可验证的链式账本。
{ "mcpServers": { "korg-ledger": { "command": "korgex", "args": ["mcp-server"] } } }

已列入 MCP Registry — mcp-name: io.github.New1Direction/korg-ledger。

配置与使用
{
  "mcpServers": {
    "github":     { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"],     "env": { "GITHUB_TOKEN": "ghp_..." } },
    "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] }
  }
}
korgex --mcp "create a GitHub issue summarizing today's bug"

Agent 会在启动时发现每个服务的工具,将它们注册到面向用户的工具列表中,并将调用路由回对应的服务。服务故障会被记录并跳过,不会导致 Agent 崩溃。


插件

无需派生项目即可扩展 korgex。将 .py 文件放入 ~/.korgex/plugins/(全局)或 <repo>/.korgex/plugins/(项目本地),并在其中定义 register(registry) 函数,插件便会在启动时接入 Agent 循环。

# ~/.korgex/plugins/notify.py — ping me when a file is edited
def register(reg):
    @reg.on("post_tool")
    def on_edit(payload):
        call = payload["call"]
        if call["name"] in ("Edit", "Write"):
            print(f"  ✎ touched {call['args'].get('file_path')}")

生命周期钩子: on_user_prompt(每轮开始时)、pre_tool(工具运行前)、post_tool(工具返回后)、on_stop(运行结束时)。插件在进程内运行,拥有完整访问权限——只安装你信任的插件——并且具备故障安全机制:无法导入、缺少 register 或引发异常的插件都会被记录并跳过,不会导致启动崩溃。


流式 TUI

当 stdout 是 TTY 时,Agent 会通过 Rich 实时流式输出:思考内容以暗淡的斜体显示(Anthropic),文本逐字符显示,工具调用显示临时旋转指示器(⠋ Read(file_path=src/foo.py)),关键编辑会请求 [y/N] 差异确认,并支持优雅地通过 Ctrl+C 中断(连按两次强制终止)。当 stdout 被管道重定向、处于 CI 环境或使用 --quiet 时,流式输出会自动停用。OpenAI/OpenRouter 的流式输出也通过同一渲染器;工具调用增量会跨数据块累积。


架构

系统概览
flowchart TD
    U["You — CLI / REPL / ACP editor<br/>(src/cli.py · repl.py · acp.py)"] --> AG

    subgraph core["KorgexAgent loop — src/agent.py (plan, act, verify)"]
        AG["Agent loop: run_task()<br/>system prompt + memory + task list"]
        GATE["Per-call gates<br/>plan-mode · edit-policy · command / egress guard · hooks"]
        AG --> GATE
    end

    AG -->|"normalize tool-use shape"| PROV{"Provider<br/>(model id / KORGEX_PROVIDER)"}
    PROV -->|"claude family"| ANT["Anthropic SDK"]
    PROV -->|"everything else"| OAI["OpenAI-compatible SDK<br/>OpenAI · OpenRouter · Ollama · Grok · Nous · Venice · Gemini"]
    ANT --> GATE
    OAI --> GATE

    GATE --> TR["Tool router<br/>src/tool_abstraction.py"]
    TR --> BT["Built-in handlers<br/>file · Bash · search · git · GitHub · browser"]
    TR --> CA["CodeAct kernel<br/>Python-as-action, fuel/mem-metered (opt-in)"]
    TR --> MCP["MCP servers<br/>src/mcp_client.py"]

    BT --> LED
    CA --> LED
    MCP --> LED
    GATE -. "every decision + result" .-> LED

    LED[("korg-ledger · src/korg_ledger.py<br/>append-only · hash-chained · causal DAG")]
    LED --> HEAL["Test gate + self-heal<br/>src/test_gate.py · self_healing.py"]
    HEAL -->|"red, retry"| AG
    LED --> VERIFY["verify · trace · why · audit · receipt<br/>Ed25519 signing"]
    VERIFY --> U
工具路由 — 稳定的模型侧名称 → 内部处理程序
User tool call (LLM-visible):     Internal handler (src/tools_impl.py):
─────────────────────────────     ─────────────────────────────────────
Read(file_path=...)         →     tool_read_file(filepath=..., context=...)
Write(file_path=..., ...)   →     tool_write_file(filepath=..., ...)
Edit(file_path, old, new)   →     tool_replace_with_git_merge_diff(merge_diff="<<<<<<< SEARCH ...")
Bash(command=...)           →     tool_run_in_bash_session(command=...)

路由器(src/tool_abstraction.py)会在 _TOOL_ROUTING 中查找名称,应用 param_map 或自定义 adapter,过滤处理程序不接受的关键字参数,自动注入 context={'repo_root': cwd},并将异常捕获为 {"error": ...},确保单个工具故障不会终止循环。来自 MCP 的工具会绕过 _TOOL_ROUTING,通过 MCPServerManager.call_tool() 分发。

Agent 循环
flowchart TD
    S(["prompt"]) --> SEND["LLM.send(messages, tools)"]
    SEND --> Q{tool calls?}
    Q -->|no| F(["final result"])
    Q -->|yes| RT["route_tool_call(name, args)"]
    RT --> REC["record event → korg-ledger"]
    REC --> APP["append tool_result to messages"]
    APP --> SEND

优先规划的系统提示词会指示 Agent 先规划、进行验证、先诊断再修改,并且绝不修改构建产物(src/agent.py 中的 SYSTEM_PROMPT)。账本使用原生 Python 实现(src/korg_ledger.py、src/ledger_spec.py),无需外部运行时。


项目结构

korgex/
├── src/
│   ├── agent.py              # KorgexAgent — main loop, provider branching, streaming
│   ├── cli.py · repl.py      # argparse dispatch · interactive REPL
│   ├── tool_abstraction.py   # USER_TOOLS registry + router + MCP integration
│   ├── tools_impl.py         # ~60 internal handlers (file ops, git, GitHub, web, …)
│   ├── model_router.py       # mode → model mapping (plan/execute/debug/…)
│   ├── korg_ledger.py · ledger_spec.py · signing.py   # verifiable ledger + Ed25519
│   ├── codeact/              # code-as-action kernel (fuel-metered, isolated, traced)
│   ├── orchestrate.py        # multi-agent DAG orchestration
│   ├── recall.py · memory.py · memory_drift.py        # cross-session memory + drift
│   ├── command_guard.py · sandbox.py                  # destructive-cmd floor · bash sandbox
│   ├── netcapture.py · remote_signer.py · browser.py  # opt-in capability modules
│   ├── structured_output.py · skills.py · local_model.py
│   ├── mcp_client.py · dashboard.py · interactive.py
│   └── ...
├── docs/                     # CLI reference, comparison, getting-started, tools-reference, …
├── spec/korg-ledger-v1/      # the ledger spec (SPEC.md, EVENTS.md)
├── tests/                    # ~1,657 passing tests
├── .github/workflows/        # Linux CI (3.10–3.13) + PyPI publisher (OIDC)
├── pyproject.toml
└── README.md

开发与测试

git clone https://github.com/New1Direction/korgex.git && cd korgex
uv venv .venv && source .venv/bin/activate      # or python -m venv .venv
uv pip install -e ".[dev]"                       # pytest, build, ruff, …

ruff check src/                                   # lint
pytest -q                                         # the full suite

pyproject.toml 是软件包依赖的权威来源。requirements.txt 作为兼容性镜像保留,供源码检出和旧版自动化使用;开发时优先使用带附加依赖的可编辑安装。

测试套件包含 1,600+ 项测试,不调用在线大模型(所有内容均通过单元测试验证);每次推送和 PR 都会在 Linux CI 上针对 Python 3.10、3.11、3.12、3.13 运行。主要覆盖领域:Agent 循环(路由、提供方架构、模式/模型解析、循环保护、停滞分类器、压缩)、工具(模糊 Edit、编辑新鲜度、后台 Bash、Web)、可验证账本(哈希链 + 因果 DAG、脱敏、Ed25519 签名总线)、CodeAct(内核隔离、燃料、工具桥接)、MCP(命名空间多服务路由器、OAuth 刷新、完整往返)、提示词缓存、技能(信任层级、自我学习、策展器)以及 REPL。


构建与发布

发布流程已自动化。更新 pyproject.toml 中的 version,更新 CHANGELOG.md,合并到 main,然后创建 GitHub Release——PyPI 发布工作流会在 release: published 时触发,并通过 OIDC Trusted Publishing 上传(同时附带数字证明)。无需手动处理令牌。

gh release create vX.Y.Z --title "vX.Y.Z" --notes "…"   # → triggers .github/workflows/publish.yml → PyPI

如需在本地构建以供检查:运行 python -m build,然后运行 python -m twine check dist/*。


故障排除

korgex: No API key found——设置 ANTHROPIC_API_KEY、OPENAI_API_KEY 或 KORGEX_API_KEY 其中之一(对于非 OpenAI 端点,还需设置 KORGEX_API_URL),或运行 korgex setup。

ModuleNotFoundError: No module named 'anthropic'(或 openai、rich)——依赖项尚未安装:运行 pip install -e .(会安装 pyproject.toml 中的所有依赖项)。

Agent 在工具调用上无限循环——降低上限:运行 export KORGEX_MAX_ITERATIONS=10,并使用 --quiet 仅查看最终状态。

--mcp 启动缓慢——客户端会依次连接到每个服务并等待握手;mcp.json 中无法访问的条目都会在跳过前超时。请移除失效的服务,或使用 korgex mcp 管理它们。

verify 报告中断——这是预期行为:它发现并定位了被篡改或拼接的事件。报告中的 seq_id 就是链发生分歧的位置。


已知限制

这些限制目前仍然存在;欢迎提交 PR。

  • OpenAI 流式输出渲染的事件少于 Anthropic。 Anthropic 会发出思考块和消息增量用量信息;OpenAI 只会发出文本和工具调用块。两者都能正确渲染,但 Anthropic 的 TUI 信息更丰富。
  • 尚未实现仪表盘身份验证。 默认绑定到 127.0.0.1;如果前面没有终止身份验证的反向代理,请勿设置 KORGEX_DASHBOARD_HOST=0.0.0.0。
  • VS Code sidecar 是仪表盘的旧版配套组件;korgex 的主要界面是终端 REPL。

许可证

MIT——请参阅 LICENSE。


相关项目

  • Model Context Protocol——korgex 实现的开放 MCP 标准(同时作为客户端和服务端)。
  • korg · korgchat——围绕 korg-ledger 构建的更广泛生态系统。
  • llmfit——korgex local 所基于的硬件感知型本地模型顾问(可选)。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。