{"id":29140418,"url":"https://github.com/serverdaun/sidekick","last_synced_at":"2025-06-30T17:06:14.749Z","repository":{"id":301038966,"uuid":"1007934510","full_name":"serverdaun/sidekick","owner":"serverdaun","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-24T20:41:26.000Z","size":88,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-24T21:40:50.193Z","etag":null,"topics":["agentic-ai","gradio","langgraph-python"],"latest_commit_sha":null,"homepage":"","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/serverdaun.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}},"created_at":"2025-06-24T19:01:58.000Z","updated_at":"2025-06-24T20:41:30.000Z","dependencies_parsed_at":"2025-06-24T21:40:53.638Z","dependency_job_id":"82661baa-0570-46c3-97ad-12d5fd2c1025","html_url":"https://github.com/serverdaun/sidekick","commit_stats":null,"previous_names":["serverdaun/sidekick"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/serverdaun/sidekick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverdaun%2Fsidekick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverdaun%2Fsidekick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverdaun%2Fsidekick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverdaun%2Fsidekick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/serverdaun","download_url":"https://codeload.github.com/serverdaun/sidekick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverdaun%2Fsidekick/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262816535,"owners_count":23368921,"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":["agentic-ai","gradio","langgraph-python"],"created_at":"2025-06-30T17:06:13.736Z","updated_at":"2025-06-30T17:06:14.735Z","avatar_url":"https://github.com/serverdaun.png","language":"Python","readme":"---\ntitle: Ai Sidekick\nemoji: 🌍\ncolorFrom: red\ncolorTo: yellow\nsdk: docker\npinned: false\n---\n\n# AI Sidekick\n\n## Overview\nAI Sidekick is an autonomous \"co-worker\" that can collaborate with you on almost any knowledge-working task.  \nUnder the hood it combines:\n* **LangGraph** – orchestrates a two-node graph consisting of a **worker** agent that tries to complete your task and an **evaluator** agent that inspects the worker's answers against the success criteria you provide.\n* **LangChain** tools – web search, Wikipedia, ArXiv, file-system access, a Python REPL, safe symbolic math and a fully-featured Chromium browser driven through Playwright.\n* **Gradio** – delivers a clean, one-page chat interface so you can talk to the sidekick in your browser.\n\nThe result is a self-reflective assistant able to:\n1. Use the above tools to gather information, crunch numbers or automate the browser.\n2. Evaluate its own answers and iterate until the predefined success criteria are met.\n\nAll conversations (and any artefacts it writes to the `sandbox/` directory) are saved locally so the context persists between sessions.\n\n## Installation\n### Prerequisites\n* Python **3.12+** (matching the constraint in `pyproject.toml`)\n* An OpenAI API key stored as the environment variable `OPENAI_API_KEY`\n* Optional – to change the LLM models set `OPENAI_CHAT_MODEL_WORKER` and `OPENAI_CHAT_MODEL_EVALUATOR`.\n\n### Steps\n```bash\n# 1. Clone the repo\ngit clone https://github.com/your-org/ai_sidekick.git\ncd ai_sidekick\n\n# 2. Install uv\npip install uv\n\n# 3. Create and sync venv\nuv sync\n\n# 4. Activate the enviroment\nsource .venv/bin/activate # .venv/Scripts/activate\n\n# 5. Create a .env file for your keys\ncp .env.example .env  # then edit the values\n```\n\n## Usage\nStart the Gradio application:\n```bash\nuv run app.py\n```\nThis will launch a local web server (by default at `http://localhost:7860`) presenting the chat UI.\n\n1. Type your request in the *Your request to the Sidekick* box.\n2. Optionally describe what \"done\" looks like in the *success criteria* field. The evaluator agent will use this text to decide when to stop.\n3. Press **Go!** and watch the conversation unfold.\n\nUI tips:\n* **Reset** – clears the current chat but keeps the long-term memory on disk.\n* **Clear Memory** – deletes `sidekick_memory.json` and starts a completely fresh session.\n\n### Programmatic access\nIf you want to embed the sidekick in your own code you can import the `Sidekick` class:\n```python\nfrom sidekick import Sidekick\n\nsidekick = Sidekick()\nawait sidekick.setup()\nresult = await sidekick.run_superstep(\n    \"Write a short poem about the sea\",\n    success_criteria=\"The poem is exactly four lines long.\",\n    history=[],\n)\nprint(result[-2][\"content\"])  # assistant's reply\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fserverdaun%2Fsidekick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fserverdaun%2Fsidekick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fserverdaun%2Fsidekick/lists"}