Skip to content

Lion-1209/coderio

Repository files navigation

coderio

中文 | English

一个技能驱动的编程 agent——结构化 harness 约束、可折叠思考的 TUI、crew 编排。基于 langchain + langgraph + Lion-Skills,Windows 优先,跨平台。

为什么做这个项目

一开始只是想花掉阶跃送的 token,顺便走一遍 langchain 全技术栈搭 agent 的流程。框架搭出来之后觉得单纯的 REPL + CLI 不太酷,就开始折腾 TUI 了——目前 TUI 的效果我自己还挺满意的。

不过整体框架并没有细细调优,所以目前只是一个工作之余搓出来的 demo。开源的目的不是做一个产品,而是希望给那些用 langchain 技术栈的人做一点小参考:ReAct 循环怎么搭、harness 怎么做结构约束、TUI 怎么做流式渲染、crew 怎么编排——这些代码都在,能跑,欢迎拿去玩。

关于名字:coderio = code + rio(不是 coder + io 哦)。我的英文名是 Lion,本来想叫 codelion,但感觉怪怪的,所以就叫 coderio 了。


coderio 是一个技能驱动的编程 agent。它的"骨架"是 Lion-Skills 套件(clarify→spec→task→execute→verify→commit 工作流),coderio 给它配上真正能干活的工具、一个强制遵循工作流的 harness 状态控制层,以及交互式 Textual TUI。参照对象是 claude code / codex / zcode。

核心理念:skill 是操作手册,harness 是执行纪律,工具是手。三者分层,互不替代。


特性

  • harness 四道门硬约束:agent 写了代码但没运行验证就想说"完成"时,harness 拦截终止、强制续跑——不是提示词软规则,是系统级结构控制(基于工具调用 ground truth)。VerifyGate 解析 bash exit_code,测试失败不再当"验证通过";GroundingGate 跨 session 记忆已读文件 + 路径归一化(Windows 大小写不敏感)
  • 显式状态机:实时推导执行阶段(探索→规划→实现→验证→完成),状态栏显示任务阶段 + 模型活动双轴;每轮的 phase 时间线持久化到 session,可回放调试
  • 上下文自动压缩:长会话接近 token 上限时,旧消息自动总结成摘要,保留近期上下文 + tool_call/tool_result 配对完整性,避免超窗失败;空响应时主动压缩再重试(而非无意义重发"请继续")
  • context-rot 自动重启:检测到 agent 陷入工具调用循环或耗尽轮数上限时,从压缩后的干净上下文自动重试一次
  • 自动探测上下文窗口:首次配置时自动查询 provider 的 /v1/models/{id} 端点探测真实 context window(如 step-3.7-flash 的 256K),持久化到配置——压缩阈值精确匹配实际模型,不再用硬编码默认值
  • 意图分类:自动区分 CODE / QA / ANALYZE 三种意图,编码任务走工作流,问答直接答(中英双语信号词)
  • 渐进式披露:skill 正文按需加载,系统提示词 ~2K tokens 而非全量堆砌
  • 交互式 TUI:Textual 终端 UI,思考折叠(Ctrl+O)、流式输出、工具调用状态栏(动画 spinner + 步骤 + 任务阶段 + 计时器)、slash 命令自动补全、会话恢复选择器
  • 两种模式:交互式单 agent(日常)+ 6-agent crew 流水线(大需求,LangGraph 编排)
  • 工具错误韧性:工具调用失败变成 tool result 回灌给模型自我修正,不中断 turn
  • 工作区沙箱(读写分离):写工具(write_file/edit_file/multi_edit/bash cwd)路径必须 resolve 在工作区根目录内,超出即硬拒绝;读工具(read_file/grep/glob/list_dir)不受限,agent 可读工作区外的依赖/配置。--auto 模式也执行路径策略——跳过交互确认,不跳过安全边界
  • 多 provider + 命名 profile:智谱 GLM / 阶跃 StepFun 的 coding plan(Anthropic 协议)+ OpenAI 兼容;支持多套配置 profile,/profile 运行时切换

快速开始

安装

方式一:pip 一行安装(推荐,非开发者)

pip install "coderio @ git+https://github.com/Lion-1209/coderio.git"

装完直接 coderio 启动。

方式二:下载 Release wheel(离线/内网)

