Install
openclaw skills install cfshareUse the cfshare CLI to expose local ports/files as temporary Cloudflare Quick Tunnel URLs. Trigger when a user needs a temporary public URL for a local service, needs to share files/directories from terminal, or needs to inspect/export cfshare audit and policy state.
openclaw skills install cfsharecfshare wraps Cloudflare Quick Tunnel and outputs structured JSON.
If either command fails, install missing binaries before running any cfshare tool.
cfshare --version
cloudflared --version
cfshare --version fails, install cfshare (requires Node.js and npm):npm install -g @ystemsrx/cfshare
cloudflared --version fails, install cloudflared by platform:macOS:
brew install cloudflare/cloudflare/cloudflared
Debian/Ubuntu:
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt-get update && sudo apt-get install -y cloudflared
Windows (PowerShell):
winget install --id Cloudflare.cloudflared
WSL/Linux generic binary install:
curl -fsSL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
sudo chmod +x /usr/local/bin/cloudflared
cfshare <tool> [params-json] [options]
Supported tools:
env_checkexpose_portexpose_filesexposure_listexposure_getexposure_stopexposure_logsmaintenanceaudit_queryaudit_exportGlobal options:
--params '<json>' or --params-file <path>--config '<json>' or --config-file <path>--workspace-dir <dir> (only used by expose_files)--keep-alive (for expose_*, keep foreground process alive)--no-keep-alive (default for expose_*, print result then exit)--compactCommand names accept _ and - (for example expose-port == expose_port).
env_check first.expose_port or expose_files.public_url and expires_at to user immediately.expose_* prints result and exits.--keep-alive only when foreground lifecycle control is needed; stop with Ctrl+C when done.Recommended for stable automation:
--params/--params-file over positional raw JSON to reduce quoting errors.access: "token" for sensitive content.access: "none" as publicly readable by anyone with link.cfshare env_check
Returns:
cloudflared.ok/path/versiondefaults (effective policy + runtime paths)warningscfshare expose_port --params '{"port":3000,"opts":{"access":"token","ttl_seconds":3600}}'
Params:
port: 1..65535opts.ttl_secondsopts.access: token | basic | noneopts.protect_origin: default access != "none"opts.allowlist_paths: path prefix allowlist for reverse proxyReturns:
idpublic_url (token mode auto-appends ?token=...)local_urlexpires_ataccess_info (secrets are masked)cfshare expose_files --params '{"paths":["./dist"],"opts":{"mode":"normal","presentation":"preview","access":"none"}}'
Params:
paths: files/directories to copy into temp workspaceopts.mode: normal | zip (default normal)opts.presentation: download | preview | raw (default download)opts.ttl_secondsopts.access: token | basic | noneopts.max_downloads: auto-stop after thresholdFile Serving Behavior:
Mode: normal
Mode: zip
Presentation:
Returns:
id, public_url, expires_at, mode, presentationmanifest, manifest_mode, manifest_metacfshare exposure_list
Lists tracked sessions with id/type/status/public_url/local_url/expires_at.
cfshare exposure_get --params '{"id":"port_xxx","opts":{"probe_public":true}}'
cfshare exposure_get --params '{"filter":{"status":"running"},"fields":["id","status","public_url"]}'
Supports selector by id, ids, or filter.
Can probe public reachability via opts.probe_public.
cfshare exposure_stop --params '{"id":"all"}'
Stops tunnel/proxy/origin and removes temporary workspace.
Returns {stopped, failed, cleaned}.
cfshare exposure_logs --params '{"id":"files_xxx","opts":{"component":"all","lines":200}}'
component: tunnel | origin | all.
cfshare maintenance --params '{"action":"run_gc"}'
cfshare maintenance --params '{"action":"set_policy","opts":{"policy":{"maxTtlSeconds":7200},"ignore_patterns":["*.pem",".env*"]}}'
Actions:
start_guardrun_gcset_policy (requires opts.policy or opts.ignore_patterns)cfshare audit_query --params '{"filters":{"event":"exposure_started","limit":100}}'
cfshare audit_export --params '{"range":{"from_ts":"2026-01-01T00:00:00Z","output_path":"./audit.jsonl"}}'
Default CLI state directory is ~/.cfshare:
policy.jsonpolicy.ignoreaudit.jsonlsessions.jsonworkspaces/exports/expose_port and expose_files exit by default after printing result; use --keep-alive to hold foreground.cfshare invocations do not restore full live session state.basic mode credentials are masked in outputs, so token is usually the practical authenticated mode for agent-delivered links.cloudflared binary not found: install cloudflared or set --config '{"cloudflaredPath":"..."}'local service is not reachable on 127.0.0.1:<port>: start service firstpath blocked by ignore policy: adjust policy.ignore or maintenance set_policyport blocked by policy: update blockedPorts in policy if intentionalUse CFSHARE_LOG_LEVEL=info or CFSHARE_LOG_LEVEL=debug for more stderr logs.