Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

Shellpomodoro


PyPI version Python versions License: MIT

shellpomodoro = Shell + Pomodoro timer. Built for my own use; sharing in case it helps others too.

A cross-platform terminal-based Pomodoro timer CLI application that can be installed via pip and run anywhere. Built with Python's standard library only - no external dependencies required.

Features

  • 🍅 Classic Pomodoro technique with customizable work and break durations
  • ⏱️ Real-time countdown display with MM:SS format
  • 🔔 Terminal bell notifications at phase transitions
  • ⌨️ Keypress-controlled phase transitions (no need to wait)
  • 🎨 ASCII art congratulations upon session completion
  • 🖥️ Cross-platform support (Windows, macOS, Linux)
  • 📦 Zero external dependencies (Python stdlib only)
  • 🚀 Fast installation via pip

Installation

From PyPI (Recommended)

pip install shellpomodoro

Or using uv (even faster):

uv pip install shellpomodoro

Development Installation (from source)

git clone https://github.com/inspiringsource/shellpomodoro.git
cd shellpomodoro
#python3 -m venv .venv
python -m venv .venv
# macOS/Linux
source .venv/bin/activate
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
# Windows CMD
.\.venv\Scripts\activate.bat
pip install -U pip
pip install -e .

Usage

Basic Usage

Start a default Pomodoro session (25min work, 5min break, 4 iterations):

shellpomodoro

Customization Options

# Custom work and break durations
shellpomodoro --work 30 --break 10

# Custom number of iterations
shellpomodoro --iterations 6

# Custom notification beeps
shellpomodoro --beeps 3

# Combine all options
shellpomodoro --work 45 --break 15 --iterations 3 --beeps 1

Command Line Options

  • --work N: Set work period duration in minutes (default: 25)
  • --break N: Set break period duration in minutes (default: 5)
  • --iterations N: Set number of Pomodoro cycles (default: 4)
  • --beeps N: Set number of notification beeps (default: 2)
  • --version, -v: Show version and exit
  • --help: Show help message and exit

Display modes

By default, shellpomodoro shows a countdown timer. You can pick other displays:

# default behavior (countdown)
shellpomodoro --display timer-back

# count up from 00:00
shellpomodoro --display timer-forward

# progress bar
shellpomodoro --display bar

# test-runner style dots
shellpomodoro --display dots --dot-interval 60   # one dot per minute
  • --dot-interval (seconds) is optional and only used with dots. If omitted, shellpomodoro uses a sensible default (one dot per minute for long phases; ~10 dots for short ones).

Screenshots

Default Timer (timer-back) Shellpomodoro Default

Progress Bar Shellpomodoro Bar

Dots Mode Shellpomodoro Dots

How It Works

  1. Work Phase: Focus on your task while the timer counts down
  2. Notification: Terminal bell sounds when work phase ends
  3. Keypress Transition: Press any key when ready for break
  4. Break Phase: Take a break while the timer counts down
  5. Repeat: Continue until all iterations are complete
  6. Completion: Enjoy ASCII art congratulations!

Session Control

  • Check Version: Run shellpomodoro --version or shellpomodoro -v
  • Abort Session: Press Ctrl+C at any time to abort the current session
  • Phase Transitions: Press Ctrl+E to end the current phase early (WORK → BREAK, BREAK → next WORK)
  • Real-time Display: See countdown timer, current phase, and instructions

Detach / Reattach

  • Press Ctrl+O to detach the UI; the session continues in the background.
  • Run shellpomodoro attach to reattach from the same or another terminal and resume viewing.
  • Hotkeys are shown once per phase on a separate line under the timer/progress line.
  • Beeps continue while detached: Windows (winsound), macOS/Linux best-effort via terminal bell.

Example legend placement:

[[1/4] Focus] 24:57
Hotkeys: Ctrl+C abort • Ctrl+E end phase • Ctrl+O detach

Requirements

  • Python 3.9 or higher
  • No external dependencies required

Cross-Platform Compatibility

Shellpomodoro works seamlessly across different operating systems:

  • Windows: Uses msvcrt for keypress detection
  • Unix/Linux/macOS: Uses termios and tty for terminal control
  • Terminal Bell: Uses standard \a character (may require terminal configuration)

Troubleshooting: No Beep in VS Code

If you don't hear the terminal bell when running in the VS Code integrated terminal, you may need to enable audio cues in your VS Code settings. Add the following to your settings.json:

{
  "terminal.integrated.enableVisualBell": true,
  "accessibility.signals.terminalBell": {
    "sound": "on"
  },
  "audioCues.enabled": "on",
  "audioCues.terminalBell": "on"
}

This enables the audible bell and ensures \a is played as a sound when Shellpomodoro triggers notifications.

Examples

Quick 15-minute session

shellpomodoro --work 15 --break 5 --iterations 1

Extended deep work session

shellpomodoro --work 50 --break 10 --iterations 3

Silent mode (no beeps)

shellpomodoro --beeps 0

License

MIT License

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

If you encounter any issues or have questions, please open an issue on the GitHub repository.

Development History

This project was initiated using Kiro, which helped establish the initial structure and core functionality of the Pomodoro timer (the original design.md, requirements.md, and tasks.md are included in the repo). Later, the codebase was optimized and refined using Grok code to improve performance, code quality, and maintainability.

Release files for shellpomodoro 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shellpomodoro 0.1.5
File Size Uploaded
shellpomodoro-0.1.5.tar.gz 25.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for shellpomodoro 0.1.5
File Interpreter ABI Platform
shellpomodoro-0.1.5-py3-none-any.whl Python 3 none any Details

Total release size: 49.8 kB

Release files / shellpomodoro-0.1.5.tar.gz

Download URL shellpomodoro-0.1.5.tar.gz
Size 25.7 kB
Tags Source
SHA-256 checksum
How to use checksums
77ac1c2b77ab1338324bafd16fe6dcafce6b2ed9f899a2dd309bd78d369a057e
BLAKE2b-256 checksum
How to use checksums
0a9d468226b4b2994cec65e1e5afe2d099af7f05997e2f67d6f3ed58255f5c36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2025.

Transparency log

Release files / shellpomodoro-0.1.5-py3-none-any.whl

Download URL shellpomodoro-0.1.5-py3-none-any.whl
Size 24.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
759a58989c595e3e2a4f9401972d5f3a0e41f963d2b0a5e35efe5030ec59ce9a
BLAKE2b-256 checksum
How to use checksums
e7dc03329e9ea2af0433dcf64d9c5fffd03b7ea7b1d953a49114f53470487002
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2025.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page