Feat: Keep coding agents working when the Cortex proxy stops

オープン
#1,738 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 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

  1. A killed supervisor stays dead. cmd/cortex/supervise.go:32 says: "What this does NOT cover: the supervisor itself being killed. Nothing restarts it". launchd does not restart it in a gui/<uid> domain, so agents fail until the next login or a manual start.
  2. Crash recovery is not tested from start to end on macOS. cmd/agentop/cmd_service_platform.go:55-58 says that restart-after-crash was "NOT verified end to end".
  3. 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.
  4. The failure is hard to understand. The user sees "connection refused" in the agent, not "Cortex is not running".

Proposal

  1. Claude Code SessionStart hook that starts Cortex.
    • agentop configure claude-code enable installs a SessionStart hook.
    • The hook probes 127.0.0.1:47600. If nothing answers, it runs agentop service start and 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.
  2. 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/status and in agentop doctor, in the same way as a failed reload.
    • If no last good config exists, Cortex keeps the current behavior and exits.
  3. A clear message.
    • When the proxy does not answer, agentop and agentop exec print: Cortex is not running on 127.0.0.1:47600. Run: agentop service start.
    • agentop doctor already checks that the proxy serves. Make its fix line give the same command.
  4. A manual crash test on macOS, from a real GUI login:
    • kill -9 the proxy. Check that the supervisor restarts it, and that a running agent session continues after the restart.
    • kill -9 the 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 doctor reports the error.
  • A dead proxy gives a message that names Cortex and the command that fixes it.
  • docs/laptop-service.md records the kill -9 results for the proxy and for the supervisor.

Assisted-By: Claude (Anthropic AI) [email protected]

主要言語
Go
スター
26
フォーク
46
平均マージ
13時間 49分
マージ済み PR(30日)
244

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

rossoctl/cortex のほかの issue

rossoctl/cortex の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。