{"id":50632989,"url":"https://github.com/artcodec-hq/parasor","last_synced_at":"2026-06-07T00:01:55.056Z","repository":{"id":362730889,"uuid":"1260011842","full_name":"artcodec-hq/parasor","owner":"artcodec-hq","description":"AI-first coding workspace for continuing your desktop development flow from anywhere.","archived":false,"fork":false,"pushed_at":"2026-06-05T16:54:09.000Z","size":2358,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T18:31:31.681Z","etag":null,"topics":["ai","coding-agent","developer-tools","git","react","remote-access","terminal","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/artcodec-hq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["akibe"]}},"created_at":"2026-06-05T04:30:21.000Z","updated_at":"2026-06-05T16:41:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/artcodec-hq/parasor","commit_stats":null,"previous_names":["artcodec-hq/parasor"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/artcodec-hq/parasor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artcodec-hq%2Fparasor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artcodec-hq%2Fparasor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artcodec-hq%2Fparasor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artcodec-hq%2Fparasor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artcodec-hq","download_url":"https://codeload.github.com/artcodec-hq/parasor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artcodec-hq%2Fparasor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34003814,"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-06T02:00:07.033Z","response_time":107,"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","coding-agent","developer-tools","git","react","remote-access","terminal","typescript"],"created_at":"2026-06-07T00:01:10.591Z","updated_at":"2026-06-07T00:01:55.049Z","avatar_url":"https://github.com/artcodec-hq.png","language":"TypeScript","funding_links":["https://github.com/sponsors/akibe"],"categories":[],"sub_categories":[],"readme":"# parasor\n\n\u003e Open-source, mobile-first workspace for operating your local development\n\u003e environment from a phone.\n\nparasor runs on your development machine and turns it into a browser workspace\nfor your phone or another trusted device. The core is persistent PTY-backed\nterminal control, so the host machine keeps the real project environment while\nyou create projects, install dependencies, run CLI tools, drive AI coding\nagents, edit files, review diffs, inspect Git state, and open localhost dev\nservers from mobile.\n\n## Highlights\n\n- **Agent-independent architecture** - parasor is built around persistent PTY\n  terminal control, not a specific agent runtime. Use Codex, Claude Code,\n  ordinary shell tools, package managers, or existing project workflows as-is.\n- **All-in-one mobile UI** - terminal, Git state, file tree, editor, diff,\n  browser views, localhost dev servers, and agent status are integrated in one\n  browser workspace.\n- **Practical mobile development** - QR login, mobile terminal key controls,\n  clipboard/file upload, and persistent PTYs keep work usable from a phone.\n- **Persistent PTYs** - the user-scope service installs a PTY host daemon so\n  scrollback and sessions survive server restarts.\n- **Agent-aware shims** - Claude Code and Codex wrappers add runtime integration\n  hooks without editing user agent configuration files.\n- **Network port center** - detected localhost dev servers can be opened from\n  mobile through parasor-managed reachable URLs when needed.\n- **Token auth + Origin allowlist** - high-entropy URL token and browser\n  Origin checks are enabled by default.\n- **macOS / Linux primary** - user-scope install and service management, no\n  sudo required. WSL is expected to work for foreground use, with service mode\n  depending on systemd-enabled WSL. Native Windows is not currently supported.\n\n## Quick Start\n\nInstall with Node.js 22+:\n\n```bash\nnpm install -g parasor\nparasor\n```\n\nOne-off run:\n\n```bash\nnpm exec -y parasor\n# or: npx parasor\n```\n\npnpm users must allow native dependency builds:\n\n```bash\npnpm dlx --allow-build=node-pty,@parcel/watcher parasor\n```\n\nparasor listens on every IPv4 interface (`0.0.0.0`) at port `7681` by default,\nmatching common local-dev tools such as ttyd, gotty, Vite `--host`, and Next.js\ndev. The startup banner prints reachable access URLs for loopback, LAN, and\nTailscale endpoints, followed by a QR code for phone access.\n\nToken auth and WebSocket Origin checks are the primary defense. Use\n`--host 127.0.0.1` or `HOST=127.0.0.1` for loopback-only access.\n\n```bash\nparasor --help             # user-facing subcommands\nparasor qr                 # re-render QR + access URLs over the IPC socket\nparasor qr --iface=en0     # prefer a specific network interface\n```\n\n## Update / Uninstall\n\nUpdate a global install:\n\n```bash\nnpm install -g parasor@latest\nparasor service restart    # if service mode is installed\n```\n\nUninstall the service before removing the package:\n\n```bash\nparasor service uninstall\nnpm uninstall -g parasor\n```\n\n## Background Service\n\nKeep parasor up after login. On macOS, the LaunchAgent also starts at user\nlogin after reboot. On Linux, the systemd user unit starts with the user\nsession; start-before-login behavior depends on whether lingering is enabled\nfor that account.\n\nService mode requires a globally installed `parasor` command.\n\n```bash\nparasor service install     # LaunchAgent on macOS, systemd user unit on Linux\nparasor service status      # installed / running / pid / uptime\nparasor service restart     # restart the service\nparasor service logs -f     # tail the service log\nparasor service uninstall   # stop + unregister\n```\n\nThe service is user-scope only and does not require sudo. The supervisor\nrestarts the server if it crashes, and the PTY host daemon keeps PTY sessions\navailable across server restarts.\n\n## Agent Integrations\n\nOn startup, parasor installs user-scope shims under `~/.config/parasor` (or\n`$PARASOR_CONFIG_DIR` when set) and prepends them only to PTYs spawned by\nparasor. There is no `postinstall` hook, no sudo path, and no write to global\nshell startup files.\n\nThe shims wrap Claude Code and Codex when they are launched inside parasor\nterminals so the UI can show agent state and attach session context. Outside a\nparasor PTY, the wrappers resolve and exec the real binaries.\n\n## Remote Access\n\nparasor itself does not ship a tunnel. The expected mobile flow is: parasor\nruns on your dev machine, and the phone reaches it over a trusted network.\n\n- **Same LAN.** Default bind already covers it. Scan the QR from a phone on the\n  same Wi-Fi.\n- **Tailscale.** With Tailscale running on both ends, the Tailnet IP and\n  MagicDNS hostname are reachable on the default bind.\n- **Cloudflare Tunnel + Access, or equivalent identity-aware proxy.** Use this\n  when you need a stable public URL with SSO or device posture enforced before\n  any request reaches parasor.\n- **SSH port-forward.** Run `parasor --host 127.0.0.1` on the remote side and\n  connect with `ssh -L 7681:127.0.0.1:7681 user@host`.\n\nDirect exposure on a public IP, such as binding `0.0.0.0` on a VPS without an\noverlay or identity-aware proxy in front, is out of scope. See\n[SECURITY.md](./SECURITY.md) for the threat model.\n\n## Opening Localhost Dev Servers From Mobile\n\nWhen a terminal prints a loopback URL such as `http://localhost:5173`, opening\nthat URL on a phone would normally target the phone's own localhost. parasor can\nrewrite detected loopback dev-server URLs to a reachable address on the parasor\nhost, using a per-port forwarder when needed.\n\nMost dev servers do not have parasor's token auth. Expose them directly only on\na trusted LAN or Tailnet.\n\n## Configuration\n\n| Variable | Default | Purpose |\n|---|---|---|\n| `PORT` | `7681` | HTTP listen port |\n| `HOST` | `0.0.0.0` | Bind address; set `127.0.0.1` for loopback-only |\n| `PARASOR_AUTH` | `token` | `token` or `none`; `none` is allowed only on loopback binds |\n| `PARASOR_CONFIG_DIR` | `~/.config/parasor` | Persistent state directory |\n| `PARASOR_ALLOWED_ORIGINS` | empty | Extra browser origins for WebSocket allowlist |\n\n## Development\n\n```bash\npnpm install\npnpm dev          # backend on :7682, Vite on :7683\npnpm test\npnpm lint\npnpm build        # TypeScript + Vite build\npnpm package      # assemble publishable dist/\n```\n\nRequires Node.js 22+ and pnpm. macOS and Linux are primary. WSL is expected to\nwork for foreground use, but service mode requires systemd-enabled WSL. Native\nWindows is not currently supported.\n\n## Status\n\nPre-1.0. Configuration shape and CLI surface may change before `1.0.0`.\n\n## License\n\nMIT - see [LICENSE](./LICENSE).\n\n## Acknowledgements\n\nBuilt with [Hono](https://hono.dev), [node-pty](https://github.com/microsoft/node-pty),\n[xterm.js](https://xtermjs.org), [React](https://react.dev),\n[Vite](https://vitejs.dev), [Tailwind CSS](https://tailwindcss.com), and\n[CodeMirror](https://codemirror.net).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartcodec-hq%2Fparasor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartcodec-hq%2Fparasor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartcodec-hq%2Fparasor/lists"}