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.
npx skills add metraton/gaia --skill pending-approvalsgit clone --depth 1 https://github.com/metraton/gaiaWrote 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.
[](https://agentmods.dev/skills/metraton/gaia/pending-approvals)<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.
<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>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.
| Model | Per session | Once 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 |
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.
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/--jsonand has NO--statusfilter. Filtering by decision lives ongaia approvals history --status <pending|approved|rejected|revoked>(--limit N, default 50).gaia approvals show <approval_id>-- ordinary human detail;--jsonkeeps the machine detail shape, while the mutually exclusive--consent-surfacereturns trustedvisible_text,visible_lines,metadata, and the exact resolver-compatibleapprove_labelfor an undecided pending onlygaia 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.
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.
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.
- today Changed · +3 lines 553312697c7b
- 10d ago First seen · 81 lines · 23 tokens per session scan A b076f2cd3ea1
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.
Other skills, from other repositories
review-team
A multi-reviewer code review process that checks a change from several specialist viewpoints and combines the results into one report. It can cover bugs, security, tests, dependencies, frontend behavior, and continuous-integration workflows.
ultra
Fans the work out as a fleet of parallel Grok and Codex agents billed to their own subscriptions, then synthesizes one result. The peer engine equivalent of ultracode, adding intensity without spending Claude quota on the fleet. Use it for genuinely broad goals, not only explicit asks for intensity.
grok-prompting
Brief writing guidance for composing self contained Grok briefs for coding, review, diagnosis, and second opinion tasks.
smoke
Runs a three probe live smoke wave after a plugin update and reports gate chain health before real work rides it.
codex-result-handling
Internal contract for returning Codex companion output without alteration.
shipwrights-loop
Drive multiple Jira tickets sequentially through the /shipwrights-epic pipeline. Auto-picks the next ticket, watches the PR until merged, transitions Jira to shipped, repeats. Resumable across Claude Code sessions via .shipwrights/loop-state.json. Invoked as /shipwrights-loop [N] | --status | --abort.