Install
$ agentstack add skill-talont-org-autoskillit-audit-review-decisions ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ● Filesystem access Used
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Audit Review Decisions Skill
Mine merged PR review threads for agreed-but-deferred suggestions that were never implemented. Identify review debt before it compounds.
When to Use
- User says "audit review decisions", "find deferred review items", "surface review
debt", "what did reviewers flag for later"
Arguments
$1— Time period (e.g.14d,30d,7d). Default:14d.$2— Output path. Default:
${AUTOSKILLIT_TEMP}/audit-review-decisions/review_decisions_audit_$(date +%Y-%m-%d_%H%M%S).md
Critical Constraints
NEVER:
- Create files outside
${AUTOSKILLIT_TEMP}/audit-review-decisions/ - Have triage or validation subagents make GitHub API calls (local data only for Step 2)
- Post duplicate
[AUDIT]markers — check for existing marker before posting - Run subagents in the background (
run_in_background: trueis prohibited) - Use
gh pr listwithout--limitto avoid pagination truncation - Use
\|in Grep patterns — use|for alternation (ERE, not BRE)
ALWAYS:
- Save raw PR JSON to temp before any analysis (Step 1)
- Use GraphQL alias batching (~20 PRs per query) for data collection
- Include
rateLimit { cost remaining resetAt }in every GraphQL query - Sleep 1s between consecutive mutating GitHub API calls (Step 5 watermark posts)
- Step 2 triage subagents read local JSON files only — zero API calls
- Step 3 validation subagents grep the actual current codebase
- Skip threads that already contain an
[AUDIT]comment - Resolve owner/repo from
git remote get-url origin— never hardcode - Use
/autoskillit:prefix when invoking any other skill
Workflow
Step 0: Watermark Resolution
- Parse
$1for time period. Default14d. ComputePERIOD_DAYS.
- Resolve
OWNERandREPOfromgit remote get-url origin.
- Query the most recent
[AUDIT]sentinel comment across recently merged PRs:
``bash gh api graphql -f query=' query($owner:String!, $name:String!) { rateLimit { cost remaining resetAt } repository(owner:$owner, name:$name) { pullRequests(first:500, states:MERGED, orderBy:{field:UPDATED_AT,direction:DESC}) { nodes { number reviewThreads(first:50) { nodes { comments(first:10) { nodes { body createdAt } } } } } } } }' -f owner="${OWNER}" -f name="${REPO}" ` Extract the most recent createdAt from any comment whose body starts with [AUDIT]. Store as LASTAUDITTS` (empty string if none — first run).
- Compute
SCAN_SINCE:
- If
LAST_AUDIT_TSis set:max(LAST_AUDIT_TS, date -d "now - PERIOD_DAYS days") - Else:
date -d "now - PERIOD_DAYS days" --iso-8601=seconds
- Log:
Scan window: ${SCAN_SINCE} to now (${PERIOD_DAYS}d configured, last audit: ${LAST_AUDIT_TS:-none})
Step 1: Data Collection (GraphQL Batch)
- List merged PRs in the scan window:
``bash SCAN_DATE=$(echo "${SCAN_SINCE}" | cut -c1-10) PR_NUMS=$(gh pr list --state merged \ --search "merged:>=${SCAN_DATE}" \ --json number --limit 500 | jq -r '.[].number') ``
- Create temp directory:
``bash mkdir -p "${AUTOSKILLIT_TEMP}/audit-review-decisions/raw" ``
- Batch fetch in groups of 20 using GraphQL aliases. For each batch, build a query
with aliased pr${i}: pullRequest(number: ${NUM}) nodes. Each node fetches: ``graphql number title mergedAt reviews(first: 100) { nodes { author { login } body state submittedAt } } reviewThreads(first: 100) { pageInfo { hasNextPage endCursor } nodes { isResolved comments(first: 100) { nodes { databaseId author { login } body path line createdAt } } } } ` Include rateLimit { cost remaining resetAt } at query root. After the initial fetch, for each PR where reviewThreads.pageInfo.hasNextPage is true, issue additional aliased queries with reviewThreads(first:100, after:$endCursor) until hasNextPage is false. Merge the nodes` arrays across pages before filtering.
- For each PR in the batch response:
- Filter out threads whose
commentslist contains any comment withbody
starting with [AUDIT] (already watermarked — skip entirely).
- If the PR has zero remaining threads: skip saving.
- Otherwise: save filtered data to
${AUTOSKILLIT_TEMP}/audit-review-decisions/raw/pr_${number}.json
Step 2: Triage (Haiku — Broad Pass)
- List all JSON files in
raw/. Split into batches of ~5 files per agent.
- Launch parallel Haiku subagents (one per batch,
model: "haiku"). Each agent:
- Reads its assigned JSON files only (no API calls).
- Flags a thread if it matches any signal:
- ` {reviewer_quote}
Current relevance: VALID — {impact}
Suggested issue title: {suggested_title} Affected files: {path}
### MEDIUM Priority
{Same structure}
### LOW Priority
{Same structure}
## RESOLVED Findings
{List: PR, file, one-line description of what was fixed}
## STALE Findings
{List: PR, file, one-line description of why no longer applicable}
## Open PR Findings
{Findings from PRs that were open (not merged) at scan time — may still be addressed.
Same per-finding structure but labeled as pending.}
## Pattern Analysis
**Most common deferral phrases (by frequency):**
{Table: phrase | count | % of all candidates}
**Dimensions with highest VALID rate:**
{Table: dimension | valid | resolved | stale | valid_rate}
**Systemic escape hatches detected:**
{Narrative: which phrases act as systematic blockers to tracking, with counts}
**Recommendations:**
{2–4 concrete process recommendations based on the pattern data}
---
6. After writing the file, print a terminal summary:
```
audit-review-decisions complete
Output: {OUTPUT_PATH}
VALID: {N} | RESOLVED: {N} | STALE: {N}
Top finding: {first HIGH priority suggested_title, or "none"}
```
---
### Step 5: Watermark (Thread Annotation)
For every finding processed in Steps 2–3 (all classifications — VALID, RESOLVED, STALE):
1. **Re-check for existing audit marker (live)**: fetch the thread's current comments
directly from the GitHub API — do not use the Step 1 JSON cache, which already
filtered out `[AUDIT]`-marked threads and cannot detect markers posted after Step 1:
```bash
gh api "repos/${OWNER}/${REPO}/pulls/${PR_NUMBER}/comments" \
--jq "[.[] | select(.id == ${COMMENT_ID} or .in_reply_to_id == ${COMMENT_ID}) | .body | startswith(\"[AUDIT]\")] | any"
```
If the result is `true`: skip this thread (idempotent — no duplicate post).
2. **Determine marker body** based on classification and ticket status:
| Classification | Ticket created? | Marker body |
|---|---|---|
| VALID | Yes | `[AUDIT] — tracked in #{issue_number}` |
| VALID | No | `[AUDIT] — acknowledged, no action taken` |
| RESOLVED | — | `[AUDIT] — verified resolved in current codebase` |
| STALE | — | `[AUDIT] — no longer applicable` |
3. **Post reply comment**:
```bash
gh api "repos/${OWNER}/${REPO}/pulls/${PR_NUMBER}/comments/${COMMENT_ID}/replies" \
--method POST \
--field body="${MARKER_BODY}"
sleep 1
```
`COMMENT_ID` is the `databaseId` of the first comment in the thread (from Step 1 JSON).
4. **Thread reply constraint**: These calls cannot be batched via the reviews API — each
requires an individual POST. The 1s delay between calls is mandatory per GitHub API
discipline.
5. Log progress per finding: `[AUDIT] Posted marker on PR #{number} thread {comment_id}: {marker_body}`
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [TalonT-Org](https://github.com/TalonT-Org)
- **Source:** [TalonT-Org/AutoSkillit](https://github.com/TalonT-Org/AutoSkillit)
- **License:** MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.