docs · pre-release
Menu
Reference / CLI

CLI reference

Every verb shep 0.1.26understands, generated from the binary's own --help. Nothing below is hand-typed.

note

--home, --format table|json and -q/--quietwork on every verb on this page. They're global flags, flattened onto each subcommand rather than repeated in the prose below. See the full dump under "Every verb, at a glance" for exactly how they render on each one.

careful

Windows isn't supported yet. Every verb here prints an error naming that and exits 1 on that platform. There's no partial subset that works.

Aliases at a glance

Five aliases are permanent, not shorthand that might go away: the theme never costs a straight verb its plain name.

shep flock
list, ls
shep bleats
logs
shep lookout
dash
shep stock
scale
shep whisper
sendline

Every verb, at a glance

The exact output of shep --help against this build: the full command list, the global options, and their defaults.

$ shep --help
A process manager for your flock

Usage: shep [OPTIONS] <COMMAND>

Getting started
  shep start server.js    start it and keep it alive
  shep flock              see what's running
  shep bleats server      follow its output
  shep save               remember this flock across reboots
  shep startup            bring it back after a reboot

Run things       start serve stop restart reload delete stock
See what's up    flock describe bleats lookout fold barks
Survive reboots  save muster startup unstartup
Talk to a sheep  trigger signal whisper
The shepherd     ping kill reopen flush set get unset
Dogs and agents  dogs enable disable adopt rehome whistle
Foreground runs  runtime dev
Coming from pm2  import
Help             welcome init help completions style

Aliases          flock: list, ls   bleats: logs   lookout: dash   stock: scale   whisper: sendline
Upgrading        cargo install shep replaces the binary, not the running shepherd: shep daemon reload

      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Run `shep help <command>` for one command, or `shep welcome` for the tour.

Managing a sheep

shep start
shep start [OPTIONS] [TARGETS]...

Start a sheep from a script, a Flockfile, or stdin

full --help output
$ shep start --help
Start a sheep from a script, a Flockfile, or stdin

Usage: shep start [OPTIONS] [TARGETS]...

Arguments:
  [TARGETS]...
          Selectors, script paths, Flockfiles, or `-` to read Flockfile JSON from stdin
          
          A target is resolved in four tiers and the first one that matches wins: a sheep the flock
          already has, by id or by name; then a fold, written either as `fold:<name>` or as the bare
          fold name; then a Flockfile, by its extension; then a path on disk, started as a script.
          
          So `shep start backed` starts the fold `backed` even when a file called `backed` is
          sitting in the current directory. Write `./backed` to mean the file: a sheep name may
          never contain a path separator, so a target carrying one is always a path.
          
          The wildcard selectors work here too, and mean what they mean everywhere else: `all`,
          `/regex/`, and glob patterns such as `web-*`. They reach only sheep the flock already has,
          since there is nothing to register. A sheep already running is reported and left alone;
          `restart` is the verb that replaces one.
          
          Omit the targets to start the Flockfile in the current directory, or, when there is none,
          to bring a shepherd up with nothing running yet.
          
          Several are started in turn, not atomically: if the second fails the first is already up,
          and the exit code is the first failure. `--name` is refused with more than one, since a
          name is unique to one sheep.

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --name <NAME>
          Name for this sheep (script form only)

      --fold <FOLD>
          Fold to place this sheep in

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --cwd <CWD>
          Working directory to run in (default: where you ran `shep start`)

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

      --interpreter <INTERPRETER>
          Interpreter to run the script with, overriding both shep.toml's extension mapping and a
          Flockfile app's own interpreter field.
          
          The precedence, lowest to highest: shep.toml's interpreters table (matched against the
          script's extension), then a Flockfile's own interpreter for that app, then this flag. shep
          never guesses an interpreter on its own; every one of those three is something an operator
          wrote down. Pass "none" to run the script directly, overriding a mapping or a Flockfile
          that would otherwise pick one.

      --flockfile
          Read TARGET as a Flockfile rather than as a script path.
          
          Required for a `.js` Flockfile and the only way to reach one: shep reads a `.js` config by
          running it through node, which is arbitrary code execution, so it never happens because a
          file merely has that extension. Without this flag `shep start server.js` starts
          `server.js` as a script, which is what it has always meant.

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep serve
shep serve [OPTIONS] <ROOT>

Serve a directory over plain HTTP, as a managed sheep.

Registers a sheep whose command line is this invocation, canonicalized and with --foreground appended — the same worker that answers every request also IS the registered sheep, so shep describe shows exactly what will run again on a restart.

Binds loopback (127.0.0.1:8080) by default. A wider --bind is allowed, not refused, and gets a stderr notice naming what it exposes — the docroot is published to anything that can reach the port, and unencrypted unless the operator puts a proxy in front. --auth narrows that to anyone who also has the password, still sent as plain HTTP basic auth.

Dotfiles, directory listings, and any symlink under the docroot are all refused by default — --hidden, --listing, and --follow-symlinks opt back in, each with its own reason a repo checkout or a deploy layout might need it.

--foreground runs the worker directly in this terminal instead of registering a sheep — also how the registered sheep runs; the flag on the end of its own command line is the only difference.

full --help output
$ shep serve --help
Serve a directory over plain HTTP, as a managed sheep.

Registers a sheep whose command line is this invocation, canonicalized and with `--foreground`
appended — the same worker that answers every request also IS the registered sheep, so `shep
describe` shows exactly what will run again on a restart.

Binds loopback (`127.0.0.1:8080`) by default. A wider `--bind` is allowed, not refused, and gets a
stderr notice naming what it exposes — the docroot is published to anything that can reach the port,
and unencrypted unless the operator puts a proxy in front. `--auth` narrows that to anyone who also
has the password, still sent as plain HTTP basic auth.

Dotfiles, directory listings, and any symlink under the docroot are all refused by default —
`--hidden`, `--listing`, and `--follow-symlinks` opt back in, each with its own reason a repo
checkout or a deploy layout might need it.

