{"id":50373738,"url":"https://github.com/aryankeluskar/git-fs","last_synced_at":"2026-05-30T08:30:37.409Z","repository":{"id":351636589,"uuid":"1211846701","full_name":"aryankeluskar/git-fs","owner":"aryankeluskar","description":"Faking a filesystem over GitHub repos to run coding agents in your browser. Use your Claude, Codex or Copilot sub to instantly chat with any codebase.","archived":false,"fork":false,"pushed_at":"2026-04-17T23:37:21.000Z","size":12959,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-18T00:38:26.518Z","etag":null,"topics":["cloudflare-workers","containers","github","just-bash","opencode"],"latest_commit_sha":null,"homepage":"https://github.soy.run","language":"TypeScript","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/aryankeluskar.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-04-15T20:07:04.000Z","updated_at":"2026-04-17T23:39:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aryankeluskar/git-fs","commit_stats":null,"previous_names":["aryankeluskar/gitsandbox","aryankeluskar/git-fs"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/aryankeluskar/git-fs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aryankeluskar%2Fgit-fs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aryankeluskar%2Fgit-fs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aryankeluskar%2Fgit-fs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aryankeluskar%2Fgit-fs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aryankeluskar","download_url":"https://codeload.github.com/aryankeluskar/git-fs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aryankeluskar%2Fgit-fs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33686018,"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-05-30T02:00:06.278Z","response_time":92,"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":["cloudflare-workers","containers","github","just-bash","opencode"],"created_at":"2026-05-30T08:30:35.330Z","updated_at":"2026-05-30T08:30:37.404Z","avatar_url":"https://github.com/aryankeluskar.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitFS\n\nReplace `github.com` with `github.soy.run` on any GitHub URL and instantly chat with that repo through an AI agent. No clone, no container, no MCP.\n\nGitFS hydrates a virtual filesystem from GitHub's API and gives an agent a bash shell to explore it — `grep`, `cat`, `ls`, `find` work instantly because the filesystem is in-memory. File contents load lazily from GitHub on demand.\n\n\u003cimg alt=\"image\" src=\"https://github.com/aryankeluskar/git-fs/blob/master/public/banner.png?raw=true\" /\u003e\n\n\n## Virtual Filesystem (primary)\n\n```\nBrowser\n  ├── just-bash (TypeScript bash reimplementation)\n  │     └── InMemoryFs = hydrated from GitHub Git Trees API\n  └── pi-agent-core (agent loop)\n        └── pi-ai (model streaming: Copilot / Codex / Claude)\n```\n\nThe agent runs in the browser. The Worker never touches user tokens — it just forwards API requests with the right headers so OAuth subscription tokens (Copilot, Codex, Claude) work from a browser context.\n\n## Account-Level Queries\n\nGitFS supports org/user-level exploration. Navigating to `github.soy.run/cloudflare` builds a skeleton filesystem with a `/README.md` manifest and per-repo `/.repo-meta.json` stubs. The agent can answer questions about what repos exist, their languages, stars, and descriptions — without loading any source code.\n\n## Prerequisites\n\n- [Bun](https://bun.sh) (v1.1+)\n- [Docker](https://docs.docker.com/desktop/) (for local sandbox development)\n- [Wrangler](https://developers.cloudflare.com/workers/wrangler/) (v4+, installed as dev dependency)\n- A Cloudflare account on the Workers Paid plan\n\n## Getting Started\n\n```bash\n# Install dependencies\nbun install\n\n# Start the worker (needs Docker running for sandbox mode)\nbun run dev:worker\n\n# In another terminal, start the frontend\nbun run dev:web\n```\n\nOpen [http://localhost:3000](http://localhost:3000) and enter a GitHub repo URL to get started.\n\n## Project Structure\n\n```\ngitfs/\n  packages/\n    worker/            # Cloudflare Worker (Hono + Sandbox SDK)\n      src/\n        index.ts       # Hono router: sandbox CRUD, API proxies, OAuth flows\n        sandbox.ts     # Sandbox lifecycle + OpenCode proxy\n        repo.ts        # GitHub URL parsing and tarball URL builder\n        types.ts       # Shared TypeScript types\n      Dockerfile       # Sandbox container: Ubuntu + Node + OpenCode\n      wrangler.jsonc   # Worker + Sandbox + Durable Object config\n    web/               # React SPA (Cloudflare Pages)\n      src/\n        components/    # RepoInput, ChatView, ChatComposer, ChatMessage,\n                       # SessionSidebar, SettingsPanel, ModelProviderPicker,\n                       # BranchPicker, AuthPrompt, ToolCard, UsageBadge, …\n        db/            # Dexie schema: sessions, messages, credentials, usage\n        hooks/         # useAgent, useSettings\n        lib/           # githubFs, repoRuntime, agent, tools,\n                       # claudeOAuth, copilotOAuth, codexOAuth,\n                       # githubAuth, githubAccount, parseRepoUrl, …\n  package.json         # Bun workspaces root\n```\n\n\n## Deploying\n\n```bash\n# Deploy the worker\nbun run deploy:worker\n\n# Build and deploy the frontend\nbun run --filter=@gitfs/web build\nbun run deploy:web\n```\n\n## Running Tests\n\n```bash\nbun run test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faryankeluskar%2Fgit-fs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faryankeluskar%2Fgit-fs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faryankeluskar%2Fgit-fs/lists"}