Unofficial ChatGPT plugin: local coding tools over MCP. No local LLM. ChatGPT is the brain; this machine is the hands.
Not affiliated with OpenAI or xAI. Tool runtime is Grok Build (Apache-2.0).
ChatGPT Web → Secure MCP Tunnel → hands → your repo
Needs git, python3, rustup. macOS or Linux. First build compiles grok-build (several minutes).
git clone https://github.com/nghyane/hands.git
cd hands
./install.shAgents: see AGENTS.md. One-shot if keys are already in the environment:
export CONTROL_PLANE_API_KEY="sk-..."
export CONTROL_PLANE_TUNNEL_ID="tunnel_..."
./install.shbrew install openai/tools/tunnel-client # once
cd /path/to/your/repo
hands setup # TTY checklist, Keychain, no browserRuntime key goes in the macOS Keychain (file 0600 only for the daemon). Tunnel id is copied to the clipboard. Notification if the tunnel drops.
Config page (optional): hands config --open → http://127.0.0.1:8787/
Scripts: hands status --json.
- Runtime key (Restricted, Tunnels Read + Use):
https://platform.openai.com/settings/organization/api-keys - Tunnel id:
https://platform.openai.com/settings/organization/tunnels - chatgpt.com/plugins → Developer mode → Connection Tunnel → paste tunnel id → Scan tools.
Plugin name in ChatGPT: Hands.
ChatGPT, not Hands, shows Confirm. MCP cannot turn that off.
- Reads auto-run (
readOnlyHint). - File edits are routine (
destructiveHint: false) — auto under Important actions. - Shell / kill still confirm unless you opt in.
Unattended coding: first write prompt → Always allow, or Settings → Apps → Hands → Never ask. New chats keep that app setting. Developer Mode “remember for this conversation” dies on a new chat.
| Tool | Role |
|---|---|
workspace_info |
current pin + recent |
set_workspace |
pin another folder (works from ChatGPT, including away) |
read_file |
read |
grep |
search contents |
list_dir |
tree |
glob |
find files by name |
search_replace |
edit existing |
write |
create / overwrite |
apply_patch |
multi-hunk patch |
todo_write |
task list |
run_terminal_cmd |
tests / git / shell; long FG auto-backgrounds |
get_task_output |
poll background job |
kill_task |
stop background job |
Debug: hands list, hands call read_file '{"target_file":"README.md"}'.
On AC the Mac stays awake for the long-poll; on battery, closing the lid may sleep.
Apache-2.0. See NOTICE.