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
  • Sync to Obsidian — bookmarked articles auto-save as Obsidian notes with frontmatter and tags
  • Import/export OPML — migrate feeds from any RSS reader
  • 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
  • Obsidian Integration — Auto-save bookmarks as Obsidian notes with YAML frontmatter and tags
  • OPML Import/Export — Migrate feeds to and from other RSS readers
  • Multiple AI Providers — Claude CLI, Anthropic API, OpenAI API (or none at all)
  • 6 Languages — English, Korean, Japanese, Chinese (Simplified), Spanish, German

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/hawaiidisco.git
cd hawaiidisco
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 | ko | ja | zh_CN | es | de
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

# Obsidian vault integration
obsidian:
  enabled: false
  vault_path: ~/Documents/MyVault
  folder: hawaii-disco     # Subfolder inside the vault
  template: default        # default | minimal
  auto_save: true          # Auto-save on bookmark
  include_insight: true
  include_translation: true

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}

OPML Import/Export

Migrate your feeds from any RSS reader:

Shift+I   Import feeds from an OPML file
Shift+E   Export current feeds to OPML

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
S Save to Obsidian
I Import OPML
E Export OPML
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
├── i18n/               # YAML-based locale system
│   ├── locales/        # en, ko, ja, zh_CN, es, de
│   └── validate.py     # Locale file validator
├── config.py           # YAML config loader
├── db.py               # SQLite database (thread-safe)
├── fetcher.py          # RSS feed parser
├── md_render.py        # Markdown rendering utilities
├── insight.py          # AI insight generation
├── reader.py           # HTML to text extraction
├── translate.py        # AI translation
├── bookmark.py         # Bookmark Markdown export
├── obsidian.py         # Obsidian vault integration
└── opml.py             # OPML import/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/hawaiidisco.git
cd hawaiidisco
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 managed by release-please and published to PyPI automatically.


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

Adding a New Language

See hawaiidisco/i18n/CONTRIBUTING.md for the locale contribution guide.

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
  • Obsidian vault integration
  • 6 languages (EN/KO/JA/ZH-CN/ES/DE)
  • Plugin system
  • Additional AI providers (Gemini, Ollama, 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.4.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.4-py3-none-any.whl (60.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hawaiidisco-0.2.4.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.4.tar.gz
Algorithm Hash digest
SHA256 da94a56949b293a8f1c858e44a69fb7aeb20c606394b3d38a37d5bf72b9cb4e0
MD5 7a37c961015992a1f98b04d1ba993074
BLAKE2b-256 d6f1aebac5269642fa347f06b13e6e8891b4ab85eddfff5fc8c80911317edd2e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hawaiidisco-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 60.6 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c5d08ab4a6492d71f49cca9f1c0aff2b91db41b7f1bb8717ab72361c858b9055
MD5 6f2a3053db01ff1a2041b7c83c068ab3
BLAKE2b-256 452469a874332d370b8b622fc173781e839d4dbd02cd35977e1e451d753323b2

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