Skip to main content

Your AI-powered reading companion in the terminal

Project description

Hawaii Disco

Your AI-powered reading companion in the terminal

Python 3.11+ License: MIT CI PyPI

Hawaii Disco Demo

Hawaii Disco is a terminal RSS reader that doesn't just show you articles — it reads alongside you. With built-in AI, it generates sharp insights, translates foreign articles, and analyzes your bookmark patterns, turning passive reading into active discovery.


Why Hawaii Disco?

Most RSS readers stop at delivering headlines. Hawaii Disco goes further:

  • Read an article and instantly get an AI-generated insight on why it matters
  • Hit t and the full article is translated into your language
  • Bookmark a few articles and AI finds the common threads across your interests
  • All in your terminal — no browser tabs, no distractions, just you and the content

It works great as a plain RSS reader too. AI features are optional and activate only when you ask.


Features

  • Terminal-native — Built on Textual, vim-style keybindings
  • AI Insights — One-keystroke article analysis: why it matters, what to watch out for
  • Translation — Translate titles, descriptions, and full article bodies
  • Bookmark & Memo — Save articles with personal notes, exported as Markdown
  • Bookmark Analysis — AI finds patterns and themes across your saved articles
  • Multiple AI Providers — Claude CLI, Anthropic API, OpenAI API (or none at all)
  • Bilingual UI — English and Korean

Installation

pipx (Recommended)

pipx installs CLI tools in isolated environments — no virtualenv setup needed:

pipx install hawaiidisco

To enable AI features with a specific provider:

pipx install "hawaiidisco[anthropic]"   # Claude API
pipx install "hawaiidisco[openai]"      # OpenAI API
pipx install "hawaiidisco[all]"         # All providers

pip

pip install hawaiidisco

# With AI provider extras
pip install hawaiidisco[anthropic]
pip install hawaiidisco[openai]
pip install hawaiidisco[all]

From Source

git clone https://github.com/ongyjho/hawaii-disco.git
cd hawaii-disco
python -m venv .venv
source .venv/bin/activate
pip install -e ".[all]"

Quick Start

hawaiidisco

On first launch, a default config is created at ~/.config/hawaiidisco/config.yml with sample feeds.


Configuration

Edit ~/.config/hawaiidisco/config.yml:

# Language: en (English) | ko (Korean)
language: en

# AI provider configuration
ai:
  provider: claude_cli   # claude_cli | anthropic | openai
  api_key: ""            # Leave empty to use environment variable
  model: ""              # Leave empty for provider default

# RSS feed list
feeds:
  - url: https://hnrss.org/frontpage
    name: HackerNews
  - url: https://feeds.feedburner.com/geeknews-feed
    name: GeekNews

# Refresh interval in minutes
refresh_interval: 30

# AI insight settings
insight:
  enabled: true
  mode: manual           # auto | manual

# Bookmark export path
bookmark_dir: ~/.local/share/hawaiidisco/bookmarks

AI Providers

Hawaii Disco works without AI — but it shines with it. Pick any provider:

Provider Install Config Note
Claude CLI Install Claude Code provider: claude_cli Default, no API key needed
Anthropic API pip install hawaiidisco[anthropic] provider: anthropic API key required
OpenAI API pip install hawaiidisco[openai] provider: openai API key required

Setting API keys:

# Environment variables
export ANTHROPIC_API_KEY=sk-ant-...
export OPENAI_API_KEY=sk-...
# Or reference env vars in config.yml
ai:
  provider: anthropic
  api_key: ${ANTHROPIC_API_KEY}

Keyboard Shortcuts

Timeline

Key Action
j k / Navigate articles
Enter / Space Read article
o Open in browser
i Generate AI insight
t Translate title & description
b Toggle bookmark
m Add memo to bookmark
r Refresh feeds
/ Search
f Filter bookmarks only
a Add feed
l Bookmark list
L Feed list
q Quit

Article Viewer

Key Action
j k / Scroll
PgUp PgDn Page scroll
g / G Top / Bottom
t Translate body
i Generate insight
o Open in browser
q / Escape Close

Architecture

hawaiidisco/
├── app.py              # Textual main app & screens
├── ai/                 # AI providers (Protocol-based abstraction)
│   ├── base.py         # AIProvider Protocol definition
│   ├── claude_cli.py   # Claude CLI implementation
│   ├── anthropic_api.py# Anthropic API implementation
│   ├── openai_api.py   # OpenAI API implementation
│   └── prompts.py      # Prompt templates
├── widgets/            # UI components
│   ├── timeline.py     # Article timeline
│   ├── detail.py       # Article detail view
│   └── status.py       # Status bar
├── config.py           # YAML config loader
├── db.py               # SQLite database (thread-safe)
├── fetcher.py          # RSS feed parser
├── i18n.py             # Internationalization (en/ko)
├── insight.py          # AI insight generation
├── reader.py           # HTML to text extraction
├── translate.py        # AI translation
└── bookmark.py         # Bookmark Markdown export

Adding a Custom AI Provider

Implement the AIProvider Protocol:

from hawaiidisco.ai.base import AIProvider

class MyProvider:
    def generate(self, prompt: str, *, timeout: int = 30) -> str | None:
        ...

    def is_available(self) -> bool:
        ...

    @property
    def name(self) -> str:
        return "my_provider"

Development

Setup

git clone https://github.com/ongyjho/hawaii-disco.git
cd hawaii-disco
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,all]"

Test

pytest -v

Lint

ruff check hawaiidisco/ tests/

CI

Tests run automatically on Python 3.11 / 3.12 / 3.13 via GitHub Actions. Releases are published to PyPI automatically when a release tag is created.


Contributing

Contributions are welcome! Please follow these steps:

  1. Fork this repository
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Commit your changes (git commit -m "feat: description")
  4. Push to the branch (git push origin feature/my-feature)
  5. Open a Pull Request

Guidelines

  • Branch naming: Use feature/, bugfix/, hotfix/ prefixes
  • Commit messages: type: description format (feat, fix, chore, refactor, docs)
  • Code style: Must pass ruff linting
  • Tests: Include tests for new features
  • Python: Maintain 3.11+ compatibility

Issues & PRs

  • Report bugs or request features via Issues
  • Check for existing issues before opening a PR

Roadmap

  • OPML import/export
  • Demo screenshot / GIF
  • Plugin system
  • Additional AI providers (Gemini, Ollama, etc.)
  • More languages (Japanese, etc.)
  • Theme customization

Data Storage

Item Path
Config ~/.config/hawaiidisco/config.yml
Database ~/.local/share/hawaiidisco/hawaiidisco.db
Bookmarks ~/.local/share/hawaiidisco/bookmarks/

License

MIT

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

hawaiidisco-0.1.0.tar.gz (2.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hawaiidisco-0.1.0-py3-none-any.whl (41.5 kB view details)

Uploaded Python 3

File details

Details for the file hawaiidisco-0.1.0.tar.gz.

File metadata

  • Download URL: hawaiidisco-0.1.0.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hawaiidisco-0.1.0.tar.gz
Algorithm Hash digest
SHA256 681be8e9016f6c45d98ead97949cea13139bf9defcaedd41199af411c87d5b80
MD5 06eb6d56fcf32cb61cfff302005cf40a
BLAKE2b-256 13d5a03b7fee2b922dbe92b9ed8725f0330db15ccb33adfc55acde22bc4da4a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for hawaiidisco-0.1.0.tar.gz:

Publisher: publish.yml on ongyjho/hawaiidisco

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hawaiidisco-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: hawaiidisco-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 41.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hawaiidisco-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eb9dda3470b2f792c574e071574e4bec7e88b8d5da01e66f4a470de3e6ea3fb1
MD5 ab7b22d50757f9aa08cb0eb40b07f187
BLAKE2b-256 6f13dfe5d53acd682c218b3922b1470dba5b6cdc324d74de72dfd4dc33b92972

See more details on using hashes here.

Provenance

The following attestation bundles were made for hawaiidisco-0.1.0-py3-none-any.whl:

Publisher: publish.yml on ongyjho/hawaiidisco

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page