> ## Documentation Index
> Fetch the complete documentation index at: https://docs.engini.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Flo for Claude Code and Codex

> Install Flo, Engini's workflow-building plugin, and build workflows from a plain-language request.

> [!NOTE]
>
> **Uses:** CLI · Claude Code · Codex

Flo is an agent for **Claude Code** and **Codex**. You describe a workflow ("when a deal closes in Salesforce, post to Slack"); Flo designs it, dry-runs it against your own Engini account, shows you a proposal, and creates it **only after you approve** - always **turned off**. You finish and turn it on in the Engini designer.

Flo works through the [`engini` CLI](https://docs.engini.ai/developers/cli), on your own login and your own API-key connection. It does nothing your key could not do by hand - which is also the honest limit of every safety measure on the [Flo safety](https://docs.engini.ai/developers/ai-agents/flo-safety.md) page.

The current release is **v0.1.0**. The plugin is published at [github.com/engini/flo-plugin](https://github.com/engini/flo-plugin).

> [!WARNING]
>
> Flo has been tested on Claude Code only. The Codex install and the Codex-specific steps on this page are **provisional**: they have not yet been verified on a real Codex install.

## Before you start

| You need | Version | Why |
| - | - | - |
| An Engini account and a **workspace-scoped Developer API key** | - | Flo can only write with a key scoped to one workspace and environment. Ask for a dedicated, least-privilege key: a key carries its creator's whole permission set. See [API keys](https://docs.engini.ai/developers/get-started/api-keys.md) |
| The Engini CLI: `npm i -g @engini/cli` | **0.29.0 or later** | Every Flo call goes through it. See the [CLI overview](https://docs.engini.ai/developers/cli.md) |
| Claude Code | **2.1.316 or later** (the version this release was tested on) | |
| Python | **3.8 or later**, as `python3` or `python` | Claude Code only: runs Flo's guard hook, described on the [Flo safety](https://docs.engini.ai/developers/ai-agents/flo-safety.md) page |
| Codex | Not yet verified on a real Codex install | See [Install in Codex](#install-in-codex) |

`jq` is not needed.

## Install in Claude Code

Run these two commands in Claude Code:

```text theme={null}
/plugin marketplace add engini/flo-plugin
/plugin install flo@engini-flo
```

To stay on one reviewed release, add the marketplace pinned to its tag instead:

```text theme={null}
/plugin marketplace add https://github.com/engini/flo-plugin.git#vX.Y.Z
```

Replace `vX.Y.Z` with the release tag, for example `v0.1.0`. Claude Code does not update plugins on its own, and neither tool signs or verifies a plugin, so the pinned form is the one to use if you review what you install.

Start a **new session** after installing - the skill is not found until you do.

## Install in Codex

> [!WARNING]
>
> Not yet verified on a real Codex install - treat these steps as provisional.

```text theme={null}
codex plugin marketplace add https://github.com/engini/flo-plugin.git --sparse .agents/plugins
```

Then install **flo** from the `/plugins` browser and start a **new session** - the skill is not found until you do.

Codex has no Flo guard hook, so also save the Codex rules from [Flo safety](https://docs.engini.ai/developers/ai-agents/flo-safety.md#codex-rules-file) as `~/.codex/rules/flo.rules`. Codex runs commands without network by default, which makes every `engini` call fail: see [Codex sandbox](https://docs.engini.ai/developers/ai-agents/flo-safety.md#codex-sandbox).

## Add the safety settings

A plugin cannot install your own permission settings for you. Copy them in yourself:

* **Claude Code:** merge the permissions block from [Flo safety](https://docs.engini.ai/developers/ai-agents/flo-safety.md#settings-to-paste-yourself) into your user settings, and never run Flo on auto-accept or `--dangerously-skip-permissions`.
* **Codex:** save the rules file as described above.

## Check the install

This check must fail loudly if something is wrong.

**Claude Code.** Run `/plugin details flo@engini-flo`. It must list **Skills (1)**, **Agents (1)** and **Hooks (1)**. `Hooks (0)` means the guard is not installed and nothing but your own settings stops the four things Flo never does (see [Flo safety](https://docs.engini.ai/developers/ai-agents/flo-safety.md)).

Then prove the guard actually runs. Ask Claude to run this exact command. It is harmless either way: it makes a throwaway fake `engini` in a temp folder and puts it first on the path, so your real CLI and account are never touched.

```bash theme={null}
d=$(mktemp -d) && printf '#!/bin/sh\necho FLO-CANARY-RAN\n' > "$d/engini" && chmod +x "$d/engini" && PATH="$d:$PATH" engini tools call engini_workflows_delete_workflow --args -
```

* The result says **`FLO-HOOK-DENY`** - the guard is working.
* It prints **`FLO-CANARY-RAN`** - the guard did **not** run (no Python on the path, hooks disabled in your settings, the plugin disabled, or an older Claude Code). Fix that before you rely on it.
* It prints a **permission-denied** message and neither of the two above - your own settings caught it, but the guard still did **not** run. Fix that too.

> [!WARNING]
>
> Never test the guard with a real never-verb against your real `engini`: if the guard is missing, that is a real delete on your account.

## Connect Engini

Do this in your own terminal.

**1. Log in**

```bash theme={null}
engini login
```

Interactive. Never `engini login --api-key ...`: arguments end up in your shell history and in the process list.

**2. Connect the workflows app**

```bash theme={null}
engini connect engini_workflows
```

Choose **auth method 1 (`x-api-key`)** and paste your workspace-scoped key. Any other auth method fails every builder call with `403 API_KEY_REQUIRED`.

Run both yourself, outside Claude Code or Codex. Flo's guard refuses to let the agent run them, because they put a raw key in the agent's hands.

## First run

Ask for a workflow in plain words:

```text theme={null}
Build a workflow in my Engini account: every weekday at 8:00, fetch https://example.com/report and email it to me
```

Flo then:

1. Checks the CLI version, your login (account, workspace and environment) and your `engini_workflows` connection.
2. Compiles a throwaway plan to confirm which workspace and environment your connection writes to.
3. Searches the catalog, reads each step's schema and dropdown options, and compiles the plan until it is clean.
4. Stops and shows you a **proposal table**: every step, the target workspace and environment the compile echoed, the connection id and a fingerprint.
5. Creates the workflow **only** when you approve that proposal in the conversation, quoting its fingerprint. The workflow is created **turned off**.

You finish in the Engini designer: connect any step Flo could not connect (Flo lists them), fill fields it left empty on purpose, and turn the workflow on.

## What Flo will and won't do

**Flo will:** design, dry-run, propose, and create or update workflows you approved - always turned off.

**Flo won't:** turn a workflow on or off, run it, rerun an execution, delete a workflow, create or change a connection, or handle your API key.

How each of these is enforced, and where the enforcement stops, is on [Flo safety](https://docs.engini.ai/developers/ai-agents/flo-safety.md).

## Update and uninstall

* **Update:** run `/plugin marketplace update engini-flo`, then reinstall with `/plugin install flo@engini-flo`. In Codex, upgrade from `/plugins`. Neither tool updates Flo on its own, so a fix to the never list or the guard reaches you only when you update.
* **Uninstall:** run `/plugin uninstall flo@engini-flo` (Claude Code), or remove it in `/plugins` (Codex). Remove the safety settings from your configuration if you no longer want them.

## Troubleshooting

| Symptom | What to do |
| - | - |
| `engini: command not found` | Run `npm i -g @engini/cli`, then open a new terminal |
| Flo says the CLI is too old | It is below 0.29.0. Run `npm i -g @engini/cli@latest` |
| Flo says you are not logged in | Run `engini login` yourself, in your own terminal |
| `403 API_KEY_REQUIRED` | Re-create the connection in your own terminal with `engini connect engini_workflows`, choose **auth method 1 (`x-api-key`)** and paste a workspace-scoped key |
| The skill is not found right after installing | Start a new session |
| `/plugin details flo@engini-flo` shows `Hooks (0)` | Reinstall from `engini/flo-plugin` and check the plugin is enabled |
| A command was blocked with a message starting `FLO-HOOK-DENY` | That is Flo's guard. See [Flo safety](https://docs.engini.ai/developers/ai-agents/flo-safety.md#when-the-guard-refuses-something) |

The full list, including every error Flo can report from Engini, is in the plugin's [troubleshooting guide](https://github.com/engini/flo-plugin/blob/v0.1.0/plugin/TROUBLESHOOTING.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.