Releases 页面 下载最新的 coderio-*.whl,然后:

pip install coderio-0.1.0-py3-none-any.whl

方式三:从源码安装(开发者)

git clone https://github.com/Lion-1209/coderio.git
cd coderio
python -m venv .venv

# Windows (Git Bash)
.venv/Scripts/python.exe -m pip install -e ".[dev]"

# Linux / macOS
.venv/bin/python -m pip install -e ".[dev]"

要求:Python 3.11+,Windows 上需安装 Git Bash(bash 工具依赖)。

配置

首次运行会触发 onboarding 向导(选 provider、选模型、填 API key),配置自动写入 ~/.coderio/config.toml~/.coderio/credentials。向导验证 key 时会自动探测模型的上下文窗口大小并持久化,压缩阈值精确匹配实际模型。也可手动配置:

# ~/.coderio/config.toml
[model]
provider_id = "bigmodel_coding_plan"   # 智谱/阶跃/OpenAI/Anthropic/Ollama/自定义
default = "glm-5.2"
context_limit = 128000                  # (可选)onboarding 自动探测写入,0 = 用下面的默认值

[tools]
permission_mode = "auto"                # confirm | plan | auto
workspace_root = ""                     # 受信工作区根目录(空=用启动目录);写工具路径必须在此目录内

[context]
enabled = true                          # 长会话自动压缩(默认开)
trigger_ratio = 0.6                     # 达到上下文窗口 60% 时触发
keep_recent = 8                         # 保留最近 N 条消息不压缩
model_context_limit = 200000            # fallback:当 profile 未探测到 context_limit 时用

支持的 provider:

provider_id 说明 协议
bigmodel_coding_plan 智谱 GLM Coding Plan Anthropic
stepfun_coding_plan 阶跃 StepFun Step Plan Anthropic
bigmodel_api / stepfun_api 智谱/阶跃 API Key 直连 Anthropic / OpenAI
openai OpenAI 直连 OpenAI
anthropic Anthropic Claude 直连 Anthropic
ollama 本地 Ollama(无需 key) OpenAI
openai_custom 任意 OpenAI 兼容端点 OpenAI

API key 存在 ~/.coderio/credentials(POSIX 0600 / Windows icacls 保护)。

运行

# 交互式 TUI(Ctrl+O 展开思考、可滚动历史、/ 命令自动补全)
coderio
# 或直接(Windows)
.venv/Scripts/python.exe -m coderio.cli.app
# (Linux / macOS)
.venv/bin/python -m coderio.cli.app

# 指定 provider/model
coderio --provider bigmodel_coding_plan --model glm-5.2

# 6-agent crew 流水线(大需求)
coderio crew "实现一个待办事项命令行工具" --auto

# 管理 skill
coderio skills list
coderio skills install

TUI 命令

进入 TUI 后,输入 / 触发命令自动补全:

命令 作用
/help 显示所有命令
/exit /quit 退出
/config 查看当前配置(provider/model/mode)
/mode <confirm|plan|auto> 切换权限模式
/model <name> 运行时切模型
/skills 列出 skill(★ = 已激活)
/cost 查看本次会话 token 用量
/clear 重置上下文(新会话)
/sessions 列出最近会话
/resume 恢复历史会话(↑↓ 选择、Enter 恢复、输入过滤)

直接输入自然语言即可对话或下达编码任务。


架构

分层单体,依赖单向向下:

CLI 层 (cli/)          Typer app + Textual TUI + slash 命令
  │
Agent 层 (agent/)      ReAct 循环 + harness 状态控制 + 提示词构建
  │
编排层 (crew/)          6-agent LangGraph StateGraph(可选高级模式)
  │
能力层                  tools/ · skills/ · llm/ · session/ · config/

两种运行模式

单 agent(TUI) crew(流水线)
适用 日常交互、问答、编码任务 大需求、完整功能开发
agent 数 1 个(全工具) 6 个(每阶段工具物理隔离)
harness 硬约束生效 不生效(crew 自有 verify→修复循环)
编排 ReAct 循环 LangGraph StateGraph + interrupt

harness 四道门(核心)

强度 机制
VerifyGate 硬,逐级升级 写了代码没跑 bash 就声明"完成"→ 拦截、注入强制续跑;解析 bash exit_code,测试失败(非 0)不算验证通过;2 次后放行 + 红色警告
CompletionGate 有未完成 todo 就声明"完成"→ 拦截
GroundingGate 引用了从未 read_file 的代码位置就声明"完成"→ 拦截(grep/list_dir 不算读内容,防止分析建立在臆测上);跨 session 记忆已读文件,路径归一化(Loop.py == loop.py)
PlanGate 软提醒 没 todo 就写代码 → 工具结果追加 nudge

上下文治理(三层防线)

长会话最容易遇到的问题就是上下文窗口溢出和 agent"转晕"。coderio 有三层防线:

触发 机制
上下文压缩 input_tokens > 窗口的 60% 旧消息总结成 system 摘要,保留近期消息 + tool_call 配对完整性
空响应压缩 模型返回空响应(通常上下文过载) 先压缩上下文再重试,而非无意义重发"请继续"
context-rot 检测 同一工具调用重复 >3 次 / 达到 max_rounds 标记为 TurnResult.in_tool_loop / hit_max_rounds
自动重启 检测到 context-rot 从压缩后的干净上下文重跑同一 prompt(最多 1 次)

显式状态机

agent 执行阶段实时推导并显示在状态栏(步骤3 · [实现] 思考中 · 12.4s):

探索(read_file/grep)→ 规划(首次 write 无 todo)→ 实现(write + todo)
  → 验证(bash pytest)→ 完成

每轮的 phase 时间线持久化到 session jsonl(kind="phase_timeline"),可回放调试,但对模型不可见(不会污染上下文)。

详细架构设计见 docs/coderio-architecture.md


测试

# 全量单元测试(~15s)
# Windows (Git Bash):
.venv/Scripts/python.exe -m pytest -q
# Linux / macOS:
.venv/bin/python -m pytest -q

# 按模块
.venv/Scripts/python.exe -m pytest tests/agent/ -v    # Windows
.venv/bin/python -m pytest tests/agent/ -v            # Linux / macOS

# Live 验证(连真实模型端点,需设置 ANTHROPIC_API_KEY)
ANTHROPIC_API_KEY=<key> .venv/Scripts/python.exe scripts/verify_harness_live.py   # Windows
ANTHROPIC_API_KEY=<key> .venv/bin/python scripts/verify_harness_live.py           # Linux / macOS

三层测试设计:单元测试(逻辑)+ Live 验证(真实集成)+ 手动体验测试。


技术栈

依赖 用途
langchain >=0.3 ReAct agent 基础
langgraph >=0.2 crew 流水线状态图编排
langchain-anthropic >=0.2 智谱/阶跃端点接入(Anthropic 协议)
textual >=0.40 交互式 TUI
rich >=13 终端渲染
typer >=0.12 CLI 框架
deepagents >=0.6 实验性 engine(可选:pip install -e ".[deepagent]"

项目结构

src/coderio/
├── agent/          # ReAct 循环、harness、提示词、流式协议
├── cli/            # Typer app、Textual TUI、slash 命令、凭证/onboarding
├── crew/           # 6-agent LangGraph 流水线(orchestrator/agents/state)
├── tools/          # 12 个工具 + 权限门 + langchain 适配
├── skills/         # SkillStore 三层加载 + Lion-Skills 0.3.0(bundled)
├── config/         # 三层 TOML 配置合并
├── session/        # jsonl 会话存储 + resume
└── llm/            # 模型工厂(provider 注册表)

Lion-Skills 作为 bundled skill 随包分发(src/coderio/skills/lion-skills/),无需单独安装。


已知限制

  • deepagents engine 是实验性的:harness 作为 middleware 可用,但默认仍是 ReAct engine。deepagents 已改为可选依赖
  • Windows 编码:shell 输出在 GBK locale 下有内置兼容方案
  • crew 持久化:当前用内存 MemorySaver(会话内),sqlite 持久化待后续

贡献

欢迎贡献!请阅读 CONTRIBUTING.md


License

MIT(见 LICENSE)。Bundled Lion-Skills 同为 MIT(见 THIRD_PARTY_LICENSES.md)。

About

A skill-driven coding agent — structural harness, foldable-thinking TUI, crew orchestration. Windows-first, cross-platform.

Resources

License

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages