Guide
1. Install the agent on a Mac
Requires macOS 13 or later. In Terminal:
curl -fsSL https://remote.tashev.ru/install.sh | bash
The installer downloads the agent from https://remote.tashev.ru and the Node.js runtime from nodejs.org, verifies checksums, installs into ~/.local/share/tashev-remote and enables start at login. No administrator rights needed. Your browser then opens — approve the computer in your account.
2. Permissions — set on the computer only
tashev-remote allow ~/Projects/my-app # allow a folder tashev-remote disallow ~/Projects/my-app # remove a folder tashev-remote enable write # write and edit files tashev-remote enable shell # allowlisted commands and Git tashev-remote enable ssh # SSH tashev-remote ssh-host add my-server # alias from ~/.ssh/config tashev-remote task add deploy ~/Projects/my-app -- npm run deploy tashev-remote policy # show current permissions
Defaults: no allowed folders, read-only, terminal and SSH off, sudo forbidden. Command allowlist: pwd, ls, cat, head, tail, wc, grep, rg, find, git, node, npm, npx, pnpm, yarn, python3, make. Command substitution, redirection and background jobs are rejected in allowlist mode.
Important: an enabled terminal runs with your macOS user permissions; it is not a sandbox. Allowlisted programs (for example node, npm, python3, cat) can read any file your user can, including files blocked for read_file. Commands on allowed SSH hosts are checked only against a denylist of dangerous patterns. Enable the terminal and SSH only for projects and servers you trust, and do not ask the AI to follow instructions from untrusted files.
3. Connect in ChatGPT
Open ChatGPT → Settings → Plugins, find Tashev Remote, click Connect and sign in with the same account. Ask: “Show my computers”.
4. Troubleshooting
tashev-remote status # state, last contact, errors tashev-remote logs # agent log tashev-remote restart # restart tashev-remote pair # connect again tashev-remote uninstall # remove the agent
The agent reconnects automatically after network loss or sleep. A lost response is never retried, so a deployment is not run twice.