<!-- Markdown mirror. Canonical: https://empryo.com/docs/context/prompt-system -->

# Modes & the prompt

> Switch how the agent works with Ctrl+D, give it project rules in EMPRYO.md, and reuse instruction files you already wrote for Claude Code, Cursor and others.

![Each request carries only the tools the task needs, so more of the context window is left for your code.](https://empryo.com/media/forge-v2-loadout.svg)

*Each request carries only the tools the task needs, so more of the context window is left for your code.*

You control how the agent behaves in two ways: the **mode** you pick for the task, and the **instruction files** in your project.

## Modes

A mode changes how the agent approaches a task. Press `Ctrl+D` to cycle through them (`Shift+Tab` in the input box cycles backwards), or type `/mode <name>`:

| Mode | What the agent does |
|------|---------------------|
| `default` | Investigates, then implements |
| `architect` | Designs only: outlines and tradeoffs, no file edits |
| `plan` | Researches, writes a plan, waits for your OK, then carries it out (see [plan mode](/docs/recipes/plan-mode)) |
| `socratic` | Asks probing questions before doing anything |
| `challenge` | Plays devil's advocate and questions your assumptions |
| `auto` | Works on its own with as few interruptions as possible |

Each tab has its own mode, so you can plan in one tab and let another run in `auto`.

## Project instructions

Put project rules in an `EMPRYO.md` file at your project root, for example "use pnpm", "tests live next to the code", or "never touch the generated folder". Empryo loads it into every conversation in that project. Rules that apply to every project go in `~/.empryo/EMPRYO.md`. When you edit the project file, the next message uses the new rules, with no restart.

The global file is treated with more care, because every open tab shares it and a changed system prompt re-bills each tab's cached context. A change to `~/.empryo/EMPRYO.md` is picked up by a tab once that tab's [prompt cache](/docs/context/prompt-cache) has gone cold, and by every new tab at once. Background writers such as the SoulStack auto-update therefore never interrupt a warm conversation; your own edit lands when the tab next starts from a cold cache.

If your repository already has instruction files for other tools, you can turn those on too:

```json
{
  "instructionFiles": ["empryo", "claude", "cursorrules"]
}
```

| File | Written for |
|------|-------------|
| `EMPRYO.md` | Empryo (on by default) |
| `CLAUDE.md` | Claude Code |
| `.cursorrules` | Cursor |
| `.github/copilot-instructions.md` | GitHub Copilot |
| `.clinerules` | Cline |
| `.windsurfrules` | Windsurf |
| `AGENTS.md` | OpenAI Codex |
| `.aider.conf.yml` | Aider |
| `AMPLIFY.md` | Amp |
| `GEMINI.md`, `QWEN.md`, `AGENT.md`, `WARP.md`, `CLAUDE.local.md` | Gemini CLI, Qwen Code, Amp, Warp, Claude Code |
| `.rules`, `.continuerules`, `.roorules`, `.augment-guidelines`, `.junie/guidelines.md`, `.trae/rules/project_rules.md`, `.goosehints` | Zed, Continue, Roo, Augment, Junie, Trae, Goose |

In the terminal UI, `/instructions` lets you switch each file on or off.

By default, every enabled file is loaded for every model. To send a file only to certain models, use `instructionRouting`. You can target a model family, a provider, a model name pattern or one of your custom agents. For example, `CLAUDE.md` can go only to Claude models and `AGENTS.md` only to GPT models, while `EMPRYO.md` goes to both. See [configuration → instruction files](/docs/reference/configuration#load-a-file-only-for-some-models).

## Tuned for each model family

Different model families respond best to differently worded instructions. Empryo adjusts for Claude, OpenAI and Gemini models automatically, including when you reach them through a gateway such as OpenRouter or LLM Gateway. There is nothing to configure.
