Back to skills
SkillHub ClubAnalyze Data & AIFull StackData / AI

wispr-flow

Analyze Wispr Flow voice dictation data. Stats, search, export, visualizations. Use when user says "dictation history", "word counts", "voice analytics", "how much did I dictate", "search my dictation".

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
249
Hot score
98
Updated
March 20, 2026
Overall rating
C3.7
Composite score
3.7
Best-practice grade
A88.4

Install command

npx @skill-hub/cli install artemxtech-personal-os-skills-wispr-flow

Repository

ArtemXTech/personal-os-skills

Skill path: skills/wispr-flow

Analyze Wispr Flow voice dictation data. Stats, search, export, visualizations. Use when user says "dictation history", "word counts", "voice analytics", "how much did I dictate", "search my dictation".

Open repository

Best for

Primary workflow: Analyze Data & AI.

Technical facets: Full Stack, Data / AI.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: ArtemXTech.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install wispr-flow into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/ArtemXTech/personal-os-skills before adding wispr-flow to shared team environments
  • Use wispr-flow for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: wispr-flow
description: Analyze Wispr Flow voice dictation data. Stats, search, export, visualizations. Use when user says "dictation history", "word counts", "voice analytics", "how much did I dictate", "search my dictation".
---

# Wispr Flow Skill

Access and analyze your Wispr Flow voice dictation history.

## Quick Stats

```bash
# Overall stats
{baseDir}/scripts/get-stats.py

# Today only
{baseDir}/scripts/get-stats.py --period today

# This week
{baseDir}/scripts/get-stats.py --period week

# JSON output
{baseDir}/scripts/get-stats.py --json
```

## Search

```bash
# Search all dictations
{baseDir}/scripts/search-history.py "keyword"

# Filter by app
{baseDir}/scripts/search-history.py "keyword" --app ghostty

# Date range
{baseDir}/scripts/search-history.py "keyword" --from 2026-01-01 --to 2026-01-10
```

## Export

```bash
# JSON backup (text only, portable)
{baseDir}/scripts/export-data.py -o ~/Downloads/wispr-backup.json

# Obsidian daily notes format
{baseDir}/scripts/export-data.py --format obsidian -o ~/vault/Voice/
```

## Visualization

```bash
# Generate interactive HTML dashboard
{baseDir}/scripts/create-dashboard.py -o ~/Downloads/wispr-dashboard.html
open ~/Downloads/wispr-dashboard.html
```

## Quick Queries (Direct SQL)

```bash
# Recent dictations (EST timezone)
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "
SELECT datetime(timestamp, '-5 hours') as time, app, substr(formattedText, 1, 80)
FROM History ORDER BY timestamp DESC LIMIT 10
"

# Words by app
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "
SELECT app, SUM(numWords) as words FROM History
WHERE app IS NOT NULL GROUP BY app ORDER BY words DESC LIMIT 10
"

# Today's word count
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "
SELECT SUM(numWords) FROM History
WHERE date(timestamp, '-5 hours') = date('now', '-5 hours')
"
```

## Database

**Location:** `~/Library/Application Support/Wispr Flow/flow.sqlite`

**Key tables:**
- `History` - all dictations (timestamp, app, formattedText, numWords, duration, audio blob)

**Timezone:** Database stores UTC. Use `-5 hours` for EST.

## Space Management

See [docs/space-management.md](docs/space-management.md) for cleaning up audio blobs.

## Troubleshooting

See [docs/troubleshooting.md](docs/troubleshooting.md) for common issues.


---

## Referenced Files

> The following files are referenced in this skill and included for context.

### docs/space-management.md

```markdown
# Space Management

The Wispr Flow database can grow large due to audio blobs stored with each dictation.

## Check Space Usage

```bash
# Total database size
ls -lh ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite

# Audio blob size
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "
SELECT
    ROUND(SUM(LENGTH(audio))/1e9, 2) as audio_gb,
    ROUND(SUM(LENGTH(screenshot))/1e9, 2) as screenshot_gb
FROM History
"

# Size breakdown by month
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "
SELECT
    strftime('%Y-%m', timestamp) as month,
    COUNT(*) as dictations,
    ROUND(SUM(LENGTH(audio))/1e6, 1) as audio_mb
FROM History
GROUP BY month
ORDER BY month
"
```

## Clean Up Audio (Keep Text)

Delete audio blobs older than 30 days while keeping all text:

```bash
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "
UPDATE History
SET audio = NULL, builtInAudio = NULL
WHERE timestamp < datetime('now', '-30 days')
"

# Reclaim space (important!)
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "VACUUM"
```

## Backup Before Cleaning

Always backup first:

```bash
cp ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite ~/Downloads/wispr-backup-$(date +%Y%m%d).sqlite
```

## Typical Sizes

- Text only: ~1-2 MB per 1000 dictations
- With audio: ~300 MB per 1000 dictations (varies by length)

## Full Backup

```bash
# Full database (with audio)
cp ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite ~/Downloads/wispr-full-backup.sqlite

# Text-only export (portable JSON)
.claude/skills/wispr-flow/scripts/export-data.py -o ~/Downloads/wispr-text-backup.json
```

```

### docs/troubleshooting.md

```markdown
# Troubleshooting

## Database Not Found

**Error:** `Wispr Flow database not found`

**Solution:** Wispr Flow stores data at:
```
~/Library/Application Support/Wispr Flow/flow.sqlite
```

If missing:
1. Make sure Wispr Flow is installed
2. Dictate something to create the database
3. Check if path has changed: `find ~/Library -name "flow.sqlite" 2>/dev/null`

## Empty Results

**Issue:** Stats show 0 dictations

**Check:**
```bash
# Verify data exists
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "SELECT COUNT(*) FROM History"

# Check for cancelled entries
sqlite3 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite "
SELECT status, COUNT(*) FROM History GROUP BY status
"
```

## Timezone Issues

**Issue:** Times appear wrong

The database stores UTC timestamps. Scripts use `-5 hours` offset for EST.

**Adjust for your timezone:**
- EST: `-5 hours`
- PST: `-8 hours`
- UTC: no offset

Edit the `TZ_OFFSET` constant in scripts if needed.

## Large Database

**Issue:** Database is very large (>5GB)

Most space is audio blobs. See [space-management.md](space-management.md) for cleanup.

## Permission Denied

**Error:** Cannot read database

```bash
# Check permissions
ls -la ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite

# Fix if needed
chmod 644 ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite
```

## Database Locked

**Error:** `database is locked`

Wispr Flow is actively writing. Either:
1. Wait a moment and retry
2. Make a copy and query that:
   ```bash
   cp ~/Library/Application\ Support/Wispr\ Flow/flow.sqlite /tmp/wispr-copy.sqlite
   sqlite3 /tmp/wispr-copy.sqlite "SELECT COUNT(*) FROM History"
   ```

```

wispr-flow | SkillHub