Always-on terminal audio recorder + local transcription (Whisper)
Project description
huske
huske — Norwegian for "to remember"
A terminal app that runs in the background, continuously records your microphone plus your computer's system audio, and transcribes the audio locally with faster-whisper — producing a day-organized, LLM-friendly knowledge base of everything that was said on your machine throughout the day.
Point Claude Code (or any other LLM agent) at ~/huske/transcripts/ and ask
it about your day.
~/huske/transcripts/
├── 2026-05-07/
│ ├── 091500_8a3f2c19_001.md
│ ├── 093000_8a3f2c19_002.md
│ └── 094500_8a3f2c19_003.md
└── README.md
Features
- Continuous capture — mic (sounddevice) + system audio (Apple ScreenCaptureKit), mixed in software, no gaps at chunk boundaries.
- No drivers, no Audio MIDI Setup — system audio comes through Apple's modern ScreenCaptureKit framework. Just grant Screen Recording permission once.
- Local transcription —
faster-whisper, defaultbasemodel. Audio never leaves your machine. - Configurable chunk size — default 15 minutes, anything from 6 s to 60 min.
- Resilient — graceful stop finalizes the partial chunk; SIGKILL + restart auto-recovers orphaned audio.
- Pretty terminal UI — Rich Live panel with countdown, mic + system level meters, queue depth, last-saved transcript, rolling event log.
- LLM-ready output — every transcript is a single Markdown file with full
YAML frontmatter; the directory layout is documented in
~/huske/transcripts/README.md(auto-generated).
Requirements
- macOS 13 (Ventura) or newer. Apple Silicon is the primary target.
- Python 3.11, 3.12, or 3.13.
Quickstart
# 1. Install
uv tool install huske
# 2. Validate setup (will prompt for Screen Recording permission on first run)
huske doctor
# 3. Record (Ctrl+C to stop)
huske run
# 4. Reclaim orphans from a prior crash without recording
huske recover
Other install options:
# Alternative Python tool installer:
pipx install huske
# macOS Apple Silicon with Homebrew:
brew tap tiagomoraes/huske
brew install huske
On first launch macOS will prompt you to grant Screen Recording permission to your Python interpreter — that's what ScreenCaptureKit needs to capture system audio. After approving once, it's silent forever.
For prerelease builds or exact GitHub tags, install directly from the repository:
uv tool install "git+https://github.com/tiagomoraes/huske.git@v0.1.0"
See quickstart.md for the full setup.
Update notifications
On startup, huske checks PyPI at most once every 24 hours and prints an
"update available" banner with the right upgrade command for your install
method (uv tool upgrade huske, pipx upgrade huske, or
brew upgrade huske). The check runs in a background thread, is silent on
network errors, on non-TTY stderr, and for editable installs. Disable it with:
export HUSKE_NO_UPDATE_CHECK=1
Privacy and consent
huske is local-first: audio capture and transcription run on your machine, and the app writes transcripts to your configured filesystem path. That does not make the data low-risk. Recordings, transcripts, logs, filenames, and device metadata can contain private or legally sensitive information.
- Get consent before recording other people or regulated conversations.
- Do not commit generated audio, transcripts, logs, local configs, model caches, or screenshots containing private content.
- Redact
huske doctoroutput before sharing it publicly. - Report security or privacy vulnerabilities privately through SECURITY.md.
Documentation
- Development — local setup, checks, and test strategy.
- Contributing — how to open issues and pull requests.
- Issue triage — labels and maintainer workflow.
- Release checklist — release preparation notes.
- Spec — what huske does and why.
- Plan — technical context and architecture.
- CLI contract — flags, exit codes.
- Transcript format contract — the LLM-consumer interface.
- Quickstart — end-to-end setup.
Community
- Follow the Code of Conduct.
- Use issue templates for bugs, features, and documentation reports.
- Use the pull request template and include the exact checks you ran.
- For help, see SUPPORT.md.
License
huske is released under the MIT License. Third-party notices are in THIRD_PARTY_NOTICES.md.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file huske-0.2.0.tar.gz.
File metadata
- Download URL: huske-0.2.0.tar.gz
- Upload date:
- Size: 90.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78e5e1ccb3dd1e62b6ef1ff50ca9eb6e0744417a03cb4ef94145d5e8b71c40c4
|
|
| MD5 |
ad001c9295b9276a43e9ce5d99c82127
|
|
| BLAKE2b-256 |
41a168f178c57f76dcc5a2d25427b8c153e364a8c39000fde12f05968e047e25
|
Provenance
The following attestation bundles were made for huske-0.2.0.tar.gz:
Publisher:
release.yml on tiagomoraes/huske
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
huske-0.2.0.tar.gz -
Subject digest:
78e5e1ccb3dd1e62b6ef1ff50ca9eb6e0744417a03cb4ef94145d5e8b71c40c4 - Sigstore transparency entry: 1465180852
- Sigstore integration time:
-
Permalink:
tiagomoraes/huske@3452b97a38748d7f22546e706f78170f1102c6cd -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/tiagomoraes
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3452b97a38748d7f22546e706f78170f1102c6cd -
Trigger Event:
release
-
Statement type:
File details
Details for the file huske-0.2.0-py3-none-any.whl.
File metadata
- Download URL: huske-0.2.0-py3-none-any.whl
- Upload date:
- Size: 44.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa8326d3343abe3e21f7fd7437aceb99c469dad41242091dd7cc112b0b722a80
|
|
| MD5 |
2325d950f5066c1064a09768d589bd5a
|
|
| BLAKE2b-256 |
10008e6a4b280f1b6d76bd19b6d2579d5d7597722368a4acdc2d0eadb12d158a
|
Provenance
The following attestation bundles were made for huske-0.2.0-py3-none-any.whl:
Publisher:
release.yml on tiagomoraes/huske
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
huske-0.2.0-py3-none-any.whl -
Subject digest:
fa8326d3343abe3e21f7fd7437aceb99c469dad41242091dd7cc112b0b722a80 - Sigstore transparency entry: 1465180945
- Sigstore integration time:
-
Permalink:
tiagomoraes/huske@3452b97a38748d7f22546e706f78170f1102c6cd -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/tiagomoraes
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3452b97a38748d7f22546e706f78170f1102c6cd -
Trigger Event:
release
-
Statement type: