# Features and scope
> Create the feature a change belongs to, see which repos are writable, and promote another one the moment the work reaches further than you thought.
Source: https://ivar.run/docs/guide/features

import { Callout } from 'fumadocs-ui/components/callout';

A **feature** is a name, a branch, and the set of repos that branch exists in.
It decides two things: what the agent may write to, and what gets delivered
together.

## Create one

```text
/ivar-feature-create
```

Creates a persistent feature for cross-repo work. The name is one path segment,
unique in the hall, and becomes the branch name.

A fresh feature owns no repos. That is deliberate — repos join one at a time, so
scope is a decision you make rather than a guess you commit to up front.

## See where you stand

```text
/ivar-feature-status
```

Reports which repos are promoted — writable, on the feature's branch — and which
are read-only. Worth running at the start of every session: it is the fastest
answer to *why can the agent not edit this file?*

## Promote a repo

```text
/ivar-promote
```

Moves a repo from a read-only default-branch checkout to a writable
feature-branch worktree for the current feature. A branch that already exists is
adopted as it is; one that does not is cut from the repo's base.

<Callout title="Promote when you find out, not before">
  Halfway through a contract change you discover the shared types package needs
  a field too. That is the normal case, not a planning failure — promote it and
  keep going. Guessing the full set at creation time is what produces features
  that claim four repos and touch two.
</Callout>

## Which repos are related

```text
/ivar-relations [repo-name]
```

Maintains the **Repository relationships** region of `HALL.md`: human-confirmed,
directed sentences from one repo to another. A relation expresses co-belonging —
when work starts in the source repo, the target is likely to need a change too.

This is the context [planning](/docs/guide/planning) reads before it analyses
anything, which is what lets an analysis say *this will also touch `web`*
without rediscovering the relationship every time.

<Callout title="Confirmed by a human, on purpose">
  `/ivar-relations` is the only writer of that region. The planning flow reads
  it and may point out that code evidence contradicts the prose, but it never
  edits it behind your back.
</Callout>
