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.2.2.tar.gz (2.2 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.2.2-py3-none-any.whl (60.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for hawaiidisco-0.2.2.tar.gz
Algorithm Hash digest
SHA256 d24e36c9e46c7166c8d8c857fb18f8b816aef12b184931ed6914fff087d7795e
MD5 f7b958b244b5af0c273ea6fa634796ba
BLAKE2b-256 b98f9dae11e5e3c8c2501c87338d36c2745267126b639a91c162eea84b8f6526

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hawaiidisco-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 60.0 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.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 de13ed196b7e228cc4599ece28e418ac6add3f9904916da66abbe3641f25172e
MD5 f9ebb3e9a694fc38730d0350f73c6020
BLAKE2b-256 234c8b08957f59ba00709589af9c89f5fa3aae3ae088095fcedf2b535ebaefcc

See more details on using hashes here.

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