Feedback Triage skill for Codex
Turn feature requests into ranked customer problems. Codex classifies feedback from support, sales, reviews and in-app widgets, routes bugs and questions immediately, and rewrites each feature request as the problem behind it. Requests collapse into problem records counted by distinct accounts with revenue and segment context, a recurring digest highlights rising problems and churn risk, and replies to customers are drafted for your approval.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- feedback-triage Installs to ~/.agents/skills/feedback-triage/ for every project on this machine.
curl -fsSL codexskills.dev/cli.mjs -o codex-skills.mjsnode codex-skills.mjs install feedback-triage The CLI also searches, updates and removes skills. Run it with no arguments to pick from a list. Needs Node 20.12+.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- --project feedback-triage Installs to .agents/skills/feedback-triage/ in the current repository. Commit it and everyone who runs Codex there gets it.
curl -fsSLO codexskills.dev/downloads/feedback-triage.zipunzip -o feedback-triage.zip -d ~/.agents/skills/ The archive holds the skill folder with its generated agents/openai.yaml. Unzip into .agents/skills/ to scope it to a repo.
& ([scriptblock]::Create((irm codexskills.dev/install.ps1))) feedback-triage PowerShell 5.1 or 7. Installs to %USERPROFILE%\.agents\skills\. Add -Project for the current repo.
104-line POSIX script. No sudo, no telemetry. Read install.sh
Use it in Codex
Start a prompt with $feedback-triage, or pick it from /skills.
You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.
What Codex reads before loading it
Triages user feedback and feature requests from support tickets, sales notes, app reviews, community posts and in-app widgets - classifies each item (bug, request, usability, question, praise), extracts the underlying problem behind the requested solution, deduplicates into problem-level records weighted by account count and revenue, routes bugs and questions, closes the loop with requesters, and produces a recurring feedback digest. Use when asked to triage a feedback backlog, sort or dedupe feature requests, summarize what customers are asking for, or set up a feedback intake process.
Use it when
- A backlog of untriaged feedback or feature requests has built up
- The same request appears under many different names
- Product needs a regular summary of what customers are asking for
- Requesters never hear back after asking for something
Use something else when
- You are synthesizing planned research interviews: use user-research-synthesis
- You need to rank already-defined items for the roadmap: use prioritization-frameworks
- You are writing support replies and help articles: use customer-support-macros
How to check the result
A random sample of 20 items is classified correctly and linked to a fitting problem record, and top-record account counts match a manual recount.
The mistake it prevents
Logging requested solutions such as a Gantt chart instead of the problem, so the same need is scattered across many records and undercounted.
Triage is done well when every item is classified and routed within the agreed time, requests are recorded as problems rather than solutions, duplicates roll up into one record with a count of distinct accounts and their revenue, and requesters hear back when something changes.
Classify every item
| Type | Definition | Route to |
|---|---|---|
| Bug | Product behaves differently from intended or documented | Bug tracker with repro, severity |
| Feature request | Wants a capability that does not exist | Problem record (below) |
| Usability issue | Capability exists but people cannot find or use it | Design backlog, link to problem record |
| Question / how-to | Needs an answer, not a change | Support; consider a doc gap |
| Praise | Positive signal | Tag for marketing and team morale |
| Noise / spam | Not actionable | Archive |
When unsure between bug and request, check the docs or code: documented behaviour that users dislike is a request; behaviour contradicting docs or specs is a bug.
Extract the problem
Customers propose solutions. Record what they asked for and the problem underneath:
Request: "Add a Gantt chart view"
Problem: Account managers cannot show clients when deliverables land relative to each
other, so they rebuild timelines in slides every week.
Evidence: Ticket #48213, ACME Corp (Business plan), quote: "I spend Friday afternoons
redoing this in Keynote."
If the problem is unclear, mark needs-clarification and draft a follow-up question
(“What were you trying to do when you needed this?”). Do not send it without the user’s
approval if it goes to a customer.
Problem records and deduplication
One record per problem, not per request. Each record:
### PR-112: Account managers cannot show clients a delivery timeline
Status: new | under review | planned | in progress | shipped | won't do
Requests linked: 23 (Gantt view x9, timeline export x6, calendar view x5, other x3)
Distinct accounts: 17 | ARR represented: $412k | Segments: agency (14), in-house (3)
Churn/deal risk mentions: 2 (links)
Workarounds seen: slides, spreadsheet, Notion timeline
Latest evidence: <date, link>
Owner: <PM> | Linked roadmap item: <link or none>
Deduplicate by meaning, not keywords: “Gantt chart”, “timeline export” and “see due dates on a calendar” may be one problem; “Gantt for resource planning” may be another. When merging, keep every original link.
Weighting rules:
- Count distinct accounts, not messages or votes; ten messages from one account is one.
- Show ARR or plan mix, but never let revenue alone decide; record it as context.
- Flag explicit churn or deal-loss risk with a link to the source.
- Separate prospects (sales notes) from customers; both matter differently.
Triage workflow
- [ ] 1. Pull new items since the last run (export, API or connector; needs network)
- [ ] 2. Strip personal data not needed for triage (keep account ID, plan, link)
- [ ] 3. Classify each item; route bugs and questions immediately
- [ ] 4. For requests, extract the problem and match to an existing record or create one
- [ ] 5. Update counts, ARR, segments and latest evidence on touched records
- [ ] 6. Flag items needing clarification, urgent churn risk, or security reports
- [ ] 7. Close the loop on records whose status changed
- [ ] 8. Produce the digest
Security vulnerability reports go straight to the security contact, never into a public tracker.
Working with exports in Codex
Typical sources arrive as CSV or JSON exports (Zendesk, Intercom, HubSpot, App Store reviews). Process them in batches of a few hundred, keep a stable item ID column, and write results to a new file rather than editing the export:
item_id, source, account_id, plan, type, problem_record, summary, needs_followup
If a tracker is reachable through gh, an MCP connector, or an API the user has
configured, creating or updating issues changes shared state: list the proposed changes
and get approval first. Bulk-closing or deleting tickets requires explicit confirmation.
Closing the loop
When a record moves to planned, shipped or won’t do, draft a message to linked requesters:
- Shipped: what changed, link to docs, thanks for the specific request.
- Won’t do: honest reason, any workaround, invite further context.
- Planned: only if the date is committed; otherwise say it is under consideration.
Show drafts to the user; sending messages to customers needs explicit approval.
Digest template
# Feedback digest - <period>
Items processed: 412 (bugs 61, requests 188, usability 47, questions 102, praise 14)
Median time to triage: 1.4 days
## Top problems by distinct accounts (new evidence this period)
| Record | Accounts (+new) | ARR | Segments | Status |
## Rising (2x+ new accounts vs previous period)
## Churn / deal risk mentions
## Bugs reported via feedback: count by severity, top 3 with links
## Loop closed this period: <records and number of requesters notified>
## Needs PM decision
Gotchas
- Upvote counts on public boards measure the vocal and the recent; always pair with distinct account counts from all sources.
- Sales-reported requests often describe what one prospect asked once; record them, but label them as prospect evidence.
- A recurring question is often a usability or docs problem; tag it so it does not vanish into support.
- Do not promise delivery in replies unless the roadmap item is committed.
- Keep personal data out of shared triage docs; use account IDs and links.
Verification
Spot-check 20 random items: classification is right, each request links to a problem record, and the record’s problem statement fits the item. Recount distinct accounts on the top five records from the linked items. Confirm every routed bug has a repro or a needs-repro label, and that no customer message was sent without approval.
What the zip contains
SKILL.md plus the interface file below. Nothing runs on install.
agents/openai.yaml
Gives the Codex app a display name, a one-line description and a starter prompt for this skill.
interface:
display_name: "Feedback Triage"
short_description: "Turn feature requests into ranked customer problems"
default_prompt: "$feedback-triage Triage this export of 500 Intercom conversations into bugs, requests and questions" About this skill
Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.