audience
npx machina-cli add skill brennacodes/brenna-plugs/audience --openclawFor individual people, use shared/people/ profiles instead. Audience segments describe archetypes, not individuals.
</purpose>
<load-config>
Resolve the user's home directory (run `echo $HOME` via Bash). Use this absolute path for all file operations below -- never pass `~` to the Read tool.
1. Read `<home>/.things/config.json`
<if condition="config-missing">Tell the user: "Run `/things:setup-things` first." Then stop.</if>
2. Check that `<home>/.things/heres-the-thing/` exists
<if condition="htt-missing">Tell the user: "Run `/heres-the-thing:setup-htt` first." Then stop.</if>
</load-config>
</step>
<step id="parse-arguments" number="2">
<description>Parse Arguments</description>
Parse `$ARGUMENTS` for subcommand and optional slug.
<if condition="no-arguments">
Use AskUserQuestion:
<options>
- Create a new audience segment
- List existing audience segments
- View an audience segment
- Edit an audience segment
- Delete an audience segment
</options>
</if>
</step>
<step id="create" number="3">
<description>Create Audience Segment</description>
<if condition="subcommand-is-create">
Use AskUserQuestion to gather:
1. **Name**: What do you call this audience? (e.g., "Engineering Leadership", "Product Managers", "Budget Approvers")
2. **Description**: Brief description of who they are and what they do.
3. **Tags**: Tags for this audience segment (comma-separated)
4. **Typical concerns**: What do they typically worry about? (ask for 3-5 items)
5. **Decision criteria**: What drives their decisions? (ask for 2-4 items)
6. **Communication preferences**:
- Format preference (e.g., "Bottom-line-up-front", "Narrative", "Data-driven")
- Length preference (e.g., "Concise -- 1 page max", "Detailed -- full proposal OK")
- Language preference (e.g., "Business impact over technical details", "Technical depth expected")
7. **Receptiveness baseline**: How does this audience segment typically respond to new ideas?
<options>
- champion -- They actively advocate for change
- enthusiastic -- Open and supportive
- neutral -- Will evaluate on merits
- skeptical -- Needs strong evidence
- hostile -- Actively resistant
</options>
Generate a slug from the name (lowercase, hyphens, no special characters).
<output-path>`<home>/.things/heres-the-thing/audiences/<slug>.json`</output-path>
```json
{
"id": "<slug>",
"name": "<name>",
"description": "<description>",
"tags": ["<tags>"],
"typical_concerns": ["<concerns>"],
"decision_criteria": ["<criteria>"],
"communication_preferences": {
"format": "<format>",
"length": "<length>",
"language": "<language>"
},
"receptiveness_baseline": "<baseline>",
"known_objections": [],
"created": "<current_date>",
"updated": "<current_date>"
}
```
</if>
</step>
<step id="list" number="4">
<description>List Audience Segments</description>
<if condition="subcommand-is-list">
Scan `<home>/.things/heres-the-thing/audiences/*.json`.
For each file, read and extract: `id`, `name`, `receptiveness_baseline`, `tags`.
Present as a table:
```
Audience Segments:
engineering-leadership Engineering Leadership neutral [leadership, executive]
individual-contributors Individual Contributors enthusiastic [engineering, ic]
budget-approvers Budget Approvers skeptical [finance, approval]
```
</if>
</step>
<step id="view" number="5">
<description>View Audience Segment</description>
<if condition="subcommand-is-view">
<if condition="no-slug">Ask the user which segment to view (list available options via AskUserQuestion).</if>
Read `<home>/.things/heres-the-thing/audiences/<slug>.json`.
Present the full profile in a readable format:
```
Audience: Engineering Leadership
Receptiveness: neutral
Tags: leadership, executive, technical-strategy
Description: Directors and VPs of engineering, responsible for org-wide technical decisions
Typical Concerns:
- Reliability and stability
- Team productivity impact
- Maintenance burden
Decision Criteria:
- ROI with clear timeline
- Risk mitigation story
- Team consensus signals
Communication Preferences:
- Format: Bottom-line-up-front, then supporting evidence
- Length: Concise -- 1 page max for initial pitch
- Language: Business impact over technical details
Known Objections: (none yet)
```
</if>
</step>
<step id="edit" number="6">
<description>Edit Audience Segment</description>
<if condition="subcommand-is-edit">
<if condition="no-slug">Ask the user which segment to edit.</if>
Read the existing segment. Show current values.
Use AskUserQuestion to ask what to change:
<options>
- Name and description
- Tags
- Typical concerns
- Decision criteria
- Communication preferences
- Receptiveness baseline
- Known objections (add or remove)
</options>
Update the specified fields. Set `updated` to current date. Write the file.
</if>
</step>
<step id="delete" number="7">
<description>Delete Audience Segment</description>
<if condition="subcommand-is-delete">
<if condition="no-slug">Ask the user which segment to delete.</if>
<ask-user>
Confirm: "Delete audience segment '<name>'? This cannot be undone. Campaigns that reference this segment will keep their inline audience data."
</ask-user>
```bash
rm <home>/.things/heres-the-thing/audiences/<slug>.json
```
</if>
</step>
<step id="confirm" number="8">
<description>Confirm</description>
<completion-message>
Show the action taken and current segment count.
</completion-message>
</step>
</steps>Source
git clone https://github.com/brennacodes/brenna-plugs/blob/main/plugins/heres-the-thing/skills/audience/SKILL.mdView on GitHub Overview
Audience enables you to create reusable profiles that describe groups of people with shared characteristics, concerns, and communication preferences. These segments are stored as JSON files under ~/.things/heres-the-thing/audiences/ and are referenced by campaigns to tailor messaging. They represent archetypes, not individuals.
How This Skill Works
The skill loads configuration, parses subcommands like create, list, view, edit, and delete, then generates a slug from the audience name and stores the profile as a JSON file at ~/.things/heres-the-thing/audiences/<slug>.json. It can read these files to list or view details and updates the files when editing or deleting segments.
When to Use It
- Create a new audience segment to target a specific group with tailored messaging
- Edit an existing audience segment to update description, concerns, or preferences
- List all defined audience segments to audit coverage and avoid duplicates
- View details of a particular audience segment to verify content before campaigns
- Delete an unused or outdated audience segment
Quick Start
- Step 1: Create a new audience segment and answer prompts (name, description, tags, concerns, criteria, preferences, receptiveness)
- Step 2: List all segments to confirm creation and locate the slug
- Step 3: View or edit the segment by slug when you need to adjust details or messaging
Best Practices
- Give clear, descriptive names and useful tags for quick discovery
- Capture 3-5 typical concerns and 2-4 decision criteria per segment
- Define explicit communication preferences (format, length, language)
- Keep slug names stable and unique to avoid campaign mismatches
- Regularly reconcile audience profiles with campaigns to maintain relevance
Example Use Cases
- Engineering Leadership segment with concerns like delivery timelines and technical debt; criteria prioritize business impact and feasibility
- Product Managers segment focused on roadmaps, user value, and influence within cross-functional teams
- Budget Approvers segment emphasizing cost impact, risk, and governance requirements
- Sales Leaders segment targeting strategic initiatives and ROI justification
- HR Professionals segment centered on employee experience, compliance, and people analytics