---
name: fluidvoice-stats
description: Generate a privacy-preserving Yap Map from local FluidVoice history or an exported VoiceInk CSV, render a local behavioral preview, and optionally contribute aggregate voice statistics. Use when a user wants to analyze FluidVoice or VoiceInk habits, create a weekly voice-prompt visualization, export standardized anonymous voice metrics, or contribute those metrics after reviewing them.
---

# Yap Map for FluidVoice and VoiceInk

Generate aggregate behavioral statistics without exposing transcript text. When this skill is loaded from a website, resolve all relative resource links against that website's `/skill/` route.

## Workflow

1. Default the workspace to `home` and the goal to `self_tracking` unless the user has already expressed a different context. Do not make workspace setup a prerequisite to personal exploration.
2. Tell the user in no more than three bullets that history is read locally, their words never leave the computer, and they review the result before contributing.
3. Obtain `scripts/fluidvoice_stats.py`. For a URL-loaded skill, retrieve `<site-origin>/skill/scripts/fluidvoice_stats.py` into a task-specific temporary directory and inspect it before execution. Do not require the user to download or install anything manually.
4. Identify the source:
   - For FluidVoice, use its default local history automatically. If it is absent, pass `--plist <path>` only when the user supplies or approves another path.
   - For VoiceInk, ask the user to open **History**, choose **Select All**, choose **Export**, and save the CSV locally. Ask for its path, then pass `--voiceink-csv <path>`.
   - Wispr Flow is not yet supported. Do not inspect undocumented application storage; explain that its supported full-history export currently requires a data-export request and Cloud Sync history.
5. Run `/usr/bin/python3 fluidvoice_stats.py export --workspace <workspace> --goal <goal> --output-dir <durable-user-chosen-dir> [--voiceink-csv <path>]` on macOS. Fall back to a working `python3` only when the system interpreter is unavailable.
6. Open or inspect the emitted `preview.html` locally. It includes a playful office superlative, a locally derived five-axis personality radar, and an optional social-card preview. The user may explicitly copy, download, or share that bounded card; those actions happen in the browser and do not upload the complete report.
7. Tell the user where `packet.json` and `preview.html` were written. Explain that only the reviewed packet—not the complete page—is eligible for contribution.
8. Optionally ask for broad `role`, `industry`, and `work type` context. Make clear that every field can be skipped, is retained for internal analysis, and is not rendered as an individual public result. Prefer broad categories over identifying detail. If context is provided, rerun export with `--role`, `--industry`, and/or `--work-type` to update the reviewed packet.
9. Offer to contribute the aggregate packet. Do not upload automatically; require explicit confirmation after the packet and optional context are final.
10. Only after confirmation, run `/usr/bin/python3 fluidvoice_stats.py upload --packet <packet.json> --endpoint <site-origin>/api/contribute`.

Derive `<site-origin>` from the URL where this skill was loaded. Never substitute a third-party endpoint.

## Safety

- Never add transcript text, processed text, application names, window titles, filenames, device identifiers, usernames, or exact prompt timestamps.
- Preserve only aggregate bins and summary values defined in [references/packet-schema.md](references/packet-schema.md).
- Treat `packet_id` as a random deduplication identifier, not an identity.
- Keep local artifacts private unless the user explicitly authorizes upload or sharing. Clicking the report's Copy PNG, Download PNG, or Share button counts as authorization for that social-card image only.
- Refuse to bypass the preview-and-confirmation step.
- Never upload the generated HTML page or its personalized observations.
- Keep derived personality labels and radar scores local to the HTML; never add them to `packet.json`.
- The social card may contain only the office superlative, its evidence sentence, the five radar labels and scores, and Yap Map branding. Never render transcript language, timestamps, the heatmap, contribution context, or packet contents into it.

## Source handling

- FluidVoice: the exporter reads `TranscriptionHistoryEntries` from the default macOS preferences plist and supports either byte-encoded JSON or an already-decoded list.
- VoiceInk: the exporter reads the app's supported CSV export. It uses the enhanced transcript when present, otherwise the original transcript, solely to calculate a local word count. It uses the exported timestamp for weekly and burst aggregates. All other CSV fields are ignored.
- Never upload a source plist or CSV. They contain transcript language and remain local input files.
