{"id":51139025,"url":"https://github.com/simpx/loopat","last_synced_at":"2026-06-25T20:30:46.219Z","repository":{"id":358498080,"uuid":"1230788815","full_name":"simpx/loopat","owner":"simpx","description":"Self-hosted AI workspace built around context management. Works solo, scales to teams.","archived":false,"fork":false,"pushed_at":"2026-06-08T02:56:32.000Z","size":10110,"stargazers_count":55,"open_issues_count":13,"forks_count":10,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T04:24:04.186Z","etag":null,"topics":["agentic-ai","ai-agent","claude","claude-agetn-sdk","coding-agent","context-management","developer-tools","team-collaboration"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simpx.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,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":"CLA.md"}},"created_at":"2026-05-06T10:18:18.000Z","updated_at":"2026-06-08T02:56:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/simpx/loopat","commit_stats":null,"previous_names":["simpx/loopat"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/simpx/loopat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simpx%2Floopat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simpx%2Floopat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simpx%2Floopat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simpx%2Floopat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simpx","download_url":"https://codeload.github.com/simpx/loopat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simpx%2Floopat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34792208,"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-25T02:00:05.521Z","response_time":101,"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":["agentic-ai","ai-agent","claude","claude-agetn-sdk","coding-agent","context-management","developer-tools","team-collaboration"],"created_at":"2026-06-25T20:30:45.763Z","updated_at":"2026-06-25T20:30:46.209Z","avatar_url":"https://github.com/simpx.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧶 loopat\n\n\u003e **Self-hosted AI workspace built around context management — works solo, scales to teams**\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/loopat\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/loopat?logo=npm\u0026color=cb3837\" alt=\"npm version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/simpx/loopat/pkgs/container/loopat\"\u003e\u003cimg src=\"https://img.shields.io/badge/ghcr.io-simpx%2Floopat-2496ED?logo=docker\u0026logoColor=white\" alt=\"GHCR image\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache--2.0-green\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/screenshot.png\" alt=\"loopat — Loop view with chat, workdir, terminal, and team DM\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n⭐ [Star on GitHub](https://github.com/simpx/loopat) ·\n🚀 [Quick start](#quick-start) ·\n📖 [Architecture](docs/architecture.md)\n\n---\n\nWhen humans collaborate with AI, three things only humans can bring:\n\n- **Drive** — pushing the work forward. AI has no desires, no\n  ambition of its own; momentum has to come from a human.\n- **Attention** — what matters now, what to ignore. AI doesn't know\n  what's worth your time.\n- **Entropy reduction** — turning noise into structured knowledge.\n  AI generates tokens but won't spontaneously simplify.\n\nloopat is built around managing these three as first-class concepts:\n**Loop** (drive) · **Focus** (attention) · **Context** (entropy\nreduction). A fourth concept — **Chat** — coordinates the team on the\nsync axis.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/overview.svg\" alt=\"loopat architecture\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nThe agent itself is the [Claude Agent SDK][sdk]; what makes loopat\ndistinct is the **context architecture around it** — how chat, code,\nmemory, and knowledge interlock so context doesn't get lost across\nsessions or teammates.\n\n[sdk]: https://github.com/anthropics/claude-agent-sdk\n\n---\n\n## What makes loopat different\n\n- **End-to-end context management.** Team chat (IM) threads, code\n  edits, agent decisions, memory — all live in the same context graph\n  and all flow into the next loop. Most AI tools make you copy-paste\n  from Slack into the AI to give it situational context; loopat treats\n  team chat as **a first-class context source** — spawn a loop from\n  any chat thread and that thread becomes part of the loop's context\n  automatically.\n- **Works solo, scales to teams.** Same workspace whether you're\n  alone or onboarding teammates. Solo, it's a personal AI workspace;\n  with a team, shared `knowledge/` and `notes/` git repos sync across\n  members, loops auto-commit their work, and observations promote\n  upward through a distillation pipeline. Most AI tools force you to\n  pick between solo CLI and team SaaS — loopat is one tool at any scale.\n- **Reproducible loops.** Every loop runs in its own sandbox with a\n  versioned toolchain and a pinned credential vault. Spawn the same\n  loop tomorrow on a different machine and get the same starting\n  state. No \"works on my machine\" for AI sessions.\n- **Self-hosted, data you own.** All artifacts live in plain git\n  repos you fully control; vault secrets are git-crypt encrypted.\n  BYO API key — nothing leaves your machine except the model API call\n  itself.\n\n## How loopat compares\n\n| | Claude Code | Cursor | opencode | Codex | **loopat** |\n|---|---|---|---|---|---|\n| Form factor | CLI | IDE | TUI | Web (hosted) | **Web (self-hosted)** |\n| License | proprietary | proprietary | MIT | proprietary | **Apache 2.0** |\n| Team IM integration | external (manual paste) | external (manual paste) | external (manual paste) | external (manual paste) | **built-in, threads ingested into loop context** |\n| Memory management | personal (`CLAUDE.md`) | personal (rules + memories) | personal (`AGENTS.md`) | none | **personal + team-shared, with distillation pipeline** |\n| Multi-user | single user | per-seat | single user | per-account | **shared workspace** |\n| Shared team knowledge | individual config | individual config | individual config | individual config | **git-synced across team** |\n| Per-session sandbox | process-level | process-level | process-level | OpenAI-managed | **bwrap (default) · Docker (planned)** |\n| Toolchain pinning | host runtime | host runtime | host runtime | fixed (hosted env) | **per-loop versioned** |\n| Per-task credential isolation | shared (env vars) | shared (subscription) | shared (env vars) | account-managed | **per-loop vault overlay** |\n| Data location | local files | cloud | local files | OpenAI servers | **git repos you control** |\n| Secrets storage | env vars (plaintext) | cloud-managed | env vars (plaintext) | platform-managed | **git-crypt encrypted vault** |\n| Agent engine | proprietary (Anthropic) | proprietary (multi-model) | pluggable | proprietary (OpenAI) | **Claude Agent SDK** |\n\n---\n\n## Quick start\n\n```sh\nnpx loopat\n```\n\nOpen \u003chttp://localhost:10001\u003e. The first run bootstraps `~/.loopat/`,\nprints a checklist, and prompts you to set your API key in\n`~/.loopat/config.json`. Restart — done.\n\n\u003e **Needs:** [Node][node] to launch — the [Bun][bun] runtime is fetched\n\u003e automatically, so you don't install it yourself. The terminal / chat\n\u003e sandbox additionally needs a Linux host with [podman][podman]. Change\n\u003e the port with `PORT=8080 npx loopat`. macOS / Windows is via Docker\n\u003e (see below).\n\n### From source (for development)\n\n```sh\ngit clone https://github.com/simpx/loopat.git\ncd loopat \u0026\u0026 bun install\nbun run dev\n```\n\n\u003e Needs [bun][bun] + [bubblewrap][bwrap] + [mise][mise] on the host. For\n\u003e team setups with shared knowledge/notes git repos and full bootstrap\n\u003e details, see the [installation guide](docs/install.md).\n\n### Setup guides\n\nLoopat splits configuration along role lines — read whichever applies:\n\n- **[Admin setup](docs/setup-admin.md)** — provision the workspace:\n  knowledge / notes repos, team sandboxes, MCP, operator mounts. Run\n  this once per workspace.\n- **[User setup](docs/setup-user.md)** — join an existing workspace:\n  personal credential repo, providers, vaults, sandbox mounts. Run\n  this once per member, per machine.\n\n[bwrap]: https://github.com/containers/bubblewrap\n[mise]: https://mise.jdx.dev/\n[bun]: https://bun.sh/\n[node]: https://nodejs.org/\n[podman]: https://podman.io/\n\n## Deployment\n\n### Docker (recommended)\n\nPull the prebuilt image from GHCR:\n\n```sh\ndocker run -d --privileged -p 20001:10001 ghcr.io/simpx/loopat:latest\n```\n\nOr, to build from source and persist the workspace in a named volume:\n\n```sh\ndocker compose up -d\n```\n\nOpen \u003chttp://localhost:20001\u003e (note: **20001**, not 10001 — the host\nport is remapped to avoid collision with a local dev server; see\n[`docker-compose.yml`](docker-compose.yml)). Workspace persists in\nthe `loopat-data` volume. Needs `SYS_ADMIN` + unconfined AppArmor for\nbwrap mount namespaces.\n\n### From source (Linux)\n\n```sh\nbun run build                     # installs deps + builds frontend → web/dist/\nPORT=10001 bun run server/src/index.ts\n```\n\nSingle Hono process serves API + static SPA + websocket on one port.\nPut a reverse proxy in front and proxy `/api` + `/ws` to the server.\n\n## Documentation\n\n- **[Admin setup](docs/setup-admin.md)** — workspace config, knowledge /\n  notes repos, sandboxes, MCP, operator mounts.\n- **[User setup](docs/setup-user.md)** — personal repo, providers,\n  vaults, sandbox mounts.\n- **[Installation guide](docs/install.md)** — host install, system deps,\n  environment variables.\n- **[Architecture](docs/architecture.md)** — the read/write path, layered\n  context model, distillation pipeline, Claude config injection paths.\n- **[Context flow](docs/context-flow.md)** — the horizontal working model: a\n  loop is a git worktree, shared context is `main`, and loops exchange it over\n  two edges — pull and promote.\n- **[Identity](docs/identity.md)** — who a loop acts as: the credential chain\n  (deploy key → git-crypt → vault), and how loopat integrates with your git\n  host so onboarding is one authorization.\n- **[.claude composition](docs/composition.md)** — how team / profile /\n  personal / repo `.claude/` tiers merge into the loop runtime, and what\n  you can put in each tier.\n- **[Sandbox](docs/sandbox.md)** — bwrap mount mechanics, three-tier mount\n  authority, what stops the agent from escaping.\n- **[Troubleshooting](docs/troubleshoot.md)** — chat won't start, banner\n  errors, common pitfalls.\n\n## Contributing\n\nIssues and PRs welcome. Before opening a non-trivial PR, please skim\n[`docs/architecture.md`](docs/architecture.md) so the change lands in the\nright layer (sandbox / vault / loop / chat).\n\nContributors are asked to sign the [Contributor License Agreement](CLA.md)\non their first PR — the [CLA Assistant][cla-assistant] bot prompts you\nwith a one-click link. This keeps future licensing options open (e.g.\nmoving to a business-friendly license) without having to re-collect\npermission from every contributor.\n\n[cla-assistant]: https://cla-assistant.io/\n\n## Acknowledgments\n\nloopat is built on top of:\n\n- [Claude Agent SDK][sdk] — the agent runtime\n- [assistant-ui](https://github.com/assistant-ui/assistant-ui) — React\n  components for the chat interface\n- [Hono](https://hono.dev/) — the HTTP + WebSocket server\n- [bubblewrap](https://github.com/containers/bubblewrap) — sandbox mount\n  namespaces\n- [mise](https://mise.jdx.dev/) — per-loop toolchain installs\n\n## License\n\n[Apache License 2.0](LICENSE). See [`NOTICE`](NOTICE) for required\nattributions and [`CLA.md`](CLA.md) for contribution terms.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimpx%2Floopat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimpx%2Floopat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimpx%2Floopat/lists"}