{"id":28179871,"url":"https://github.com/eikendev/minigist","last_synced_at":"2026-02-16T10:22:29.028Z","repository":{"id":289938153,"uuid":"972877939","full_name":"eikendev/minigist","owner":"eikendev","description":"Turn your long Miniflux articles into clear, concise summaries ✍️⚡","archived":false,"fork":false,"pushed_at":"2025-05-11T19:20:15.000Z","size":174,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-11T20:24:19.215Z","etag":null,"topics":["miniflux"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eikendev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-25T20:21:57.000Z","updated_at":"2025-05-11T19:20:11.000Z","dependencies_parsed_at":"2025-05-11T20:31:53.630Z","dependency_job_id":null,"html_url":"https://github.com/eikendev/minigist","commit_stats":null,"previous_names":["eikendev/minigist"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eikendev%2Fminigist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eikendev%2Fminigist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eikendev%2Fminigist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eikendev%2Fminigist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eikendev","download_url":"https://codeload.github.com/eikendev/minigist/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254453560,"owners_count":22073618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["miniflux"],"created_at":"2025-05-16T02:13:46.954Z","updated_at":"2026-02-16T10:22:27.871Z","avatar_url":"https://github.com/eikendev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\t\u003ch1\u003eminigist\u003c/h1\u003e\n\t\u003ch4 align=\"center\"\u003e\n\t\tAI-powered summaries for your \u003ca href=\"https://miniflux.app/\"\u003eMiniflux\u003c/a\u003e feeds.\n\t\u003c/h4\u003e\n\t\u003cp\u003eTurn your long Miniflux articles into clear, concise summaries.\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://github.com/eikendev/minigist/actions\"\u003e\u003cimg alt=\"Build status\" src=\"https://img.shields.io/github/actions/workflow/status/eikendev/minigist/ci.yaml?branch=main\"/\u003e\u003c/a\u003e\u0026nbsp;\n\t\u003ca href=\"https://github.com/eikendev/minigist/blob/main/LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/eikendev/minigist\"/\u003e\u003c/a\u003e\u0026nbsp;\n\t\u003ca href=\"https://pypi.org/project/minigist/\"\u003e\u003cimg alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/minigist\"/\u003e\u003c/a\u003e\u0026nbsp;\n\u003c/p\u003e\n\n## ✨\u0026nbsp;Why minigist?\n\nLong-form feed entries are great for depth but hard to keep up with. Miniflux shows the full content, and without a summary layer you still have to read everything to decide what matters.\n\nminigist solves this by generating concise summaries on the server side and writing them directly into each unread entry. This works with your current way to read Miniflux entries, no client changes needed.\n\n## 🧠\u0026nbsp;How it works\n\n- You define prompts and targets in a YAML config file\n- minigist fetches the full text of unread entries (using pure.md if configured)\n- Your configured LLM generates summaries using your prompts\n- Summaries are written back into the Miniflux entry\n\n## 🚀\u0026nbsp;Installation\n\nInstall minigist using `pip`:\n\n```bash\npip install minigist\n```\n\nInstall minigist using `uv`:\n\n```bash\nuv tool install minigist\n```\n\n## 📄\u0026nbsp;Usage\n\n### Configuration\n\nFind below an example config file. By default, minigist searches for a config file in this order:\n\n- `~/.config/minigist/config.yaml`\n- `~/.config/minigist/config.yml`\n- `./config.yaml`\n- `./config.yml`\n- `/etc/minigist/config.yaml`\n- `/etc/minigist/config.yml`\n\nYou can override the path with the `--config-file` flag.\n\nFor credentials, you can set environment variables to override the YAML values:\n\n- `MINIGIST_MINIFLUX_API_KEY` → `miniflux.api_key`\n- `MINIGIST_LLM_API_KEY` → `llm.api_key`\n\n```yaml\nminiflux:\n  # Base URL of your Miniflux instance (required)\n  url: \"https://your-miniflux-instance.com\"\n  # Miniflux API key (required)\n  api_key: \"your-miniflux-api-key\"\n  # Request timeout in seconds (optional; default: 2)\n  timeout_seconds: 2\n\nllm:\n  # API key for your LLM provider (required)\n  api_key: \"your-ai-service-api-key\"\n  # API base URL (optional; default: OpenRouter)\n  base_url: \"https://openrouter.ai/api/v1\"\n  # Model identifier to use (optional; default shown)\n  model: \"google/gemini-2.5-flash-lite\"\n  # Request timeout in seconds (optional; default: 60)\n  timeout_seconds: 60\n  # Max number of concurrent LLM requests (optional; default: 5)\n  concurrency: 5\n\nprompts:\n  # Prompts define how summaries are produced.\n  # Each prompt must have a unique id.\n  - id: \"default\"\n    prompt: \"Generate an executive summary of the provided article.\"\n  - id: \"deep-dive\"\n    prompt: \"Extract the nuanced arguments and counterpoints.\"\n\n# minigist always appends a fixed system instruction that enforces JSON output\n# and requires summary_markdown to be Markdown. This cannot be overridden.\n\n# Optional: when no targets are defined, this prompt is used for all unread entries.\n# If omitted, the first prompt in the \"prompts\" list is used.\ndefault_prompt_id: \"default\"\n\ntargets:\n  # Targets map feeds or categories to prompts.\n  # When targets are defined, ONLY these feeds/categories are processed.\n  # Overlaps across targets are errors.\n  - prompt_id: \"default\"\n    feed_ids: [1, 2]\n  - prompt_id: \"deep-dive\"\n    category_ids: [5]\n    # Prefer pure.md for this target (optional; default: false)\n    use_pure: true\n\nscraping:\n  # Token for pure.md (optional; improves rate limits)\n  pure_api_token: \"optional-pure-md-token\"\n  # Always route matching URLs through pure.md\n  pure_base_urls:\n    - \"https://text.npr.org/\"\n  # Request timeout for scraping in seconds (optional; default: 5)\n  timeout_seconds: 5\n\nfetch:\n  # Max unread entries to fetch per feed (optional; default: 50)\n  limit: 50\n\nnotifications:\n  # Apprise notification URLs for error/failure alerts (optional)\n  - \"discord://webhook_id/webhook_token\"\n  - \"telegram://bot_token/chat_id\"\n```\n\n\u003e [!NOTE]\n\u003e Notifications are only sent for errors or runs that finish with failures; summaries are not pushed as notifications.\n\nSee [Apprise documentation](https://github.com/caronc/apprise) for all supported notification services.\n\n### Run\n\nRun minigist to process unread entries:\n\n```bash\nminigist run\n```\n\nRun in dry-run mode to see what would happen without making changes:\n\n```bash\nminigist run --dry-run\n```\n\nIncrease logging verbosity:\n\n```bash\nminigist run --log-level DEBUG\n```\n\nUse a different configuration file:\n\n```bash\nminigist run --config-file /path/to/config.yaml\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feikendev%2Fminigist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feikendev%2Fminigist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feikendev%2Fminigist/lists"}