# CLI overview
> What every ivar command has in common — the machine-readable contract, colour handling, and the command groups.
Source: https://ivar.run/docs/reference/cli

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

The harness calls these commands for you. This section documents them for when
you want to run one yourself, script one, or understand what a slash command
just did.

```sh
ivar --help
ivar <group> <command> --help
```

## Command groups

| Group | What it owns |
| --- | --- |
| [Hall](/docs/reference/hall) | `init`, `sync`, `status`, `doctor`, `cleanup`, `migrate`, `repo`, `provider` |
| [Feature](/docs/reference/feature) | `feature create`, `promote`, `deliver`, `integrate`, and the rest of the feature lifecycle |
| [Session](/docs/reference/session) | `session start`, `connect`, `convert`, `stop`, `relay`, `prune` |
| [Skill](/docs/reference/skill) | `skill add`, `update`, `detach`, `sync`, `doctor` |

`ivar plan` is also a group, driven almost entirely by
[`/ivar-plan`](/docs/guide/planning) rather than by hand.

## `--json`

Every command takes it.

```sh
ivar status --json
```

<Callout title="One value, two renderings">
  `--json` prints exactly the value the command computed. The human-readable
  text is a rendering of that same value, so the two can never tell you
  different things — script against the JSON.
</Callout>

## `--color`

`auto` (the default) follows `NO_COLOR`, then `FORCE_COLOR`, then whether the
stream is a terminal — a pipe or a redirect gets none. `always` and `never`
override all of that.

Only labels are ever coloured; values never are, so `--json` output is
unaffected either way.
