task icon Task

Analyze Feedback Themes

Requirements
CSV file with feedback data. Expected columns: feedback text, optionally date, user/customer, rating/score, category.
1

Ask the user to upload their feedback CSV file.

Expected data:

  • Feedback text (required) — the actual feedback content
  • Date (optional) — when feedback was submitted
  • User/customer identifier (optional) — for segment analysis
  • Rating or score (optional) — NPS, CSAT, star rating
  • Category (optional) — pre-tagged categories

Check if they want to focus on any specific:

  • Time period
  • User segment
  • Feature area
  • Sentiment type
6

Review the validation output. Note any warnings about data quality or missing columns.

Interpret the parsed CSV columns semantically using the interpretation guide.
Identify feedback text columns, date columns, user/customer columns, and score columns.

8

Analyze the feedback data:

  1. Identify themes — Read through feedback and group into recurring topics

    • Look for feature requests, pain points, praise, confusion, comparisons
    • Count frequency of each theme
    • Note sentiment within themes
  2. Extract evidence — For each major theme:

    • Count how many responses mention it
    • Pull 2-3 representative quotes
    • Note any patterns (user type, time period)
  3. Assess sentiment — If rating/score column exists:

    • Correlate themes with scores
    • Identify what drives positive vs negative sentiment
  4. Identify feature requests — Catalog specific asks

  5. Note competitor mentions — Track alternatives users reference

Present findings using the Feedback Analysis template.
Lead with the most actionable insights.

9

After presenting analysis:

  • Ask if any themes need deeper exploration
  • Offer to cross-reference with specific segments
  • Ask if they want to save key findings

Session file uiParsed Product Data will be cleaned up automatically.

                    To run this task you must have the following required information:

> CSV file with feedback data. Expected columns: feedback text, optionally date, user/customer, rating/score, category.

If you don't have all of this information, exit here and respond asking for any extra information you require, and instructions to run this task again with ALL required information.

---

You MUST use a todo list to complete these steps in order. Never move on to one step if you haven't completed the previous step. If you have multiple read steps in a row, read them all at once (in parallel).

Add all steps to your todo list now and begin executing.

## Steps

1. Ask the user to upload their feedback CSV file.

Expected data:
- Feedback text (required) — the actual feedback content
- Date (optional) — when feedback was submitted
- User/customer identifier (optional) — for segment analysis
- Rating or score (optional) — NPS, CSAT, star rating
- Category (optional) — pre-tagged categories

Check if they want to focus on any specific:
- Time period
- User segment
- Feature area
- Sentiment type


2. [Gather Arguments: Parse CSV] The next step has the following requirements for arguments, do not proceed until you have all the required information:
- `inputPath`: path to the uploaded CSV from user
- `outputPath`: output path from ui:session.product.data
- `hasHeaders` (default: "true") - Whether first row is headers: true, false
- `delimiter` - Field delimiter (auto-detected if empty)
- Packages: papaparse

3. [Run Code: Parse CSV]: Call `run_script` with:

```json
{
  "file": {
    "path": https://sk.ills.app/code/stdlib.csv.parse/preview,
    "args": [
      "inputPath",
      "outputPath",
      "hasHeaders",
      "delimiter"
    ]
  },
  "packages": ["papaparse"]
}
```

4. [Gather Arguments: Validate Product Data] The next step has the following requirements for arguments, do not proceed until you have all the required information:
- `inputPath`: output path from ui:session.product.data
- `requiredColumns`: feedback
- `minRows` (default: "20"): 10
- `analysisType` (default: "general"): feedback

5. [Run Code: Validate Product Data]: Call `run_script` with:

```json
{
  "file": {
    "path": https://sk.ills.app/code/product.data.validate/preview,
    "args": [
      "inputPath",
      "requiredColumns",
      "minRows",
      "analysisType"
    ]
  },
  "packages": null
}
```

6. [Read CSV Column Interpretation Guide]: Read the documentation in: `./skills/sauna/[skill_id]/references/stdlib.csv.interpretation.md` (Semantic column interpretation guidance)

7. [Read Parsed Product Data]: Read the file at `./documents/tmp/product-data.json` and analyze its contents (Load the parsed data)

8. Review the validation output. Note any warnings about data quality or missing columns.

Interpret the parsed CSV columns semantically using the interpretation guide.
Identify feedback text columns, date columns, user/customer columns, and score columns.


9. [Read Feedback Analysis Guide]: Read the documentation in: `./skills/sauna/[skill_id]/references/product.feedback.guide.md` (Get analysis framework and output template)

10. Analyze the feedback data:

1. **Identify themes** — Read through feedback and group into recurring topics
   - Look for feature requests, pain points, praise, confusion, comparisons
   - Count frequency of each theme
   - Note sentiment within themes

2. **Extract evidence** — For each major theme:
   - Count how many responses mention it
   - Pull 2-3 representative quotes
   - Note any patterns (user type, time period)

3. **Assess sentiment** — If rating/score column exists:
   - Correlate themes with scores
   - Identify what drives positive vs negative sentiment

4. **Identify feature requests** — Catalog specific asks

5. **Note competitor mentions** — Track alternatives users reference

Present findings using the Feedback Analysis template.
Lead with the most actionable insights.


11. After presenting analysis:
- Ask if any themes need deeper exploration
- Offer to cross-reference with specific segments
- Ask if they want to save key findings

Session file `./documents/tmp/product-data.json` will be cleaned up automatically.