by tunr-dev
Connect AI agents to your customers' on-prem data — read-only, time-boxed, customer-approved, audited. Plus tunnels and deploys.
# Add to your Claude Code skills
git clone https://github.com/tunr-dev/tunrSee how tunr compares with popular alternatives.
tunr is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by tunr-dev. Connect AI agents to your customers' on-prem data — read-only, time-boxed, customer-approved, audited. Plus tunnels and deploys. It has 101 GitHub stars.
tunr'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/tunr-dev/tunr" and add it to your Claude Code skills directory (see the Installation section above).
tunr is primarily written in Go. It is open-source under tunr-dev 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 tunr 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.
Connect AI agents to your customers' on-prem data. Read-only, time-boxed, approved by the customer, and on the record — through one outbound-only connector.
tunr.sh · Live demo · Docs · Dashboard · Discussions · Contributing
# Customer IT, once — inside their network, outbound HTTPS only:
$ tunr connect --relay https://bridge.tunr.sh --site istanbul-office --relay-key ed25519:… --token-stdin --setup-only # paste the site token
$ tunr connect resource add erp-db --kind postgres --target 10.0.0.5:5432 --database logo
$ tunr connect pg-role --database logo --tables invoices,stock --resource erp-db > pg-role.sql # for the DBA
# The vendor's agent — anywhere:
$ tunr access request acme/erp-db --ttl 2h --reason "Reconcile October invoices"
pending grt_… acme/erp-db (ro, 2h0m0s) # the customer approves in the portal
$ tunr access acme/erp-db --port 15432
postgresql://agent:…@127.0.0.1:15432/db?sslmode=disable
$ psql "$DSN" -c "update invoices set amount = 0"
ERROR: tunr bridge: UPDATE is not allowed on a read-only bridge
Or let the agent do it: tunr_list_resources, tunr_request_access,
tunr_open_access are MCP tools.
AI vendors increasingly sell agents that need data living inside their customers' networks — on-prem ERPs, ledgers, file servers. Today each vendor writes its own on-prem agent or asks for a VPN, and every deal waits weeks in a security review, because the customer can't see or limit what the agent touches.
tunr Bridge is the standard way across. The customer installs one connector that only connects out, exposes named resources, and approves each agent, resource and time window — with a reason they can read. The agent never sees a database password; databases are read-only in three layers; the stream is end-to-end encrypted to the customer's connector; every query lands in the customer's audit log; one click cuts everything. Once a customer has the connector for one vendor, the next vendor is a link and an approval away.
tunr also hosts the agents themselves (private, woken by cron or signed webhooks, with their identity issued automatically), still deploys the small apps agents build, and still has the free 3-second tunnel it started as.
# macOS / Linux — Homebrew
brew install tunr-dev/tap/tunr
# macOS / Linux — install script
curl -fsSL https://raw.githubusercontent.com/tunr-dev/tunr/main/install.sh | sh
# Go
go install github.com/tunr-dev/tunr/cmd/tunr@latest
# From source
git clone https://github.com/tunr-dev/tunr.git && cd tunr && make build
A single static binary. macOS, Linux and Windows, amd64 and arm64, no runtime
dependencies. Verify it with tunr doctor.
SDKs — for driving tunnels from code rather than the shell:
pip install tunr # Python
npm install @tunr/cli # Node.js
vendor's agent ──► tunr access ──(TLS 1.3, pinned)──────────────► connector ──► customer's database
(anywhere) 127.0.0.1:port ▲ relay sees ciphertext ▲ (outbound only) (read-only role)
| Connector | tunr connect runs inside the customer's network as a service, dials out only, and serves named resources. Their addresses never leave the machine. |
| Grants | Agent × resource × mode × duration, requested with a reason, approved by the customer (read-write needs two different approvers). They expire on their own. |
| Read-only databases | A SELECT-only role, read-only sessions and a statement classifier; writes fail with SQLSTATE 42501. Row, byte and rate limits per grant. |
| No credentials for agents | The connector logs in itself; the agent's DSN only unlocks its own local port. |
| End-to-end TLS | Between tunr access and the connector, pinned to the connector's certificate. |
| Audit | Every grant decision, session and query summary, exportable as CSV. |
| Cut access | Revoke closes live connections in milliseconds; the site kill switch revokes everything. |
| Hosted agents (early access) | tunr agent deploy runs an agent on tunr, private, woken by cron or signed webhooks, with its identity issued automatically and a /data volume. Off on tunr.sh until egress and CPU quotas land; self-hosters enable it with TUNR_BRIDGE_HOSTED_AGENTS=1. |
| Dashboard | app.tunr.sh: approvals inbox, sites, resources, grants and their queries, audit + CSV export, agents and tokens, webhooks, org settings. Self-hosted relays ship the same flows as a built-in portal at /portal/. |
What it guarantees, how, and what it doesn't: docs/bridge/security.md. Getting started: customer · vendor · protocol: docs/protocol/bridge.md.
Status: preview. Live on tunr.sh and end-to-end tested (two docker suites in CI); expect sharp edges. Postgres and raw TCP resources today; MySQL/MSSQL later.
tunr login # magic-link, token goes to your OS keychain
tunr deploy --name my-app # build + run; prints the live URL
tunr apps # list your apps
tunr apps logs my-app --follow # stream build + runtime logs
tunr apps delete my-app # remove it, free the subdomain
| Build | Nixpacks auto-detect — Node, Python, Go, Ruby, Rust, PHP, Java. A Dockerfile is used if present. |
| Isolation | Every app runs in its own gVisor sandbox with CPU, memory and disk quotas. |
| Scale to zero | Idle → paused with its memory reclaimed (~20 MB resident), then stopped. Wake p50 is ~150 ms. |
| Secrets | .env files are never uploaded. Pass them with --env KEY=VALUE. |
| Stays up | Close your laptop. The app keeps serving. |
tunr deploy --name sprint --port 3000 --env DATABASE_URL=postgres://…
Status: preview. Deploy works end to end and is what the MCP tools drive. Role-based sharing, per-app SQLite and
tunr rollbackare not built yet — see Roadmap for what's real and what isn't.
The CLI and the MCP server are two faces of the same control plane. Anything you can do in a terminal, your agent can do in a tool call.
Claude Code:
claude mcp add tunr -- tunr mcp
Claude Desktop (~/.claude/claude_desktop_config.json) / Cursor (.cursor/mcp.json):
{
"mcpServers": {
"tunr": { "command": "tunr", "args": ["mcp"] }
}
}
| Tool | What it does |
|---|---|
tunr_deploy |
Build & host a directory on the tunr cloud, return the live URL |
tunr_list_apps |
List deployed apps with URL and status |
tunr_app_logs |
Read an app's build + runtime logs (for debugging a bad deploy) |
tunr_delete_app |
Delete an app and free its subdomain |
tunr_share |
Open a temporary public tunnel to a running local port |
tunr_status |
List active tunnels |
tunr_inspect |
List HTTP requests captured by a tunnel |
tunr_replay |
Replay a captured request against your local server |
tunr_stop |
Close a tunnel |
tunr_deploy and tunr_share are deliberately distinct, and the tool
descriptions say so: deploy means "host this, it should outlive my laptop",
share means "expose what's running on :3000 right now". Cloud tools need
tunr login first.
Showing a client something that still runs on your laptop? Three flags make the free tunnel safe to hand to someone who isn't a developer.
tunr share -p 3000 --demo --freeze --inject-widget --qr
| Flag | What the client sees | What actually happens |
|---|---|---|
--demo |
Buttons work — "Order deleted ✓" | POST/PUT/PATCH/DELETE are answered by tunr with a fake success (JSON bodies are echoed back) and never reach your app. GraphQL queries still go through. Messages the visitor sends over WebSockets are dropped. Tune it with --demo-allow / --demo-block (details). |
--freeze |
The page, as it was a second ago | Your dev server crashed or returned a 5xx; tunr serves the last good response (X-Tunr-Freeze-Cache: HIT) while you fix it. |
--inject-widget |
A 💬 Feedback button on every page | Their message, page U |