(下文有借助 gpt 润色)
环境
背景
当前项目使用 Trellis 管理单个开发任务的 Agent 工作过程与项目知识:
.trellis/tasks/ 保存每个任务的需求、设计、实施计划和检查记录;
.trellis/spec/ 保存项目规范与长期知识;
.codex/hooks.json 通过 Codex UserPromptSubmit hook,在每轮请求中注入当前 Trellis 任务状态;
- Trellis 在任务完成后更新项目规范、任务记录和开发日志。
希望继续保留 Trellis 的任务留档和项目知识更新能力,同时使用 LongHorizon-Harness 提供的 Manager、Executor、Auditor 长时间任务调度。
现象
在 Trellis 项目根目录执行:
lh-harness run --task "hi"
LongHorizon-Harness 默认在项目内部创建独立 workspace:
/path/to/project/
├── .codex/
│ ├── hooks.json
│ └── hooks/
│ └── inject-workflow-state.py
├── .trellis/
└── .lh-harness/
└── runs/
└── <run-id>/
└── workspace/
Manager 实际执行方式类似:
cd .lh-harness/runs/<run-id>/workspace &&
codex exec --json --skip-git-repo-check \
--dangerously-bypass-approvals-and-sandbox \
--model gpt-5.6-sol -
该 workspace 是空目录,但位于项目根目录下面。根据实际运行结果,Codex 仍会向父目录发现:
/path/to/project/.codex/hooks.json
/path/to/project/.codex/config.toml
/path/to/project/AGENTS.md
项目中的 hook 配置使用相对文件名:
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "python3 -X utf8 .codex/hooks/inject-workflow-state.py",
"timeout": 15
}
]
}
]
}
}
Codex 发现父目录的 .codex/hooks.json 后,hook 命令似乎仍以 run workspace 作为当前目录执行,因此实际尝试打开:
/path/to/project/.lh-harness/runs/<run-id>/workspace/.codex/hooks/inject-workflow-state.py
该文件不存在。手动在相同 workspace 执行 hook 命令时得到:
python3: can't open file \
'/path/to/project/.lh-harness/runs/<run-id>/workspace/.codex/hooks/inject-workflow-state.py': \
[Errno 2] No such file or directory
脱敏后的 lh-harness 日志
Manager 命令本身返回退出码 0:
{
"status": "done",
"error": null,
"metadata": {
"command": "cd .lh-harness/runs/<run-id>/workspace && codex exec --json ...",
"exit_code": 0,
"assistant_visible_output": "",
"stderr_chars": 0,
"stderr_tail": ""
}
}
Codex JSONL 轨迹只有:
{"type":"thread.started","thread_id":"<redacted>"}
{"type":"turn.started"}
{"type":"turn.completed","usage":{
"input_tokens":0,
"cached_input_tokens":0,
"cache_write_input_tokens":0,
"output_tokens":0,
"reasoning_output_tokens":0
}}
随后 lh-harness 将该轮记录为:
Next: blocked
Reason:
The manager produced no readable natural-language output.
仪表盘显示任务阻塞,需要人工继续或终止。反复继续只会创建新的零 token Manager 轮次。
对照测试
在另一个没有 .trellis 和 .codex/hooks.json 的项目中,保持相同 lh-harness 配置和 Codex 配置运行:
lh-harness run --task "hi"
默认空 workspace 可以正常获得 Manager 回复:
{"type":"thread.started","thread_id":"<redacted>"}
{"type":"turn.started"}
{"type":"item.completed","item":{
"type":"agent_message",
"text":"Current task state: ..."
}}
{"type":"turn.completed","usage":{
"input_tokens":35335,
"cached_input_tokens":3840,
"output_tokens":448,
"reasoning_output_tokens":78
}}
同一个 Codex CLI 在项目目录之外执行最小请求也能正常产生消息和 token。
因此,当前证据更接近以下组合条件:
- lh-harness 默认 workspace 位于项目内部;
- Codex 从 workspace 向父目录发现项目级配置和 hooks;
- hook 配置来自父项目;
- hook 命令中的相对文件名按 workspace 解析;
- hook 脚本缺失后,Codex 仍以退出码
0 和零 token 结束。
预期行为
希望至少满足以下一种行为:
方案 A:完整隔离
默认 workspace 不继承父项目的 Codex 配置、AGENTS.md 和 hooks。
方案 B:继承项目配置
如果默认设计允许继承父项目配置,那么 hook 命令应相对配置文件所在的项目根目录执行,或者 workspace 应包含运行项目所需的 .codex、.trellis 和业务文件。
方案 C:明确报告失败
如果 hook 执行失败,lh-harness 应将本轮标记为 Agent 启动失败,并展示 hook 错误。当前的退出码 0、零 token 和“Manager 没有自然语言输出”很难定位真正原因。
关于设计与集成方式的疑问
-
默认 workspace 的隔离范围是否只包含任务产物,还是也计划隔离 Codex 的项目级配置、AGENTS.md 和 hooks?
-
LongHorizon-Harness 是否推荐与 Trellis、Spec Kit 等项目任务框架共同使用,还是更适合作为独立的任务管理系统?
-
对于已经使用 Trellis 的项目,推荐的组合方式是什么?
- 将 lh-harness workspace 设置为项目根目录;
- 为每个 run 创建独立 Git worktree;
- 在 Manager 和 Auditor 中关闭项目 hooks,仅在 Executor 中保留;
- 将 Trellis 的任务文档和规范复制到 run workspace;
- 或采用其他方式。
-
lh-harness 是否适合增加以下配置能力?
[run]
inherit_project_config = false
codex_extra_args = ["--disable", "hooks"]
或者允许按角色配置:
[run.roles.manager]
inherit_project_hooks = false
[run.roles.executor]
inherit_project_hooks = true
[run.roles.auditor]
inherit_project_hooks = false
- 如果每个 run 使用独立 Git worktree,lh-harness 是否计划提供 workspace 初始化、项目复制或 worktree 创建能力?
使用需求
当前项目仍需要 Trellis 提供以下能力:
- 每个任务拥有独立的 PRD、设计、实施计划和检查记录;
- 任务结束后保留完整开发记录;
- 调试和实施过程中更新项目规范;
- 后续 Agent 可以读取历史任务和项目知识;
- 多个任务之间保持清晰的知识边界。
LongHorizon-Harness 的长时间任务调度、角色分离和独立审计很有价值。希望确认两套机制是否有推荐的组合方式,以及当前行为属于已知限制、设计选择,还是需要修正的兼容问题。
(下文有借助 gpt 润色)
环境
0.1.10.146.00.6.7codexgpt-5.6-sol背景
当前项目使用 Trellis 管理单个开发任务的 Agent 工作过程与项目知识:
.trellis/tasks/保存每个任务的需求、设计、实施计划和检查记录;.trellis/spec/保存项目规范与长期知识;.codex/hooks.json通过 CodexUserPromptSubmithook,在每轮请求中注入当前 Trellis 任务状态;希望继续保留 Trellis 的任务留档和项目知识更新能力,同时使用 LongHorizon-Harness 提供的 Manager、Executor、Auditor 长时间任务调度。
现象
在 Trellis 项目根目录执行:
lh-harness run --task "hi"LongHorizon-Harness 默认在项目内部创建独立 workspace:
Manager 实际执行方式类似:
该 workspace 是空目录,但位于项目根目录下面。根据实际运行结果,Codex 仍会向父目录发现:
项目中的 hook 配置使用相对文件名:
{ "hooks": { "UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "python3 -X utf8 .codex/hooks/inject-workflow-state.py", "timeout": 15 } ] } ] } }Codex 发现父目录的
.codex/hooks.json后,hook 命令似乎仍以 run workspace 作为当前目录执行,因此实际尝试打开:该文件不存在。手动在相同 workspace 执行 hook 命令时得到:
脱敏后的 lh-harness 日志
Manager 命令本身返回退出码
0:{ "status": "done", "error": null, "metadata": { "command": "cd .lh-harness/runs/<run-id>/workspace && codex exec --json ...", "exit_code": 0, "assistant_visible_output": "", "stderr_chars": 0, "stderr_tail": "" } }Codex JSONL 轨迹只有:
{"type":"thread.started","thread_id":"<redacted>"} {"type":"turn.started"} {"type":"turn.completed","usage":{ "input_tokens":0, "cached_input_tokens":0, "cache_write_input_tokens":0, "output_tokens":0, "reasoning_output_tokens":0 }}随后 lh-harness 将该轮记录为:
仪表盘显示任务阻塞,需要人工继续或终止。反复继续只会创建新的零 token Manager 轮次。
对照测试
在另一个没有
.trellis和.codex/hooks.json的项目中,保持相同 lh-harness 配置和 Codex 配置运行:lh-harness run --task "hi"默认空 workspace 可以正常获得 Manager 回复:
{"type":"thread.started","thread_id":"<redacted>"} {"type":"turn.started"} {"type":"item.completed","item":{ "type":"agent_message", "text":"Current task state: ..." }} {"type":"turn.completed","usage":{ "input_tokens":35335, "cached_input_tokens":3840, "output_tokens":448, "reasoning_output_tokens":78 }}同一个 Codex CLI 在项目目录之外执行最小请求也能正常产生消息和 token。
因此,当前证据更接近以下组合条件:
0和零 token 结束。预期行为
希望至少满足以下一种行为:
方案 A:完整隔离
默认 workspace 不继承父项目的 Codex 配置、
AGENTS.md和 hooks。方案 B:继承项目配置
如果默认设计允许继承父项目配置,那么 hook 命令应相对配置文件所在的项目根目录执行,或者 workspace 应包含运行项目所需的
.codex、.trellis和业务文件。方案 C:明确报告失败
如果 hook 执行失败,lh-harness 应将本轮标记为 Agent 启动失败,并展示 hook 错误。当前的退出码
0、零 token 和“Manager 没有自然语言输出”很难定位真正原因。关于设计与集成方式的疑问
默认 workspace 的隔离范围是否只包含任务产物,还是也计划隔离 Codex 的项目级配置、
AGENTS.md和 hooks?LongHorizon-Harness 是否推荐与 Trellis、Spec Kit 等项目任务框架共同使用,还是更适合作为独立的任务管理系统?
对于已经使用 Trellis 的项目,推荐的组合方式是什么?
lh-harness 是否适合增加以下配置能力?
或者允许按角色配置:
使用需求
当前项目仍需要 Trellis 提供以下能力:
LongHorizon-Harness 的长时间任务调度、角色分离和独立审计很有价值。希望确认两套机制是否有推荐的组合方式,以及当前行为属于已知限制、设计选择,还是需要修正的兼容问题。