{"id":51402686,"url":"https://github.com/adi21-dev/personal-ai-agent","last_synced_at":"2026-07-04T08:03:29.764Z","repository":{"id":325994256,"uuid":"1103328161","full_name":"adi21-dev/personal-ai-agent","owner":"adi21-dev","description":null,"archived":false,"fork":false,"pushed_at":"2025-11-24T21:43:12.000Z","size":311,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-18T10:08:11.325Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adi21-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-24T18:15:40.000Z","updated_at":"2025-12-10T09:33:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/adi21-dev/personal-ai-agent","commit_stats":null,"previous_names":["thecoder1232/personal-ai-agent","adi21-dev/personal-ai-agent"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/adi21-dev/personal-ai-agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adi21-dev%2Fpersonal-ai-agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adi21-dev%2Fpersonal-ai-agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adi21-dev%2Fpersonal-ai-agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adi21-dev%2Fpersonal-ai-agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adi21-dev","download_url":"https://codeload.github.com/adi21-dev/personal-ai-agent/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adi21-dev%2Fpersonal-ai-agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35114174,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2026-07-04T08:03:29.032Z","updated_at":"2026-07-04T08:03:29.756Z","avatar_url":"https://github.com/adi21-dev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Personal AI Agent\n\nA highly extensible, plugin-based personal AI assistant that runs on your local machine. Built with Python, CustomTkinter, and LiteLLM.\n\n-----\n\n## Features\n\n  - **Plugin-Based Architecture**: Dynamically load features from the `/plugins` folder.\n  - **Multi-Model Support**: Seamlessly switch between any LLM provider (Gemini, Ollama, OpenRouter, etc.) thanks to **LiteLLM**.\n  - **Context-Aware**: Remembers your conversation and selects the best \"role\" (e.g., Coding Assistant) for your query.\n  - **Interactive UI**:\n      - Modern UI built with CustomTkinter.\n      - Runs in your system tray.\n      - Global hotkeys (`Ctrl+Shift+Space`) to open the chat window.\n      - Dark / Light / System theme support.\n      - Remembers window position and size.\n  - **Extensible Tools**:\n      - **Screen Capture**: Press `Ctrl+Shift+X` to attach a screenshot to your message.\n      - **MCP Integration**: (Model Context Protocol) A framework for adding custom tools (e.g., file system access, web search).\n\n-----\n\n## Project Structure\n\n```bash\npersonal-ai-agent/\n├── core/     # Core services (DI, events, agent, api)\n├── plugins/  # All plugins (screen_capture, mcp, etc.)\n├── config/   # All user-facing JSON configs\n│   └── prompts/ # System prompts for agent roles\n├── ui/       # CustomTkinter windows and widgets\n├── input/    # Global hotkey manager\n├── utils/    # Helpers (logger, config loader)\n└── main.py   # Main application entry point\n```\n\n-----\n\n## Setup \u0026 Installation\n\n### 1\\. Prerequisites\n\n  - Python 3.10+\n  - An API key for at least one LLM provider (e.g., Google Gemini).\n\n### 2\\. Clone the Repository\n\n```bash\ngit clone https://github.com/your-username/personal-ai-agent.git\ncd personal-ai-agent\n```\n\n### 3\\. Install Dependencies\n\nIt's highly recommended to use a virtual environment.\n\n```bash\npython -m venv .venv\nsource .venv/bin/activate  # On Windows: .venv\\Scripts\\activate\n```\n\nInstall the required packages.\n\n**Recommended (using `requirements.txt`):**\n\n```bash\npip install -r requirements.txt\n```\n\n**Manual Installation (if `requirements.txt` is missing):**\n\n```bash\npip install customtkinter pystray pynput tkhtmlview pillow litellm mss markdown tenacity\n```\n\n### 4\\. Configure API Keys\n\nThe application uses environment variables for API keys. This is the most secure method.\n\n**On macOS/Linux:**\n\n```bash\nexport GEMINI_API_KEY=\"your_google_ai_studio_key\"\nexport OPENROUTER_API_KEY=\"your_openrouter_key\"\n```\n\n**On Windows (Command Prompt):**\n\n```bash\nset GEMINI_API_KEY=\"your_google_ai_studio_key\"\n```\n\n### 5\\. Run the Application\n\n```bash\npython main.py\n```\n\nThe app will start and show an icon in your system tray. All configurations (like models and hotkeys) will be in the `config/` folder.\n\n-----\n\n## How to Use\n\n  - **Open Chat**: Press `Ctrl+Shift+Space` or click the tray icon.\n  - **Open Settings**: Right-click the tray icon and select \"Settings\".\n  - **Take Screenshot**: Press `Ctrl+Shift+X`. The chat window will open with a \"Screenshot Attached\" notice.\n  - **Send Message**: Type your message and press `Ctrl+Enter`.\n  - **Add Newline**: Press `Shift+Enter` to add a new line in the chat box.\n\n-----\n\n## How to Develop a New Plugin\n\n1.  Create a new file in `plugins/`, e.g., `my_plugin.py`.\n2.  Import the base class: `from plugins import PluginBase`.\n3.  Create your class: `class MyAwesomePlugin(PluginBase):`\n4.  Implement the required methods: `__init__`, `Youtube`, and `initialize`.\n\n**Example: `plugins/hello_plugin.py`**\n\n```python\nimport logging\nfrom plugins import PluginBase\nfrom core.service_locator import ServiceLocator\nfrom core.event_dispatcher import EventDispatcher\n\nclass HelloPlugin(PluginBase):\n    \n    def __init__(self, service_locator: ServiceLocator):\n        super().__init__(service_locator)\n        # Get core services\n        self.events: EventDispatcher = self.locator.resolve(\"event_dispatcher\")\n        self.logger = logging.getLogger(self.__class__.__name__)\n\n    def get_metadata(self):\n        return {\n            \"name\": \"HelloPlugin\",\n            \"version\": \"1.0.0\",\n            \"description\": \"A simple plugin that says hello.\"\n        }\n\n    def initialize(self):\n        # Subscribe to an event\n        self.events.subscribe(\"APP_START\", self.say_hello)\n        self.logger.info(\"HelloPlugin initialized.\")\n        \n    async def say_hello(self):\n        self.logger.info(\"Hello from the HelloPlugin!\")\n        await self.events.publish(\n            \"NOTIFICATION_EVENT.INFO\",\n            title=\"Hello Plugin\",\n            message=\"Hello, world! The app has started.\"\n        )\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadi21-dev%2Fpersonal-ai-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadi21-dev%2Fpersonal-ai-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadi21-dev%2Fpersonal-ai-agent/lists"}