pending-approvals

pending-approvals is a skill for Claude Code from metraton/gaia. It costs 23 tokens per session (1,117 once invoked), scanned A, original, MIT.

A tool for managing actions that are waiting for user approval. It can list, inspect, approve, reject, or revoke these approval records.

In plain words
What is it for?
Use it to review the exact action, risk, rollback, and verification details for a pending approval, then approve, reject, or revoke it.
Why use it?
It gives users an explicit way to recover and decide on pending actions instead of relying on them to reappear automatically in a later session.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Part of the gaia plugin — 38 skills, 9 agents, 11 hooks shipped together

Good fit Use it to review the exact action, risk, rollback, and verification details for a pending approval, then approve, reject, or revoke it.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/metraton/gaia/pending-approvals
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add metraton/gaia --skill pending-approvals
Clone the repo
git clone --depth 1 https://github.com/metraton/gaia

Made for: Claude Code.

Or install gaia, the plugin that ships this one along with the rest of its 38 skills, 9 agents, 11 hooks.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for pending-approvals

README.md
[![agentmods](https://agentmods.dev/badge/skills/metraton/gaia/pending-approvals/github.svg)](https://agentmods.dev/skills/metraton/gaia/pending-approvals)
Your own site
<a href="https://agentmods.dev/skills/metraton/gaia/pending-approvals"><img src="https://agentmods.dev/badge/skills/metraton/gaia/pending-approvals/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for pending-approvals

Your own site · 80×15
<a href="https://agentmods.dev/skills/metraton/gaia/pending-approvals"><img src="https://agentmods.dev/badge/skills/metraton/gaia/pending-approvals.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 23 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,117 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00023 $0.01117
Opus 5 $0.00012 $0.00558
Sonnet 5 $0.00005 $0.00223
Haiku 4.5 $0.00002 $0.00112

Measured today against content hash 553312697c7b, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-10, from the pricing page.

Security

Grade A, and why

pending-approvals scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/pending-approvals/SKILL.md · 84 lines

How it starts

The opening of the file, as written. The whole thing — 84 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Pending Approvals

Pending approvals are not automatically resurfaced in later sessions. Recovery is explicit: the user asks to list/search pendings or supplies an approval id.

Use the unified CLI and treat the DB as primary:

  • gaia approvals pending -- the undecided pendings only (all sessions by default; --session <id> narrows to one orchestrator session)
  • gaia approvals list -- the DB-backed grants table plus the undecided pendings beneath it; it takes --session / --orphans-only / --json and has NO --status filter. Filtering by decision lives on gaia approvals history --status <pending|approved|rejected|revoked> (--limit N, default 50).
  • gaia approvals show <approval_id> -- ordinary human detail; --json keeps the machine detail shape, while the mutually exclusive --consent-surface returns trusted visible_text, visible_lines, metadata, and the exact resolver-compatible approve_label for an undecided pending only
  • gaia approvals approve <approval_id>
  • gaia approvals reject <approval_id>
  • gaia approvals revoke <approval_id>

Every lookup and single-item decision requires the complete canonical P-<32 lowercase hex> id. A short display label or raw nonce is never a lookup key. Full-id lookup may cross session boundaries. Always re-present exact content, risk, rollback, and verification before an approve decision; for COMMAND_SET, show the full indexed ordered set. Never infer approval from conversational language alone or select a similarly prefixed id.

These verbs are not all the orchestrator's to run. The trusted-CLI role guard (hooks/modules/security/gaia_cli_only_guard.py) splits them along a read/write line, not a T3 line: approvals list / show / pending / history / stats are in ALLOWED_READ_PHRASES -- the orchestrator reads these directly. approvals approve / revoke / reject / reject-all / clean / replay are in EXPLICITLY_DENIED_PHRASES -- categorically denied for the orchestrator role, not approvable, regardless of mode. Reads are the orchestrator's; decisions are not. A decision is dispatched to a specialist (or, for the CLI-only admin case below, made explicitly by the user) -- never run bare by the orchestrator itself.

For a SINGULAR approval, gaia approvals approve <approval_id> is an admin decision-recording verb, not executable activation. It writes APPROVED directly to the approvals row, but creates no executable grant and triggers no automatic re-dispatch. The originally blocked command therefore remains unexecutable from that admin decision alone. When the blocked command still needs to run, this verb MUST NEVER substitute for the structured decision path owned by the active host adapter. Load the adapter skill declared for the active host by hooks/adapters/registry.py::registered_adapter_skill_documents for the mechanism it owns; orchestrator-present-approval owns the neutral presentation and activation contract. Use the bare approve CLI verb only for the audit/CLI-only case -- for example, marking a row from a different session as decided when the command it covers will not be re-run.

COMMAND_SET now activates through the same writer from either entry point. For a plan-first request_type: "COMMAND_SET" pending (minted by gaia approvals request-set, which carries a request_fingerprint), activate_db_pending_by_id takes a dedicated branch that calls insert_plan_command_set -- the identical call the CLI admin verb gaia approvals approve makes, and the only shape the runtime's execution check (reserve_plan_command, keyed on source='plan-first') finds. The structured decision path and the admin verb therefore activate a request-set pending identically. The legacy create_command_set_grant() route survives only for a multi-command payload with NO request_fingerprint, a chain-intake shape production no longer emits; it is kept as a defensive fallback, not as the plan-first path. The earlier defect -- a correctly labeled Approve reporting success while the retried commands re-blocked, because every multi-command payload went through the legacy route -- is closed.

Read the full file on GitHub · 84 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today Changed · +3 lines 553312697c7b
  2. 10d ago First seen · 81 lines · 23 tokens per session scan A b076f2cd3ea1

Subscribe to this mod's changes

pending-approvals is a skill published in the GitHub repository metraton/gaia (3 stars, last pushed yesterday), licensed MIT. It adds 23 tokens to every session and 1,117 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories