Skip to the videoSkip to content

Lesson 11 of 12 · 5:52

Turn on advanced search, Plane AI, and sensitive data scanning on self-hosted Plane

How the three add-ons that ship switched off, advanced search on an OpenSearch cluster you provide, Plane AI, and sensitive data scanning, each turn on with a few keys in plane.env, and how to check each one from the terminal and in the app.

Turn on advanced search, Plane AI, and sensitive data scanning on self-hosted Plane

What you will learn

  • Self-hosted Plane ships with three add-ons that start switched off. Advanced search runs on an OpenSearch cluster you provide, and Plane AI and the scanner are containers in Plane's own stack, set to zero replicas.
  • Advanced search needs OpenSearch 2.19 or later. One sudo prime-cli configure command with --opensearch-url, a username, a password, and an index prefix lists the keys it will change, masks the password, and restarts Plane.
  • In the API container, manage_search_index builds the indexes with index rebuild and fills them with document index. From then on each change waits in a Redis queue, which needs Redis 6.2 or later, and a worker sends the batch every five seconds.
  • The search box in the top bar, and the / key, then search the whole workspace through OpenSearch. Results update as you type, and each person sees results only from projects they can open.
  • Plane AI needs an API key from your LLM provider, that OpenSearch, its own database, and read access to Plane's database. It comes as four services that start at zero replicas, and one configure run sets the two database URLs, the API key, and one replica per service.
  • curl /pi/ready/ answers ready true when Plane AI can reach its database. Embeddings are optional, and each workspace has its own switch under Workspace settings, then Plane AI, which starts on.
  • Sensitive data scanning runs on Argus, one service plus a migrator, which keeps its own schema in Plane's database, only reads Plane's tables, and stores fingerprints made with a secret from openssl rand -hex 32, never the values. Keep it at one replica.
  • Check Argus with sudo prime-cli healthcheck and curl /argus/healthz, then press Retry on the settings page, which opens on the scan history with Scan, Detectors, and Allow list. On Kubernetes, the chart turns each add-on on with services.opensearch, services.pi.enabled, and services.argus.enabled.

Three add-ons, off until you turn them on

0:00

Self-hosted Plane ships with three add-ons that start switched off: advanced search, Plane AI, and sensitive data scanning.

Advanced search runs on an OpenSearch cluster you provide. Plane AI and the scanner are containers in Plane's own stack, set to zero replicas. You turn each one on with a few keys in plane.env, then check it from the terminal or in the app.

Run Plane AI

1:54

Plane AI needs an API key from your LLM provider, the OpenSearch that advanced search uses, its own database, and read access to Plane's database.

It comes as four services: an API, a worker, a scheduler, and a migrator that runs once. All four start at zero replicas.

  1. On the bundled Postgres, Plane creates Plane AI's database for you. On a managed server, create it yourself first.
  2. Then prime-cli configure, with -e for each key, sets the two database URLs, the API key, and one replica per service, then restarts Plane. You don't set Plane AI's address or its OAuth callback: Plane builds both from your domain.
  3. To check, curl /pi/ready/ on your Plane domain. It answers ready, true, when Plane AI can reach its database.

Embeddings are optional. Without an embedding model, Plane AI searches by keyword. Set one, then run manage_search_index once with --vectorize. To add your own model, use the custom LLM keys.

On Kubernetes, set services.pi.enabled to true in the chart's values.

In the app, an AI assistant button appears in the top bar. MCP connectors for Plane AI are in Workspace settings, then Integrations, then Connectors.

Each workspace has its own switch, in Workspace settings, then Plane AI. It starts on, so turn it off in any workspace that shouldn't use AI.

Set up sensitive data scanning

3:54

Open Workspace settings, then Sensitive data scanning. Until the scanner runs, the page says it isn't set up. If it says isn't enabled instead, the workspace's plan doesn't include it.

The scanner is Argus, one service plus a migrator that runs once and exits. Argus keeps its own schema in Plane's database and only reads Plane's tables. Nothing leaves your deployment. It never stores a value it matches, only a fingerprint made with a secret you generate.

  1. Make the secret with openssl rand -hex 32, and keep it. A new secret invalidates every fingerprint Argus has stored.
  2. One configure run sets the secret, one Argus replica, and one migrator, then restarts Plane. Keep Argus at one replica: a second would fail the scans the first is running.
  3. To check, sudo prime-cli healthcheck lists Argus as healthy and its migrator as gracefully stopped, and a curl to /argus/healthz on your Plane domain returns status, ok.
  4. Back on the settings page, press Retry. It opens on the scan history, with tabs for Scan, Detectors, and Allow list.

