Approvals
Approvals are the point. If an agent can plan and apply a risky production change with no human checkpoint, you do not have a trust layer. You just have a faster way to make mistakes.Current approval paths
Today, Keycli has two practical approval paths:- Hosted API / service approval — explicit approve calls on the hosted control-plane path.
- GitHub comment approval capture — a narrow but real workflow for issue/PR threads.
What is true today
- risky plans can require approval before apply
- agents cannot self-approve if they do not have approval permission
- agents cannot mint stronger tokens for themselves
- approval status changes the plan’s next action
- approval and apply show up in the audit trail
When approval usually matters
Approval is the right default for:- production-facing env var changes
- shared secret rotation
- coordinated multi-provider changes
- anything with
deployAfter: trueon meaningful targets
Hosted approval path
For a plan that returnsnextAction: "wait_for_approval", a human principal can approve it through the hosted API flow.
This is the simplest path to understand because it keeps the mechanics obvious:
- create plan
- inspect policy result
- approve as a human
- apply as the actor allowed to execute
GitHub comment approval path
The current GitHub-native wedge works like this:- create an approval-gated plan with
requestChannel: "github-comment" - attach GitHub repo + issue/PR context
- provide an allowlist of approvers
- if a GitHub connection exists, Keycli posts a summary comment into that thread
- a user comments
/keycli approve <plan-id> - Keycli verifies the signed webhook, repo/context match, and approver allowlist
- the plan is approved
What GitHub approval is not yet
Keycli is not claiming:- a full GitHub App install flow
- broad PR-native workflow automation
- delivery retries and reconciliation at production depth
- approver inference from repo membership
What to inspect before asking for approval
Check:plan.risk.levelplan.nextActionplan.execution.mode- approval metadata
- request comment status when using GitHub comments
Suggested first learning loop
Do not overcomplicate the first session. The best first loop is:- low-risk preview change
- high-risk approval-gated change
- inspect audit trail