ttt-triage
Testing & QualityTriage Tiny Tool Town submissions. Reviews new-tool and author-page issues in shanselman/TinyToolTown, evaluates tools against acceptance criteria, queues imports, and helps convert verified author claims into author content files.
How to use this skill
Bring this guide into your coding agent with a prompt tailored to the tool you use.
- Open your project in Codex.
- Copy and paste the prompt below.
- Review files and risks before approving any action.
Inspect the Agent Skill at https://github.com/shanselman/TinyToolTown/blob/HEAD/.github/skills/ttt-triage/SKILL.md and all supporting files. Report provenance, permissions, scripts, dependencies, and security risks. Propose an exact installation into .agents/skills/ttt-triage, but wait for my approval before writing files or running scripts.
Copying this prompt does not install or run the skill. Review third-party files before use.
Tiny Tool Town Triage Skill
Triage submissions for Tiny Tool Town — a community directory of free, open-source tiny tools and claimed author pages.
When to Use
Invoke this skill when asked to:
- Triage new issues / submissions
- Review tool submissions
- Approve or reject tools
- Review author-page claims
- Create or update author profile files
- Check what new tools are pending
Tool Submission Triage Workflow
Step 1: Fetch Open Issues
gh issue list --repo shanselman/TinyToolTown --state open --label new-tool --json number,title,body,labels,createdAt --limit 50
Or use the GitHub MCP list_issues tool with state: OPEN on shanselman/TinyToolTown.
Step 2: Evaluate Each Submission
For each issue, assess against all of these criteria and assign a confidence level.
Step 3: Present Triage Table
Output a markdown table with: issue #, tool name, language, license, confidence (HIGH/MEDIUM/LOW), recommendation (APPROVE/REJECT/MAYBE), and notes.
Step 4: Act on Decisions
After the user confirms:
- APPROVE: Label issue with
queued-import(notapproved—batch-approve.ymldrains the queue) - REJECT: Close with a polite comment explaining why
- MAYBE: Comment asking for the missing information
Acceptance Criteria
Approve if all of these are true:
- Open source — Has a recognized open-source license (MIT, Apache 2.0, GPL, ISC, BSD, etc.)
- Repo is public and accessible — Not a 404, not archived
- It's actually tiny — Single-purpose, small, focused tool; not a full platform or suite
- It's fun, useful, or delightful — TTT celebrates small, joyful tools
- Not enterprise/commercial — No SaaS, no paid tiers, no enterprise features
- Has a README — Should explain what the tool does
- Checklist is complete — All boxes checked in the submission form
Reject if any of these are true:
- No license — Repo has no LICENSE file and submitter didn't specify one
- Dead repo — 404, archived, or clearly abandoned
- Enterprise/commercial tool — Paid SaaS, enterprise pricing, or "free tier" of a commercial product
- Not a tiny tool — Full platform, framework, or suite
- Spam or low effort — Empty repo, no code, or clearly auto-generated submission
- Duplicate — Tool already exists on the site
Maybe / Request Changes if:
- License unclear — Repo exists but no LICENSE file; ask them to add one
- Borderline scope — Could be tiny or could be too big; use judgment
- CC BY-NC or similar — Non-commercial restriction is acceptable but worth flagging
- Repo looks new/empty — Very few commits, might not be ready yet
Confidence Levels
- HIGH — Clear-cut decision, all criteria met or clearly violated
- MEDIUM — Mostly clear but one minor concern
- LOW — Significant uncertainty or borderline fit
Automated Labels
The submission workflow may add:
repo-verifiedhas-licensehas-readmehas-image
Missing has-image is non-blocking.
Important Operational Notes
GitHub Auth
gh auth switch -u shanselman
Approval Queue
Never label issues with approved directly. Always use queued-import.
The batch-approve.yml workflow is the sole writer and drains the queue.
Follow-up Comments
Before making a final decision, check whether the submitter recently commented that they added a license, fixed the repo, or uploaded an image.
Rejection Comments
Be kind and specific:
Hey @username! Thanks for submitting [tool name] to Tiny Tool Town! 👋
Unfortunately, we can't add this one because [specific reason].
[If fixable]: If you [add a license / trim it down / etc.], feel free to resubmit!
Thanks for thinking of us!
Checking for Duplicates
Get-ChildItem src/content/tools/*.md | Select-String -Pattern "github_url.*owner/repo"
Triage Report Format
## Recommend APPROVE (N tools)
| # | Tool | Language | Confidence | Notes |
|---|------|----------|------------|-------|
| 123 | ToolName | Python | HIGH | Brief reason |
## Maybe / Needs Info (N tools)
| # | Tool | Concern |
|---|------|---------|
| 456 | ToolName | What's needed |
## Recommend REJECT (N tools)
| # | Tool | Reason |
|---|------|--------|
| 789 | ToolName | Why it doesn't fit |
Post-Triage
After approvals are queued, optionally trigger the batch workflow:
gh workflow run batch-approve.yml --repo shanselman/TinyToolTown
Author Page Claim Workflow
Author page claims use the customize-author.yml issue form and are labeled author-page.
Step 1: Fetch Author Claims
gh issue list --repo shanselman/TinyToolTown --state open --label author-page --json number,title,body,labels,author,comments,createdAt --limit 50
Also look for open issues titled [Author] @... that may be missing the label. If an author issue is missing author-page, add that label (create it if necessary) so the validation workflow and future triage can find it.
Step 2: Check Verification Labels
.github/workflows/validate-author-claim.yml validates claims only:
- Runs for issues labeled
author-pageand for issues titled[Author] .... - Backfills the
author-pagelabel when it sees an author claim without the label. - Adds
claim-verifiedwhen the issue author matches the requested GitHub username. - Adds
invalid-author-claimwhen the issue author does not match the requested username. - Comments on missing or mismatched usernames.
Important: this workflow does not create or update files under src/content/authors/. Author file ingress is currently handled by maintainers/agents through normal repo commits or PRs.
Step 3: Evaluate Claim Readiness
Approve/take an author claim only when all are true:
- Claim is verified (
claim-verified) or the issue author clearly matches the requested handle. - The claimed handle has at least one accepted tool in
src/content/tools/*.md. - The issue includes useful display content: at minimum a display name plus a short bio or headline.
- Links are normal public profile/project links and use
https://. - Featured groups reference existing tool slugs when provided.
Request info when:
- The claim has only links and no bio/headline. Claiming would replace the generated summary with a sparse page.
- The requested handle does not have any listed tools yet.
- Featured tool slugs are missing, misspelled, or not clearly intended.
- Links are malformed or unclear.
Reject/close when:
- The claim is invalid and not a special maintainer-approved case.
- The requested username does not match the issue author and no maintainer override is provided.
Step 4: Create or Update Author Files
Author files live in:
src/content/authors/{normalized-github-handle}.md
Schema is defined in src/content.config.ts:
---
github: "handle"
name: "Display Name"
headline: "Short headline"
website_url: "https://example.com"
links:
- label: "Blog"
url: "https://example.com/blog"
notes:
- "Short highlight."
sections:
- title: "Tool group"
description: "What these tools have in common."
toolSlugs:
- "existing-tool-slug"
---
Short bio / intro paragraph.
Guidelines:
- Normalize
githuband filename to lowercase without@. - Keep user-provided voice, but lightly edit for clarity, length, and site fit.
- Prefer
andover&in prose/headlines unless it is part of a brand. - Do not include empty fields,
_No response_, or placeholder bullets. - For author
links, parse issue-form lines asLabel - https://.... - For
sections, only include groups with valid existing tool slugs. - If no bio/headline is provided, do not create a file yet; comment asking for one.
Step 5: Validate and Close
For author content changes:
npm test
npm run build
After committing/pushing the author file:
- Close the author issue with a comment referencing the commit.
- If more info is needed, leave the issue open and comment with the specific missing information.
Combined Daily Triage
When asked to triage "everything" or "other issues":
- Fetch both
new-toolandauthor-pageissues. - Fetch open PRs.
- Queue ready tools with
queued-import. - Convert ready author claims into
src/content/authors/*.mdvia commit/PR. - Request missing author info instead of creating sparse profiles.
- Close or decline stale/superseded PRs only when explicitly authorized.