`--foreground` runs the worker directly in this terminal instead of registering a sheep — also how
the registered sheep runs; the flag on the end of its own command line is the only difference.

Usage: shep serve [OPTIONS] <ROOT>

Arguments:
  <ROOT>
          Directory to serve

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --port <PORT>
          Port to listen on
          
          [default: 8080]

      --bind <BIND>
          Address to bind. Loopback unless you say otherwise — a wider bind publishes every file
          under the directory to anything that can reach the port
          
          [default: 127.0.0.1]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --name <NAME>
          Name for this sheep (default: the directory's own name)

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --fold <FOLD>
          Fold to place this sheep in

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

      --spa
          Serve index.html for paths that do not exist, for a single-page app. Only for requests
          that accept HTML, so a missing script still 404s

      --listing
          List a directory that has no index.html. Off by default: a listing publishes every
          filename under it

      --hidden
          Serve files and directories whose names begin with a dot. Off by default: serving a
          project directory would otherwise publish `.env` and the whole `.git` history. The one
          real use is `.well-known/acme-challenge`

      --follow-symlinks
          Follow symlinks under the docroot, reopening the check-then-open race refused by default.
          Needed for deploy layouts like `current -> releases/2026-08-15`; off unless you ask for it

      --auth <AUTH>
          File holding one `user:password` line, mode 0600, required on every request. Sent over
          plain HTTP — base64, not encryption

      --foreground
          Serve in this terminal instead of registering a sheep.
          
          This is also how the registered sheep runs: the command line in `shep describe` is this
          one with the flag on the end.

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep stop
shep stop [OPTIONS] <SELECTORS>...

Stop one or more sheep

full --help output
$ shep stop --help
Stop one or more sheep

Usage: shep stop [OPTIONS] <SELECTORS>...

Arguments:
  <SELECTORS>...
          One or more: name, id, `name:slot`, `all`, `zeus-*`, `/regex/`, `fold:<name>`
          
          Several are applied in turn, not atomically: `shep stop a b c` where `b` matches nothing
          still stops `a` and `c`, and the exit code is the first failure.
          
          A pattern carrying `*`, `?`, `[` or `{` is a glob, anchored, so `zeus-*` selects
          `zeus-auth` and not `my-zeus-auth`. Quote it: your shell expands `zeus-*` against
          filenames first, and zsh refuses outright when none match. A name with no such character
          is exact, so `web.1` is the sheep called `web.1`.

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep restart
shep restart [OPTIONS] <SELECTORS>...

Restart one or more sheep

full --help output
$ shep restart --help
Restart one or more sheep

Usage: shep restart [OPTIONS] <SELECTORS>...

Arguments:
  <SELECTORS>...
          One or more: name, id, `name:slot`, `all`, `zeus-*`, `/regex/`, `fold:<name>`
          
          Several are applied in turn, not atomically: `shep stop a b c` where `b` matches nothing
          still stops `a` and `c`, and the exit code is the first failure.
          
          A pattern carrying `*`, `?`, `[` or `{` is a glob, anchored, so `zeus-*` selects
          `zeus-auth` and not `my-zeus-auth`. Quote it: your shell expands `zeus-*` against
          filenames first, and zsh refuses outright when none match. A name with no such character
          is exact, so `web.1` is the sheep called `web.1`.

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep reload
shep reload [OPTIONS] <SELECTORS>...

Reload one or more sheep, one instance at a time.

Each instance is replaced by a fresh one that has to become ready before the reload moves on, so a release that never comes up is reported as a failure rather than as a success.

What that failure COSTS depends on the order, and the order depends on the app.

An app with a readiness_probe and no reuse_port is replaced serially: the old instance drains first, then the new one starts in its place. A probe asks an address, and an address cannot say which process answered it. Run both at once and the outgoing instance answers for the incoming one, so shep would call a release ready that never bound anything.

The old instance is gone by the time the new one is judged, so there is nothing to go back to. A replacement that never becomes ready is left running and NOT marked online, and the reload is abandoned, which for a one-instance app means the gap lasts until you act on it. A rollback that points the app back at working code and reloads again is what ends it; that reload can reach the instance this one left behind.

Everything else overlaps, old and new running together: an app with no probe, an app using wait_ready (its channel belongs to one instance, so nothing else can answer it), and a probed app that sets reuse_port.

An overlap asks the same thing of all three. Both instances are bound at once, so an app that binds an address has to share the socket itself, with SO_REUSEPORT set before it binds; shep binds nothing and cannot set it on the app's behalf. Without that the replacement takes EADDRINUSE on every reload, and the reload is abandoned with the old instance left serving. This command has already exited 0 by then, so process.reload_abandoned on the bus is the only report of it.

reuse_port neither creates that requirement nor satisfies it. It is how a probed app says it is already handling the sharing, and so asks for the overlap back.

An overlap is not zero downtime either. The old listener's queue of connections it has not accepted yet is dropped when it closes, so an app that does not stop accepting and finish what it has in hand before graceful_timeout runs out loses whatever was waiting there.

Exits as soon as the shepherd accepts the reload, printing the flock as it stood at that moment — a clustered app takes longer to swap than any answer can wait for. The swaps themselves are reported on the bus, under process.reload, process.reloaded and process.reload_abandoned.

full --help output
$ shep reload --help
Reload one or more sheep, one instance at a time.

Each instance is replaced by a fresh one that has to become ready before the reload moves on, so a
release that never comes up is reported as a failure rather than as a success.

What that failure COSTS depends on the order, and the order depends on the app.

An app with a readiness_probe and no reuse_port is replaced serially: the old instance drains first,
then the new one starts in its place. A probe asks an address, and an address cannot say which
process answered it. Run both at once and the outgoing instance answers for the incoming one, so
shep would call a release ready that never bound anything.

The old instance is gone by the time the new one is judged, so there is nothing to go back to. A
replacement that never becomes ready is left running and NOT marked online, and the reload is
abandoned, which for a one-instance app means the gap lasts until you act on it. A rollback that
points the app back at working code and reloads again is what ends it; that reload can reach the
instance this one left behind.

Everything else overlaps, old and new running together: an app with no probe, an app using
wait_ready (its channel belongs to one instance, so nothing else can answer it), and a probed app
that sets reuse_port.

An overlap asks the same thing of all three. Both instances are bound at once, so an app that binds
an address has to share the socket itself, with SO_REUSEPORT set before it binds; shep binds nothing
and cannot set it on the app's behalf. Without that the replacement takes EADDRINUSE on every
reload, and the reload is abandoned with the old instance left serving. This command has already
exited 0 by then, so process.reload_abandoned on the bus is the only report of it.

reuse_port neither creates that requirement nor satisfies it. It is how a probed app says it is
already handling the sharing, and so asks for the overlap back.

An overlap is not zero downtime either. The old listener's queue of connections it has not accepted
yet is dropped when it closes, so an app that does not stop accepting and finish what it has in hand
before graceful_timeout runs out loses whatever was waiting there.

Exits as soon as the shepherd accepts the reload, printing the flock as it stood at that moment — a
clustered app takes longer to swap than any answer can wait for. The swaps themselves are reported
on the bus, under process.reload, process.reloaded and process.reload_abandoned.

Usage: shep reload [OPTIONS] <SELECTORS>...

Arguments:
  <SELECTORS>...
          One or more: name, id, `name:slot`, `all`, `zeus-*`, `/regex/`, `fold:<name>`
          
          Several are applied in turn, not atomically: `shep stop a b c` where `b` matches nothing
          still stops `a` and `c`, and the exit code is the first failure.
          
          A pattern carrying `*`, `?`, `[` or `{` is a glob, anchored, so `zeus-*` selects
          `zeus-auth` and not `my-zeus-auth`. Quote it: your shell expands `zeus-*` against
          filenames first, and zsh refuses outright when none match. A name with no such character
          is exact, so `web.1` is the sheep called `web.1`.

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep delete
shep delete [OPTIONS] <SELECTORS>...

Delete one or more sheep from the flock

full --help output
$ shep delete --help
Delete one or more sheep from the flock

Usage: shep delete [OPTIONS] <SELECTORS>...

Arguments:
  <SELECTORS>...
          One or more: name, id, `name:slot`, `all`, `zeus-*`, `/regex/`, `fold:<name>`
          
          Several are applied in turn, not atomically: `shep stop a b c` where `b` matches nothing
          still stops `a` and `c`, and the exit code is the first failure.
          
          A pattern carrying `*`, `?`, `[` or `{` is a glob, anchored, so `zeus-*` selects
          `zeus-auth` and not `my-zeus-auth`. Quote it: your shell expands `zeus-*` against
          filenames first, and zsh refuses outright when none match. A name with no such character
          is exact, so `web.1` is the sheep called `web.1`.

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep stockscale
shep stock [OPTIONS] <NAME> <COUNT>

Set how many instances one app runs — the stocking rate.

An absolute count, not a change: shep stock web 4 means web has four instances afterwards, whatever it had before. There is no +N/-N form — run it twice and get the same flock.

Stocking up fills the lowest free instance slots; stocking down releases the highest, so stocking out and back returns the same slot numbers, the same SHEP_INSTANCE values and the same log files it started with.

Exits as soon as the shepherd accepts, printing the instances that remain. On a stock-down the departing instances are still running their stop ladders at that point; they report themselves on the bus, under process.delete.

The new count is written to the muster roll, so shep save and a reboot keep it.

full --help output
$ shep stock --help
Set how many instances one app runs — the stocking rate.

An absolute count, not a change: `shep stock web 4` means web has four instances afterwards,
whatever it had before. There is no +N/-N form — run it twice and get the same flock.

Stocking up fills the lowest free instance slots; stocking down releases the highest, so stocking
out and back returns the same slot numbers, the same SHEP_INSTANCE values and the same log files it
started with.

Exits as soon as the shepherd accepts, printing the instances that remain. On a stock-down the
departing instances are still running their stop ladders at that point; they report themselves on
the bus, under process.delete.

The new count is written to the muster roll, so `shep save` and a reboot keep it.

Usage: shep stock [OPTIONS] <NAME> <COUNT>

Arguments:
  <NAME>
          The app's name

  <COUNT>
          How many instances it runs afterwards

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Inspecting the flock

shep flocklistls
shep flock [OPTIONS]

List the flock

full --help output
$ shep flock --help
List the flock

Usage: shep flock [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep describe
shep describe [OPTIONS] <SELECTORS>...

Describe one sheep in detail.

Includes the sheep's lambs: the processes the OS reports as descendants of its pid. That is not the same set the stop ladder kills, which acts on the process group — a double-forked descendant leaves this list and is still killed, and a setsid() one stays in it and survives.

Lamb names are executable names, never command lines.

full --help output
$ shep describe --help
Describe one sheep in detail.

Includes the sheep's lambs: the processes the OS reports as descendants of its pid. That is not the
same set the stop ladder kills, which acts on the process group — a double-forked descendant leaves
this list and is still killed, and a setsid() one stays in it and survives.

Lamb names are executable names, never command lines.

Usage: shep describe [OPTIONS] <SELECTORS>...

Arguments:
  <SELECTORS>...
          One or more: name, id, `name:slot`, `all`, `zeus-*`, `/regex/`, `fold:<name>`
          
          Several are applied in turn, not atomically: `shep stop a b c` where `b` matches nothing
          still stops `a` and `c`, and the exit code is the first failure.
          
          A pattern carrying `*`, `?`, `[` or `{` is a glob, anchored, so `zeus-*` selects
          `zeus-auth` and not `my-zeus-auth`. Quote it: your shell expands `zeus-*` against
          filenames first, and zsh refuses outright when none match. A name with no such character
          is exact, so `web.1` is the sheep called `web.1`.

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep fold
shep fold [OPTIONS] <NAME>

List one fold

full --help output
$ shep fold --help
List one fold

Usage: shep fold [OPTIONS] <NAME>

Arguments:
  <NAME>
          The fold to list

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep dogs
shep dogs [OPTIONS] [FILTER]

List the dogs, and nothing else. --available lists the community index of dogs you could adopt instead of the ones this shepherd is running

full --help output
$ shep dogs --help
List the dogs, and nothing else. `--available` lists the community index of dogs you could adopt
instead of the ones this shepherd is running

Usage: shep dogs [OPTIONS] [FILTER]

Arguments:
  [FILTER]
          Narrow the listing to entries whose name, package or description contains this text,
          case-insensitively

Options:
      --available
          List the dogs published in the community index instead of the ones this shepherd is
          running. Needs no shepherd

      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Dogs

shep enable
shep enable [OPTIONS] <NAME>

Turn on a registered dog: writes [daemon] enabled_dogs in shep.toml, and starts it now if a shepherd is running.

Writes the config either way and exits 0 even with no shepherd running — the dog comes up with the next one. shep muster is the only verb that autostarts a shepherd; this is not it.

full --help output
$ shep enable --help
Turn on a registered dog: writes `[daemon] enabled_dogs` in `shep.toml`, and starts it now if a
shepherd is running.

Writes the config either way and exits 0 even with no shepherd running — the dog comes up with the
next one. `shep muster` is the only verb that autostarts a shepherd; this is not it.

Usage: shep enable [OPTIONS] <NAME>

Arguments:
  <NAME>
          The dog's name — the `[dog.<name>]` config key

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep disable
shep disable [OPTIONS] <NAME>

Turn off a registered dog: removes it from [daemon] enabled_dogs, and stops it now if a shepherd is running.

Leaves [dog.<name>] in place — the dog's own configuration survives a disable/enable cycle. shep rehome is the verb that forgets a dog entirely.

full --help output
$ shep disable --help
Turn off a registered dog: removes it from `[daemon] enabled_dogs`, and stops it now if a shepherd
is running.

Leaves `[dog.<name>]` in place — the dog's own configuration survives a disable/enable cycle. `shep
rehome` is the verb that forgets a dog entirely.

Usage: shep disable [OPTIONS] <NAME>

Arguments:
  <NAME>
          The dog's name — the `[dog.<name>]` config key

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep adopt
shep adopt [OPTIONS] <PATH>

Vet a binary shep has never seen and register it as a dog: writes [daemon] adopted_dogs and [daemon] enabled_dogs in shep.toml, and starts it now if a shepherd is running.

The path can be given as-is, with a leading ~/, or as a bare name already on $PATH (cargo install puts one there). Refuses, before touching the config at all, a path that resolves to nothing that exists, is not a file, has no execute bit set, or that this kernel will not exec — and refuses a name that already names a built-in verb or alias, since such a dog could never be reached. An adopted dog runs at the shepherd's own trust level, with no sandboxing beyond it. Once adopted, shep <name> [args...] runs it directly, passing args through untouched — a second invocation mode from the one the shepherd itself uses to supervise it.

full --help output
$ shep adopt --help
Vet a binary shep has never seen and register it as a dog: writes `[daemon] adopted_dogs` and
`[daemon] enabled_dogs` in `shep.toml`, and starts it now if a shepherd is running.

The path can be given as-is, with a leading `~/`, or as a bare name already on `$PATH` (`cargo
install` puts one there). Refuses, before touching the config at all, a path that resolves to
nothing that exists, is not a file, has no execute bit set, or that this kernel will not exec — and
refuses a name that already names a built-in verb or alias, since such a dog could never be reached.
An adopted dog runs at the shepherd's own trust level, with no sandboxing beyond it. Once adopted,
`shep <name> [args...]` runs it directly, passing `args` through untouched — a second invocation
mode from the one the shepherd itself uses to supervise it.

Usage: shep adopt [OPTIONS] <PATH>

Arguments:
  <PATH>
          Path to the dog's binary, vetted before `shep.toml` is touched. Resolved before vetting:
          as given, with a leading `~/` expanded, or looked up on `$PATH` if it names no directory —
          first hit wins

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --name <NAME>
          The dog's name — the `[dog.<name>]` config key. Defaults to the binary's file stem with a
          leading `shep-` stripped

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep rehome
shep rehome [OPTIONS] <NAME>

Forget an adopted dog entirely: stops it if a shepherd is running, and removes it from [daemon] enabled_dogs, [daemon] adopted_dogs, and its own [dog.<name>] table.

shep disable stops a dog without forgetting its configuration; rehome is the verb that forgets it.

full --help output
$ shep rehome --help
Forget an adopted dog entirely: stops it if a shepherd is running, and removes it from `[daemon]
enabled_dogs`, `[daemon] adopted_dogs`, and its own `[dog.<name>]` table.

`shep disable` stops a dog without forgetting its configuration; `rehome` is the verb that forgets
it.

Usage: shep rehome [OPTIONS] <NAME>

Arguments:
  <NAME>
          The dog's name — the `[dog.<name>]` config key

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Talking to a sheep

shep trigger
shep trigger [OPTIONS] <SELECTOR> <ACTION> [PARAMS]

Send a named action to matched sheep and report what each app answers.

Reaches an app over its shepherd channel — the fd-3 pipe the daemon opens when the app's Flockfile sets channel = true. wait_ready and shutdown_with_message both imply the same channel, so either one of the three is enough; a sheep with none of them answers a no_channel row instead of a reply, naming the same fields.

action and any params are free-form and unvalidated here — sent to the app verbatim, on its own shepherd-channel wire, for the app itself to recognize or refuse.

full --help output
$ shep trigger --help
Send a named action to matched sheep and report what each app answers.

Reaches an app over its shepherd channel — the fd-3 pipe the daemon opens when the app's Flockfile
sets `channel = true`. `wait_ready` and `shutdown_with_message` both imply the same channel, so
either one of the three is enough; a sheep with none of them answers a `no_channel` row instead of a
reply, naming the same fields.

`action` and any `params` are free-form and unvalidated here — sent to the app verbatim, on its own
shepherd-channel wire, for the app itself to recognize or refuse.

Usage: shep trigger [OPTIONS] <SELECTOR> <ACTION> [PARAMS]

Arguments:
  <SELECTOR>
          name, id, `name:slot`, `all`, `/regex/`, or `fold:<name>`

  <ACTION>
          Action name — free-form, defined by the app

  [PARAMS]
          Argument text for the action, passed through to the app verbatim

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep signal
shep signal [OPTIONS] <SELECTOR> <SIGNAL>

Send a unix signal to matched sheep.

Delivered to each sheep's own process, not to its process group — the lambs it forked are not signalled. This is a nudge to the application (SIGHUP to re-read config, SIGUSR1 to dump state); shep stop is what runs the stop ladder, and shep reload is what swaps instances.

Accepted: SIGHUP, SIGINT, SIGQUIT, SIGTERM, SIGUSR1, SIGUSR2, SIGWINCH, SIGCONT, SIGKILL. The SIG prefix and the case are both optional. SIGSTOP is refused: a stopped sheep still reads online in every listing shep can produce.

Delivery is not action. A signal the app blocks or ignores is reported delivered, because the kernel took it and there is nothing further shep can see.

full --help output
$ shep signal --help
Send a unix signal to matched sheep.

Delivered to each sheep's own process, not to its process group — the lambs it forked are not
signalled. This is a nudge to the application (SIGHUP to re-read config, SIGUSR1 to dump state);
`shep stop` is what runs the stop ladder, and `shep reload` is what swaps instances.

Accepted: SIGHUP, SIGINT, SIGQUIT, SIGTERM, SIGUSR1, SIGUSR2, SIGWINCH, SIGCONT, SIGKILL. The SIG
prefix and the case are both optional. SIGSTOP is refused: a stopped sheep still reads online in
every listing shep can produce.

Delivery is not action. A signal the app blocks or ignores is reported delivered, because the kernel
took it and there is nothing further shep can see.

Usage: shep signal [OPTIONS] <SELECTOR> <SIGNAL>

Arguments:
  <SELECTOR>
          name, id, `name:slot`, `all`, `/regex/`, or `fold:<name>`

  <SIGNAL>
          Signal name, e.g. `SIGHUP` or `hup`

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep whispersendline
shep whisper [OPTIONS] <SELECTOR> <LINE>

Write one line to matched sheep's stdin.

Only reaches an app whose Flockfile sets stdin = true. Nothing else implies it — unlike the shepherd channel, which wait_ready and shutdown_with_message both turn on — because nothing in shep needs a sheep's stdin except this verb. A sheep without it answers a no_stdin row naming the field.

One line, and the terminator is shep's to add: a line containing a newline or a carriage return is a usage error rather than two commands.

sent means the bytes were written and flushed to the pipe, not that the app read them. A pipe holds 64 KiB before it blocks, so a short line to an app that never reads its stdin is still sent.

full --help output
$ shep whisper --help
Write one line to matched sheep's stdin.

Only reaches an app whose Flockfile sets `stdin = true`. Nothing else implies it — unlike the
shepherd channel, which `wait_ready` and `shutdown_with_message` both turn on — because nothing in
shep needs a sheep's stdin except this verb. A sheep without it answers a `no_stdin` row naming the
field.

One line, and the terminator is shep's to add: a line containing a newline or a carriage return is a
usage error rather than two commands.

`sent` means the bytes were written and flushed to the pipe, not that the app read them. A pipe
holds 64 KiB before it blocks, so a short line to an app that never reads its stdin is still `sent`.

Usage: shep whisper [OPTIONS] <SELECTOR> <LINE>

Arguments:
  <SELECTOR>
          name, id, `name:slot`, `all`, `/regex/`, or `fold:<name>`

  <LINE>
          The line, without a trailing newline — shep adds exactly one

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Logs and alerts

shep bleatslogs
shep bleats [OPTIONS] [SELECTOR]

Show or follow bleats (log output) for one or more sheep

full --help output
$ shep bleats --help
Show or follow bleats (log output) for one or more sheep

Usage: shep bleats [OPTIONS] [SELECTOR]

Arguments:
  [SELECTOR]
          Which sheep (default: all)
          
          [default: all]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --no-follow
          Print the tail of each sheep's log file and exit, instead of following

      --lines <N>
          How many existing lines of each stream to print before following
          
          A sheep that already crashed has said everything it is going to say, so following alone
          shows an empty screen while the reason sits in the file. This prints that much history
          first, then follows.
          
          Counted per stream, so the default prints up to this many lines of stdout and up to this
          many of stderr for each matched sheep. Narrow it with `--out` or `--err`.
          
          `0` prints no history at all, following only what arrives next.
          
          [default: 15]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --err
          Only stderr

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

      --out
          Only stdout

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep reopen
shep reopen [OPTIONS] [SELECTOR]

Reopen log files after an external rotator has renamed them

full --help output
$ shep reopen --help
Reopen log files after an external rotator has renamed them

Usage: shep reopen [OPTIONS] [SELECTOR]

Arguments:
  [SELECTOR]
          Which sheep (default: all)
          
          [default: all]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep flush
shep flush [OPTIONS] [SELECTOR]

Empty the log files of one or more sheep, or the shepherd's own

full --help output
$ shep flush --help
Empty the log files of one or more sheep, or the shepherd's own

Usage: shep flush [OPTIONS] [SELECTOR]

Arguments:
  [SELECTOR]
          name, id, `name:slot`, `all`, `/regex/`, `fold:<name>` (required unless --daemon)

Options:
      --daemon
          Empty the shepherd's own logs instead of any sheep's

      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep barks
shep barks [OPTIONS]

Show the alert history: barks.jsonl, newest last.

Reads the file directly and never connects to the shepherd — the history is on disk precisely so it survives the shepherd, and the case this verb exists for is an operator reading it after a crash. Same precedent as shep flush --daemon, which also works on files rather than through the socket.

full --help output
$ shep barks --help
Show the alert history: `barks.jsonl`, newest last.

Reads the file directly and never connects to the shepherd — the history is on disk precisely so it
survives the shepherd, and the case this verb exists for is an operator reading it after a crash.
Same precedent as `shep flush --daemon`, which also works on files rather than through the socket.

Usage: shep barks [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --tail <TAIL>
          Show only the last N barks

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

The KV store

shep set
shep set [OPTIONS] <KEY> <VALUE>

Store a value in the shepherd's key/value store.

Reads and writes $SHEP_HOME/kv.json directly and never connects to the shepherd — the store is for ad-hoc notes and dog settings, and it has to work while nothing is running, exactly as shep enable does.

Keys are flat: letters, digits, ., _ and -, up to 128 bytes, not starting with a dot. A dot is part of the name — bark.cooldown is one key, not a path into anything.

full --help output
$ shep set --help
Store a value in the shepherd's key/value store.

Reads and writes `$SHEP_HOME/kv.json` directly and never connects to the shepherd — the store is for
ad-hoc notes and dog settings, and it has to work while nothing is running, exactly as `shep enable`
does.

Keys are flat: letters, digits, `.`, `_` and `-`, up to 128 bytes, not starting with a dot. A dot is
part of the name — `bark.cooldown` is one key, not a path into anything.

Usage: shep set [OPTIONS] <KEY> <VALUE>

Arguments:
  <KEY>
          The key

  <VALUE>
          The value

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep get
shep get [OPTIONS] [KEY]

Read one value from the store, or list the whole store with no key

full --help output
$ shep get --help
Read one value from the store, or list the whole store with no key

Usage: shep get [OPTIONS] [KEY]

Arguments:
  [KEY]
          The key; omit to list every key

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep unset
shep unset [OPTIONS] [KEY]

Remove one key from the store, or every key with --all

full --help output
$ shep unset --help
Remove one key from the store, or every key with --all

Usage: shep unset [OPTIONS] [KEY]

Arguments:
  [KEY]
          The key to remove

Options:
      --all
          Remove every key

      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Interfaces

shep lookoutdash
shep lookout [OPTIONS]

Watch the flock on a live dashboard.

Reads the shepherd two ways at once: it subscribes to the event bus so the screen moves as things happen, and it re-lists the flock every two seconds so a dropped event cannot leave the screen quietly wrong.

If the shepherd stops answering, lookout re-dials a few times and then says so and stops updating. The values on screen stay exactly as they were, and it does not exit — you do.

Needs a terminal: with stdout redirected it refuses rather than writing escape sequences into a file.

full --help output
$ shep lookout --help
Watch the flock on a live dashboard.

Reads the shepherd two ways at once: it subscribes to the event bus so the screen moves as things
happen, and it re-lists the flock every two seconds so a dropped event cannot leave the screen
quietly wrong.

If the shepherd stops answering, lookout re-dials a few times and then says so and stops updating.
The values on screen stay exactly as they were, and it does not exit — you do.

Needs a terminal: with stdout redirected it refuses rather than writing escape sequences into a
file.

Usage: shep lookout [OPTIONS]

Options:
      --allow-control
          Open the dashboard's action gate. Off by default.
          
          With the gate open, `x` (stop), `R` (restart) and `L` (reload) each arm a confirm instead
          of acting on the keypress that pressed it; Enter sends the request, any other key cancels,
          and an unanswered confirm expires after ten seconds. Off, all three refuse outright with
          `read-only: actions need --allow-control`.
          
          A guard against a keystroke in a window you were reading, not a security boundary: lookout
          runs as you, so anything it could do you can already do with `shep stop`. Can also be set
          with `shep set lookout.allow_control true`; this flag wins.

      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep whistle
shep whistle [OPTIONS]

Serve the MCP interface on stdin/stdout for an AI agent.

Speaks the Model Context Protocol over stdio: an agent host launches this process and talks JSON-RPC to it on the pipe. It writes nothing else to stdout, because stdout is the wire.

Five read-only tools are always offered. The four that act — start_sheep, stop_sheep, restart_sheep, reload_sheep — exist only when [whistle] allow_control = true in $SHEP_HOME/shep.toml.

That gate is a guard against an agent acting on its own reading of your flock, not a security boundary: whistle runs as you, so anything it could do you can already do with shep stop. There is deliberately no flag for it — legibility, not containment: a boolean in shep.toml has a diff and an mtime an operator can audit, and --home/SHEP_HOME already choose which shep.toml that is, so a flag would open nothing those don't already.

full --help output
$ shep whistle --help
Serve the MCP interface on stdin/stdout for an AI agent.

Speaks the Model Context Protocol over stdio: an agent host launches this process and talks JSON-RPC
to it on the pipe. It writes nothing else to stdout, because stdout is the wire.

Five read-only tools are always offered. The four that act — start_sheep, stop_sheep, restart_sheep,
reload_sheep — exist only when `[whistle] allow_control = true` in `$SHEP_HOME/shep.toml`.

That gate is a guard against an agent acting on its own reading of your flock, not a security
boundary: whistle runs as you, so anything it could do you can already do with `shep stop`. There is
deliberately no flag for it — legibility, not containment: a boolean in `shep.toml` has a diff and
an mtime an operator can audit, and `--home`/`SHEP_HOME` already choose which `shep.toml` that is,
so a flag would open nothing those don't already.

Usage: shep whistle [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

The shepherd itself

shep ping
shep ping [OPTIONS]

Check whether the shepherd answers

full --help output
$ shep ping --help
Check whether the shepherd answers

Usage: shep ping [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep kill
shep kill [OPTIONS]

Shut the shepherd down

full --help output
$ shep kill --help
Shut the shepherd down

Usage: shep kill [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep save
shep save [OPTIONS]

Write the muster roll now, so a reboot can bring this flock back

full --help output
$ shep save --help
Write the muster roll now, so a reboot can bring this flock back

Usage: shep save [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep muster
shep muster [OPTIONS]

Assemble the flock from the muster roll save wrote, starting the shepherd first if none is running

full --help output
$ shep muster --help
Assemble the flock from the muster roll `save` wrote, starting the shepherd first if none is running

Usage: shep muster [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Containers and dev sessions

shep runtime
shep runtime [OPTIONS] [TARGET]

Boot a shepherd in this process, run one Flockfile's flock in the foreground, and exit once nothing is left online.

Meant for a container: no daemonization, no re-exec, no saved muster roll — --no-restore is always on, because a container starts from its Flockfile every time, never from a roll left on the image by a previous run.

Bleats stream to this process's own stdout/stderr while it runs, so docker logs is the flock's log without any extra plumbing. The shepherd is still reachable over its own socket the whole time — shep flock from a second terminal, or docker exec, works exactly as it would against a daemonized one.

Exits 0 once the flock has been empty and clean (every sheep stopped, none errored) for three consecutive two-second polls — a batch job finishing its work. Exits 11 (flock_empty) instead when the flock emptied with at least one sheep errored — a restart budget exhausted, or a spawn that never came up — so an orchestrator reading the exit status can tell "finished" from "died" and restart the container only for the second.

full --help output
$ shep runtime --help
Boot a shepherd in this process, run one Flockfile's flock in the foreground, and exit once nothing
is left online.

Meant for a container: no daemonization, no re-exec, no saved muster roll — `--no-restore` is always
on, because a container starts from its Flockfile every time, never from a roll left on the image by
a previous run.

Bleats stream to this process's own stdout/stderr while it runs, so `docker logs` is the flock's log
without any extra plumbing. The shepherd is still reachable over its own socket the whole time —
`shep flock` from a second terminal, or `docker exec`, works exactly as it would against a
daemonized one.

Exits 0 once the flock has been empty and clean (every sheep `stopped`, none `errored`) for three
consecutive two-second polls — a batch job finishing its work. Exits 11 (`flock_empty`) instead when
the flock emptied with at least one sheep `errored` — a restart budget exhausted, or a spawn that
never came up — so an orchestrator reading the exit status can tell "finished" from "died" and
restart the container only for the second.

Usage: shep runtime [OPTIONS] [TARGET]

Arguments:
  [TARGET]
          Flockfile to run (default: discovered in the current directory)

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep dev
shep dev [OPTIONS] [TARGET]

Run one Flockfile's flock in an isolated, throwaway foreground session: $SHEP_DEV_HOME (default ~/.shep-dev), forced watch = true on every app, and a full stop-and-delete teardown when it ends.

--home and $SHEP_HOME are ignored. Isolation is the whole feature: an operator who exports $SHEP_HOME for their real flock gets a stderr notice rather than a dev session that shares it and silently forces watch = true onto production apps.

Ends the moment the flock empties or this process is signalled — whichever comes first — and either way leaves nothing running and no shepherd behind. A shep dev that leaked a supervisor would stop being trusted.

full --help output
$ shep dev --help
Run one Flockfile's flock in an isolated, throwaway foreground session: `$SHEP_DEV_HOME` (default
`~/.shep-dev`), forced `watch = true` on every app, and a full stop-and-delete teardown when it
ends.

**`--home` and `$SHEP_HOME` are ignored.** Isolation is the whole feature: an operator who exports
`$SHEP_HOME` for their real flock gets a stderr notice rather than a `dev` session that shares it
and silently forces `watch = true` onto production apps.

Ends the moment the flock empties or this process is signalled — whichever comes first — and either
way leaves nothing running and no shepherd behind. A `shep dev` that leaked a supervisor would stop
being trusted.

Usage: shep dev [OPTIONS] [TARGET]

Arguments:
  [TARGET]
          Script or Flockfile to run (default: discovered in this directory)

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --name <NAME>
          Name for this sheep (script form only)

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Migrating and deploying

shep import
shep import [OPTIONS]

Write a Flockfile from a pm2 dump. Starts nothing.

Reads --from, or ~/.pm2/dump.pm2 if it names nothing — whichever pm2 save last wrote. Every clustered app is named on stderr: shep binds nothing, so N instances on one port need the app to set SO_REUSEPORT itself, or the second instance hits EADDRINUSE at start. Every env key the dump carried that was neither declared nor recognizable session junk is named on stderr too, and left out of the Flockfile, for the operator to decide.

full --help output
$ shep import --help
Write a Flockfile from a pm2 dump. Starts nothing.

Reads `--from`, or `~/.pm2/dump.pm2` if it names nothing — whichever `pm2 save` last wrote. Every
clustered app is named on stderr: shep binds nothing, so N instances on one port need the app to set
`SO_REUSEPORT` itself, or the second instance hits EADDRINUSE at start. Every env key the dump
carried that was neither declared nor recognizable session junk is named on stderr too, and left out
of the Flockfile, for the operator to decide.

Usage: shep import [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --from <FROM>
          Read this pm2 dump instead of `~/.pm2/dump.pm2`

      --out <OUT>
          Write the Flockfile here instead of `./Flockfile.toml`

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --dry-run
          Print the Flockfile that would be written, and write nothing

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --force
          Overwrite an existing Flockfile

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep startup
shep startup [OPTIONS]

Install an init unit so the shepherd starts at boot.

Writes an init unit for the target user — a systemd unit (Type=notify), a launchd plist, an openrc script, or a FreeBSD or OpenBSD rc.d script, picked automatically for the running target or named explicitly with --init below. Every unit carries this binary's own path, that user's $SHEP_HOME, and the PATH of this invocation — which is what makes an interpreter installed under ~/.bun or ~/.cargo findable after a reboot.

The openrc and BSD scripts are rendered and pinned by exact-string tests; nobody on this project has run them on their own init system.

Needs root, and never asks for it: without it this prints the exact command to run and exits non-zero, so a script notices. Under sudo the unit is built for $SUDO_USER rather than root, so it supervises the flock the operator actually has.

Under sudo this also warns that PATH may have been replaced by sudo's own secure_path before shep ever saw it, and shows the exact PATH about to go into the unit so you can check it yourself.

full --help output
$ shep startup --help
Install an init unit so the shepherd starts at boot.

Writes an init unit for the target user — a systemd unit (`Type=notify`), a launchd plist, an openrc
script, or a FreeBSD or OpenBSD `rc.d` script, picked automatically for the running target or named
explicitly with `--init` below. Every unit carries this binary's own path, that user's $SHEP_HOME,
and the PATH of this invocation — which is what makes an interpreter installed under ~/.bun or
~/.cargo findable after a reboot.

The openrc and BSD scripts are rendered and pinned by exact-string tests; nobody on this project has
run them on their own init system.

Needs root, and never asks for it: without it this prints the exact command to run and exits
non-zero, so a script notices. Under sudo the unit is built for $SUDO_USER rather than root, so it
supervises the flock the operator actually has.

Under sudo this also warns that PATH may have been replaced by sudo's own secure_path before shep
ever saw it, and shows the exact PATH about to go into the unit so you can check it yourself.

Usage: shep startup [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --user <USER>
          The user the unit runs the shepherd as (default: $SUDO_USER, else the invoking user)

      --init <INIT>
          Write a unit for this init system instead of the detected one.
          
          `unstartup` takes it too: a unit installed under one init has to be removable after the
          host has changed to another.

          Possible values:
          - systemd:    Linux + systemd: a unit file, `Type=notify`
          - openrc:     Linux + openrc: an `openrc-run` script. No readiness protocol — see the
            renderer's own doc
          - launchd:    macOS: a `LaunchDaemon` plist
          - freebsd-rc: FreeBSD: an `/etc/rc.subr` script under `/usr/local/etc/rc.d`
          - openbsd-rc: OpenBSD: an `/etc/rc.d/rc.subr` script under `/etc/rc.d`

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
shep unstartup
shep unstartup [OPTIONS]

Disable and remove whichever unit startup installed — systemd, openrc, launchd, or a BSD rc.d script.

Needs root under the same rule: without it, prints the command to run and exits non-zero. A unit that is not there is reported absent rather than failing.

full --help output
$ shep unstartup --help
Disable and remove whichever unit `startup` installed — systemd, openrc, launchd, or a BSD `rc.d`
script.

Needs root under the same rule: without it, prints the command to run and exits non-zero. A unit
that is not there is reported absent rather than failing.

Usage: shep unstartup [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --user <USER>
          The user the unit runs the shepherd as (default: $SUDO_USER, else the invoking user)

      --init <INIT>
          Write a unit for this init system instead of the detected one.
          
          `unstartup` takes it too: a unit installed under one init has to be removable after the
          host has changed to another.

          Possible values:
          - systemd:    Linux + systemd: a unit file, `Type=notify`
          - openrc:     Linux + openrc: an `openrc-run` script. No readiness protocol — see the
            renderer's own doc
          - launchd:    macOS: a `LaunchDaemon` plist
          - freebsd-rc: FreeBSD: an `/etc/rc.subr` script under `/usr/local/etc/rc.d`
          - openbsd-rc: OpenBSD: an `/etc/rc.d/rc.subr` script under `/etc/rc.d`

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Shell completions

shep completions
shep completions [OPTIONS] <SHELL>

Print a shell completion script.

Static only: sheep names, fold names and other daemon-side identifiers are never completed.

full --help output
$ shep completions --help
Print a shell completion script.

Static only: sheep names, fold names and other daemon-side identifiers are never completed.

Usage: shep completions [OPTIONS] <SHELL>

Arguments:
  <SHELL>
          Shell to generate a completion script for
          
          [possible values: bash, elvish, fish, powershell, zsh]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
@@VERB:init@@
Write a commented Flockfile to start from

Usage: shep init [OPTIONS] [PATH]

Arguments:
  [PATH]
          Where to write it. The extension picks the format: toml, yaml, yml, json or json5.
          Defaults to Flockfile.toml in this directory

Options:
      --all
          Show every option the grammar has, not just the common ones

      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

      --force
          Overwrite the Flockfile that is already here, keeping its own format

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
@@VERB:style@@
Show or set how much shep dresses up its output

`full` is sheep, boxes and colour; `plain` drops the sheep; `bare` is plain text. With no level,
prints the one in force and where it came from.

Usage: shep style [OPTIONS] [LEVEL]

Arguments:
  [LEVEL]
          `full`, `plain`, or `bare`
          
          Sets `shep.toml`'s `[style] level`. Omit to report the level currently in force instead of
          changing it.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
@@VERB:welcome@@
Print the welcome: the sheep, and the five commands worth knowing.

The same text a fresh `$SHEP_HOME` prints once on its own. Here it is the command's output rather
than a diagnostic, so it goes to stdout.

Usage: shep welcome [OPTIONS]

Options:
      --format <FORMAT>
          Output format

          Possible values:
          - table: Human-readable columns (the default)
          - json:  A versioned JSON envelope, one object per invocation
          
          [default: table]

  -q, --quiet
          Suppress non-essential output
          
          Currently narrows `bleats`' own notices (a dropped-events count, a daemon-shutdown notice,
          ...): diagnostics distinct from a sheep's own line or a real error, both of which still
          print regardless.

      --style <STYLE>
          How much this invocation dresses up its output: `full`, `plain`, or `bare`
          
          Wins over `$SHEP_STYLE` and `shep.toml`'s `[style] level`. Omit to let those decide; `shep
          style` reports which one answered.

          Possible values:
          - full:  Sheep, boxes and colour
          - plain: Boxes and colour, no sheep
          - bare:  Exactly what shep printed before any of this, and exactly what a pipe gets

      --home <HOME>
          Talk to a different shepherd
          
          Mostly plumbing: `shep dev` sessions, a system-wide flock, tests. You almost certainly
          want the default, ~/.shep.
          
          [env: SHEP_HOME=]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Where to go next