tentacle is an AI coding agent for your terminal. Run it inside a Kubernetes pod or on a remote host, while the model, your API keys and every approval stay on your laptop.Any LLM, local or cloud.
Public repository and binaries are coming soon.
$ tentacle run --image registry.example.com/myapp:dev api-dev › the store tests fail on CI, find out why ⏺ Bash go test ./internal/store/... 2.1s ⎿ exit=1 --- FAIL: TestMigrate (0.42s) migrate_test.go:31: pq: relation "users" already exists ⏺ Edit db/migrations/001_users.sql 0.0s ⎿ +1 -1 ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ - CREATE TABLE users ( 1 + CREATE TABLE IF NOT EXISTS users ( 2 id bigserial PRIMARY KEY, 3 email text NOT NULL UNIQUE, ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ⏺ Bash go test ./... 8.4s ⎿ exit=0 ok example.com/api/internal/http 1.02s ok example.com/api/internal/store 0.84s ⏺ The migration was not idempotent: CI reuses the database between jobs. Fixed and verified in the pod. ›
Attach to a pod that is already running and the agent sees what your service sees: in-cluster DNS, the real config, the services next door. There is nothing to reproduce locally.
Close the TUI and you detach. The pod keeps running.
$ tentacle attach checkout-7d9f -n staging › checkout returns 502 in staging, why? ⏺ Bash curl -sS http://payments:8000/health 0.1s ⎿ exit=7 curl: (7) Failed to connect to payments port 8000 ⏺ Bash curl -sS http://payments:8080/health 0.1s ⎿ exit=0 {"status":"ok"} ⏺ Bash printenv PAYMENTS_URL 0.0s ⎿ exit=0 http://payments:8000 ⏺ payments listens on 8080, but checkout calls it on 8000: PAYMENTS_URL in the staging overlay still has the old port. ›
Start tentacle as a daemon on a build server or a GPU machine, then connect your TUI to it over WebSocket. Shell commands, builds and tests run on that machine.
$ tentacle serve --host 203.0.113.10 \
--tls-cert cert.pem --tls-key key.pem \
--token-command "cat ~/.config/tentacle/token"
$ tentacle connect wss://203.0.113.10:4000 \ --token-command "cat ~/.config/tentacle/token" › build the release and run the full test suite ⏺ Bash nproc 0.0s ⎿ exit=0 64 ⏺ Bash make -j64 release 192.4s ⎿ exit=0 built dist/server (412 MB) ⏺ Bash make -j64 test 108.0s ⎿ exit=2 1838 passed, 2 failed (pkg/cache) ⏺ Built and tested on the 64-core box in five minutes. Two failures, both in pkg/cache. Want me to look into them? ›
The same agent loop and the same TUI, whether the code is on your machine, in a cluster, or on a box across the world.
Point it at any OpenAI-compatible endpoint, like a local llama.cpp or vLLM server or a hosted API, or use the native Anthropic Messages API. One line in config.jsonc.
On your laptop, in a fresh Kubernetes pod, inside a pod that already exists, or as a daemon you connect to remotely. Every mode drives the same TUI.
File writes stay inside the workspace, with symlink escapes refused. Shell commands go through a permission engine that never auto-approves command substitution.
Start the agent in a sandbox pod with run, or drop it into a pod you already have with attach. The pod does the work. Your laptop keeps everything that is yours.
--resume just workskubectl neededThe pod is not trusted. Anything it asks your laptop to do is checked on your laptop and approved by you. A pod can never turn its own request into a lasting approval. run deletes its pod when you exit, even on Ctrl+C. attach never creates or deletes anything.
Streaming output, full-width diffs with word-level highlights, mouse scroll and selection, multi-line input, a slash-command palette.
The agent loop and tools run in a separate worker, so typing and scrolling stay smooth while the model works.
Long builds and servers run in the background. When a job exits, the agent picks up the result on its own.
Hand focused work to isolated child agents, built in or defined by you in Markdown.
Connect Model Context Protocol servers. Their tools sit next to the built-in ones, also over RPC and in pods.
Run /compact to summarise a long conversation and keep going without losing the thread.
Every session is saved. tentacle --resume picks up the latest one, locally or in a pod.
Loads your project's AGENTS.md into the prompt automatically.
Compiles to a single self-contained executable, the same one that tentacle injects into pods.
~/.local/bin.
$ curl -fsSL tentacle.so/install | sh
~/.config/tentacle/ with a config.jsonc that documents itself.tentacle for the TUI, or tentacle "<task>" for a one-shot run.{
"model": {
"baseURL": "http://localhost:8080/v1",
"model": "my-model",
"apiKey": "your-api-key"
}
}