Install
openclaw skills install @ystemsrx/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 @ystemsrx/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.