kraal 0.2.0

A terminal workspace manager for SSH fleets and coding agents
# Configuration

`~/.config/kraal/config.toml`; `kraal config default` prints every setting with its default, and a
config only needs the keys it changes:

```toml
pane_frames = true
mouse = true
save_scrollback = true   # panes show their text again after a restart; it is written to disk

[sidebar]
visible = true
width = 28

[notifications]
mode = "terminal"        # terminal, system, both, off

[keys]
preset = "kraal"         # or "classic" for single-key commands
prefix = ["ctrl+b"]

[keys.leader]            # keys after the prefix; a space separates a sequence
split_right = ["%", "P right"]

[keys.direct]            # keys without the prefix
toggle_floating = ["alt+f"]
```

`kraal config check` validates the config, every workspace file, `accounts.toml` and
`servers.toml`; it fails when one cannot be read. `kraal config reload` makes the running session
read the config again: keys, theme, sidebar, mouse, pane frames, notifications, tools, hints, hooks,
production words, contexts and saving scrollback apply at once; panes already open keep their
shell and scrollback length.

`save_scrollback` saves what each pane shows, its scrollback included, in
`~/.local/state/kraal/scrollback`, so that panes show it again after a restart (see
[Persistence](workspaces.md#persistence)). Scrollback can hold secrets: `false` saves none and
deletes what was saved.

`[worktrees]` prepares the worktrees kraal makes for agents, in every repository, and numbers
their ports (see [worktrees](agents.md#worktrees)):

```toml
[worktrees]
copy = [".env*"]         # copied from the main checkout into each new worktree
setup = []               # run there before the agent starts, after the repository's own
port_step = 10           # $KRAAL_PORT_OFFSET = the worktree's number × port_step
port_base = 3000         # also $PORT = port_base + $KRAAL_PORT_OFFSET (unset: no $PORT)
```

Themes: `[theme]` takes a `preset` (`default`, `high-contrast`, `ascii` for terminals or fonts
without box drawing) and optional `accent`, `dim`, `sync`, `production` colours (names, `#rrggbb`,
0-255) and a `frames` style (`rounded`, `plain`, `thick`, `double`, `ascii`).