6 min read

CloudCLI: A Web and Mobile UI for Claude Code, Codex and Cursor CLI (GitHub, Scanned)

Use Claude Code, Codex, Cursor CLI and OpenCode from a browser or phone, with files, Git and shell.

CloudCLI (Claude Code UI) logo
✅
Scan: safe. Nothing malicious. The notes: it reads your agents' local login files to show whether you are signed in, and a server that can run a shell and agents on your machine must stay off the open internet. Scanned Oct 26, 2026; the full report is below.

CloudCLI, formerly Claude Code UI, is a self-hosted web interface for coding agents you already run in a terminal: Claude Code, Codex, Cursor CLI and OpenCode. Start the server on your machine and open it from any browser, including a phone on the same network, to get a chat view, an integrated shell, a file explorer with editing, a Git panel for staging, committing and switching branches, and browser sessions for agent web tasks.

It finds your existing sessions in ~/.claude automatically and reads and writes the same configuration, so MCP servers and permissions you set in the UI show up in Claude Code and the other way round. Claude Code's tools start disabled until you enable them, and a plugin system adds tabs and backend services. It is AGPL-3.0 with about 14,300 stars, at v1.37.5 when scanned.

You bring your own subscription: the UI drives the official CLIs and SDKs, which use your existing logins. For the self-hosted version your machine has to stay on, and a paid hosted version, CloudCLI Cloud, is the company's business.

  • Repository: github.com/siteboon/claudecodeui
  • Licence: AGPL-3.0 (GNU Affero General Public License v3.0)
  • Language: TypeScript. Stars: 14.3K. Forks: 2,073. Last push: Oct 24, 2026.
  • Scan: safe, Oct 26, 2026, commit 80fbeac

Who it is for

Developers who run Claude Code or Codex on a desktop or server and want to check on or steer sessions from a laptop, tablet or phone, and people who prefer a file tree and Git panel to a bare terminal.

Getting started

1. Run it once with npx (needs Node.js 22 or later)

npx @cloudcli-ai/cloudcli

2. Or install it globally for regular use

npm install -g @cloudcli-ai/cloudcli && cloudcli

3. Experimental: run agents in an isolated Docker sandbox (needs the sbx CLI)

npx @cloudcli-ai/cloudcli@latest sandbox ~/my-project

Then open http://localhost:3001 and sign in with the account it asks you to create. Enable only the Claude Code tools you need in Tools Settings, and do not expose port 3001 to the internet: whoever can log in can run a shell on your machine.

Safety scan

We cloned siteboon/claudecodeui at commit 80fbeac on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • All 29 secret hits are the placeholder ghp_xxxx text shown in the GitHub token field, repeated across 14 translation files and GithubAuthenticationCard.tsx. There are no real tokens, no suspicious code patterns, no committed binaries and no bare-IP URLs.
  • On credentials, read in the cloned code: the provider modules read ~/.claude/.credentials.json and ~/.codex/auth.json only to report whether you are logged in and with which email. The agent work itself goes through the official @anthropic-ai/claude-agent-sdk and @openai/codex-sdk packages, which use those logins as the CLIs do. No telemetry or analytics code turned up in the server or UI, and the UI login uses hashed passwords.
  • Install hooks: postinstall runs scripts/fix-node-pty.js, which only sets the execute bit on node-pty's spawn-helper on macOS, and prepare installs husky. In the Docker sandbox, start-cloudcli.sh is sourced from ~/.bashrc inside the sandbox to start the server.
  • 257 known advisories in package-lock.json (9 critical), a single lockfile mixing the server's runtime dependencies with build and test tooling. The critical ones include handlebars, tinypool (the test runner), node-tar, shell-quote, basic-ftp and DOMPurify. For a server with shell access, keep it updated.
  • 6 workflows, none using pull_request_target; 3 of 8 third-party actions are pinned to a commit. Contributing guide present; no security policy or Dependabot.

What the scanner counted

CheckResult
Secrets29 candidates found and read; see the notes above.
Suspicious codeNone found.
Install-time code2 npm lifecycle scripts. 2 installer scripts (one edits your shell profile)
Committed binariesNone.
CI workflows6 workflows. None use pull_request_target. 5 of 8 third-party actions pinned to a tag rather than a commit.
Network hosts31 distinct hosts referenced from source; most often github.com, cloudcli.ai, github.com.helper, git.example.test. No URLs to bare IP addresses.
Known vulnerabilities257 advisories across 1,805 pinned packages: 9 critical, 118 high, 104 moderate, 26 low. package-lock.json: 1,981 packages, 257 advisories.
Project hygieneHas licence file, contributing guide. Missing security policy, automated dependency updates, CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Secret candidates (29, redacted)
WhereRuleMatch
src/modules/i18n/locales/cs/common.json:230github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/cs/common.json:235github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/de/common.json:175github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/de/common.json:180github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/en/common.json:178github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/en/common.json:183github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/es/common.json:226github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/es/common.json:231github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/fr/common.json:175github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/fr/common.json:180github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/he/common.json:224github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/he/common.json:229github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/id/common.json:176github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/id/common.json:181github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/it/common.json:175github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/it/common.json:180github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/ja/common.json:175github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/ja/common.json:180github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/ko/common.json:175github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/ko/common.json:180github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/ru/common.json:175github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/ru/common.json:180github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/tr/common.json:175github-tokenghp_xx…xxx (40 chars)
src/modules/i18n/locales/tr/common.json:180github-tokenghp_xx…xxx (40 chars)
and 5 more
npm lifecycle scripts (2)
  • package.json postinstall: node scripts/fix-node-pty.js
  • package.json prepare: husky
Installer scripts (2)
Worst known vulnerabilities (24 of 257)
AdvisorySeverityPackageSummary
GHSA-5rq4-664w-9x2ccriticalbasic-ftp@5.0.5Basic FTP has Path Traversal Vulnerability in its downloadToDir() method
GHSA-cg2g-xh64-v4q7criticaldompurify@3.4.7DOMPurify SAFE_FOR_TEMPLATES bypass: split template expressions survive in attached shadow root content on DOM output mo…
GHSA-8r5x-fm3f-whwjcriticalhandlebars@4.7.9Handlebars: JavaScript Injection via AST Type Confusion in compile (bypass of CVE-2026-33937)
GHSA-p8wg-vrv2-v86fcriticalhandlebars@4.7.9Handlebars: JavaScript Injection via Own Property Check Bypass
GHSA-jqcg-44mw-7w3hcriticalproxy-addr@2.0.7proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet
GHSA-w7jw-789q-3m8pcriticalshell-quote@1.8.3shell-quote quote() does not escape newlines in object .op values
GHSA-23hp-3jrh-7fpwcriticaltar@6.2.1node-tar: Decompression/parse DoS via unlimited input
GHSA-5gmw-xhrv-c9v3criticaltinypool@1.1.1Tinypool: Prototype Pollution gadget in worker options leads to Remote Code Execution
GHSA-85c8-ppgw-ccprcriticaltinypool@1.1.1Tinypool: Prototype Pollution Gadget to RCE in run() options
GHSA-6j4f-fj2g-mc7phighbrace-expansion@1.1.18brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion
GHSA-qhr7-859c-m2p7highbrace-expansion@1.1.18brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion
GHSA-xjj6-f33q-929chighundici@6.28.1undici vulnerable to Denial of Service via unhandled error on excessive content-encodings
GHSA-3jxr-9vmj-r5cphighbrace-expansion@1.1.12brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups
GHSA-6j4f-fj2g-mc7phighbrace-expansion@1.1.12brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion
GHSA-mh99-v99m-4gvghighbrace-expansion@1.1.12brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash
GHSA-qhr7-859c-m2p7highbrace-expansion@1.1.12brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion
GHSA-rgw5-rvv9-x895highbrace-expansion@1.1.12brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation
GHSA-2883-xcg3-v3hhhighjs-yaml@4.1.1js-yaml: maxTotalMergeKeys does not limit CPU use for empty merge sources
GHSA-52cp-r559-cp3mhighjs-yaml@4.1.1js-yaml: YAML merge-key chains can force quadratic CPU consumption
GHSA-5p4m-2wfm-xmqjhighjs-yaml@4.1.1JS-YAML: Quadratic CPU consumption in !!omap resolution (3.x and 4.x) - CVE-2026-59870 fix not backported
GHSA-22jm-h49p-29qwhigh@modelcontextprotocol/sdk@1.29.0MCP TypeScript SDK: Experimental tasks were not tied to the session that created them
GHSA-46jr-4wx8-v453high@modelcontextprotocol/sdk@1.29.0MCP TypeScript SDK: One HTTP request within the default size limit could exhaust server memory during validation
GHSA-6qxp-vccf-f47hhigh@modelcontextprotocol/sdk@1.29.0MCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP server
GHSA-27r3-jxmh-p828highbody-parser@2.2.2body-parser vulnerable to Denial of Service via trailing bytes after a compressed request body

By the numbers

Stars14.3K
Forks2,073
Contributors114
Commits874
Open issues162
Open pull requests209
Releases92
Latest releasev1.37.5
LicenceAGPL-3.0
Main languageTypeScript
Project age1 year
Last pushOct 24, 2026
Tracked files1,071
Lines of code206.4K
Checkout size11 MB

Lines by language: TypeScript 156.9K, JSON 29.1K, Markdown 8,452, JavaScript 8,319, CSS 1,819, HTML 1,060.

Questions

Is CloudCLI free?

The self-hosted version is free and open source under AGPL-3.0. You still need your own Claude, Codex or Cursor subscription or API key, and the hosted CloudCLI Cloud is a paid service starting at 7 euros a month.

Is CloudCLI an official Anthropic product?

No. It is an independent open-source project that drives Anthropic's official Claude Code through its SDK, alongside OpenAI's Codex, Cursor CLI and OpenCode.

Can I use Claude Code from my phone with CloudCLI?

Yes. Run the server on your computer and open your computer's IP address and port in a phone browser on the same network. The desktop must stay on for self-hosted use.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.