# AI Signal
![AI Signal Terminal](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/main.png)
Terminal-based AI curator that turns information noise into meaningful signal.
AI Signal is a powerful tool designed to help you regain control over your information diet in today's
overwhelming digital landscape. While existing platforms and algorithms decide what content reaches you,
AI Signal empowers you to define and implement your own content curation strategy.
By leveraging AI capabilities and your personal preferences, it transforms the constant
stream of information into meaningful, relevant insights that matter to you.
You define the categories, quality thresholds, and filtering criteria, ensuring that the content you consume
aligns with your interests and goals.
Think of it as your personal content curator that works tirelessly to surface valuable information
while filtering out noise, all running locally on your machine.
With AI Signal, you're not just consuming content – you're actively shaping how information reaches you,
making conscious choices about what deserves your attention.
## Features
- 🤖 AI-powered content analysis and categorization
- 🔍 Smart filtering based on customizable categories and quality thresholds
- 📊 Advanced sorting by date, ranking, or combined criteria
- 🔄 Automatic content synchronization from multiple sources
- 🌐 Support for various content sources (YouTube, Medium, Reddit, Hacker News, RSS feeds)
- 📱 Share curated content directly to social media
- 📝 Export to Obsidian vault with customizable templates
- ⌨️ Fully keyboard-driven interface
- 🎨 Beautiful terminal UI powered by Textual
## Installation
```bash
pip install ai-signal
```
or
```bash
pipx install ai-siganl
```
for global installation.
If using poetry:
```bash
poetry add ai-signal
poetry shell # enter the virtualenv
```
## Quick Start
1. Create a configuration file:
```bash
aisignal init
```
modify it, as described in the [configuration guide](docs/configuration.md):
2. Run AI Signal:
```bash
aisignal run
```
## Keyboard Shortcuts
### For all views
- `q`: Quit application
- `c`: Toggle configuration panel
- `s`: Force sync content
- `f`: Toggle filters sidebar
- `u`: Show usage and costs modal
### Within the items list
- `↑`/`↓`: Navigate items
- `enter`: Show item details
- `o`: Open in browser
- `t`: Share on Twitter
- `l`: Share on LinkedIn
- `e`: Export to Obsidian
## Screenshots
### Main Interface
![Main Interface](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/main.png)
### Configuration interface
![Configuration Interface](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/configuration.png)
### Resource detail interface
![Resource Detail Interface](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/detail.png)
### Sidebar hidden
![Sidebar hidden](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/sidebar_hidden.png)
### Tokens usage and costs
![Tokens modal](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/tokens_modal.png)
## Project Status
This project is in its early development stages.
I am not yet ready to provide a working prototype. As an open source initiative, I welcome contributors
who can help advance the project. Please read the [Contributing Guide](CONTRIBUTING.md)
### Development environment setup
```bash
# Clone the repository
git clone https://github.com/guglielmo/ai-signal.git
cd ai-signal
# Install dependencies
poetry install
# Run tests
poetry run pytest
# Run the application in development mode
poetry run aisignal version
```
or, entering the virtualenv:
```bash
poetry shell
aisignal version
```
## Roadmap
- [ ] Add support for more content sources (YT videos, podcasts, pdf)
- [ ] Add statistics on most used sources and categories
- which are the sources most interesting news come from?
- which are the categories with most news
- which are the trends
- [ ] Implement a double thresholds mechanism
- all below minimal threshold is not even added to the datatable
- all below maximum threshold is accepted as _interesting_
- all in between must be further evaluated, by you, with your keyboard
- y - accept
- n - refuse
- [ ] Implement feedback loop, based on your selections
- suggest other interests that you may have
- highlight waning interests
- [ ] Implement custom AI models (Anthropic, Ollama, Gemini, ...)
- [ ] Add content archiving
- read/unread items, filter by read/unread status
- remove items
- [ ] Enable custom prompts for sources
- [ ] Enable custom filtering rules
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Acknowledgments
- Built with [Textual](https://github.com/Textualize/textual)
- AI powered by OpenAI and Jina AI
- Inspired by Daniel Miessler's [Fabric](https://github.com/danielmiessler/fabric)
## Author
**Guglielmo Celata**
- GitHub: [@guglielmo](https://github.com/guglielmo)
- Mastodon: [@guille@mastodon.uno](https://mastodon.uno/@guille)
Raw data
{
"_id": null,
"home_page": "https://github.com/guglielmo/ai-signal",
"name": "ai-signal",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.9",
"maintainer_email": null,
"keywords": "ai, curation, terminal, tui, textual, content, aggregator, filter",
"author": "Guglielmo Celata",
"author_email": "guglielmo.celata@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/e5/32/64d2eaac46f5be16aea73536020af94e2c0d1e4fe626b326b6324f595f3c/ai_signal-0.7.0.tar.gz",
"platform": null,
"description": "# AI Signal\n\n![AI Signal Terminal](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/main.png)\n\nTerminal-based AI curator that turns information noise into meaningful signal.\n\nAI Signal is a powerful tool designed to help you regain control over your information diet in today's \noverwhelming digital landscape. While existing platforms and algorithms decide what content reaches you, \nAI Signal empowers you to define and implement your own content curation strategy.\n\nBy leveraging AI capabilities and your personal preferences, it transforms the constant \nstream of information into meaningful, relevant insights that matter to you. \nYou define the categories, quality thresholds, and filtering criteria, ensuring that the content you consume \naligns with your interests and goals.\n\nThink of it as your personal content curator that works tirelessly to surface valuable information \nwhile filtering out noise, all running locally on your machine. \nWith AI Signal, you're not just consuming content \u2013 you're actively shaping how information reaches you, \nmaking conscious choices about what deserves your attention.\n\n## Features\n\n- \ud83e\udd16 AI-powered content analysis and categorization\n- \ud83d\udd0d Smart filtering based on customizable categories and quality thresholds\n- \ud83d\udcca Advanced sorting by date, ranking, or combined criteria\n- \ud83d\udd04 Automatic content synchronization from multiple sources\n- \ud83c\udf10 Support for various content sources (YouTube, Medium, Reddit, Hacker News, RSS feeds)\n- \ud83d\udcf1 Share curated content directly to social media\n- \ud83d\udcdd Export to Obsidian vault with customizable templates\n- \u2328\ufe0f Fully keyboard-driven interface\n- \ud83c\udfa8 Beautiful terminal UI powered by Textual\n\n## Installation\n\n```bash\npip install ai-signal\n```\n\nor \n```bash\npipx install ai-siganl\n```\nfor global installation.\n\n\nIf using poetry:\n\n```bash\npoetry add ai-signal\npoetry shell # enter the virtualenv\n```\n\n## Quick Start\n\n1. Create a configuration file:\n```bash\naisignal init\n```\nmodify it, as described in the [configuration guide](docs/configuration.md):\n\n2. Run AI Signal:\n```bash\naisignal run\n```\n\n## Keyboard Shortcuts\n\n### For all views\n- `q`: Quit application\n- `c`: Toggle configuration panel\n- `s`: Force sync content\n- `f`: Toggle filters sidebar\n- `u`: Show usage and costs modal\n\n### Within the items list\n- `\u2191`/`\u2193`: Navigate items\n- `enter`: Show item details\n- `o`: Open in browser\n- `t`: Share on Twitter\n- `l`: Share on LinkedIn\n- `e`: Export to Obsidian\n\n\n## Screenshots\n\n### Main Interface\n![Main Interface](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/main.png)\n\n### Configuration interface\n![Configuration Interface](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/configuration.png)\n\n### Resource detail interface\n![Resource Detail Interface](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/detail.png)\n\n### Sidebar hidden\n![Sidebar hidden](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/sidebar_hidden.png)\n\n### Tokens usage and costs\n![Tokens modal](https://raw.githubusercontent.com/guglielmo/ai-signal/main/docs/images/tokens_modal.png)\n\n## Project Status\n\nThis project is in its early development stages. \nI am not yet ready to provide a working prototype. As an open source initiative, I welcome contributors \nwho can help advance the project. Please read the [Contributing Guide](CONTRIBUTING.md)\n\n\n### Development environment setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/guglielmo/ai-signal.git\ncd ai-signal\n\n# Install dependencies\npoetry install\n\n# Run tests\npoetry run pytest\n\n# Run the application in development mode\npoetry run aisignal version\n```\n\nor, entering the virtualenv:\n\n```bash\npoetry shell\naisignal version\n```\n\n\n## Roadmap\n- [ ] Add support for more content sources (YT videos, podcasts, pdf)\n- [ ] Add statistics on most used sources and categories \n - which are the sources most interesting news come from?\n - which are the categories with most news\n - which are the trends\n- [ ] Implement a double thresholds mechanism\n - all below minimal threshold is not even added to the datatable\n - all below maximum threshold is accepted as _interesting_\n - all in between must be further evaluated, by you, with your keyboard\n - y - accept\n - n - refuse\n- [ ] Implement feedback loop, based on your selections\n - suggest other interests that you may have\n - highlight waning interests\n- [ ] Implement custom AI models (Anthropic, Ollama, Gemini, ...)\n- [ ] Add content archiving\n - read/unread items, filter by read/unread status\n - remove items\n- [ ] Enable custom prompts for sources\n- [ ] Enable custom filtering rules\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- Built with [Textual](https://github.com/Textualize/textual)\n- AI powered by OpenAI and Jina AI\n- Inspired by Daniel Miessler's [Fabric](https://github.com/danielmiessler/fabric)\n\n## Author\n\n**Guglielmo Celata**\n- GitHub: [@guglielmo](https://github.com/guglielmo)\n- Mastodon: [@guille@mastodon.uno](https://mastodon.uno/@guille)",
"bugtrack_url": null,
"license": "MIT",
"summary": "Terminal-based AI curator that turns information noise into meaningful signal",
"version": "0.7.0",
"project_urls": {
"Documentation": "https://github.com/guglielmo/ai-signal#readme",
"Homepage": "https://github.com/guglielmo/ai-signal",
"Repository": "https://github.com/guglielmo/ai-signal"
},
"split_keywords": [
"ai",
" curation",
" terminal",
" tui",
" textual",
" content",
" aggregator",
" filter"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "18673c4fa40230d4cfd0c8a5de4d9d8e5335e52309591beef4a4aae7565e97b9",
"md5": "f9b1ea2869cefed54492b9d34caa25a2",
"sha256": "cbe8d4321661ba9b43b4761abd857bd3cf4673bb9ef26c9d6afb8f100a847a81"
},
"downloads": -1,
"filename": "ai_signal-0.7.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f9b1ea2869cefed54492b9d34caa25a2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.9",
"size": 44544,
"upload_time": "2024-12-16T08:18:24",
"upload_time_iso_8601": "2024-12-16T08:18:24.346352Z",
"url": "https://files.pythonhosted.org/packages/18/67/3c4fa40230d4cfd0c8a5de4d9d8e5335e52309591beef4a4aae7565e97b9/ai_signal-0.7.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e53264d2eaac46f5be16aea73536020af94e2c0d1e4fe626b326b6324f595f3c",
"md5": "bd943d9bbaad04efa3c8b4e2f64fccf9",
"sha256": "ef437524ff15870d648f0a35572652a3745eaf6be37d4070827b7d95dbc99fc9"
},
"downloads": -1,
"filename": "ai_signal-0.7.0.tar.gz",
"has_sig": false,
"md5_digest": "bd943d9bbaad04efa3c8b4e2f64fccf9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.9",
"size": 38881,
"upload_time": "2024-12-16T08:18:27",
"upload_time_iso_8601": "2024-12-16T08:18:27.440969Z",
"url": "https://files.pythonhosted.org/packages/e5/32/64d2eaac46f5be16aea73536020af94e2c0d1e4fe626b326b6324f595f3c/ai_signal-0.7.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-16 08:18:27",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "guglielmo",
"github_project": "ai-signal",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "ai-signal"
}