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

# The integration console

> Seven tabs per integration: Overview, Connect, Operations, Events, Health, Run log and Preview.

Every integration in the harness has a **console** at `/integrations/<slug>`. It shows the integration the way a consumer sees it: as a [contract](https://sdk.ekanos.dev/guides/operation-contracts.md) with operations you can run, events you can emit, a connection you can set up, and a health check. The surfaces the harness always rendered (widgets, the marketplace tile, the activation form and triggers) are one tab of it, **Preview**.

The console is the home of a single-integration project (`/` redirects to `/integrations`, which forwards to your one integration), and in a [repo](https://sdk.ekanos.dev/harness/repo-mode.md) there is one per integration package.

## The tabs

| Tab | Address | What it is for |
| - | - | - |
| **Overview** | `/integrations/<slug>` | The contract at a glance: integration, versions, connection auth and levels, operation and event counts, which run modes it supports (Fixtures, Live), and where it runs from |
| **Connect** | `/integrations/<slug>/connect` | Connecting the integration locally, and the connection's status |
| **Operations** | `/integrations/<slug>/operations` | Every operation, marked Read or Write, with a runner |
| **Events** | `/integrations/<slug>/events` | Emit the contract's events with an editable payload |
| **Health** | `/integrations/<slug>/health` | Run the integration's health check |
| **Run log** | `/integrations/<slug>/runs` | Every operation call, with filters |
| **Preview** | `/integrations/<slug>/preview` | Widgets, the marketplace tile, the activation form and triggers |

### Overview

Shows the integration slug, package and contract versions with the contract's digest, the connection it needs (`none`, `api_key`, `oauth2`, with the levels it supports: team, user), and how many operations and events it declares. A quiet **Supports:** line says whether it can run on Fixtures, Live or both. A package of your repo reads "Local · this repo" with one line of provenance ("Running from this repo."). Paths are repo-relative, with the absolute path in a tooltip.

### Connect

The connection status, in one word and always the same word across the harness: **Connected**, **Not connected**, **No connection needed** or **Managed by Ekanos**. Below it, the form that stores credentials, and Disconnect. [Connecting integrations](https://sdk.ekanos.dev/harness/repo-mode.md#connecting-integrations) covers what is stored where.

* An integration whose credentials are API keys declared in code shows a keys form.
* An integration whose credentials are the fields of its activation form shows that form here, so you never need the Preview tab to connect.
* An integration that declares `oauth` shows the **Local OAuth** panel and a Connect button. The panel lists the redirect URL to register with the provider: `http://localhost:<port>/api/integrations/<slug>/oauth/callback` (port 3100 unless you passed `--port`).
* An integration that needs no connection says **No connection needed**. Its settings, if it has any, are optional ("Settings below are optional." with a **Save settings** button).

### Operations

Lists the contract's operations. Each is marked **Read** or **Write** and has a runner: a form generated from its input schema (or raw JSON), a Fixtures or Live choice where the integration supports it, and the result with a badge saying whether it satisfies the output schema. A **write** does not run at once: it is held in the approvals tray, and the pending-approval card reads, for example, "1 write waiting for approval: acme-social draft\_post", with the payload behind **Show details**.

### Events

Pick one of the contract's events, edit its payload (the contract's example is the starting point), and emit it. In Fixtures mode the harness validates the payload and lists the workflow triggers that would match. In Live mode it runs the integration's own handler.

### Health

**Run health check** runs the integration's health check. Until you do, the page says "Not run yet". The result is healthy, degraded, unhealthy or unknown, with the integration's message.

### Run log

Every call made through the harness in this session, newest first: time, operation, where it ran from, mode, channel, and status. It shows the latest 50; **Show more** loads more. Filter by **outcome** and by **integration**:

| Outcome | Meaning |
| - | - |
| `ok` | The operation ran and returned |
| `refused` | The runner refused it before it ran (not declared, invalid input, a write on a channel that cannot hold one, and so on) |
| `failed` | It ran and failed |
| `held` | It is a write waiting for approval |

A refused or failed row has its reason (`operation_not_declared`, `invalid_input`, ...) and, under it, a plain-language line saying what to do. "No runs match these filters." means the filters excluded everything.

### Preview

The surfaces that render your integration in Ekanos chrome: **Widgets**, **Marketplace tile**, **Activation form** and **Triggers**. A section appears only if the integration uses it. This is where [fixtures](https://sdk.ekanos.dev/harness/fixtures.md), the [toolbar](https://sdk.ekanos.dev/harness/overview.md#the-toolbar) and [triggers](https://sdk.ekanos.dev/harness/triggers.md) live.

| Section | Address |
| - | - |
| Widgets | `/integrations/<slug>/preview/widgets` |
| One widget | `/integrations/<slug>/preview/widgets/<widgetId>` |
| Marketplace tile | `/integrations/<slug>/preview/tile` |
| Activation form | `/integrations/<slug>/preview/activation` |
| Triggers | `/integrations/<slug>/preview/triggers` |

The old addresses `/<slug>`, `/<slug>/widgets`, `/<slug>/widgets/<widgetId>`, `/<slug>/tile`, `/<slug>/activation` and `/<slug>/triggers` still work: they redirect to the matching Preview address and keep the query string, because an OAuth return carries its result there.

> [!NOTE]
>
> The Preview tab is generated by `ekanos dev`. After upgrading `@ekanos/cli`
> and `@ekanos/harness` to the versions that add it (shell contract 5), run
> `ekanos dev` again so the shell is regenerated.

## Next steps

* [Repo mode](https://sdk.ekanos.dev/harness/repo-mode.md)
* [Live mode](https://sdk.ekanos.dev/harness/live-mode.md)
* [Triggers](https://sdk.ekanos.dev/harness/triggers.md)


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