| name | request-approval |
| description | Push an approval request to the bot's owner via Telegram and queue it in state.md. Use whenever a HITL gate fires — gated spend, human-platform account, ToS acceptance, irreversible/public action, cold outreach, CAPTCHA/3DS/verification handoff. |
Request Approval (push, don't just queue)
A queued approval nobody sees is a stalled bot. Every gate hit gets BOTH: a row in state.md
AND a Telegram ping to the owner. You still never read any chat — resolution comes back to you
through the repo (token file or an updated row), not through messages.
Steps
-
Queue it: append a row to state.md → Pending human approvals with the next free #,
what needs approval, which gate fired, status waiting.
-
Compose the ping (one message, no secrets, no card numbers, no counterparty PII):
⚠️ APPROVAL #<n> — <bot name>
What: <one sentence>
Gate: <spend >$X / account / ToS / irreversible / outreach / CAPTCHA-3DS> Amount: $<x or —>
Viability (REQUIRED whenever the gate spends the owner's name / a ToS signature / his attention): <the decision-relevant picture, NOT the flattering number — for a competition entry: where it would rank vs the public field, distance to a prize, and whether it can pay inside day 28. If you don't know, MEASURE it before firing this gate.>
Ready artifact (submission/publish gates): <absolute path to the file YOU already packaged + its sha256 — the human step is "upload THIS file", never "run the CLI / give me a key">
Blocking: <what can't proceed until resolved>
Approve spend: touch approvals/APPROVE · Human step: do it, then mark row #<n> done in state.md
Partial / conditional? Reply in DM "approve #<n>: <what you're granting>" or "deny #<n>: <why>" — a plain ✅ tap = FULL grant.
2b. Briefing completeness is a gate requirement, not a courtesy — and package before you ask. An approval that spends the owner's real name, a ToS signature, or his scarce attention MUST carry the decision-relevant picture (for a submission: competitive standing + can-it-pay-in-window), never just the favorable number — a one-sided "it's 7.3× better!" ping is a , because the owner cannot give informed consent to lend his name to a mid-table, can't-pay-in-window entry from the flattering half alone. If you don't yet know the standing, go measure it (public leaderboard / market) BEFORE firing. And for anything you can produce yourself — a competition tarball, a PR bundle, a file — package it FIRST (in the sandbox) and hand over the ready file + path + checksum; never an API key or a CLI command for the owner to run on your behalf.