Token导航 LogoToken导航TokenDH.com
研究检索敏感数据clawhub未标认证来源可访问clear审计提醒

cftunnelcftunnel 命令行

Agent Skill

cftunnel 用于查找、检索和筛选相关信息,适合在 OpenClaw 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

3,139

周安装

127

GitHub Stars

公开资料未说明

下载量

986
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:cftunnel(cftunnel 命令行)
来源仓库:https://github.com/pirumpi/cftunnel
安装命令:
openclaw skills install cftunnel
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install cftunnel

简介

通过 Cloudflare Tunnels 将本地服务安全发布到公网。

  • 支持入口路由配置与多服务统一管理,适合开发与测试场景。
  • 通过 clawhub 安装并使用 openclaw skills install cftunnel 命令集成。
  • 需确认目标服务端口与防火墙规则,确保连接稳定性。
  • 建议结合来源仓库和 README 核验身份验证与流量加密机制。

SKILL.md

name
cftunnel
description
Expose local services to the internet via Cloudflare Tunnels. CLI (npx cftunnel) and Node.js library for creating tunnels, configuring ingress routes, managing DNS records, and running cloudflared.
version
1.0.0
metadata
openclaw
requires
env
bins
primaryEnv
CLOUDFLARE_API_KEY
install
package
cftunnel -g
bins
[cftunnel]
emoji
🚇
homepage
https://github.com/kyndlo/cftunnel

cftunnel — Cloudflare Tunnel Manager for AI Agents

Expose local services to the internet via Cloudflare Tunnels. Use this skill when you need to make a locally running application accessible at a public HTTPS URL.

Flow: Start a local service (e.g. on port 3000) → cftunnel creates a tunnel + DNS route → the service is live at https://hostname.domain.com.

Authentication

Set these environment variables before running any command:

# Option A: API Key + Email (most common)
export CLOUDFLARE_API_KEY=<api-key>
export CLOUDFLARE_EMAIL=<account-email>

# Option B: API Token (scoped, if available)
export CLOUDFLARE_API_TOKEN=<api-token>

# Always required:
export CLOUDFLARE_ACCOUNT_ID=<account-id>

Quick Reference

Expose a local service (fastest path)

If a tunnel and cloudflared are already running (check with tunnel list), just add a route and DNS:

# 1. Add ingress route to existing tunnel
npx cftunnel route add <tunnel-id> --hostname <hostname> --service http://localhost:<port>

# 2. Create DNS CNAME
npx cftunnel dns create --zone-id <zone-id> --hostname <hostname> --tunnel-id <tunnel-id>

Create everything from scratch (one command)

npx cftunnel quickstart \
  --name <tunnel-name> \
  --hostname <hostname> \
  --service http://localhost:<port> \
  --zone-id <zone-id>

Then run the connector: npx cftunnel run <tunnel-id>

Programmatic usage (Node.js library)

import { createClient, quickstart } from 'cftunnel';

const client = createClient({ apiKey: '...', apiEmail: '...' });
const result = await quickstart(client, {
  accountId: '...',
  name: 'my-app',
  hostname: 'app.example.com',
  service: 'http://localhost:3000',
  zoneId: '...',
});
console.log(result.run_cmd);

All Commands

Tunnel lifecycle

CommandPurpose
npx cftunnel tunnel listList all tunnels. Find existing tunnel IDs and check status (healthy/down/inactive).
npx cftunnel tunnel create <name>Create a new tunnel. Returns tunnel ID and secret. Add --config-src local for YAML-managed config.
npx cftunnel tunnel get <tunnel-id>Get tunnel details including connection status.
npx cftunnel tunnel delete <tunnel-id>Delete a tunnel. Must have no active connections.
npx cftunnel tunnel token <tunnel-id>Get the token needed to run cloudflared. Returns run_cmd and install_cmd.

Ingress routes (hostname → local service mapping)

CommandPurpose
npx cftunnel route list <tunnel-id>Show current ingress rules. Always has a catch-all 404 as last rule.
npx cftunnel route add <tunnel-id> --hostname <host> --service <url>Add a route. Preserves existing routes, appends before catch-all. Optional --path for path filtering.
npx cftunnel route remove <tunnel-id> --hostname <host>Remove a route by hostname.
npx cftunnel route set <tunnel-id> --route host1=svc1 --route host2=svc2Replace ALL routes. Use for bulk configuration.

DNS records

