# Agent Metadata Properties

Core identification and classification properties for all agents.

---

## Property Reference

| Property     | Purpose                   | Format                                         |
| ------------ | ------------------------- | ---------------------------------------------- |
| `id`         | Compiled output path      | `_bmad/agents/{agent-name}/{agent-name}.md`    |
| `name`       | Persona's name            | "First Last" or "Name Title"                   |
| `title`      | Professional role         | "Code Review Specialist"                       |
| `icon`       | Visual identifier         | Single emoji only                              |
| `module`     | Team/ecosystem membership | `stand-alone`, `bmm`, `cis`, `bmgd`, or custom |
| `hasSidecar` | Sidecar folder exists     | `true` or `false` (Expert = true)              |

---

## id Property

The compiled output path after build.

**Format:** `_bmad/agents/{agent-name}/{agent-name}.md`

**Examples:**
```yaml
id: _bmad/agents/commit-poet/commit-poet.md
id: _bmad/agents/journal-keeper/journal-keeper.md
id: _bmad/agents/security-engineer/security-engineer.md
```

**Note:** The `id` is a unique identifier for potential future lookup if many compiled agents are merged into a single file. Conventionally matches the agent's filename pattern.

---

## name Property

The persona's identity - what the agent is called.

**Format:** Human name or descriptive name

```yaml
# ✅ CORRECT
name: 'Inkwell Von Comitizen' # peron name of commit-author title agent
name: 'Dr. Demento'  # person name for a joke writer agent
name: 'Clarity' # person name for a guided thought coach agent

# ❌ WRONG
name: 'commit-poet'  # That's the filename
name: 'Code Review Specialist'  # That's the title
```

---

## title Property

Professional role identifier.

**Format:** Professional title or role name

**Important:** The `title` determines the agent's filename:
- `title: 'Commit Message Artisan'` → `commit-message-artisan.agent.yaml`
- `title: 'Strategic Business Analyst'` → `strategic-business-analyst.agent.yaml`
- `title: 'Code Review Specialist'` → `code-review-specialist.agent.yaml`

The `id` and filename are derived from the `title` (kebab-cased).

**Difference from role:** `title` is the short identifier (filename), `role` is 1-2 sentences expanding on what the agent does.

```yaml
# ✅ CORRECT
title: 'Commit Message Artisan'
title: 'Strategic Business Analyst'
title: 'Code Review Specialist'

# ❌ WRONG
title: 'Inkwell Von Comitizen'  # That's the name
title: 'Writes git commits'  # Full sentence - not an identifying functional title
```

---

## icon Property

Single emoji representing the agent's personality/function.

**Format:** Exactly one emoji

```yaml
# ✅ CORRECT
icon: '🔧'
icon: '🧙‍♂️'
icon: '📜'

# ❌ WRONG
icon: '🔧📜'  # Multiple emojis
icon: 'wrench'  # Text, not emoji
icon: ''  # Empty
```

---

## module Property

Which module or ecosystem this agent belongs to.

**Valid Values:**

| Value         | Meaning                                 |
| ------------- | --------------------------------------- |
| `stand-alone` | Independent agent, not part of a module |
| `bmm`         | Business Management Module              |
| `cis`         | Continuous Innovation System            |
| `bmgd`        | BMAD Game Development                   |
| `{custom}`    | Any custom module code                  |

```yaml
# ✅ CORRECT
module: stand-alone
module: bmm
module: cis

# ❌ WRONG
module: standalone  # Missing hyphen
module: 'BMM'  # Uppercase
```

---

## hasSidecar Property

Whether this agent has a sidecar folder with additional files.

**Format:** Boolean (`true` or `false`)

| Agent Type | hasSidecar           |
| ---------- | -------------------- |
| Simple     | `false`              |
| Expert     | `true`               |
| Module     | depends on structure |

```yaml
# Simple Agent
hasSidecar: false

# Expert Agent
hasSidecar: true
```

**Note:** If `hasSidecar: true`, the compiler expects a `{agent-name}-sidecar/` folder.

---

## Name Confusion Checklist

Use this to avoid mixing up the "name" properties:

| Question                   | Answer                                                                               |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| What's the file called?    | Derived from `title`: `"Commit Message Artisan"` → `commit-message-artisan.agent.yaml` |
| What's the persona called? | `name` - "Inkwell Von Comitizen" (who the agent is)                                  |
| What's their job title?    | `title` - "Commit Message Artisan" (determines filename)                             |
| What do they do?           | `role` - 1-2 sentences expanding on the title                                       |
| What's the unique key?     | `id` - `_bmad/agents/commit-message-artisan/commit-message-artisan.md` (future lookup) |

---

## Common Issues

### Issue: name = title

**Wrong:**
```yaml
name: 'Commit Message Artisan'
title: 'Commit Message Artisan'
```

**Fix:**
```yaml
name: 'Inkwell Von Comitizen'
title: 'Commit Message Artisan'
```

### Issue: id path mismatch

**Wrong:** Agent file is `my-agent.agent.yaml` but:
```yaml
id: _bmad/agents/different-agent/different-agent.md
```

**Fix:** The `id` must match the filename:
```yaml
id: _bmad/agents/my-agent/my-agent.md
```

### Issue: Wrong module format

**Wrong:**
```yaml
module: Standalone
module: STAND_ALONE
```

**Fix:**
```yaml
module: stand-alone  # lowercase, hyphenated
```
