blog index

Decisions And Approvals

How routine choices are delegated and risky choices return to the operator.

snapshot 2026-05-05 source agents/decision-proxy.md, decisions.md.template, lib/relay_notifications.py local worktree guide

Decision And Approval Flow

LLM model-involved step
1QuestionAn agent asks whether to continue, choose an option, or take an action.
what it is
An agent asks whether to continue, choose an option, or take an action.
triggered by
An agent needs a choice before continuing.
hands off to
decision-proxy
2decision-proxyLLMReads decisions, soul, and psyche notes, then answers or escalates.
what it is
Reads decisions, soul, and psyche notes, then answers or escalates.
triggered by
The question is routine enough to try the rule-backed proxy.
hands off to
Invariant Ceiling
3Invariant CeilingSecrets, external messages, destructive data, and git history changes escalate.
what it is
Secrets, external messages, destructive data, and git history changes escalate.
triggered by
The proxy cannot answer or the request hits a hard boundary.
hands off to
proxyd Action
4proxyd ActionCreates a short request id and durable pending action.
what it is
Creates a short request id and durable pending action.
triggered by
The action needs a durable approval record.
hands off to
Phone Or Web
5Phone Or Webthe operator approves, denies, or replies.
what it is
the operator approves, denies, or replies.
triggered by
the operator opens the notification, web decide page, or mobile inbox.
hands off to
Unblock
6UnblockThe waiting process receives the recorded decision.
what it is
The waiting process receives the recorded decision.
triggered by
The approval record changes state or the wait times out.
hands off to
The next local run, dashboard view, or review loop.
Routine judgment may use decision-proxy. Phone approval is deterministic and records the operator's answer.

Delegation

Decision Proxy

decision-proxy answers routine questions before the main agent asks the operator.

LLM It runs as a Haiku-backed agent when invoked by Claude Code or another routed agent path. It reads ~/.agentropy/proxy/decisions.md every time. It reads soul.md for long-game judgment and psyche-notes.md for personal-system design choices.

It returns a direct answer only when the rules cover the question. Otherwise it returns ESCALATE with a short reason.

Ceiling

What Never Gets Auto-Approved

The invariant ceiling beats every preference rule.

  • No sudo, root, admin passwords, production credentials, API keys, or .env writes.
  • No external messages, webhooks, PR comments, email, or social posting.
  • No schema migrations, data deletion, force-push, history rewrites, branch deletes, or direct operations on main or master.
  • No action the agent does not understand.

Approval

Phone Approval Path

When an action needs the operator, proxyd creates a durable action record and sends it through Relay or the mobile inbox path.

the operator can approve, deny, or reply with free text. The pending local process unblocks only after the recorded decision arrives or the timeout expires.

Approval records use short request ids, token checks, redaction, and append-only logs so the system can explain what happened later.

The phone approval path itself does not ask an LLM. It records and returns the operator's decision.

Audit

Decision Memory

Decision-proxy writes one JSONL row per decision to ~/.agentropy/proxy/log.jsonl.

proxyd writes escalation metadata without persisting sensitive question text in its audit log. Relay action records sanitize body and metadata before storing or pushing.

The weekly review and learning loop use those records to find repeated escalations and propose better rules.