| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
devloop 为 AI 编码 agent 提供一条受控的 PR/MR 开发闭环:进入仓库、在正确分支开发、验证受影响的 Component、提交并推送、创建或复用 PR/MR,最终由人完成 merge。
enter repo → develop → normalize → lint ∥ test → commit → push → PR/MR → human merge
它支持 GitHub PR 与 GitLab MR,并根据仓库的 origin 自动选择平台。当前可运行在 Claude Code 和 Codex。
AI agent 写代码时,很多损耗不来自代码本身,而来自开发流程缺少可靠边界:
devloop 用状态投递让 agent 看到当前事实,用受控 Git 事务和执行级守卫约束副作用,并用 managed worktree 隔离并发开发。
领域主链是 PR/MR → Repo → Component。Repo 是 git、branch 和 forge 状态的边界;Component 是 lint/test 的验证单位;workspace 只是可选的多仓聚合上下文,单仓库同样完整支持。
运行时要求:Python 3.10+。devloop 会从 PATH 自动选择满足版本要求的 Python;需要固定解释器时设置 DEVLOOP_PYTHON。
/plugin marketplace add https://github.com/compforge/devloop.git
/plugin install devloop@devloop
codex plugin marketplace add https://github.com/compforge/devloop.git
codex plugin add devloop@devloop安装后新开一个 session。Codex 如果要求审核 hook,可在 /hooks 中信任 devloop hooks。
通常不需要手工初始化:第一次进入 Git 仓库时,hook 会自动创建所需的 .devloop/ 运行态。之后直接告诉 agent:
验证改动
gcampr
devloop 会选择当前仓库和受影响的 Component,完成验证、提交、推送并返回 PR/MR 地址。创建 PR/MR 和状态刷新需要对应平台的凭据,优先使用 GITHUB_TOKEN、GH_TOKEN 或 GITLAB_TOKEN。
验证不是 lint/test 两种模式,而是对同一份稳定代码执行的多个质量检查:
normalize: make fix
↓
stable Component content
├─ static quality: make lint-ci | make lint
└─ behavior: make test
每个 Component 通过 Makefile 暴露稳定入口:
| Target | 要求 |
|---|---|
| make fix | 可选;执行 formatter/fixer,可以修改源码 |
| make lint-ci 或 make lint | 非交互、只读,所有静态检查通过时返回 0;优先使用 lint-ci |
| make test | 非交互、只读,默认运行完整测试套件,通过时返回 0 |
项目可以额外支持 Component 相对路径组成的 TEST_FILES:
make test TEST_FILES="tests/a.py tests/b.py"TEST_FILES 缺失或为空时必须保持全量测试语义。提交期验证和单独 run-test 在项目显式支持 TEST_FILES 且改动包含测试文件时聚焦执行 changed tests;完整 validate 仍运行完整测试套件。缺少 make test 时,devloop 会提示项目补充统一入口;完整测试运行超过 10 秒且尚未支持 TEST_FILES 时,会在运行结束后给出非阻断的优化提示。
Go 不应为了统一接口传单个 _test.go 文件;应由项目暴露 package 或 test-name 选择。完整契约见 spec.md,并发和 Makefile 示例按语言查看 Python、Go 或 Node.js。devloop 不会擅自为项目新增工具、依赖或 Make target。
这些名称表达事务结果,不要求用户记住底层脚本。Claude Code 同时提供同名 slash command;Codex 可直接通过自然语言或 skill 名触发。
| 操作 | 结果 |
|---|---|
| validate / “验证改动” | normalize 后并发运行 lint 与 test,报告完整验证结果 |
| “修下 lint” / “跑下测试” | 只执行指定检查,并标记为部分验证 |
| gcam | commit,不 push |
| gcamp | commit + push,不创建新的 PR/MR |
| gcampr | commit + push + 创建或复用 PR/MR |
Git 事务默认处理本次相关改动,也可以通过可重复的 --file <path> 精确限定提交范围。保护分支或已失效分支上的新工作必须提供新 branch,devloop 会从 origin/<target> 建立基线,不从当前 HEAD 偷带提交。
这些操作不依赖 session 当前停在哪个目录:优先解析显式 --repo,其次使用 cwd 所在仓库,再使用当前 session 最近绑定的仓库;无法唯一确定时会拒绝猜测。
并发 checkout、rebase 和 PR/MR 管理的详细流程见:
用户级配置位于 ~/.devloop/config.json。仓库或 workspace 可在自己的 .devloop/config.json 中提供局部覆盖;读取顺序是默认值、用户级配置、由外到内的本地配置,离 Repo 最近的值优先。
所有 lifecycle hook 默认关闭。一个常见配置是提交前验证,并在 PR/MR 创建后异步 review:
review 是异步 signal hook,不阻塞 commit 或 PR/MR;默认引擎是 CCR,也可以配置为 ocr。结果会在后续 session 中浮现;已有开放 PR/MR 时还会尝试发布 review comment。
完整配置结构和 forge host 配置见 config/config.example.json。token 建议使用环境变量;如果写入配置文件,不要提交仓库内的 .devloop/config.json。
更新插件:
# Claude Code
/plugin marketplace update devloop
/plugin update devloop
# Codex
codex plugin marketplace upgrade devloop
codex plugin remove devloop@devloop
codex plugin add devloop@devloop
更新后新开一个 session,使运行时重新加载 hooks 和 skills。用户级配置保存在 ~/.devloop/,不会被插件更新删除。
如果需要提前注册单仓库或聚合工作区,可以手工运行:
# Claude Code: 将 <PLUGIN_ROOT> 替换为 ${CLAUDE_PLUGIN_ROOT}
# Codex: 将 <PLUGIN_ROOT> 替换为 ${PLUGIN_ROOT}
<PLUGIN_ROOT>/scripts/python <PLUGIN_ROOT>/scripts/init_repo.py
<PLUGIN_ROOT>/scripts/python <PLUGIN_ROOT>/scripts/init_workspace.py <workspace>| Back | FazBrowse Home | New Git URL |
{ "lifecycle": { "default": { "pre_commit": ["lint", "test"], "post_commit": [], "pre_mr": [], "post_mr": ["review"] }, "repos": {} }, "review": { "tool": "ccr" }, "worktree": { "keep_recent": 5 } }