huske 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. huske-0.1.0/.gitignore +40 -0
  2. huske-0.1.0/CHANGELOG.md +22 -0
  3. huske-0.1.0/CODE_OF_CONDUCT.md +27 -0
  4. huske-0.1.0/CONTRIBUTING.md +79 -0
  5. huske-0.1.0/LICENSE +21 -0
  6. huske-0.1.0/PKG-INFO +156 -0
  7. huske-0.1.0/README.md +116 -0
  8. huske-0.1.0/SECURITY.md +31 -0
  9. huske-0.1.0/SUPPORT.md +22 -0
  10. huske-0.1.0/THIRD_PARTY_NOTICES.md +29 -0
  11. huske-0.1.0/docs/development.md +78 -0
  12. huske-0.1.0/docs/issue-triage.md +45 -0
  13. huske-0.1.0/docs/releasing.md +340 -0
  14. huske-0.1.0/examples/config.toml +36 -0
  15. huske-0.1.0/huske/__init__.py +3 -0
  16. huske-0.1.0/huske/__main__.py +4 -0
  17. huske-0.1.0/huske/capture/__init__.py +0 -0
  18. huske-0.1.0/huske/capture/coordinator.py +359 -0
  19. huske-0.1.0/huske/capture/devices.py +94 -0
  20. huske-0.1.0/huske/capture/system_audio.py +255 -0
  21. huske-0.1.0/huske/chunker/__init__.py +0 -0
  22. huske-0.1.0/huske/chunker/rotator.py +153 -0
  23. huske-0.1.0/huske/cli.py +117 -0
  24. huske-0.1.0/huske/config.py +91 -0
  25. huske-0.1.0/huske/doctor.py +239 -0
  26. huske-0.1.0/huske/logging_setup.py +71 -0
  27. huske-0.1.0/huske/models.py +126 -0
  28. huske-0.1.0/huske/output_readme.py +57 -0
  29. huske-0.1.0/huske/paths.py +112 -0
  30. huske-0.1.0/huske/recovery/__init__.py +0 -0
  31. huske-0.1.0/huske/recovery/scanner.py +165 -0
  32. huske-0.1.0/huske/run_loop.py +399 -0
  33. huske-0.1.0/huske/session.py +62 -0
  34. huske-0.1.0/huske/transcribe/__init__.py +0 -0
  35. huske-0.1.0/huske/transcribe/worker.py +252 -0
  36. huske-0.1.0/huske/transcribe/writer.py +99 -0
  37. huske-0.1.0/huske/ui/__init__.py +0 -0
  38. huske-0.1.0/huske/ui/live.py +239 -0
  39. huske-0.1.0/pyproject.toml +103 -0
  40. huske-0.1.0/specs/001-huske-recorder/checklists/requirements.md +37 -0
  41. huske-0.1.0/specs/001-huske-recorder/contracts/cli.md +168 -0
  42. huske-0.1.0/specs/001-huske-recorder/contracts/transcript-format.md +136 -0
  43. huske-0.1.0/specs/001-huske-recorder/data-model.md +191 -0
  44. huske-0.1.0/specs/001-huske-recorder/plan.md +132 -0
  45. huske-0.1.0/specs/001-huske-recorder/quickstart.md +210 -0
  46. huske-0.1.0/specs/001-huske-recorder/research.md +270 -0
  47. huske-0.1.0/specs/001-huske-recorder/spec.md +148 -0
  48. huske-0.1.0/specs/001-huske-recorder/tasks.md +244 -0
  49. huske-0.1.0/tests/__init__.py +0 -0
  50. huske-0.1.0/tests/integration/__init__.py +0 -0
  51. huske-0.1.0/tests/integration/conftest.py +35 -0
  52. huske-0.1.0/tests/integration/test_pipeline_no_whisper.py +168 -0
  53. huske-0.1.0/tests/integration/test_real_whisper.py +90 -0
  54. huske-0.1.0/tests/integration/test_smoke.py +72 -0
  55. huske-0.1.0/tests/integration/test_system_audio.py +54 -0
  56. huske-0.1.0/tests/unit/__init__.py +0 -0
  57. huske-0.1.0/tests/unit/test_chunker.py +126 -0
  58. huske-0.1.0/tests/unit/test_config.py +76 -0
  59. huske-0.1.0/tests/unit/test_coordinator_buffer.py +99 -0
  60. huske-0.1.0/tests/unit/test_output_readme.py +30 -0
  61. huske-0.1.0/tests/unit/test_paths.py +124 -0
  62. huske-0.1.0/tests/unit/test_paths_disambiguation.py +58 -0
  63. huske-0.1.0/tests/unit/test_recovery.py +132 -0
  64. huske-0.1.0/tests/unit/test_render_state.py +46 -0
  65. huske-0.1.0/tests/unit/test_sleep_wake.py +47 -0
  66. huske-0.1.0/tests/unit/test_writer.py +111 -0
