Feat: Keep coding agents working when the Cortex proxy stops
维护者通常 1 天内回复
@huang195 已经在做这个了。
开始于 2026年11月9日。
评估
这个 Issue 还没有评估数据。
描述
Problem
When the Cortex proxy is not running, every agent that agentop configure wired to it stops working. Claude Code and OpenCode send all traffic to HTTPS_PROXY=http://127.0.0.1:47600. If nothing listens there, each request fails.
The agent shows a plain network error. The error does not name Cortex and does not tell the user how to fix it.
What Cortex does now
- macOS: launchd starts a supervisor (
cortex --supervise). The supervisor restarts the proxy, with a backoff (cmd/cortex/supervise.go). - Linux: the systemd unit uses
Restart=on-failure. agentop service uninstall: it only warns that "Claude Code and OpenCode stop working whenever the proxy is not running".
Gaps
- A killed supervisor stays dead.
cmd/cortex/supervise.go:32says: "What this does NOT cover: the supervisor itself being killed. Nothing restarts it". launchd does not restart it in agui/<uid>domain, so agents fail until the next login or a manual start. - Crash recovery is not tested from start to end on macOS.
cmd/agentop/cmd_service_platform.go:55-58says that restart-after-crash was "NOT verified end to end". - A bad config at boot stops all agents. A config error is fatal at startup. The supervisor then restarts the proxy into the same error, again and again. A hot reload keeps the last good config, but a boot does not. So one bad edit followed by a restart, or a reboot, cuts off every agent until the user repairs the file.
- The failure is hard to understand. The user sees "connection refused" in the agent, not "Cortex is not running".
Proposal
- Claude Code SessionStart hook that starts Cortex.
agentop configure claude-code enableinstalls a SessionStart hook.- The hook probes
127.0.0.1:47600. If nothing answers, it runsagentop service startand prints one line that says so. - The hook must never remove
HTTPS_PROXY. See Non-goals. - This also covers gap 1: the next session start brings back a dead supervisor.
- Open question: does the hook run before the first API request of the session? Test this before the design is final.
- Boot with the last good config.
- When startup validation fails, Cortex starts with the last config that it loaded with success.
- It reports the error in
/reload/statusand inagentop doctor, in the same way as a failed reload. - If no last good config exists, Cortex keeps the current behavior and exits.
- A clear message.
- When the proxy does not answer,
agentopandagentop execprint:Cortex is not running on 127.0.0.1:47600. Run: agentop service start. agentop doctoralready checks that the proxy serves. Make its fix line give the same command.
- When the proxy does not answer,
- A manual crash test on macOS, from a real GUI login:
kill -9the proxy. Check that the supervisor restarts it, and that a running agent session continues after the restart.kill -9the supervisor. Record what happens, then check that item 1 brings Cortex back.- Write the results in
docs/laptop-service.md.
Non-goals
- No automatic fail-open. Cortex must not remove
HTTPS_PROXY, and it must not send traffic directly to the provider when the proxy is down. A fail-open does these things without a message:- It turns off guardrails (IBAC, OPA) and the egress allow list.
- It stops session recording.
- It fires during each normal restart, which takes only seconds.
- A user who wants to stop using Cortex keeps the manual path:
agentop configure claude-code disable.
Acceptance
- A killed supervisor comes back at the next Claude Code session start.
- A config with a startup error does not stop agents when a last good config exists.
agentop doctorreports the error. - A dead proxy gives a message that names Cortex and the command that fixes it.
-
docs/laptop-service.mdrecords thekill -9results for the proxy and for the supervisor.
Assisted-By: Claude (Anthropic AI) [email protected]
- 主要语言
- Go
- 星标
- 26
- 派生
- 46
- 平均合并
- 12 小时 30 分钟
- 30 天内合并 PR
- 268
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
rossoctl/cortex 的其他 Issue
-
难度 4/5 3-5 天 新手友好度 55/100
维护者通常 1 天内回复
-
enhancement
难度 4/5 3-5 天 新手友好度 48/100
维护者通常 1 天内回复
-
enhancement ux
难度 5/5 一周以上 新手友好度 25/100
rossoctl/cortex#1739 · 1 条评论 ·
维护者通常 1 天内回复
-
Phase C: Let Praxis core accept CONNECT and decrypt, and remove the Go front door可能已有人在做 @huang195 于 2 天前认领。 未关闭laptop
rossoctl/cortex#1728 · 已指派 1 人 ·
维护者通常 1 天内回复
-
Phase D: Move the Cortex store, pricing, session API and attribution into the binary可能已有人在做 @huang195 于 2 天前认领。 未关闭laptop
rossoctl/cortex#1727 · 已指派 1 人 ·
维护者通常 1 天内回复
相似的 Issue
-
[bug]: scan-all update-schedule does not auto-convert 5-field cron expressions as documented可能已有人在做 @vishnums2k5 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 78/100
goharbor/harbor-cli#1143 · 1 条评论 ·
维护者通常 8 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
-
难度 2/5 1-3 小时 新手友好度 73/100
-
难度 2/5 1-3 小时 新手友好度 82/100
rossoctl/context-guru#1053 ·
维护者通常 1 天内回复
-
[BUG] EphemeralJob matches every pod in the namespace when spec.selector is empty可能已有人在做 @vishnums2k5 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
openkruise/kruise#2656 · 1 条评论 ·
维护者通常 1 天内回复