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 sonichi/sutando --skill pending-questionsgit clone --depth 1 https://github.com/sonichi/sutandoWrote 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/sonichi/sutando/pending-questions)<a href="https://agentmods.dev/skills/sonichi/sutando/pending-questions"><img src="https://agentmods.dev/badge/skills/sonichi/sutando/pending-questions/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/sonichi/sutando/pending-questions"><img src="https://agentmods.dev/badge/skills/sonichi/sutando/pending-questions.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.00051 | $0.02596 |
| Opus 5.5 | $0.00020 | $0.01038 |
| Sonnet 5.5 | $0.00010 | $0.00519 |
| Haiku 4.5 | $0.00005 | $0.00260 |
Grade A, and why
pending-questions 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 — 156 lines — stays where its author put it; the contents beside it link to each section on GitHub.
pending-questions
One CLI over the owner's pending questions, and the one store behind them: the "Pending questions" database in the owner's room. Each question is a row carrying its Host; a host reads and writes only its own rows, and the owner sets a row's Status himself (code never writes it — its own marks live in the Recovery and Closed cells).
The room is PENDING_QUESTIONS_ROOM: env, then this manifest's config, then the host's
<workspace>/state/pending-questions-room; unset, the owner's DM. Point every host of the
owner at one room shared by him and all his Sutandos. The collab service is the room
capability's own, unless PENDING_QUESTIONS_COLLAB_URL names one (env, then this manifest's
config, per skills/MANIFEST.md); the adapter's room_store(..., collab_url=) is the CLI
tier above both.
python3 skills/pending-questions/scripts/pq.py ask "<question>" [--context "<why / options>"] \
[--task-file <workspace>/tasks/<task>.txt] [--urgency live|durable] \
[--default-action "<what Approve does>" --reason "<why>"] [--option "Hold=wait"] \
[--priority High|Medium|Low]
python3 skills/pending-questions/scripts/pq.py list [--json]
python3 skills/pending-questions/scripts/pq.py reconcile
python3 skills/pending-questions/scripts/pq.py resolve <ask-id> [--answered]
python3 skills/pending-questions/scripts/pq.py remind [--force]
Trigger: any time you would write a question for the owner into terminal or summary text, file
it instead with ask (or scripts/ask-owner.py; add --unless-open to file nothing when an
open row already has that question — it reports already open: [<id>]). The terminal and a compaction summary reach no one.
This skill's hooks/compact-carry.py keeps owner questions out of compaction summaries and, after
one, has the core file any never-asked question it carried; session-state.md shows only the
count (python3 src/pending_questions_reader.py summary).
askqueues the question to the owner (the task's conversation only for an owner-tier task in his DM; otherwise his DM), saves it to the outbox, writes the row born with its**Sent:**record, and once that exact row is confirmed complete commits the store-history marker and THEN deletes the outbox file — a marker that cannot be written keeps the file (history: FAILEDin the report) so the local evidence outlives the failure. Only after that confirmation does it reconcile the older backlog. Room subprocess calls share one operation budget (90 seconds by default), so failures cannot renew the timeout for each older question; the held entries remain for a later explicit reconcile. The shared reconcile pass applies that budget to every caller, includingpq reconcileand reminders. Resolving an answer shares it across reconciliation and the row close. If the outbox cannot hold the question, NO row is written: the owner is still asked, and the report says nothing holds it. Read the output: aFAILEDline is not an ask. Then continue; never block.listis READ-ONLY — it writes no file, not even the history marker — and lists each ask id in exactly one bucket, by precedence: a terminal or locally closed row is done; a complete open row waits; an open row whose body has not landed is stood in for by its held entry; a held entry with no row waits, marked(not yet in the room), or is done when closed locally; a local close naming neither isclosed locally; its row is not in view yet(neither open nor done,pending_closeincount). When the room cannot be read it printspending questions: UNKNOWN — room unreachable (…)and only what is held locally; it never prints a zero it did not measure. Once a row of this workspace was ever confirmed (written, replayed, ingested or observed by a reconcile), a room that cannot be reached is an outage, not an empty outbox — whatever became of the one-time introduction message.reconcileis the explicit pass: outbox replay, local close records, stale marks, the transitional legacy ingest, and the history backfill for rows that predate the marker. Legacy ingest refuses an archive boundary hidden by damaged Markdown before creating rows or marking source entries moved; it reports the affected line numbers. Every step commits the history marker before it releases local evidence (an outbox entry, a close record, a legacy file entry), and keeps that evidence when the commit fails.askandremindrun it;listdoes not.resolvecloses a row as Resolved (or Answered with--answered). It never reopens a closed row. When the room cannot be written, the closure is recorded locally (<outbox>/closed/<ask_id>.json) and applied by the nextreconcile— but only for a question the outbox holds, or in outage mode (a row was confirmed here before); an unknown id with neither is refused and changes no count. The replay retires a local close only once its row is closed (or seen closed) AND complete — its body landed; a row the store view does not show is ambiguous and an incomplete one is still being filed, so in both cases the record stays andreconcilereports it.remindis the only way a reminder is sent (src/check-pending-questions.py --notifywith this skill's adapter). Nothing is scheduled, and no pass surfaces questions: the owner is asked once, as questions come up, and reminded when he asks.
What ships with it
11 files 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.
- hooks/compact-carry.py 2.8 KB runs code
- manifest.json 788 B
- scripts/pending_questions_ask.py 14 KB runs code
- scripts/pending_questions_compat.py 13 KB runs code
- scripts/pending_questions_ledger.py 3.2 KB runs code
- scripts/pending_questions_md.py 20 KB runs code
- scripts/pending_questions_outbox.py 8.3 KB runs code
- scripts/pending_questions_remind.py 16 KB runs code
- scripts/pending_questions_room_db.py 29 KB runs code
- scripts/pending_questions_store.py 25 KB runs code
- scripts/pq.py 4.9 KB runs code
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 · +7 lines 4e9f165a2cc4
- 3d ago Changed · +7 lines 08b30d190ead
- 13d ago First seen · 142 lines · 51 tokens per session scan A c165569b6483
pending-questions is a skill published in the GitHub repository sonichi/sutando (397 stars, last pushed today), licensed MIT. It adds 51 tokens to every session and 2,596 once invoked, about $0.0002 per session on Opus 5.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-10-04.
Other skills, from other repositories
linear-app-setup
Create and configure a Linear agent app so the assistant can manage issues, projects, and workflows under its own identity.
projects
YOU OWN THIS. Manage the user's projects — shared instructions and file lists that fresh conversations start from — and see each project's conversations. Reach for it by INTENT whenever a need or issue touches a project, its instructions, or its files — even when the user never says "project".
taskwing-plan
Use when you need to clarify a goal and build an approved execution plan.
taskwing-next
Use when you are ready to start the next approved TaskWing task with full context.
taskwing-done
Use when implementation is verified and you are ready to complete the current task.
multi-agent
A process for coordinating multiple coding agents by splitting work among scouts, workers, reviewers, and repair agents. Each agent has a defined role and task.