On Kubernetes, set services.argus.enabled to true, with the fingerprint secret in the chart's values.

Recap

5:33

Search now runs through OpenSearch, Plane AI on its own database, and scanning on Argus, and you've checked all three.

Try it in your workspace

Connect Plane to your OpenSearch cluster with sudo prime-cli configure, giving it --opensearch-url, a username, a password, and an index prefix.

Transcript

Show the transcript

Three add-ons, off until you turn them on

0:02Self-hosted Plane ships with three add-ons that start switched off: advanced search, Plane AI, and sensitive data scanning.

0:12Advanced search runs on an OpenSearch cluster you provide. Plane AI and the scanner are containers in Plane's own stack, set to zero replicas.

0:23You'll turn each one on with a few keys in plane.env, then check it from the terminal or in the app. Let's take a closer look.

0:36Advanced search needs OpenSearch 2.19 or later, on your own servers or as a managed service.

0:44One command connects Plane to it: sudo prime-cli configure, with --opensearch-url, a username, a password, and an index prefix.

0:57It lists the keys it will change in plane.env, with the password masked, and restarts Plane when you confirm.

1:05Next, in the API container, manage_search_index builds the indexes with index rebuild, then fills them in the background with document index.

1:16From then on, each change waits in a Redis queue, and a worker sends the batch every five seconds. The queue needs Redis 6.2 or later.

1:26On Kubernetes, the Helm chart can run OpenSearch for you, or point Plane at yours.

1:33In the app, the search box in the top bar now searches the whole workspace through OpenSearch. Press slash to jump to it.

1:42Results update as you type, and a title matches on the first letters of any word in it.

1:49Each person sees results only from projects they can open.

Run Plane AI

1:57Plane AI needs an API key from your LLM provider, the OpenSearch that advanced search uses, its own database, and read access to Plane's database.

2:08It comes as four services: an API, a worker, a scheduler, and a migrator that runs once. All four start at zero replicas.

2:20On the bundled Postgres, Plane creates Plane AI's database for you. On a managed server, create it yourself first.

2:29Then prime-cli configure, with -e for each key, sets the two database URLs, the API key, and one replica per service, then restarts Plane.

2:42You don't set Plane AI's address or its OAuth callback. Plane builds both from your domain.

2:49To check, curl /pi/ready/ on your Plane domain. It answers ready, true, when Plane AI can reach its database.

3:00Embeddings are optional. Without an embedding model, Plane AI searches by keyword. Set one, then run manage_search_index once with --vectorize.

3:12To add your own model, through an OpenAI-compatible API or Amazon Bedrock, use the custom LLM keys.

3:21On Kubernetes, set services.pi.enabled to true in the chart's values.

3:28In the app, an AI assistant button appears in the top bar.

3:34MCP connectors for Plane AI are in Workspace settings, then Integrations, then Connectors.

3:42Each workspace has its own switch, in Workspace settings, then Plane AI. It starts on, so turn it off in any workspace that shouldn't use AI.

Set up sensitive data scanning

3:57Open Workspace settings, then Sensitive data scanning. Until the scanner runs, the page says it isn't set up.

4:05If it says isn't enabled instead, the workspace's plan doesn't include it.

4:12The scanner is Argus, one service plus a migrator that runs once and exits.

4:19Argus keeps its own schema in Plane's database and only reads Plane's tables. Nothing leaves your deployment.

4:27It never stores a value it matches, only a fingerprint made with a secret you generate.

4:34Make the secret with openssl rand -hex 32, and keep it. A new secret invalidates every fingerprint Argus has stored.

4:44One configure run sets the secret, one Argus replica, and one migrator, then restarts Plane.

4:53Keep Argus at one replica. A second would fail the scans the first is running.

4:59To check, sudo prime-cli healthcheck lists Argus as healthy and its migrator as gracefully stopped.

5:08And a curl to /argus/healthz on your Plane domain returns status, ok.

5:15On Kubernetes, set services.argus.enabled to true, with the fingerprint secret in the chart's values.

5:23Back on the settings page, press Retry, and it opens on the scan history, with tabs for Scan, Detectors, and Allow list.

Recap

5:34Search now runs through OpenSearch, Plane AI on its own database, and scanning on Argus, and you've checked all three.