{"id":50992115,"url":"https://github.com/epatel/claude-agent-team","last_synced_at":"2026-06-20T04:32:22.744Z","repository":{"id":364242420,"uuid":"1264827373","full_name":"epatel/claude-agent-team","owner":"epatel","description":"Always-on autonomous dev lab: a self-hosted Claude Agent SDK web console that does real work on git repos — per-project chat, repo actions, uploads — with platform clients dialing in over WebSocket to run builds/tests in manifest-synced mirrors.","archived":false,"fork":false,"pushed_at":"2026-06-12T08:49:11.000Z","size":1536,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T09:16:53.439Z","etag":null,"topics":["ai-agents","anthropic","autonomous-agents","claude","claude-agent-sdk","developer-tools","fastapi","mcp","python","raspberry-pi","self-hosted","websocket"],"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/epatel.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":"2026-06-10T08:05:30.000Z","updated_at":"2026-06-12T08:49:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/epatel/claude-agent-team","commit_stats":null,"previous_names":["epatel/claude-agent-team"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/epatel/claude-agent-team","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatel%2Fclaude-agent-team","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatel%2Fclaude-agent-team/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatel%2Fclaude-agent-team/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatel%2Fclaude-agent-team/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epatel","download_url":"https://codeload.github.com/epatel/claude-agent-team/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatel%2Fclaude-agent-team/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34557551,"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-06-20T02:00:06.407Z","response_time":98,"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":["ai-agents","anthropic","autonomous-agents","claude","claude-agent-sdk","developer-tools","fastapi","mcp","python","raspberry-pi","self-hosted","websocket"],"created_at":"2026-06-20T04:32:21.702Z","updated_at":"2026-06-20T04:32:22.738Z","avatar_url":"https://github.com/epatel.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://claude.ai\"\u003e\u003cimg src=\"made-with-claude.png\" height=\"32\" alt=\"Made with Claude\"\u003e\u003c/a\u003e\n\n# claude-agent-team\n\n\u003cimg src=\"hero.jpg\" width=\"836\" alt=\"System design: browser console and platform clients connected to the always-on dev lab, which talks to Claude and git remotes\"\u003e\n\nAn always-on autonomous development lab: a Claude Agent SDK client that runs\nuninterrupted on any always-on host, does real dev work on git repos, is\nsteered from a browser (per-project chat), and borrows capabilities it lacks\n(e.g. building and testing on macOS) from platform clients that dial in from\nother machines.\n\nThe lab runs anywhere Python 3.11+ and the Claude Code CLI run — a Linux\nserver, a Mac mini in a closet, a VPS, or a Raspberry Pi (the reference\ndeployment is a Pi 5 behind an Apache TLS proxy, but nothing depends on it).\n\n- **Plan \u0026 status:** [`project-plan.md`](project-plan.md) — goal, milestones, decisions, current state.\n- **Architecture \u0026 docs:** [`CLAUDE.md`](CLAUDE.md) — orientation + a card index.\n- **Run it:** [`QUICKSTART.md`](QUICKSTART.md) — local use and production deployment.\n\n## Repository layout\n\n```\ndev-lab/                      # the lab: web console + agent loop (runs on the lab host)\n  src/dev_lab/\n    web.py                    #   FastAPI console: login, projects, chat WS, client WS\n    projects.py               #   ProjectManager: clone/init, repo actions, uploads\n    clients.py                #   ClientRegistry + the client wire protocol (doc in module)\n    agent.py                  #   Claude Agent SDK loop + mcp__lab toolset\n    session.py / workspace.py #   chat branches / git wrapper\n    db.py / auth.py           #   SQLite migrations / users + invites\n    static/                   #   no-build vanilla JS frontend\nchat-client/                  # CLI control surface (older, single-project; secondary)\nextensions/\n  platform-client/            # platform-client runtime + manifest sync (pip-installable)\ndeploy/                       # systemd templates + Apache/nginx proxy configs + site dirs\ncards/                        # Context Cards (see CLAUDE.md for the index)\n```\n\nEach component is independently deployable with its **own venv** and its own\n`pyproject.toml` (see `cards/python-venvs.md`).\n\n## Quickstart\n\nRequires Python 3.11+, git, and `make`.\n\n```sh\nmake setup    # create a venv per component, install editable + dev deps\nmake test     # run pytest in every component\nmake lint     # ruff check\nmake fmt      # ruff format\n```\n\nTo set up a single component, use its `setup.\u003cname\u003e` target — `make\nsetup.dev-lab`, `make setup.chat-client`, or `make setup.platform-client`.\n\nRun the web console and connect a capability machine:\n\n```sh\ndev-lab/.venv/bin/dev-lab web --labs-dir ~/labs --host 127.0.0.1 --port 8770\n# on the machine with the capability (build, test, …):\nplatform-client connect --lab ws://\u003clab-host\u003e:8770/ws/client --name mac \\\n  --capability run_tests --capability build\n```\n\nSee [`QUICKSTART.md`](QUICKSTART.md) for the full walkthrough, and `deploy/`\nfor production setup (systemd service template + Apache or nginx TLS\nreverse-proxy configs; `deploy/home/` is a complete worked example).\n\n## Authentication — the `claude` CLI, no API key\n\nAll Claude auth is handled by a **one-time `claude` login** on the lab host\n(Claude subscription). The Agent SDK reads the stored credentials from\n`~/.claude`; they auto-refresh and survive restarts. There is **no API key\nanywhere** — not in `.env`, not in the environment:\n\n```sh\nclaude        # complete login once (SSH: press `c` to copy the URL, paste the code back)\n```\n\nDo **not** set `ANTHROPIC_API_KEY` / `ANTHROPIC_AUTH_TOKEN` — they would\noverride subscription auth and bill the API, so the lab refuses to start if\neither is present. See `cards/subscription-auth.md`.\n\nEverything else is per-feature, not global:\n\n- **GitHub** — per project: paste a token when adding a private repo in the web\n  console (public repos need none). No global `GITHUB_TOKEN`.\n- **Platform clients** — optionally set `CLIENT_TOKEN` on the lab and pass the\n  same to `platform-client connect` (open on a trusted LAN otherwise).\n- `dev-lab/.env` carries optional overrides only (`MODEL`, `CLIENT_TOKEN`) —\n  never a credential for Claude.\n\n## Status\n\nThe lab is live (reference deployment: a Raspberry Pi 5 behind Apache TLS).\nThe web console covers multi-user login with strict per-user project lists,\nprojects (clone a URL or git-init a blank repo), per-project chat with a\nresumed agent session, model selection, and agent setup (project prompt, MCP\nservers, repo-managed skills), repo actions (fetch / pull / push / reset /\nrebase-on-base / merge / download-zip / remove project), a file browser that\ncan also browse connected clients' mirrors, and uploads (into the repo, or as\nchat attachments for the agent to look at). Platform clients dial the lab\nover WebSocket, sync the working tree via content-hash manifests into\nper-lab-namespaced mirrors, run builds/tests there, and report results +\nchanged files; the agent drives them through `mcp__lab` (`list_clients` /\n`run_on_client` / `fetch_from_client`). See `project-plan.md` for milestones\nand what's still open.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepatel%2Fclaude-agent-team","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepatel%2Fclaude-agent-team","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepatel%2Fclaude-agent-team/lists"}