CommandPurpose
npx cftunnel dns create --zone-id <zid> --hostname <host> --tunnel-id <tid>Create proxied CNAME pointing hostname to tunnel. Required for the hostname to resolve.
npx cftunnel dns list --zone-id <zid>List all DNS records in the zone.
npx cftunnel dns delete <record-id> --zone-id <zid>Delete a DNS record.

Running the connector

CommandPurpose
npx cftunnel run <tunnel-id>Run cloudflared in foreground. Auto-detects cloudflared from PATH or npm package.
npx cftunnel run <tunnel-id> --install-serviceInstall cloudflared as a persistent system service (survives reboots).

Decision Guide

"I need to expose port N on a domain" → Check tunnel list for a healthy tunnel. If one exists, use route add + dns create. If not, use quickstart.

"I need to add another service to an existing tunnel"route add + dns create. One tunnel can serve many hostnames.

"I need to change where a hostname points"route remove --hostname X then route add --hostname X --service <new-url>. DNS stays the same.

"I need to take a service offline"route remove --hostname X and optionally dns delete <record-id>.

"The tunnel exists but cloudflared isn't running"npx cftunnel run <tunnel-id> or use tunnel token to get the token for manual cloudflared invocation.

Service URL Formats

The --service flag accepts these protocols:

FormatExampleUse case
http://host:porthttp://localhost:3000HTTP web apps, APIs
https://host:porthttps://localhost:8443HTTPS backends
tcp://host:porttcp://localhost:5432Databases, raw TCP
ssh://host:portssh://localhost:22SSH access
unix:///pathunix:///tmp/app.sockUnix socket apps
http_status:CODEhttp_status:404Static status response (catch-all)

Output Format

All commands output JSON to stdout. Progress/errors go to stderr.

Parse with jq:

TUNNEL_ID=$(npx cftunnel tunnel create my-app | jq -r '.id')
TOKEN=$(npx cftunnel tunnel token $TUNNEL_ID | jq -r '.token')

Common Patterns

Pattern 1: Deploy a new web app

cd /path/to/app && npm start &

npx cftunnel quickstart \
  --name my-web-app \
  --hostname app.example.com \
  --service http://localhost:8080 \
  --zone-id <zone-id>

npx cftunnel run <tunnel-id-from-output>

Pattern 2: Add subdomain to existing tunnel

npx cftunnel tunnel list | jq '.[] | select(.status == "healthy")'

npx cftunnel route add <tunnel-id> --hostname api.example.com --service http://localhost:4000
npx cftunnel dns create --zone-id <zone-id> --hostname api.example.com --tunnel-id <tunnel-id>

Pattern 3: Swap service behind a hostname

npx cftunnel route remove <tunnel-id> --hostname app.example.com
npx cftunnel route add <tunnel-id> --hostname app.example.com --service http://localhost:9000

Pattern 4: Clean teardown

npx cftunnel route remove <tunnel-id> --hostname app.example.com
npx cftunnel dns list --zone-id <zone-id>
npx cftunnel dns delete <record-id> --zone-id <zone-id>
npx cftunnel tunnel delete <tunnel-id>

Pattern 5: Programmatic usage in agent code

import { createClient, createTunnel, addRoute, createDNS } from 'cftunnel';

const client = createClient(); // reads from env vars
const tunnel = await createTunnel(client, { accountId: '...', name: 'my-app' });
await addRoute(client, {
  accountId: '...',
  tunnelId: tunnel.id,
  hostname: 'app.example.com',
  service: 'http://localhost:3000',
});
await createDNS(client, {
  zoneId: '...',
  hostname: 'app.example.com',
  tunnelId: tunnel.id,
});

Important Notes

  • A tunnel must have cloudflared running to serve traffic. Creating a tunnel and routes alone is not enough.
  • The catch-all http_status:404 rule is always appended automatically. Do not add it manually.
  • DNS CNAME records must be proxied through Cloudflare (orange cloud). This is set automatically.
  • One tunnel can serve multiple hostnames. Prefer reusing existing healthy tunnels over creating new ones.
  • route set replaces ALL routes. Use route add/route remove for incremental changes.
  • If cloudflared is already running as a service, route changes take effect immediately (no restart needed).

Global Flags

FlagEnv VarDescription
--api-tokenCLOUDFLARE_API_TOKENCloudflare API token (bearer auth)
--api-keyCLOUDFLARE_API_KEYCloudflare API key (requires --api-email)
--api-emailCLOUDFLARE_EMAILCloudflare account email
--account-idCLOUDFLARE_ACCOUNT_IDCloudflare account ID

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

83.64%
按下载量换算825

安全审计

VirusTotal

可疑

ClawScan

通过

Static analysis

通过

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills