Skip to main content
The pascal command comes from the @pascal-app/cli package. It runs the open-source Pascal editor on your machine, connects MCP clients to your local projects, and lets a hosted autonomous agent link itself to the person accountable for it. This page is the command reference. For a walkthrough of the first run, Docker self-hosting and local agents, see Run Pascal locally.

Install

You need Node.js 22.13 or newer, with npm. Run the CLI without installing it:
An interactive npx first run installs the same version globally once the editor is healthy, so the shorter pascal command works afterwards. To install it yourself:
Without a global install, prefix any command on this page with npx @pascal-app/cli.

Commands

Run the editor

--port asks for a specific loopback port. If it’s taken, Pascal says so and picks a free one. Without it, the operating system assigns a free port. --foreground keeps the editor attached to the terminal; the command then exits with the editor’s exit code.

Open projects

open, resume, projects and the project commands also accept --runtime <path>, used when they have to start the editor.

Update and diagnose

--version takes an exact version such as 1.0.5, or latest. --runtime applies when the target is the version you’re running. update doesn’t touch your projects or a globally installed pascal command. Update the command itself with npm install --global @pascal-app/cli@latest.

Connect MCP clients

pascal mcp connect uses the MCP service in the npm package, so it works on a machine that has never downloaded the web runtime. pascal mcp setup needs the global pascal command at the same version as the CLI you run it with. See Local MCP with the Pascal CLI for client setup.

Claim a hosted agent

Both commands read the agent’s hosted Pascal API key from PASCAL_API_KEY, send it to Pascal, and never store or print it. --no-open or --json skips opening the browser. A new claim supersedes the agent’s previous code. These commands don’t upload or link local projects. See Agent accounts and workspace invitations.

Plugins

The CLI doesn’t install plugins yet: any other plugin subcommand fails with plugin_command_unavailable. See Create a plugin.

The web editor runtime

The npm package holds only the CLI and the MCP service. The web editor itself is a separate archive per CLI version, pascal-web-runtime-<version>.tar.gz, attached to the matching GitHub release. Each CLI version pins its runtime by URL, size and SHA-256 digest.

First start

The first command that starts the editor (editor, start, open, resume, projects, the project commands, or update) downloads the archive into ~/.pascal/tmp and shows its progress. Then it:
  1. Checks the archive against the SHA-256 digest published inside the npm package. On a mismatch it deletes the download and installs nothing (runtime_digest_mismatch).
  2. Extracts it and installs it into ~/.pascal/runtime/<version>.
  3. Starts the editor on it.
Later starts reuse the installed runtime. Two first runs at once share one download. If the installed runtime is damaged, the next start downloads and verifies it again; your projects in ~/.pascal/data are separate and untouched. After you upgrade the CLI, a running editor keeps its older runtime. pascal editor warns you, and pascal restart or pascal update switches to the runtime the new CLI pins.

Offline and air-gapped machines

Download the archive for your CLI version on a connected machine, copy it over, and pass it with --runtime:
An archive passed with --runtime goes through the same digest check as a download, so it must be the archive for the CLI version you’re running. --runtime also accepts an extracted runtime directory, which is installed as it is, without a digest check; use it for a runtime you built yourself from the editor repository. When a download fails, the error (runtime_download_failed) prints the archive URL, its expected digest and the --runtime command to run once you’ve copied the file.

Proxies

Downloads go through HTTPS_PROXY (or ALL_PROXY), including a proxy with basic authentication, and skip hosts listed in NO_PROXY. Only https:// archive URLs are accepted.

Script the CLI

JSON output

Commands that take --json print one JSON document on stdout instead of text, for example:
On editor and start, --json also skips the automatic global install; add --no-open to editor to keep the browser closed. pascal logs and pascal mcp connect don’t take --json.

Errors

Without --json, an error prints Error: <message> on stderr. With --json, it prints one line of JSON on stderr:
error is a stable code to branch on, message is for people, and details appears only when there’s more to say, such as the HTTP status of a hosted request.

Exit codes

With --foreground, pascal editor and pascal start exit with the editor process’s own code.

Common error codes

Environment variables