procesio-setup · v1.0.0 · 2026-09-24 · sha256 e1fa0055cc7b4f99

procesio-setup v1.0.0A

Immutable. This exact content never changes and is served at /api/v1/blob/e1fa0055cc7b4f99.

---
name: procesio-setup
description: >-
  Connect this installation to a PROCESIO workspace, so the MCP server and the CLI can
  reach it. Use on first run, after installing the plugin, when a call fails with
  auth_required, missing_secrets or no stored credential, when someone asks how to add
  an API key or a second environment, when switching between PROCESIO environments, or
  when a tool reports a missing machine prerequisite.
version: 1.0.0
owner: procesio-cli maintainers
last_verified: 2026-09-23
---

# Connecting to PROCESIO

Nothing here reaches a PROCESIO workspace until one credential profile exists on this
machine. This walks through that, verifies it, and covers the optional extras that
individual tools need.

## Read this first: never handle the secret yourself

**Never ask the person to paste an API key, password or token into the conversation, and
never read one back.** Anything typed into chat is in the transcript.

Every command that needs a secret prompts for it directly, without echoing, when you omit
the value. That prompt belongs to the person, not to you: **you print the command, they
run it in their own terminal.** Do not run it for them, because a prompt you drive is a
prompt whose answer passes through you.

The values land in the OS credential store (Windows Credential Manager, macOS Keychain,
Linux keyring) under `agents-and-tools:<tool>:<secret>`. They are never written to a file
in this repository, and nothing here should ever print one.

If someone pastes a credential into the conversation anyway, say plainly that it is now in
the transcript and should be rotated, then carry on with the prompted flow.

## The one thing that is required

A PROCESIO credential profile. Without it every `procesio_*` tool fails; with it, 17 of
the 21 work. Everything below this section is optional and serves a specific feature.

Two kinds, and which one to use is decided by what the person already has:

- **API key** — the normal choice. A key minted in the PROCESIO UI, sent as a header.
- **Username and password** — for an account without a key, or where a key cannot be
  minted.

### API key

Give them this to run, with a profile name of their choosing:

```bash
python scripts/run-tool.py procesio add-credential --name personal --type apikey --make-default
```

Omitting `--key` and `--value` is deliberate: the command prompts for both without
echoing. If they want a specific workspace rather than the account default, add
`--workspace-id <guid>`.

### Username and password

```bash
python scripts/run-tool.py procesio add-credential --name personal --type userpass --username someone@example.com --make-default
```

Same rule: `--password` is omitted, so it is prompted without echoing.

### Installed from the plugin rather than cloned

The console scripts replace `python scripts/run-tool.py`:

```bash
procesio add-credential --name personal --type apikey --make-default
```

Everything else on this page works the same way, with `procesio` in place of
`python scripts/run-tool.py procesio`.

## Verify before declaring it done

A stored credential is not a working credential. This hits a live read endpoint:

```bash
python scripts/run-tool.py procesio check-auth
```

Then confirm it can actually see the workspace:

```bash
python scripts/run-tool.py procesio list-processes
```

`check-auth` passing while `list-processes` returns nothing usually means the credential
authenticates against the right account but the wrong workspace. Check `--workspace-id`.

To see what is stored without revealing anything, `list-credentials` shows names, types
and workspaces only, and `show-credential --name <name>` shows one profile's non-secret
fields, with secrets reported only as present or absent.

## Environments

Calls go to `Internal-PROD` unless told otherwise. For a client installation or a QA
environment, register it once and bind the credential to it:

```bash
python scripts/run-tool.py procesio add-environment --name Acme-QA --web-base https://... --auth-base https://...
python scripts/run-tool.py procesio add-credential --name acme-qa --type apikey --environment Acme-QA
```

`list-environments` shows what is registered, which is the default, and which credential
each one is bound to. Individual tool calls can also override per call with
`--environment`, which is worth reaching for before changing the default.

## Optional, per feature

Add these only when the person needs the feature. Each is inert until then, so a
first-run setup should not collect them.

| feature | what it needs |
|---|---|
| Building connectors from API docs | a Connector Builder credential |
| Tidying a process canvas | Node.js, plus `elkjs` |
| Reading or writing a form's code blob | the form-code encryption passphrase |

**Connector Builder** takes either an API key, or an account login:

```bash
python scripts/set-credential.py connector-builder api-key
```

That command prompts for the value without echoing. For the login route, store `username`
and `password` the same way.

**Node and elkjs** are machine prerequisites rather than credentials. `check-requirements.py`
reports what is missing and the install line for each:

```bash
python scripts/check-requirements.py
```

Worth knowing why this is a separate check: these dependencies are imported lazily, so a
machine without them still reports the tool ready and still passes the test suite. The
failure surfaces at the first real call instead.

**The form-code passphrase** encrypts a form's `Data.code` blob:

```bash
python scripts/set-credential.py procesio form-code-key
```

This one has a sharp edge worth stating before they set it. The passphrase is what decrypts
existing blobs, so **changing it makes every form already saved under the old one
undecryptable**, and the editing path fails before any write can happen. If that has already
happened, `form-set-code --clear` is the way back in.

## When something still fails

Read the error rather than re-running the setup.

| what comes back | what it means |
|---|---|
| `missing_secrets` | nothing is stored for that tool yet. Store it, above. |
| `auth_required` | a secret is stored but the tool could not use it. |
| `check-auth` fails while a secret is present | the value is present and wrong, or expired, or minted for a different environment. |
| calls succeed but return nothing | authenticated against the right account, wrong workspace. |

A stored secret being **present** is not the same as it being **valid** — presence is all an
inventory can see. Probe with `check-auth`, never by inspecting the store.

If a key was minted on one workspace and used against another, it will not work even though
both belong to the same account: a key inherits the permissions of whoever created it, in
the place it was created.

## What good looks like

Setup is finished when `check-auth` passes and `list-processes` returns the workspace the
person expected. Say which profile and which environment that was, so the next session
starts from a known place rather than rediscovering it.