Skip to content

feat(agentd): enforce consent-plane terminal-surface envelope (enforce-sweep) - #43

Merged
mdheller merged 1 commit into
mainfrom
feat/terminal-surface-consent-enforce
Aug 3, 2026
Merged

feat(agentd): enforce consent-plane terminal-surface envelope (enforce-sweep)#43
mdheller merged 1 commit into
mainfrom
feat/terminal-surface-consent-enforce

Conversation

@mdheller

@mdheller mdheller commented Aug 3, 2026

Copy link
Copy Markdown

Extends the enforce-sweep (gap #1) — after goose (voice) and netwatch — to turtle-agentd, the terminal-surface tool-execution host. The consent-plane surface envelope (terminal: deny_purposes=[egress, operate]) now holds at runtime.

What it does

An autonomous agent on the terminal surface may read/edit/test (discover/implement/verify) but may not egress (push/publish/network-send) or operate (deploy/infra). A prompt-injected or runaway agent is contained; the human operator keeps full authority (the envelope governs agents only).

  • consent_plane_check(command, actor_id) — denies egress/operate commands for agent actors. _is_agent_actor is fail-closed: only an explicit human: id gets authority; every other non-empty id is governed (an unknown actor can't slip past as human).
  • Classification is local (regex over git-push/curl/scp/ssh/kubectl/docker/terraform/publish/…), so containment holds even when the consent engine is unreachable.
  • Wired into policy_evaluate: a consent-plane deny short-circuits before Policy Fabric (defence in depth, deny wins).

Proof

5 tests (agent egress denied · agent read/edit/test allowed · human unrestricted · policy_evaluate short-circuits · fail-closed actor detection); daemon smoke tests green; compiles clean.

Enforcement now lives at three surfaces (voice, netwatch, terminal). Remaining sweep targets: BearBrowser (browser surface) and sourceos-shell.

…force-sweep)

Extends the enforce-sweep (after goose voice + netwatch) to turtle-agentd, the
terminal-surface tool-execution host. An AUTONOMOUS AGENT acting on the terminal
surface may read/edit/test (discover/implement/verify) but may NOT egress
(push/publish/network) or operate (deploy/infra) — the consent-plane surface
envelope (deny_purposes=[egress,operate]) now holds at runtime.

- consent_plane_check(command, actor_id): denies egress/operate commands for
  agent actors; humans keep full authority (envelope governs agents only).
  _is_agent_actor is fail-closed — only an explicit `human:` id gets authority,
  every other non-empty id is governed.
- classification is local (regex over network/publish/deploy/infra commands) so
  containment holds even when the consent engine is unreachable.
- wired into policy_evaluate: a consent-plane deny short-circuits before Policy
  Fabric (defence in depth).
- 5 tests: agent egress denied, agent read/edit/test allowed, human unrestricted,
  policy_evaluate short-circuits, fail-closed actor detection. Daemon smoke green.
@mdheller
mdheller merged commit 0486d04 into main Aug 3, 2026
6 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant