- Cloud agent governance ([ADR-0034](https://dshakes.github.io/halos/adr/0034-cloud-agent-governance/)) for the Claude Code GitHub Action and cloud sessions, Codex cloud, the Copilot cloud agent, Cursor cloud agents and the Gemini CLI GitHub Action. `halos.yaml` `cloudAgents` sets per vendor: enabled, allowed repositories and models, `maxConcurrent` per user and group, budgets (ADR-0017 fields), sandbox network mode, `identity: workload` (gateway credential through the ADR-0023 exchange instead of a repository secret) and `onOverLimit: alert|pause`; `identities` map GitHub logins to Halos users. `halo cloud-agents render` writes SHA-pinned, `permissions: {}` workflows (`halos-claude.yml`, `halos-gemini.yml`, `copilot-setup-steps.yml`) checked against the never-bypass invariant, and releases carry them signed in `manifest.json` `cloudAgents` (never written by `halod`). halo-server receives GitHub `workflow_run` webhooks (`POST /api/v1/cloud-agents/webhooks/github`, `X-Hub-Signature-256` HMAC, `--cloud-webhook-secret-file`), stores tasks in the audit chain (`cloudagent.task`; finished ones also as session ledger records with source `cloudagents`), raises alerts (`halo_server_cloud_agent_alerts_total`) and, with `onOverLimit: pause`, reversibly disables the workflow or archives the Cursor agent. `GET /api/v1/cloud-agents` (read) and `halo cloud-agents list` show tasks and alerts; `POST /api/v1/cloud-agents/kill` (operate) and `halo cloud-agents kill --scope user|ring|experiment` cancel a user's, ring's or experiment's tasks through the GitHub and Cursor APIs, dry run by default, reason required, audited before any call. An experiment kill reports its users' active cloud tasks. `halo admin plan|export` add the console steps for Claude cloud sessions, Codex cloud, Cursor and Copilot repository access, and read each repository's Copilot cloud agent firewall.
0 commit comments