Skip to content

Repository files navigation

lazy-take-notes

Terminal app for live transcription and note-taking. Records your mic, transcribes speech to text, and periodically generates structured digests of what's happening.

screenshot

Requirements

Install

Quick setup

Run this in Terminal — it installs everything and sets up a take-note shortcut:

curl -fsSL https://raw.githubusercontent.com/CJHwong/lazy-take-notes/main/setup.sh | bash

Then run take-note record.

Manual install

# try without installing (uv required)
uvx --from git+https://github.com/CJHwong/lazy-take-notes.git lazy-take-notes

# or clone and install locally
uv sync

# or pip
pip install -e .

New to this? See the Getting Started guide for step-by-step setup instructions.

Run

take-note                                     # interactive mode selector
take-note record                              # start recording
take-note record -l sprint-review             # record with session label
take-note transcribe recording.m4a            # transcribe an audio file
take-note view                                # browse saved sessions
take-note config                              # open the settings editor
take-note create-template                     # build a custom template with AI
take-note --config path/to/config.yaml        # custom config
take-note --output-dir ./my_session           # custom output dir

lazy-take-notes works as an alias for take-note.

Keys

Key Action
Space Pause / resume recording
s Stop recording
c Copy focused panel to clipboard
Tab Switch panel focus
h Help
q Quit

Templates can add more keys for quick actions (catch up, action items, etc). Press h in the app to see all available bindings.

Config

Config lives in your OS config directory:

OS Path
macOS ~/Library/Application Support/lazy-take-notes/
Linux ~/.config/lazy-take-notes/
Windows C:\Users\<you>\AppData\Local\lazy-take-notes\

Example config.yaml:

# LLM provider: 'ollama' (default) or 'openai' (any OpenAI-compatible API)
llm_provider: ollama

ollama:
  host: "http://localhost:11434"

# OpenAI-compatible provider (OpenAI, Gemini, Groq, Together, vLLM, etc.)
# openai:
#   api_key: sk-...               # or set OPENAI_API_KEY env var
#   base_url: "https://api.openai.com/v1"

recognition_hints:                  # global hints for the speech recogniser
  - "Kubernetes"                    # applied to every template (merged with per-template hints)
  - "JIRA"

transcription:
  model: "large-v3-turbo-q8_0"    # default whisper model
  models:                         # per-locale overrides
    zh: "breeze25-q8"             # Breeze-ASR-25, Mandarin / Traditional Chinese
    zh-min-nan: "breeze26"        # Breeze-ASR-26, Taiwanese Hokkien (台語)
  chunk_duration: 25.0
  overlap: 1.0
  silence_threshold: 0.01
  pause_duration: 1.5
digest:
  model: "gpt-oss:20b"            # heavy model for periodic digests
  min_lines: 15
  min_interval: 60
  compact_token_threshold: 100000
interactive:
  model: "gpt-oss:20b"            # fast model for quick actions
output:
  directory: "./output"
  save_audio: true                # save recording.wav alongside transcript
  save_notes_history: true        # keep numbered snapshots in history/
  save_context: true              # save session context text
  save_debug_log: false           # write debug.log (off by default)

Templates

Templates control the LLM prompts, labels, and quick-action keys for a session. The template picker launches at startup — built-ins are listed there.

To add your own or override a built-in, drop a .yaml file in the templates/ subdirectory of your config path (see table above). See docs/TEMPLATES.md for the full schema and variable reference.

Output

After a session:

output/
├── transcript.txt            # timestamped transcript
├── notes.md                  # latest notes/digest (markdown)
├── context.txt               # user-provided context (when save_context: true)
├── recording.wav             # audio recording (when save_audio: true)
├── debug.log                 # debug log (when save_debug_log: true)
└── history/                  # numbered snapshots (when save_notes_history: true)
    ├── notes_001.md
    ├── notes_002.md
    └── notes_003_final.md    # final digest on quit/stop

Development

uv sync                  # install deps
uv run pytest tests/ -v  # run tests
uv run lint-imports      # check layer contracts

Architecture details are in AGENTS.md. To build your own source plugin, see the Plugin Development Guide.

Credits

Speech recognition is powered by these open models. Thanks to their authors:

  • whisper.cpp by Georgi Gerganov: the inference runtime, plus OpenAI's Whisper large-v3-turbo (MIT) used by default.
  • Breeze-ASR-25 by MediaTek Research (Apache-2.0): fine-tuned from whisper-large-v2 for Mandarin / Traditional Chinese. whisper.cpp build by alan314159.
  • Breeze-ASR-26 by MediaTek Research (Apache-2.0): Taiwanese Hokkien (台語), GGML build by phate334.

Digests and quick actions run on a local LLM via Ollama (default gpt-oss:20b) or any OpenAI-compatible API.

License

MIT

Releases

Contributors

Languages