Skip to content

About

Local-first control plane for Grok Build and Claude Code: host gateway + iOS, macOS, Electron and web clients

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

ClankerSpanker

CI License: MIT Node 22+ Platforms

Local-first control plane for Grok Build and Claude Code. Run one gateway next to your code, then drive your coding agents from your phone, laptop or browser: start tasks, approve edits and commands, and resume sessions, over loopback or your own Tailscale network. Nothing leaves your machines except what the agents themselves send to their providers.

Not affiliated. ClankerSpanker is an independent open-source project. It is not affiliated with, endorsed by, or sponsored by xAI, Anthropic, Google, Apple, or Tailscale. "Grok", "Claude" and other product names are trademarks of their respective owners and are used only to describe compatibility.

ClankerSpanker controlling an AI coding session from a desktop/mobile client

Mac native app  ──┐
Linux Electron  ──┼── REST + WebSocket ──►  Host gateway (:8787)
Browser /app/   ──┤                              ├── grok agent (ACP)
iOS (phone)     ──┘                              └── claude (+ approval hooks)

Quickstart

The primary website is https://clankerspanker.tech/. In Chrome, with the gateway already running on that computer, paste http://127.0.0.1:8787 and the token from the host machine's setup page. Firefox and Safari use the on-machine page instead: http://127.0.0.1:8787/app/. That address is one you open; the site does not redirect you there.

Requires Node 22+ and the agent CLI(s) you want to drive (grok, claude).

git clone https://github.com/nightmoose/ClankerSpanker.git
cd ClankerSpanker/host
npm install && npm run build && npm start
  1. Open http://localhost:8787/setup on the host machine to see the QR code and token.
  2. Open https://clankerspanker.tech/ in Chrome and sign in with the token, or open http://localhost:8787/app/ on the host machine, or pair the iOS / desktop client.
  3. Pick a project and send your first prompt.

Run it as a background service: ./scripts/install-service.sh (macOS launchd / Linux systemd --user).

Documentation

Start at the docs index: architecture, clients, standalone installs, MCP, APNs push, host README, design RFCs.

Repo layout

ClankerSpanker/
├── host/                       # Node gateway: the only agent runner
│   ├── src/
│   ├── web/                    # Browser UI at /app/
│   └── scripts/                # launchd + systemd install
├── desktop/                    # Electron: Linux laptop command center
├── ios/ClankerSpanker/         # SwiftUI: iOS + native macOS app
├── docs/
└── shared/                     # OpenAPI contract

Host details

Browser UI https://clankerspanker.tech/ in Chrome, or http://<host-ip>:8787/app/ on the gateway
Pair a phone http://localhost:8787/setup on the host (QR code; host-machine only)
Config ~/.grok-dispatch/config.json (legacy directory name from the project's earlier name; kept for compatibility)

Port 8787 is the default; change it with bindPort in the config. See host/README.md.

2. Laptop clients

macOS — native app (authoritative Mac UX)

cd ios/ClankerSpanker
./run-mac.sh
# or Xcode: scheme ClankerSpanker → destination My Mac (not Designed for iPad)

Sessions, host install/LaunchAgent, menu bar service, multi-folder projects.
Details: ios/ClankerSpanker/RUN-MAC.md.

Linux — Electron (desktop/)

cd host && npm run build          # once
cd ../desktop && npm install && npm start

Host → Install / update host copies the gateway to ~/.local/share/clankerspanker/host and enables a systemd user service (parity with Mac).
Config remains ~/.grok-dispatch.
AppImage / deb: run npm run dist:linux on Linux (or Linux CI). See desktop/README.md.
Standalone host + agent CLIs: docs/STANDALONE-INSTALLS.md.

Browser (any OS)

Chrome on the same computer as the gateway: https://clankerspanker.tech/. Any browser on the host machine: http://127.0.0.1:8787/app/ with the host token. No local process management.

iPhone

open ios/ClankerSpanker/ClankerSpanker.xcodeproj
# Scheme: ClankerSpankerPhone → your iPhone (unlocked + trusted) → Run

Do not use “My Mac (Designed for iPad)” for the phone scheme.

Signing the iOS / Mac apps

The Apple team ID is not committed. Before building in Xcode:

cp ios/ClankerSpanker/Config/Local.xcconfig.sample ios/ClankerSpanker/Config/Local.xcconfig
# then set DEVELOPMENT_TEAM to your own team ID

Local.xcconfig is git-ignored and is pulled in by Config/Signing.xcconfig.

Features

  • Dispatch multi-turn tasks to Grok Build (ACP, plan mode, client approvals)
  • Browse + resume Grok / Claude Code sessions from disk
  • Soft-archive Active chats
  • Optional desktop/OS notifications (host + laptop shells)
  • Cross-platform host PATH / binary discovery (no hardcoded machine IPs)

Security

  • Listens on loopback + Tailscale by default (bindHost: "auto"); bearer host token
  • The token is only shown on the host machine (/setup) and never goes in WebSocket URLs
  • Grok: never yolo — file edits / dangerous tools wait for the client
  • Claude: PreToolUse hook parks Edit/Bash until approved
  • Gemini / Antigravity: not approval-gated. Headless agy can't ask, so it runs with --dangerously-skip-permissions. The composer shows a warning on these profiles. Set ANTIGRAVITY_REQUIRE_PERMISSIONS=1 in the profile's env to require permissions (shell tools are then refused).
  • host/src/auth.ts is the security boundary (constant-time compare; empty token authorizes nobody)

Contributing

See CONTRIBUTING.md and the Code of Conduct. Run make check before opening a PR. Report security issues privately: SECURITY.md.

License

MIT © 2026 NightMoose, Inc. Tokens and session JSON live under ~/.grok-dispatch/ (not in git).

About

Local-first control plane for Grok Build and Claude Code: host gateway + iOS, macOS, Electron and web clients

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages