# Install qh and configure quick commands

## Install and quick commands

Qesh 0.4.0 includes the Node.js `qh` command. The managed macOS installer bundles both Node and Bun:

```sh
curl -fsSL https://qentrah.com/qesh/install.sh -o /tmp/qesh-install.sh
sh /tmp/qesh-install.sh
~/.local/bin/qh help
~/.local/bin/qh
```

The installer downloads the native Apple Silicon or Intel release from GitHub, verifies SHA-256 and the app signature, and installs into a versioned local folder. It creates `qh` and `qesh` launchers in `~/.local/bin`; add that folder to your shell PATH if necessary. It refuses to replace unrelated commands. `QESH_BIN_DIR` and `QESH_INSTALL_DIR` choose other destinations. The app is locally signed and not notarized.

```sh
qh config             # Open the global configuration
qh config path        # Print its path
qh config validate    # Validate JSON and settings
qh update --check     # Check Qesh releases
qh update             # Update a managed install if a newer version exists
qh update-all --dry-run
qh update-all         # Run only the updates you configured
qh workspace list     # List saved workspace records
qh workspace Research # Open a named CLI workspace
```

`gh` remains GitHub CLI. Qesh uses `qh`. For a source checkout, run `./bin/qh`; update the checkout with Git rather than the managed installer. Node.js 22.13+ and Bun 1.3.5+ are required for source development. Packaged downloads supply their runtimes.

### Custom commands and CLI updates

Add command objects to your global configuration. No CLI updates are enabled by default.

```json
{
  "commands": {
    "dev": {
      "command": "npm run dev",
      "cwd": "~/Documents/my-project",
      "description": "Start the development server"
    }
  },
  "updates": {
    "codex": { "command": "npm install -g @openai/codex" },
    "claude": { "command": "npm install -g @anthropic-ai/claude-code" },
    "opencode": { "command": "opencode upgrade" }
  }
}
```

Run `qh dev` to execute a configured command with your shell and permissions. Desktop Commands lists these shortcuts and starts the selected command in a new tab. Command names use lowercase letters, digits, and hyphens; built-in names are reserved. Custom command arguments belong in the JSON command string. `qh update-all` runs the configured list in order and stops on the first failure. It does not discover or change other installed CLIs. `updateChannel` accepts `preview` (default) or `stable`.

