by migasrias2
Run Claude Code, Codex or any coding agent on any of your computers, and jobs across all of them at once. Free, MIT, no relay, no limits.
# Add to your Claude Code skills
git clone https://github.com/migasrias2/geckoboxSee how geckobox compares with popular alternatives.
geckobox is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by migasrias2. Run Claude Code, Codex or any coding agent on any of your computers, and jobs across all of them at once. Free, MIT, no relay, no limits. It has 50 GitHub stars.
geckobox's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/migasrias2/geckobox" and add it to your Claude Code skills directory (see the Installation section above).
geckobox is primarily written in TypeScript. It is open-source under migasrias2 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh geckobox against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
The command-line tool and SDK are called openspaces.
Put Claude Code, Codex or any coding agent on a computer you choose, and run jobs across all your computers at once. Free, with no limits.
The "bring your own computer" idea from Cua Spaces, without the meter:
Cua meters its relay. openspaces has no relay: it reaches your computers directly. They can be sandboxes it creates on your own machine, any box over SSH (Tailscale handles NAT), Docker, or a Cua sandbox. With no middleman there is nothing to meter. It is an independent clean-room implementation, not affiliated with Cua; none of its code comes from Cua.

1. Say what to do, pick the computer, agent and model.

2. Add computers: sandboxes on your Mac in ~20 s, or any machine over SSH, Docker or Cua.

3. Watch the agent work live, next to the chat.

4. Take over anytime: click, scroll and type into its computer, or record it.

5. Run one job on every computer at once.

➜ Full step-by-step guide: docs/TUTORIAL.md
npm install -g github:migasrias2/geckobox
openspaces ui
A local dashboard opens in your browser: dark, green, rounded and calm, inspired by Grok Bot's layout (bots on the left, the conversation in the middle, the bot's computer live on the right).
--allowedTools mcp__cua), so an agent can drive a sandbox's browser without approving everything.It runs on 127.0.0.1 only, behind a random token in the link the command prints, and it rejects other hosts, so other websites can't drive it.

import { startThread } from "openspaces"
const bot = await startThread({
agent: "claude-code",
prompt: "Open the repo and run the tests",
on: "local", // or "mac-mini", "ssh:me@box", "docker:dev", "cua:desk"
})
console.log(await bot.wait())
console.log(await bot.send("Now fix the failing test")) // same agent session, it remembers
console.log(await bot.status())
await bot.close()
Change on: "local" to the name of another of your computers and the job runs there instead.
brew install container && container system start # macOS 26: Apple's open-source runtime (or use Docker/Podman)
openspaces sandbox create dev # ~20 s: an isolated Linux VM with Claude Code installed
openspaces start --on dev "clone my repo and fix the failing test"
Each sandbox is its own lightweight VM with Apple's container runtime, or a container with Docker or Podman. The agent runs inside as an unprivileged agent user with permission prompts skipped. It can do anything inside the box and nothing outside it. --agents claude-code,codex,gemini,opencode picks what gets installed, and --cpus / --memory size it. openspaces sandbox ls | stop | start | rm manages them. The app has a "Sandboxes on this Mac" panel that does the same.
Logging the agent in: a sandbox forwards the agent's login variable (CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY for Claude Code) from your shell, or from the macOS Keychain:
claude setup-token # prints a long-lived subscription token
openspaces secrets set CLAUDE_CODE_OAUTH_TOKEN # paste it; stored in the Keychain (account "openspaces")
Secrets reach the sandbox over stdin, never in argv, and are never written to openspaces' state or logs.
A computer is anything that can run a shell script:
local: this machinessh:user@host: any machine you can SSH into (Mac mini, VPS, your own AWS/GCP/Azure box)container:[user@]name, docker:…, podman:…: a running container (sandboxes register themselves this way)cua:sandbox: a Cua sandbox, through cua sandbox execA thread is one agent conversation on one computer. Each turn runs the agent headless in its own work dir on that computer (~/.openspaces/work/<thread>). The agent's session id is saved, so the next message resumes the same conversation. Thread state lives in ~/.openspaces/threads/ on the machine you drive it from. There is nothing to install on the target except the agent CLI itself. No daemon, no account, no relay.
claude-code: claude -p --output-format stream-json, resumed with --resume. Tested live.shell: the prompt is a shell script; good for jobs and smoke tests. Tested live.codex: codex exec --json, resumed with codex exec resume. Written from the CLI docs, not yet live-tested.gemini: gemini -p --output-format stream-json, resumed with --resume. Not yet live-tested.opencode: opencode run --format json, resumed with --session. Not yet live-tested.Adding an agent is one small file: build its argv and map its output lines to events (src/agents/). PRs welcome, especially live-tested fixes for the three untested adapters.
openspaces computers add mini ssh:me@mac-mini.local
openspaces computers test mini # reachable? which agents are installed?
openspaces start --on mini "Upgrade the deps and run the tests" # prints a thread id, runs in the background
openspaces logs <id> -f # watch messages and tool calls
openspaces send <id> --wait "Now open a PR"
openspaces status # every thread, every computer
openspaces close <id> # stops it and deletes its work dir
# the same job on several computers at once
openspaces run --on local,mini,docker:ci "Run the test suite and summarise failures"
Options: --agent, --cwd /abs/path (work in an existing repo; never deleted), --keep, --model, --env NAME (forward a variable such as CLAUDE_CODE_OAUTH_TOKEN), --auto-approve / --no-auto-approve. See openspaces --help.
import { fanOut, openThread, startThread } from "openspaces"
// Same job everywhere, results side by side.
const results = await fanOut(["local", "mini", "cua:desk"], {
agent: "claude-code",
prompt: "What OS are you on and how much disk is free?",
})
// Stream what the agent does.
const bot = await startThread({ agent: "claude-code", prompt: "…", onEvent: (e) => console.log(e) })
// Pick up a thread started elsewhere (for example from the CLI).
await openThread("claudecode-94419f2a").send("Carry on")
openspaces view mini # SSH tunnel to the Mac's Screen Sharing (VNC :5900), opens it; Ctrl-C closes
openspaces view mini --port 5901
openspaces view cua:desk # Cua's own local viewer (loopback, no relay); the app streams it inline
On a Mac, turn on System Settings → General → Sharing → Screen Sharing. On Linux, run any VNC server bound to localhost. The tunnel goes over the same SSH you already use, so nothing new is exposed.
Thread methods: wait(), send(prompt), status(), interrupt() (stops the turn and every child process, keeps the thread), close().
docker: and cua:). On local and ssh: Claude Code gets --permission-mode acceptEdits: file edits are auto-approved, and other tools follow Claude Code's own permission rules (anything that would normally ask is denied). Pass --auto-approve when you trust the box.local, ssh and docker over stdin, never in argv, and are never written to thread state or logs. Cua's sandbox exec cannot take stdin, so there they pass as an argument on your own machine.close deletes only ~/.openspaces/work/<thread> on the target, never a --cwd you passed. A turn's pid file exists only while it runs, and close only kills a process it can confirm is that thread's worker.~/.openspaces/threads) holds prompts and agent output and is readable only by you (0700/0600).