huske-0.1.0/.gitignore ADDED
@@ -0,0 +1,40 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+ .pytest_cache/
7
+ .ruff_cache/
8
+ .mypy_cache/
9
+
10
+ # Virtualenvs
11
+ .venv/
12
+ venv/
13
+ env/
14
+
15
+ # Build artifacts
16
+ build/
17
+ dist/
18
+ *.egg
19
+
20
+ # OS
21
+ .DS_Store
22
+ Thumbs.db
23
+
24
+ # Editors
25
+ .vscode/
26
+ .idea/
27
+ *.swp
28
+ *.swo
29
+
30
+ # Local data
31
+ .env
32
+ .env.local
33
+ .env.*
34
+ !.env.example
35
+
36
+ # Generated recordings, transcripts, logs, and model/cache data
37
+ audio/
38
+ transcripts/
39
+ logs/
40
+ models/
@@ -0,0 +1,22 @@
1
+ # Changelog
2
+
3
+ All notable changes to huske will be documented in this file.
4
+
5
+ This project uses semantic versioning after the first public release.
6
+
7
+ ## Unreleased
8
+
9
+ - Nothing yet.
10
+
11
+ ## 0.1.0
12
+
13
+ ### Added
14
+
15
+ - Initial always-on macOS terminal recorder.
16
+ - Microphone and system audio capture.
17
+ - Local transcription through faster-whisper.
18
+ - Day-organized Markdown transcript output.
19
+ - Recovery for orphaned audio chunks.
20
+ - Rich terminal UI and setup doctor.
21
+ - Open source project structure: license, contribution guide, code of conduct,
22
+ security policy, support guide, issue templates, PR template, and CI.
@@ -0,0 +1,27 @@
1
+ # Code of Conduct
2
+
3
+ huske should be a practical, respectful project for people building local-first
4
+ audio tooling.
5
+
6
+ ## Expected behavior
7
+
8
+ - Be direct, kind, and constructive.
9
+ - Assume privacy-sensitive context around audio, transcripts, logs, and device
10
+ details.
11
+ - Keep critique focused on code, documentation, behavior, and project outcomes.
12
+ - Respect maintainer decisions about project scope and user safety.
13
+
14
+ ## Unacceptable behavior
15
+
16
+ - Harassment, insults, threats, or sustained disruption.
17
+ - Publishing another person's private information.
18
+ - Sharing audio, transcripts, logs, screenshots, or identifiers without consent.
19
+ - Pressuring contributors to disclose sensitive local environment details.
20
+ - Repeatedly ignoring maintainer guidance after being asked to stop.
21
+
22
+ ## Enforcement
23
+
24
+ Maintainers may edit or delete comments, close issues, reject contributions, or
25
+ block participants when needed to keep the project safe and productive. Reports
26
+ can be sent privately through the security reporting path in
27
+ [SECURITY.md](SECURITY.md) when public discussion would expose sensitive details.
@@ -0,0 +1,79 @@
1
+ # Contributing to huske
2
+
3
+ Thanks for helping improve huske. This project records microphone and system
4
+ audio, so contribution quality includes privacy hygiene as much as code quality.
5
+
6
+ ## Code of conduct
7
+
8
+ Participating in this project means following the project
9
+ [Code of Conduct](CODE_OF_CONDUCT.md).
10
+
11
+ ## Before opening an issue
12
+
13
+ 1. Search existing issues and pull requests for the same report or proposal.
14
+ 2. Run `huske doctor` and include only non-sensitive results.
15
+ 3. Check [README.md](README.md), [docs/development.md](docs/development.md),
16
+ and the feature specs under [specs/](specs/).
17
+ 4. Remove names, meeting details, raw transcript text, audio files, paths that
18
+ expose private information, and any credentials before posting.
19
+
20
+ Use the issue templates when available:
21
+
22
+ - Bug report: reproducible failures, crashes, bad transcripts, device problems.
23
+ - Feature request: new behavior, platform support, workflow improvements.
24
+ - Documentation: unclear, missing, or outdated docs.
25
+ - Security or privacy vulnerability: follow [SECURITY.md](SECURITY.md) instead
26
+ of opening a public issue.
27
+
28
+ ## Finding work to pick up
29
+
30
+ Good first issues should be small, reproducible, and covered by a focused test
31
+ or documentation change. Useful labels for maintainers are documented in
32
+ [docs/issue-triage.md](docs/issue-triage.md). If an issue is not clearly scoped,
33
+ ask for clarification before starting implementation.
34
+
35
+ ## Development setup
36
+
37
+ ```bash
38
+ python3 -m venv .venv
39
+ source .venv/bin/activate
40
+ python -m pip install --upgrade pip
41
+ python -m pip install -e ".[dev]"
42
+ ```
43
+
44
+ For macOS capture checks, run:
45
+
46
+ ```bash
47
+ huske doctor
48
+ ```
49
+
50
+ For the current CI baseline, run:
51
+
52
+ ```bash
53
+ pytest tests/unit
54
+ pytest tests/integration/test_pipeline_no_whisper.py tests/integration/test_smoke.py
55
+ ```
56
+
57
+ Ruff and Mypy configuration is present for local quality work, but they are not
58
+ CI gates yet while the 0.1 codebase is being stabilized. Integration tests are
59
+ documented in [docs/development.md](docs/development.md); some need macOS
60
+ permissions or download a Whisper model.
61
+
62
+ ## Pull requests
63
+
64
+ 1. Open an issue first for non-trivial behavior changes.
65
+ 2. Keep PRs focused on one concern.
66
+ 3. Add or update tests when behavior changes.
67
+ 4. Update README, docs, examples, or specs when user-facing behavior changes.
68
+ 5. Do not commit generated audio, transcripts, logs, local config, model caches,
69
+ credentials, or screenshots containing private content.
70
+ 6. Link the relevant issue in the PR description.
71
+ 7. Fill out the PR checklist and include the exact checks you ran.
72
+
73
+ Commit messages should be short and descriptive. Existing history uses a simple
74
+ conventional style such as `feat:`, `fix:`, `docs:`, `test:`, and `chore:`.
75
+
76
+ ## License of contributions
77
+
78
+ By submitting a contribution, you agree that your contribution is licensed under
79
+ the same [MIT License](LICENSE) as the project.
huske-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tiago Moraes
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
huske-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,156 @@
1
+ Metadata-Version: 2.4
2
+ Name: huske
3
+ Version: 0.1.0
4
+ Summary: Always-on terminal audio recorder + local transcription (Whisper)
5
+ Project-URL: Homepage, https://github.com/tiagomoraes/huske
6
+ Project-URL: Repository, https://github.com/tiagomoraes/huske
7
+ Project-URL: Issues, https://github.com/tiagomoraes/huske/issues
8
+ Project-URL: Changelog, https://github.com/tiagomoraes/huske/blob/develop/CHANGELOG.md
9
+ Author: Tiago Moraes
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: audio,terminal,transcription,tui,whisper
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Operating System :: MacOS
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Capture/Recording
22
+ Requires-Python: <3.14,>=3.11
23
+ Requires-Dist: faster-whisper>=1.0.3
24
+ Requires-Dist: numpy>=1.26
25
+ Requires-Dist: pydantic>=2.6
26
+ Requires-Dist: pyobjc-framework-coremedia>=10; sys_platform == 'darwin'
27
+ Requires-Dist: pyobjc-framework-screencapturekit>=10; sys_platform == 'darwin'
28
+ Requires-Dist: pyyaml>=6.0
29
+ Requires-Dist: rich>=13.7
30
+ Requires-Dist: sounddevice>=0.4.6
31
+ Requires-Dist: soundfile>=0.12.1
32
+ Requires-Dist: structlog>=24.1
33
+ Requires-Dist: typer>=0.12
34
+ Provides-Extra: dev
35
+ Requires-Dist: mypy>=1.10; extra == 'dev'
36
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
37
+ Requires-Dist: pytest>=8.0; extra == 'dev'
38
+ Requires-Dist: ruff>=0.4; extra == 'dev'
39
+ Description-Content-Type: text/markdown
40
+
41
+ # huske
42
+
43
+ [![CI](https://github.com/tiagomoraes/huske/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/tiagomoraes/huske/actions/workflows/ci.yml)
44
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
45
+
46
+ > *huske* — Norwegian for "to remember"
47
+
48
+ A terminal app that runs in the background, continuously records your microphone
49
+ plus your computer's system audio, and transcribes the audio locally with
50
+ [faster-whisper](https://github.com/SYSTRAN/faster-whisper) — producing a
51
+ day-organized, LLM-friendly knowledge base of everything that was said on your
52
+ machine throughout the day.
53
+
54
+ Point Claude Code (or any other LLM agent) at `~/huske/transcripts/` and ask
55
+ it about your day.
56
+
57
+ ```text
58
+ ~/huske/transcripts/
59
+ ├── 2026-05-07/
60
+ │ ├── 091500_8a3f2c19_001.md
61
+ │ ├── 093000_8a3f2c19_002.md
62
+ │ └── 094500_8a3f2c19_003.md
63
+ └── README.md
64
+ ```
65
+
66
+ ## Features
67
+
68
+ - **Continuous capture** — mic (sounddevice) + system audio (Apple ScreenCaptureKit),
69
+ mixed in software, no gaps at chunk boundaries.
70
+ - **No drivers, no Audio MIDI Setup** — system audio comes through Apple's
71
+ modern ScreenCaptureKit framework. Just grant Screen Recording permission once.
72
+ - **Local transcription** — `faster-whisper`, default `base` model. Audio never
73
+ leaves your machine.
74
+ - **Configurable chunk size** — default 15 minutes, anything from 6 s to 60 min.
75
+ - **Resilient** — graceful stop finalizes the partial chunk; SIGKILL + restart
76
+ auto-recovers orphaned audio.
77
+ - **Pretty terminal UI** — Rich Live panel with countdown, mic + system level
78
+ meters, queue depth, last-saved transcript, rolling event log.
79
+ - **LLM-ready output** — every transcript is a single Markdown file with full
80
+ YAML frontmatter; the directory layout is documented in
81
+ `~/huske/transcripts/README.md` (auto-generated).
82
+
83
+ ## Requirements
84
+
85
+ - macOS 13 (Ventura) or newer. Apple Silicon is the primary target.
86
+ - Python 3.11, 3.12, or 3.13.
87
+
88
+ ## Quickstart
89
+
90
+ ```bash
91
+ # 1. Install
92
+ uv tool install huske
93
+
94
+ # pipx works too:
95
+ # pipx install huske
96
+
97
+ # 2. Validate setup (will prompt for Screen Recording permission on first run)
98
+ huske doctor
99
+
100
+ # 3. Record (Ctrl+C to stop)
101
+ huske run
102
+
103
+ # 4. Reclaim orphans from a prior crash without recording
104
+ huske recover
105
+ ```
106
+
107
+ On first launch macOS will prompt you to grant **Screen Recording** permission
108
+ to your Python interpreter — that's what ScreenCaptureKit needs to capture
109
+ system audio. After approving once, it's silent forever.
110
+
111
+ For prerelease builds or exact GitHub tags, install directly from the repository:
112
+
113
+ ```bash
114
+ uv tool install "git+https://github.com/tiagomoraes/huske.git@v0.1.0"
115
+ ```
116
+
117
+ See [quickstart.md](specs/001-huske-recorder/quickstart.md) for the full setup.
118
+
119
+ ## Privacy and consent
120
+
121
+ huske is local-first: audio capture and transcription run on your machine, and
122
+ the app writes transcripts to your configured filesystem path. That does not
123
+ make the data low-risk. Recordings, transcripts, logs, filenames, and device
124
+ metadata can contain private or legally sensitive information.
125
+
126
+ - Get consent before recording other people or regulated conversations.
127
+ - Do not commit generated audio, transcripts, logs, local configs, model caches,
128
+ or screenshots containing private content.
129
+ - Redact `huske doctor` output before sharing it publicly.
130
+ - Report security or privacy vulnerabilities privately through
131
+ [SECURITY.md](SECURITY.md).
132
+
133
+ ## Documentation
134
+
135
+ - [Development](docs/development.md) — local setup, checks, and test strategy.
136
+ - [Contributing](CONTRIBUTING.md) — how to open issues and pull requests.
137
+ - [Issue triage](docs/issue-triage.md) — labels and maintainer workflow.
138
+ - [Release checklist](docs/releasing.md) — release preparation notes.
139
+ - [Spec](specs/001-huske-recorder/spec.md) — what huske does and why.
140
+ - [Plan](specs/001-huske-recorder/plan.md) — technical context and architecture.
141
+ - [CLI contract](specs/001-huske-recorder/contracts/cli.md) — flags, exit codes.
142
+ - [Transcript format contract](specs/001-huske-recorder/contracts/transcript-format.md) — the LLM-consumer interface.
143
+ - [Quickstart](specs/001-huske-recorder/quickstart.md) — end-to-end setup.
144
+
145
+ ## Community
146
+
147
+ - Follow the [Code of Conduct](CODE_OF_CONDUCT.md).
148
+ - Use issue templates for bugs, features, and documentation reports.
149
+ - Use the [pull request template](.github/PULL_REQUEST_TEMPLATE.md) and include
150
+ the exact checks you ran.
151
+ - For help, see [SUPPORT.md](SUPPORT.md).
152
+
153
+ ## License
154
+
155
+ huske is released under the [MIT License](LICENSE). Third-party notices are in
156
+ [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
huske-0.1.0/README.md ADDED
@@ -0,0 +1,116 @@
1
+ # huske
2
+
3
+ [![CI](https://github.com/tiagomoraes/huske/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/tiagomoraes/huske/actions/workflows/ci.yml)
4
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
+
6
+ > *huske* — Norwegian for "to remember"
7
+
8
+ A terminal app that runs in the background, continuously records your microphone
9
+ plus your computer's system audio, and transcribes the audio locally with
10
+ [faster-whisper](https://github.com/SYSTRAN/faster-whisper) — producing a
11
+ day-organized, LLM-friendly knowledge base of everything that was said on your
12
+ machine throughout the day.
13
+
14
+ Point Claude Code (or any other LLM agent) at `~/huske/transcripts/` and ask
15
+ it about your day.
16
+
17
+ ```text
18
+ ~/huske/transcripts/
19
+ ├── 2026-05-07/
20
+ │ ├── 091500_8a3f2c19_001.md
21
+ │ ├── 093000_8a3f2c19_002.md
22
+ │ └── 094500_8a3f2c19_003.md
23
+ └── README.md
24
+ ```
25
+
26
+ ## Features
27
+
28
+ - **Continuous capture** — mic (sounddevice) + system audio (Apple ScreenCaptureKit),
29
+ mixed in software, no gaps at chunk boundaries.
30
+ - **No drivers, no Audio MIDI Setup** — system audio comes through Apple's
31
+ modern ScreenCaptureKit framework. Just grant Screen Recording permission once.
32
+ - **Local transcription** — `faster-whisper`, default `base` model. Audio never
33
+ leaves your machine.
34
+ - **Configurable chunk size** — default 15 minutes, anything from 6 s to 60 min.
35
+ - **Resilient** — graceful stop finalizes the partial chunk; SIGKILL + restart
36
+ auto-recovers orphaned audio.
37
+ - **Pretty terminal UI** — Rich Live panel with countdown, mic + system level
38
+ meters, queue depth, last-saved transcript, rolling event log.
39
+ - **LLM-ready output** — every transcript is a single Markdown file with full
40
+ YAML frontmatter; the directory layout is documented in
41
+ `~/huske/transcripts/README.md` (auto-generated).
42
+
43
+ ## Requirements
44
+
45
+ - macOS 13 (Ventura) or newer. Apple Silicon is the primary target.
46
+ - Python 3.11, 3.12, or 3.13.
47
+
48
+ ## Quickstart
49
+
50
+ ```bash
51
+ # 1. Install
52
+ uv tool install huske
53
+
54
+ # pipx works too:
55
+ # pipx install huske
56
+
57
+ # 2. Validate setup (will prompt for Screen Recording permission on first run)
58
+ huske doctor
59
+
60
+ # 3. Record (Ctrl+C to stop)
61
+ huske run
62
+
63
+ # 4. Reclaim orphans from a prior crash without recording
64
+ huske recover
65
+ ```
66
+
67
+ On first launch macOS will prompt you to grant **Screen Recording** permission
68
+ to your Python interpreter — that's what ScreenCaptureKit needs to capture
69
+ system audio. After approving once, it's silent forever.
70
+
71
+ For prerelease builds or exact GitHub tags, install directly from the repository:
72
+
73
+ ```bash
74
+ uv tool install "git+https://github.com/tiagomoraes/huske.git@v0.1.0"
75
+ ```
76
+
77
+ See [quickstart.md](specs/001-huske-recorder/quickstart.md) for the full setup.
78
+
79
+ ## Privacy and consent
80
+
81
+ huske is local-first: audio capture and transcription run on your machine, and
82
+ the app writes transcripts to your configured filesystem path. That does not
83
+ make the data low-risk. Recordings, transcripts, logs, filenames, and device
84
+ metadata can contain private or legally sensitive information.
85
+
86
+ - Get consent before recording other people or regulated conversations.
87
+ - Do not commit generated audio, transcripts, logs, local configs, model caches,
88
+ or screenshots containing private content.
89
+ - Redact `huske doctor` output before sharing it publicly.
90
+ - Report security or privacy vulnerabilities privately through
91
+ [SECURITY.md](SECURITY.md).
92
+
93
+ ## Documentation
94
+
95
+ - [Development](docs/development.md) — local setup, checks, and test strategy.
96
+ - [Contributing](CONTRIBUTING.md) — how to open issues and pull requests.
97
+ - [Issue triage](docs/issue-triage.md) — labels and maintainer workflow.
98
+ - [Release checklist](docs/releasing.md) — release preparation notes.
99
+ - [Spec](specs/001-huske-recorder/spec.md) — what huske does and why.
100
+ - [Plan](specs/001-huske-recorder/plan.md) — technical context and architecture.
101
+ - [CLI contract](specs/001-huske-recorder/contracts/cli.md) — flags, exit codes.
102
+ - [Transcript format contract](specs/001-huske-recorder/contracts/transcript-format.md) — the LLM-consumer interface.
103
+ - [Quickstart](specs/001-huske-recorder/quickstart.md) — end-to-end setup.
104
+
105
+ ## Community
106
+
107
+ - Follow the [Code of Conduct](CODE_OF_CONDUCT.md).
108
+ - Use issue templates for bugs, features, and documentation reports.
109
+ - Use the [pull request template](.github/PULL_REQUEST_TEMPLATE.md) and include
110
+ the exact checks you ran.
111
+ - For help, see [SUPPORT.md](SUPPORT.md).
112
+
113
+ ## License
114
+
115
+ huske is released under the [MIT License](LICENSE). Third-party notices are in
116
+ [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
@@ -0,0 +1,31 @@
1
+ # Security Policy
2
+
3
+ ## Supported versions
4
+
5
+ huske is pre-1.0 software. Security and privacy fixes are handled on the
6
+ `develop` branch and released with the next tagged version when releases begin.
7
+
8
+ ## Reporting a vulnerability
9
+
10
+ Do not open a public issue for vulnerabilities or privacy-sensitive reports.
11
+ Use GitHub private vulnerability reporting when available:
12
+
13
+ <https://github.com/tiagomoraes/huske/security/advisories/new>
14
+
15
+ If private reporting is unavailable, open a minimal public issue asking for a
16
+ private maintainer contact without including exploit details, audio, transcripts,
17
+ logs, credentials, or private paths.
18
+
19
+ Useful reports include:
20
+
21
+ - A concise description of the risk.
22
+ - Affected version or commit.
23
+ - Reproduction steps using synthetic or redacted data.
24
+ - Expected impact.
25
+ - Any suggested mitigation.
26
+
27
+ ## Privacy-sensitive data
28
+
29
+ huske can create audio chunks, transcripts, logs, and local configuration that
30
+ may contain private information. Never attach raw recordings, real transcripts,
31
+ or personal logs to public issues or pull requests.
huske-0.1.0/SUPPORT.md ADDED
@@ -0,0 +1,22 @@
1
+ # Support
2
+
3
+ huske is maintained as an open source project with best-effort support.
4
+
5
+ ## Where to ask
6
+
7
+ - Bugs: open a bug report with the issue template.
8
+ - Feature ideas: open a feature request and describe the workflow it enables.
9
+ - Documentation gaps: open a documentation issue or a focused PR.
10
+ - Security or privacy vulnerabilities: follow [SECURITY.md](SECURITY.md).
11
+
12
+ ## What to include
13
+
14
+ - `huske --version`
15
+ - macOS version and hardware class
16
+ - Python version
17
+ - `huske doctor` output with private details removed
18
+ - The exact command you ran
19
+ - Minimal reproduction steps using synthetic or redacted data
20
+
21
+ Do not share audio files, real transcripts, private logs, credentials, meeting
22
+ names, participant names, customer data, or screenshots with private content.
@@ -0,0 +1,29 @@
1
+ # Third-party notices
2
+
3
+ This repository includes project scaffolding generated from
4
+ [GitHub Spec Kit](https://github.com/github/spec-kit), primarily under
5
+ `.specify/` and `.claude/`. GitHub Spec Kit is licensed under the MIT License.
6
+
7
+ ## GitHub Spec Kit
8
+
9
+ MIT License
10
+
11
+ Copyright GitHub, Inc.
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in all
21
+ copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
@@ -0,0 +1,78 @@
1
+ # Development
2
+
3
+ huske is a Python CLI/TUI application for macOS audio capture and local
4
+ transcription. Most core behavior is testable without real devices; device and
5
+ Whisper checks are isolated in integration tests.
6
+
7
+ ## Local setup
8
+
9
+ ```bash
10
+ python3 -m venv .venv
11
+ source .venv/bin/activate
12
+ python -m pip install --upgrade pip
13
+ python -m pip install -e ".[dev]"
14
+ ```
15
+
16
+ On macOS, grant Screen Recording permission to the Python interpreter before
17
+ running real system-audio capture. `huske doctor` validates the local setup.
18
+
19
+ ## Common commands
20
+
21
+ ```bash
22
+ huske --help
23
+ huske doctor
24
+ huske run
25
+ huske recover
26
+ ```
27
+
28
+ ## Checks
29
+
30
+ Run the current CI baseline before opening a PR:
31
+
32
+ ```bash
33
+ pytest tests/unit
34
+ pytest tests/integration/test_pipeline_no_whisper.py tests/integration/test_smoke.py
35
+ ```
36
+
37
+ Additional local quality checks:
38
+
39
+ ```bash
40
+ ruff check .
41
+ mypy huske
42
+ ```
43
+
44
+ Ruff and Mypy are useful while changing Python code, but they are not required
45
+ CI gates yet because the 0.1 branch still needs a dedicated lint/type baseline
46
+ cleanup.
47
+
48
+ Optional integration checks:
49
+
50
+ ```bash
51
+ pytest tests/integration/test_system_audio.py
52
+ pytest tests/integration/test_real_whisper.py
53
+ ```
54
+
55
+ `test_system_audio.py` requires macOS Screen Recording permission.
56
+ `test_real_whisper.py` downloads and runs the `tiny` faster-whisper model.
57
+
58
+ ## Project layout
59
+
60
+ ```text
61
+ huske/
62
+ capture/ microphone and system-audio capture
63
+ chunker/ WAV chunk rotation
64
+ recovery/ orphaned audio recovery
65
+ transcribe/ worker process and transcript writing
66
+ ui/ Rich live terminal UI
67
+ specs/ feature specs, contracts, and planning notes
68
+ tests/ unit and integration tests
69
+ examples/ example user configuration
70
+ ```
71
+
72
+ ## Privacy rules for development
73
+
74
+ - Use synthetic audio in tests and examples.
75
+ - Do not commit generated recordings, transcripts, logs, local configs, model
76
+ caches, or screenshots containing private content.
77
+ - Redact paths and device names when they reveal private information.
78
+ - Keep reproduction cases minimal and deterministic.
@@ -0,0 +1,45 @@
1
+ # Issue Triage
2
+
3
+ This guide keeps issues actionable once the project is public.
4
+
5
+ ## Labels
6
+
7
+ - `bug`: confirmed or likely defect.
8
+ - `feature`: new or changed behavior.
9
+ - `docs`: documentation-only work.
10
+ - `privacy`: behavior involving audio, transcripts, logs, consent, or local data.
11
+ - `good first issue`: small, well-scoped, low-context task.
12
+ - `help wanted`: scoped work where outside contribution is welcome.
13
+ - `needs reproduction`: report needs a minimal repro.
14
+ - `needs decision`: maintainer needs to choose product or architecture direction.
15
+ - `blocked`: cannot progress until an external condition changes.
16
+
17
+ ## Bug reports
18
+
19
+ A bug is actionable when it has:
20
+
21
+ - Version or commit.
22
+ - Platform and Python version.
23
+ - Command or workflow that failed.
24
+ - Expected behavior.
25
+ - Actual behavior.
26
+ - Minimal reproduction with synthetic or redacted data.
27
+
28
+ If a report depends on private audio or transcripts, ask for a synthetic repro
29
+ instead of requesting the private material.
30
+
31
+ ## Feature requests
32
+
33
+ A feature request is actionable when it describes:
34
+
35
+ - The workflow or user problem.
36
+ - Why existing behavior is insufficient.
37
+ - Proposed behavior.
38
+ - Privacy or consent implications.
39
+ - Acceptance criteria or examples.
40
+
41
+ ## Closing issues
42
+
43
+ Close issues that are duplicates, unsupported by a reproduction after follow-up,
44
+ outside project scope, or unsafe to handle publicly. Link to the relevant issue,
45
+ PR, or documentation when closing.