{
 "schema": "aiblocks-page/1",
 "id": "the-proposal-engine-agents-ask-permission-implementation-planner",
 "type": "skill",
 "name": "Agent approval workflow builder",
 "summary": "Plan how an AI agent asks a person to approve an action: risk tiers, expiring requests, checked buttons and an audit log. Draft only.",
 "headline": "Agent approval workflow builder",
 "subhead": "Give it the actions your AI agent may propose, what each costs, how hard it is to undo and who sees it. It plans the risk tiers, the expiring request and the checks on each button click. You get a risk table, a request record, an audit log and tests. Nothing is run.",
 "job": {
  "id": "build-software",
  "name": "Build and ship software"
 },
 "level": "intermediate",
 "thinking": "medium",
 "tested": true,
 "updated": "2026-11-03",
 "first_published": "2026-10-25",
 "inputs": [
  {
   "type": "question",
   "required": true,
   "label": "Question",
   "what": "the problem, decision or piece of work you want help with, and what a good outcome looks like"
  },
  {
   "type": "codebase",
   "required": false,
   "label": "Codebase",
   "what": "a project's code, in a folder or repo the AI can open"
  }
 ],
 "outputs": [
  {
   "type": "plan",
   "required": true,
   "label": "Plan",
   "what": "a dated plan: what to do, in what order, with a decision rule for each step"
  },
  {
   "type": "code_change",
   "required": false,
   "label": "Code change",
   "what": "a change to the code, with what it fixes and how it was checked"
  }
 ],
 "you_give": [
  "The actions your agent may propose, in one line each",
  "For each action, the money it touches, how hard it is to undo and who sees it",
  "Who may approve each kind of action, and which ones need two people",
  "How long a request stays open before it expires",
  "Where people answer, such as Slack or email",
  "Your starter table and Slack code (optional)"
 ],
 "you_get": [
  "A risk table: tier, approver and expiry for each action",
  "A short list of actions that may skip approval, with the rest denied by default",
  "The fields of an approval request, and its states from draft to expired",
  "The checks to run on every click, in order",
  "An audit log of each step, and a list of gaps in the starter files",
  "Test cases, including a double click and a stale approval"
 ],
 "use_when": [
  "Your agent wants to pause an ad, send an email or change a price, and you want a person to say yes first.",
  "You need to decide which actions the agent may do alone and which must wait for a person.",
  "A request sat for days and then someone approved it when it was no longer true.",
  "You have starter code for Slack approve and reject buttons and need to know what is missing."
 ],
 "skip_when": [
  "Your agent only reads and drafts and never acts. There is nothing to approve.",
  "You want a hard limit on what an agent can spend. Use the Agent spending cap builder. A cap stops spend. An approval asks a person.",
  "You want the agent to learn from the answers people give. Use the Agent feedback review system planner.",
  "You want to plan how Slack messages reach the right agent. Use the Slack agent message router builder.",
  "You want it to post the request or approve it for you. It drafts the rules and the code. A person approves."
 ],
 "output_sample": {
  "input": [
   "The actions your agent may propose",
   "Money, undo effort and who sees each action",
   "Who may approve, and how long a request stays open",
   "Your starter table and Slack code (optional)"
  ],
  "prerequisites": [
   "A place to save requests, such as a database table",
   "A chat tool where approvers answer, such as Slack"
  ],
  "output": [
   {
    "name": "Risk table",
    "contains": "Each action with its tier, who approves it and when the request expires."
   },
   {
    "name": "Auto-approve list",
    "contains": "The few actions that may skip a person, and why each one is safe."
   },
   {
    "name": "Approval request",
    "contains": "The fields saved for each request, from the exact action to the expiry time."
   },
   {
    "name": "States",
    "contains": "Draft, posted, elaborating, approved, rejected and expired, and how each one starts and ends."
   },
   {
    "name": "Click checks",
    "contains": "The checks run on every Approve or Reject click, in order, and what happens if one fails."
   },
   {
    "name": "Audit log",
    "contains": "Each event saved, such as posted, approved, rejected, expired and refused."
   },
   {
    "name": "Gaps in the starters",
    "contains": "What the starter table and Slack code leave out or get wrong, with a fix for each."
   },
   {
    "name": "Test cases",
    "contains": "Cases such as a double click, an expired request and an approver who is not allowed."
   }
  ]
 },
 "output_shape": "BASIS\n<what was read; nothing was run>\nMISSING: <inputs and what each stops>\n\nRISK TABLE\n<action> | <money> | <undo> | <who sees it> | <tier> | <who approves> | <expires after>\n\nAUTO-APPROVE LIST\n<action> | <why it is safe>\n\nAPPROVAL REQUEST\n<field> | <meaning>\n\nSTATES\n<state> | <how it starts> | <how it ends>\n\nCLICK CHECKS\n<order> | <check> | <if it fails>\n\nAUDIT LOG\n<event> | <what is saved>\n\nGAPS IN THE STARTERS\n<#> | <what it does> | <why it matters> | <fix>\n\nTEST CASES\n<name> | <set-up> | <expected result>\n\nNEXT STEP\n<one smallest useful step>",
 "how_to_use": [
  "Open the skill in an AI that can read your code, such as Claude Code or Codex. A chat AI works if you paste the files in.",
  "Paste your action list, who may approve and how long requests stay open. Never paste a Slack token or a key.",
  "Read GAPS IN THE STARTERS first. The button handlers there are empty.",
  "Check the RISK TABLE against your own sense of what could go wrong. Move any action you doubt up a tier.",
  "Check the CLICK CHECKS list. Each one stops a different mistake, such as a stale click or the wrong person.",
  "Run the draft code and test cases on a copy of your system. Do not connect the buttons to anything live until they pass."
 ],
 "checks": [],
 "next": [
  {
   "name": "Agent task ownership workflow builder",
   "url": "https://useaiblocks.com/skills/issues-how-agents-track-work-implementation-planner",
   "why": "Build it"
  }
 ],
 "source": null,
 "credits": [],
 "files": [
  "references/method-notes.md",
  "references/proposal-schema.sql",
  "references/proposal-slack-blocks.ts"
 ],
 "links": {
  "page": "https://useaiblocks.com/skills/the-proposal-engine-agents-ask-permission-implementation-planner",
  "markdown": "https://useaiblocks.com/skills/the-proposal-engine-agents-ask-permission-implementation-planner.md",
  "json": "https://useaiblocks.com/skills/the-proposal-engine-agents-ask-permission-implementation-planner.json",
  "instructions": "https://useaiblocks.com/skills/the-proposal-engine-agents-ask-permission-implementation-planner/SKILL.md",
  "download": "https://useaiblocks.com/skills/the-proposal-engine-agents-ask-permission-implementation-planner.zip",
  "api_item": "https://useaiblocks.com/api/v1/items/the-proposal-engine-agents-ask-permission-implementation-planner",
  "api_document": "https://useaiblocks.com/api/v1/documents/skill/the-proposal-engine-agents-ask-permission-implementation-planner",
  "mcp": "https://useaiblocks.com/mcp"
 }
}
