{"id":49852307,"url":"https://github.com/pyrycode/pyrycode","last_synced_at":"2026-05-14T17:02:03.362Z","repository":{"id":354986017,"uuid":"1207984510","full_name":"pyrycode/pyrycode","owner":"pyrycode","description":"Process supervisor for Claude Code. Run `pyry` instead of `claude` for crash recovery, session resume, attach/detach, and a Unix-socket control plane.","archived":false,"fork":false,"pushed_at":"2026-05-08T15:29:52.000Z","size":2228,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-08T15:36:41.913Z","etag":null,"topics":["claude","claude-code","cli","daemon","go","process-supervisor"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/pyrycode.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":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-11T17:00:56.000Z","updated_at":"2026-05-08T15:29:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pyrycode/pyrycode","commit_stats":null,"previous_names":["pyrycode/pyrycode"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/pyrycode/pyrycode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyrycode%2Fpyrycode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyrycode%2Fpyrycode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyrycode%2Fpyrycode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyrycode%2Fpyrycode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyrycode","download_url":"https://codeload.github.com/pyrycode/pyrycode/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyrycode%2Fpyrycode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33034788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"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":["claude","claude-code","cli","daemon","go","process-supervisor"],"created_at":"2026-05-14T17:01:30.140Z","updated_at":"2026-05-14T17:02:03.353Z","avatar_url":"https://github.com/pyrycode.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pyrycode\n\nA process supervisor and runtime for [Claude Code](https://claude.com/claude-code). Run `pyry` instead of `claude` to get a long-lived, self-healing host for your AI assistant — with a control socket for status, logs, graceful shutdown, and detach/reattach from any shell.\n\n## Status\n\n**Phase 0 complete and dogfooded.** Foreground mode is a drop-in `claude` wrapper with auto-restart. Service mode runs `pyry` under launchd or systemd and exposes a Unix-socket control plane. As of `v0.5.2` pyry is daily-driver-grade on Linux: pyrybox now runs claude under systemd via the public install path described below, replacing the prior `tmux` + bash restart-loop setup.\n\nProduction hardening — multi-session routing, Channels integration, in-process knowledge capture, remote access, voice — is on the roadmap (see [`docs/plan.md`](docs/plan.md)).\n\n## What it does\n\n- **Supervises `claude`** in a pseudo-terminal with crash recovery and exponential backoff.\n- **Resumes the previous session** on every restart so conversation history survives crashes.\n- **Two modes from one binary.** Run from a TTY for interactive development; run under a service manager (no TTY) for production. The same binary auto-detects and adapts.\n- **Control plane on a Unix socket.** Query state, stream logs, request shutdown, attach a terminal — all from any shell, with single-user filesystem permissions as the security boundary.\n- **CLI transparency.** Anything pyry doesn't recognise is forwarded to `claude` verbatim. Pyry's own flags use a `-pyry-*` prefix so they never collide.\n\n## Platforms\n\nLinux and macOS, including Apple Silicon (arm64) — prebuilt `darwin_arm64` binaries ship with every release. Windows is out of scope (different PTY backend, different signal model).\n\n## Install\n\n**Universal one-liner** (Linux / macOS, amd64 / arm64):\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/pyrycode/pyrycode/main/install.sh | bash\n```\n\nDrops `pyry` in `~/.local/bin/`. Set `PYRY_VERSION=v0.5.2` to pin a release; set `PYRY_INSTALL_DIR=/usr/local/bin` (run with `sudo bash`) for a system-wide install.\n\n**Homebrew** (macOS, Linuxbrew):\n\n```bash\nbrew install pyrycode/tap/pyry\n```\n\n**Go-native** (any platform Go supports):\n\n```bash\ngo install github.com/pyrycode/pyrycode/cmd/pyry@latest\n```\n\n**From source:**\n\n```bash\ngit clone https://github.com/pyrycode/pyrycode\ncd pyrycode\nmake build           # ./pyry — current platform\nmake linux           # cross-compile dist/pyry-linux-amd64\nmake dist            # adds darwin × {amd64, arm64}\n```\n\nRequires a working `claude` binary on `PATH` to actually do anything useful. Building from source needs Go 1.26 or later.\n\n## Quickstart\n\n**Foreground (development).** Run `pyry` instead of `claude`:\n\n```bash\npyry \"summarize foo.md\"           # forwarded as claude's initial prompt\npyry --model sonnet -p \"...\"      # any claude flag passes through\n```\n\nIf `claude` exits, pyry restarts it with `--continue` so you keep your session.\n\n**Service mode (production).** Two commands. `pyry install-service` writes a systemd unit (Linux) or launchd plist (macOS), inheriting your shell's `$PATH` so nvm / pyenv / brew tools come along automatically:\n\n```bash\npyry install-service -- \\\n  --dangerously-skip-permissions \\\n  --channels plugin:discord@claude-plugins-official\n\nsystemctl --user daemon-reload\nsystemctl --user enable --now pyry\n```\n\n(macOS: `launchctl load ~/Library/LaunchAgents/dev.pyrycode.pyry.plist` in place of the systemctl lines.)\n\nThe supervised `claude` has no terminal of its own; connect to it on demand:\n\n```bash\npyry attach    # your terminal becomes claude's terminal\n               # press Ctrl-B d to detach — pyry stays running\n```\n\n`pyry status`, `pyry logs`, and `pyry stop` work from any shell, talking to the daemon over its Unix socket at `~/.pyry/pyry.sock`.\n\nFor the full walkthrough — multi-instance, troubleshooting, hooks under service-mode `PATH`, boot persistence — see [**`docs/guide.md`**](docs/guide.md) and [**`docs/deployment.md`**](docs/deployment.md).\n\n## Documentation\n\n- [**`docs/guide.md`**](docs/guide.md) — user guide and walkthrough (start here)\n- [`docs/architecture.md`](docs/architecture.md) — design overview (PTY bridging, control plane, lifecycle)\n- [`docs/deployment.md`](docs/deployment.md) — service-mode setup under systemd and launchd\n- [`docs/protocol.md`](docs/protocol.md) — control-socket wire format reference\n- [`docs/plan.md`](docs/plan.md) — phase roadmap\n\n## Development\n\n```bash\nmake check           # vet + race-enabled tests + staticcheck\nmake build           # ./pyry\nmake linux           # cross-compile for Linux\n```\n\n[`CODING-STYLE.md`](CODING-STYLE.md) covers Go conventions used in the repo.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyrycode%2Fpyrycode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyrycode%2Fpyrycode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyrycode%2Fpyrycode/lists"}