---
title: Create your profile
description: From zero to "@zeno hello" in five steps.
---

import { Step, Steps } from 'fumadocs-ui/components/steps';
import { Callout } from 'fumadocs-ui/components/callout';

A **profile** is one Zeno instance — its own container, dashboard, master key, AGENTS.md operating manual, and credentials. You can have many side by side (`personal`, `work`, etc.); each one is independent.

This page walks the happy path end-to-end. By the end you'll have a profile running, Claude connected, one connector installed, and Zeno replying in Slack.

## Prerequisites

- `zeno` on your PATH ([Install](/install) covers it).
- A Slack workspace where you can install a custom app. The manifest lives at `infra/slack-app-manifest.json` in the repo.
- A Claude account on a Pro or Max plan.

## Walkthrough

<Steps>

<Step>

### Create the profile

```bash
zeno profile create personal
```

The CLI allocates a host port (`6101+`), generates a master key, and scaffolds `~/.zeno/profiles/personal/AGENTS.md` and `.env` from the templates under `templates/profile/`.

</Step>

<Step>

### Edit your AGENTS.md

```bash
$EDITOR ~/.zeno/profiles/personal/AGENTS.md
```

Fill in the per-instance operating manual: inviolable rules, which skills to invoke and when, channel conventions, language defaults. The agent reads this file on every turn (it is part of the cached system prompt).

Each profile also has a `knowledge/` folder for operator-authored long-form context — see [Knowledge](./knowledge). Use `zeno knowledge list`, `zeno knowledge open`, and `zeno knowledge index` to inspect and refresh it.

</Step>

<Step>

### Start the container

```bash
zeno start personal
```

If the `zeno-agent:dev` image is missing, the CLI builds it for you. First start can take a couple of minutes.

</Step>

<Step>

### Open the dashboard

```bash
zeno open personal
```

The browser lands on `http://localhost:6101/` (or the port allocated to your profile — `zeno profile list` shows it). The first-run hero walks you through three steps: **Configure Claude**, **Connect Slack**, **Schedule a cron**. Do them in that order.

- **Configure Claude** opens the OAuth flow. Sign in with the Claude account that owns your Pro/Max subscription. Zeno never sees your password — it stores a `CLAUDE_CODE_OAUTH_TOKEN` and refreshes it on its own.
- **Connect Slack** opens `/connectors` (or directly the Slack flow). Install the Slack app with the manifest at `infra/slack-app-manifest.json`, paste the bot + app tokens, and the worker boots a `SlackChannel` that listens via Socket Mode.

<Callout type="info">
The worker can boot **without** Slack creds — it falls back to a `NoopChannel` that quietly drops events. So the first-run flow is: start the container, install Slack via the dashboard, then restart the container so the SlackChannel takes over. No manual env editing required.
</Callout>

</Step>

<Step>

### Mention the bot

In any Slack channel where the bot is invited:

```
@zeno hello
```

Zeno replies. If it doesn't, [Daily ops](/daily-ops) covers `zeno logs` and `zeno doctor`.

</Step>

</Steps>

## What's next

- Browse [Connectors](/connectors) to learn the model and add more (GitHub, Linear, etc.).
- Read [Daily ops](/daily-ops) for the commands you'll run every day.
- See the [Connector catalogue](/connector-catalogue) for the full list of connectors that ship today.
