Docs

CLI

Every lvcs command and flag, as lvcs <command> --help prints it.

lvcs

Living Version Control System

Usage: lvcs [OPTIONS]
       lvcs <COMMAND>

Commands:
  daemon         Run this user's LVCS daemon in the foreground
  install        Install the daemon as a service that starts at login, and start it
  uninstall      Stop the daemon and remove its service, leaving every project alone
  join           Join an existing project from its peers into a directory
  init           Make a directory an LVCS project that you own, hosted by the daemon
  project        Host an initialized project, or change how it is hosted
  forget         Stop hosting a project, leaving its files alone
  key            Manage participant keys
  replay         Check that the project's journal replays to the same state
  audit          Check that every stored change is signed and authorized, and that no secret is stored
  migrate        Bring a project's LVCS files to this version's format
  genesis        Print a document's canonical genesis change as one line of hex
  status         Show where you stand in this project, one line per item
  explain        Explain an error code, rule, recovery, or notification kind, or how a path is classified
  fork           Fork a new workspace from another
  merge          Merge a workspace back into its base
  issue          Create, list, view, edit, close, and work on issues, as gh's issue commands do
  auth           Pair devices such as the app in a browser, list them, and revoke them
  notifications  Read your notifications
  answer         Answer an open question asked of you
  say            Add a message to a thread
  ask            Ask other participants a question
  hold           Ask another participant to wait on the lines they announced
  note           Tell another participant something about the lines they announced, without objecting
  hook           Run one Claude Code hook: read its JSON on stdin and print its output, or nothing
  mcp            Serve LVCS as MCP tools on stdin and stdout
  checkpoint     Write a git commit of main's current state
  approve        Approve changes to protected paths at a frontier that passed its checks
  run            Run a gated action, such as a deploy, by hand, or list, view, and watch runs
  grant          Let a participant read, write, or more on some paths
  revoke         Take back a grant, and every renewal of it
  update         Update lvcs to the latest signed release and restart the daemon
  help           Print this message or the help of the given subcommand(s)

Options:
  -V, --version  Print `lvcs <version>`
      --verbose  With --version, also print the build's commit, target, profile, and features, one `<name>: <value>` line each
  -h, --help     Print help

lvcs daemon

Run this user's LVCS daemon in the foreground.

It hosts every project you initialized or joined, until SIGINT or SIGTERM. `lvcs install` runs it as a service instead.

Usage: lvcs daemon

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

lvcs install

Install the daemon as a service that starts at login, and start it.

A launchd agent on macOS, a systemd user unit on Linux, a Scheduled Task on Windows. Run again, it rewrites the service and restarts the daemon.

Usage: lvcs install

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

lvcs uninstall

Stop the daemon and remove its service, leaving every project alone

Usage: lvcs uninstall

Options:
  -h, --help  Print help

lvcs join

Join an existing project from its peers into a directory.

Prints your new participant id, the project id, and this peer's id. Exits 1 with "join incomplete" when no peer delivers every file in time; the daemon then finishes the sync.

Usage: lvcs join [OPTIONS] <PROJECT>

Arguments:
  <PROJECT>
          The project id (`ID_ENCODING`)

Options:
      --root <ROOT>
          The directory to join into, created when missing (default: the current directory)

      --seed
          Run as a seed peer: pin every document, serve as a circuit relay, and act as a bootstrap address, with no special authority

      --listen <MULTIADDR>
          A multiaddr to listen on (repeatable; default: every interface, a port the system picks, TCP and QUIC)

      --bootstrap <MULTIADDR>
          A multiaddr to dial at start, including its `/p2p/<PeerId>` (repeatable)

      --no-mdns
          Don't look for peers on the local network (mDNS); find them only through bootstrap addresses, the DHT, and relays

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

lvcs init

Make a directory an LVCS project that you own, hosted by the daemon.

Prints your owner id, the project id, and this peer's id.

Usage: lvcs init [OPTIONS]

Options:
      --root <ROOT>
          The project root (default: the current directory)

      --seed
          Run as a seed peer: pin every document, serve as a circuit relay, and act as a bootstrap address, with no special authority

      --listen <MULTIADDR>
          A multiaddr to listen on (repeatable; default: every interface, a port the system picks, TCP and QUIC)

      --bootstrap <MULTIADDR>
          A multiaddr to dial at start, including its `/p2p/<PeerId>` (repeatable)

      --no-mdns
          Don't look for peers on the local network (mDNS); find them only through bootstrap addresses, the DHT, and relays

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

lvcs project

Host an initialized project, or change how it is hosted.

Sets who authors changes made on disk and how the project reaches its peers, then opens it again. Prints the result as one line of JSON.

Usage: lvcs project [OPTIONS]

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The default participant, which authors changes made on disk in the project's mirror (default when registering: the owner); a forked workspace's mirror is authored by the participant that forked it

      --seed
          Run as a seed peer: pin every document, serve as a circuit relay, and act as a bootstrap address, with no special authority

      --listen <MULTIADDR>
          A multiaddr to listen on (repeatable; default: every interface, a port the system picks, TCP and QUIC)

      --bootstrap <MULTIADDR>
          A multiaddr to dial at start, including its `/p2p/<PeerId>` (repeatable)

      --no-mdns
          Don't look for peers on the local network (mDNS); find them only through bootstrap addresses, the DHT, and relays

      --mdns
          Find peers on the local network again after `--no-mdns`

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

lvcs forget

Stop hosting a project, leaving its files alone

Usage: lvcs forget [OPTIONS]

Options:
      --root <ROOT>  The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
  -h, --help         Print help

lvcs key

Manage participant keys

Usage: lvcs key <COMMAND>

Commands:
  new   Create a participant key in the project through the daemon and print its participant id
  help  Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help

lvcs key new

Create a participant key in the project through the daemon and print its participant id

Usage: lvcs key new [OPTIONS]

Options:
      --root <ROOT>  The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
  -h, --help         Print help

lvcs replay

Check that the project's journal replays to the same state.

Outside any project, it checks the daemon's own journal.

Usage: lvcs replay [OPTIONS] --check

Options:
      --check
          Exit nonzero at the first entry whose replayed state differs

      --root <ROOT>
          The project root (default: the current directory)

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

lvcs audit

Check that every stored change is signed and authorized, and that no secret is stored.

Prints "audit ok" with the counts and exits 0, or prints the first violation and exits 1; exits 2 when the project can't be read.

Usage: lvcs audit [OPTIONS]

Options:
      --root <ROOT>
          The project root (default: the current directory)

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

lvcs migrate

Bring a project's LVCS files to this version's format.

Run it while the daemon doesn't hold the project open. Prints one line per file it changed, or that there is nothing to migrate; exits 1 when a file is from a newer lvcs or can't be migrated.

Usage: lvcs migrate [OPTIONS]

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

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

lvcs genesis

Print a document's canonical genesis change as one line of hex

Usage: lvcs genesis <KIND> <ADDRESS>

Arguments:
  <KIND>     The document kind (a `doc_kind` value)
  <ADDRESS>  The document address

Options:
  -h, --help  Print help

lvcs status

Show where you stand in this project, one line per item.

Outside any project, it lists every project the daemon hosts.

Usage: lvcs status [OPTIONS]

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to show (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs explain

Explain an error code, rule, recovery, or notification kind, or how a path is classified.

Works offline. With no value, lists every value it knows. Exits 2 when nothing matches.

Usage: lvcs explain [VALUE]

Arguments:
  [VALUE]
          The value to explain, matched case-insensitively; a code's number may be negative, as every one is

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

lvcs fork

Fork a new workspace from another.

Prints the result as one line of JSON.

Usage: lvcs fork [OPTIONS] --from <FROM> <NAME>

Arguments:
  <NAME>
          The new workspace's name

Options:
      --from <FROM>
          The workspace to fork from: `main`, or a workspace name or id

      --subtree <SUBTREE>
          Fork only the paths under this one

      --dir <DIR>
          The directory to mirror the workspace to (default: `.lvcs/ws/<name>/`)

      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs merge

Merge a workspace back into its base.

Prints the result as one line of JSON.

Usage: lvcs merge [OPTIONS] <WORKSPACE>

Arguments:
  <WORKSPACE>
          The workspace to merge: its name or id

Options:
      --into <INTO>
          The workspace to merge into (default: the workspace's base)

      --require-validated
          Wait until checks pass on a preview of the merged state (refused until the runner exists)

      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs issue

Create, list, view, edit, close, and work on issues, as gh's issue commands do.

Each prints its result as one line of JSON.

Usage: lvcs issue <COMMAND>

Commands:
  create      Create an issue, numbered `<your alias>/<n>`
  list        List issues, newest first, without their bodies
  view        Show one issue, its plan, linked work, and status
  edit        Change an issue's title, body, labels, assignees, plan, or links
  close       Close an issue by hand
  reopen      Open an issue closed by hand again
  checkpoint  Record where the work on an issue stands: what is done, next, and blocked
  develop     Start work on an issue in its own workspace; merging it into main links the work to the issue
  help        Print this message or the help of the given subcommand(s)

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

lvcs issue create

Create an issue, numbered `<your alias>/<n>`

Usage: lvcs issue create [OPTIONS] --title <TITLE>

Options:
  -t, --title <TITLE>     The title
  -b, --body <BODY>       The body
  -F, --body-file <FILE>  Read the body from a file (`-` reads standard input)
  -l, --label <LABEL>     A label (repeatable)
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs issue list

List issues, newest first, without their bodies

Usage: lvcs issue list [OPTIONS]

Options:
  -s, --state <STATE>        `open` (default), `closed`, or `all` [default: open] [possible values: open, closed, all]
  -a, --assignee <ASSIGNEE>  Only issues assigned to this participant (`@me`, an alias, or an id)
  -l, --label <LABEL>        Only issues with this label
      --sort <SORT>          `newest` (default), `oldest`, or `severity` (by the `sev:critical`, `sev:high`, `sev:medium`, and `sev:low` labels, then newest) [default: newest] [possible values: newest, oldest, severity]
      --root <ROOT>          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>     The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help                 Print help

lvcs issue view

Show one issue, its plan, linked work, and status

Usage: lvcs issue view [OPTIONS] <ISSUE>

Arguments:
  <ISSUE>  The issue, `<alias>/<n>`

Options:
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs issue edit

Change an issue's title, body, labels, assignees, plan, or links.

`--add-assignee @me` on an assigned issue asks its assignees first, and waits for their answer.

Usage: lvcs issue edit [OPTIONS] <ISSUE>

Arguments:
  <ISSUE>
          The issue, `<alias>/<n>`

Options:
  -t, --title <TITLE>
          A new title

  -b, --body <BODY>
          A new body

  -F, --body-file <FILE>
          Read the new body from a file (`-` reads standard input)

      --add-label <ADD_LABEL>
          Add a label (repeatable)

      --remove-label <REMOVE_LABEL>
          Remove a label (repeatable)

      --add-assignee <ADD_ASSIGNEE>
          Assign `@me`, an alias, or an id (repeatable); anyone but yourself needs the assign grant

      --remove-assignee <REMOVE_ASSIGNEE>
          Unassign `@me`, an alias, or an id (repeatable)

      --task <N>
          Apply `--add-assignee`/`--remove-assignee` to plan task `n` instead of the issue

      --add-task <TEXT>
          Append a plan task (repeatable)

      --check <N>
          Check plan task `n` (repeatable)

      --uncheck <N>
          Uncheck plan task `n` (repeatable)

      --link <FILE:LINES>
          Link a range, `<file>:<lines>` (`src/a.rs:L3-L9`) or a whole file (repeatable)

      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs issue close

Close an issue by hand.

A fixed issue closes by itself once its linked work is done.

Usage: lvcs issue close [OPTIONS] <ISSUE>

Arguments:
  <ISSUE>
          The issue, `<alias>/<n>`

Options:
  -r, --reason <REASON>
          `wontfix` (default) or `duplicate`
          
          [possible values: wontfix, duplicate]

      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs issue reopen

Open an issue closed by hand again

Usage: lvcs issue reopen [OPTIONS] <ISSUE>

Arguments:
  <ISSUE>  The issue, `<alias>/<n>`

Options:
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs issue checkpoint

Record where the work on an issue stands: what is done, next, and blocked

Usage: lvcs issue checkpoint [OPTIONS] <ISSUE>

Arguments:
  <ISSUE>  The issue, `<alias>/<n>`

Options:
      --done <DONE>          What is done (repeatable)
      --next <NEXT>          What comes next (repeatable)
      --blocker <BLOCKER>    What blocks the work (repeatable)
      --question <QUESTION>  An open question (repeatable)
      --root <ROOT>          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>     The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help                 Print help

lvcs issue develop

Start work on an issue in its own workspace; merging it into main links the work to the issue

Usage: lvcs issue develop [OPTIONS] <ISSUE>

Arguments:
  <ISSUE>  The issue, `<alias>/<n>`

Options:
  -n, --name <NAME>       The workspace's name (default: `issue-<alias>-<n>`)
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs auth

Pair devices such as the app in a browser, list them, and revoke them

Usage: lvcs auth <COMMAND>

Commands:
  login   Pair a device (the app in a browser or on a phone): print a one-time link to open on it, wait for it to claim the pairing, and pair it once you confirm it shows the same code as the terminal. Prints `lvcs auth login device=<key> name=<alias> grant=<grant id>`
  status  List the devices you paired, one line each
  logout  Revoke a paired device by its alias or key; prints the revocation as one line of JSON
  help    Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help

lvcs auth login

Pair a device (the app in a browser or on a phone): print a one-time link to open on it, wait for it to claim the pairing, and pair it once you confirm it shows the same code as the terminal. Prints `lvcs auth login device=<key> name=<alias> grant=<grant id>`

Usage: lvcs auth login [OPTIONS]

Options:
      --alias <NAME>      The device's alias, which is permanent and never given to another. Without it you are asked for one, defaulting to the device's own name and a number (taken as is when stdin is not a terminal)
      --write             Let the device coordinate too: ask, answer, hold, say, and run gated actions. It never edits files
      --read <GLOB>       A path pattern the device may read (gitignore syntax); every path when none is given
      --no-browser        Print the link without opening a browser
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs auth status

List the devices you paired, one line each

Usage: lvcs auth status [OPTIONS]

Options:
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs auth logout

Revoke a paired device by its alias or key; prints the revocation as one line of JSON

Usage: lvcs auth logout [OPTIONS] <DEVICE>

Arguments:
  <DEVICE>  The device's alias, or its key or a prefix of it

Options:
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs notifications

Read your notifications

Usage: lvcs notifications <COMMAND>

Commands:
  read  Show the notifications named, as one line of JSON, and mark them read
  help  Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help

lvcs notifications read

Show the notifications named, as one line of JSON, and mark them read.

Name each by its id, or by a file's path for every open and unread one about that file; with none, every open and unread one. Open questions and holds come first.

Usage: lvcs notifications read [OPTIONS] [TARGETS]...

Arguments:
  [TARGETS]...
          Notification ids, from a hook's hint or `notifications`, and paths below the project root (`./<name>` forces a path)

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs answer

Answer an open question asked of you.

Prints the result as one line of JSON.

Usage: lvcs answer [OPTIONS] <ASK> <TEXT>

Arguments:
  <ASK>
          The ask's id, from a hook's hint or `notifications`

  <TEXT>
          The answer

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs say

Add a message to a thread.

Prints the result as one line of JSON.

Usage: lvcs say [OPTIONS] <THREAD> <TEXT>

Arguments:
  <THREAD>
          The thread's address, `.lvcs/threads/<id>`

  <TEXT>
          The message

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs ask

Ask other participants a question.

Prints the result as one line of JSON. The question can be about a file or addressed to participants, and stays open until answered.

Usage: lvcs ask [OPTIONS] <TEXT>

Arguments:
  <TEXT>
          The question

Options:
      --to <PARTICIPANT>
          A participant the answer is expected from (repeatable; default: anyone subscribed)

      --address <PATH>
          The file the question is about, a path below the project root

      --thread <THREAD>
          The thread to ask in, instead of a new one

      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs hold

Ask another participant to wait on the lines they announced.

Prints the result as one line of JSON. Opens a thread with the participant who announced them.

Usage: lvcs hold [OPTIONS] <NOTIFICATION> <TEXT>

Arguments:
  <NOTIFICATION>
          The announcement's id

  <TEXT>
          Why its sender should wait

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs note

Tell another participant something about the lines they announced, without objecting.

Prints the result as one line of JSON.

Usage: lvcs note [OPTIONS] <NOTIFICATION> <TEXT>

Arguments:
  <NOTIFICATION>
          The announcement's id

  <TEXT>
          What to tell its sender

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs hook

Run one Claude Code hook: read its JSON on stdin and print its output, or nothing.

Always exits 0.

Usage: lvcs hook [OPTIONS] <EVENT>

Arguments:
  <EVENT>
          The hook event
          
          [possible values: SessionStart, PreToolUse, PostToolUse, UserPromptSubmit, Stop]

Options:
      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`; never the owner; with neither the hook does nothing)

      --root <ROOT>
          The project root (default: `CLAUDE_PROJECT_DIR`, else the nearest ancestor of the working directory holding `.lvcs/`)

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

lvcs mcp

Serve LVCS as MCP tools on stdin and stdout

Usage: lvcs mcp [OPTIONS]

Options:
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`; never the owner)
      --root <ROOT>       The project root (default: the current directory)
  -h, --help              Print help

lvcs checkpoint

Write a git commit of main's current state.

Prints the result as one line of JSON. The commit is at refs/lvcs/checkpoints/main.

Usage: lvcs checkpoint [OPTIONS]

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs approve

Approve changes to protected paths at a frontier that passed its checks.

Prints the result as one line of JSON.

Usage: lvcs approve [OPTIONS] <FRONTIER> <PATHS>...

Arguments:
  <FRONTIER>
          The frontier id, as `lvcs status` names it on a `waiting` line

  <PATHS>...
          The protected paths approved

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs run

Run a gated action, such as a deploy, by hand, or list, view, and watch runs.

`lvcs run <action> [<frontier-id>]` prints the result as one line of JSON.

Usage: lvcs run [OPTIONS] [ACTION] [FRONTIER]
       lvcs run <COMMAND>

Commands:
  list   List recent runs, newest first, one line each
  view   Show a run's steps, each with its state, exit status, and time
  watch  Follow a run until it ends: exits 0 when it passed (or was reused), else 1
  help   Print this message or the help of the given subcommand(s)

Arguments:
  [ACTION]
          The gated action's name, which is its channel's

  [FRONTIER]
          The frontier to run it on (default: the one its `after` channel holds)

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs run list

List recent runs, newest first, one line each

Usage: lvcs run list [OPTIONS]

Options:
      --action <ACTION>   Only this action's runs
      --limit <LIMIT>     At most this many runs (default: 20) [default: 20]
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs run view

Show a run's steps, each with its state, exit status, and time

Usage: lvcs run view [OPTIONS] <RUN>

Arguments:
  <RUN>  The run's id, or its unique start, as `lvcs run list` shows it

Options:
      --log               Also print each step's last lines of output
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs run watch

Follow a run until it ends: exits 0 when it passed (or was reused), else 1

Usage: lvcs run watch [OPTIONS] <RUN>

Arguments:
  <RUN>  The run's id, or its unique start, as `lvcs run list` shows it

Options:
      --root <ROOT>       The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)
      --as <PARTICIPANT>  The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)
  -h, --help              Print help

lvcs grant

Let a participant read, write, or more on some paths.

Prints the grant as one line of JSON. `lvcs revoke` takes it back.

Usage: lvcs grant [OPTIONS] <GRANTEE> <CAPABILITIES>...

Arguments:
  <GRANTEE>
          The participant: its id, alias, or a prefix of its id, as `lvcs status` and `lvcs key new` show it

  <CAPABILITIES>...
          What it may do: read, write, message, approve, delegate, or attest:<channel>

Options:
      --paths <PATHS>
          A path pattern it applies to (gitignore syntax, repeatable); every path when none is given

      --alias <ALIAS>
          The name it is shown by, which stays its for the life of the project

      --ttl <TTL>
          How long each window of the grant lasts, such as 900, 15m, 2h, or 1d (at least 10 s; default: no expiry). Your daemon renews it every half window while it runs, so a peer that is offline when you revoke the grant stops honouring it at most one window after it last synced; without one, such a peer honours it until it syncs

      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs revoke

Take back a grant, and every renewal of it.

Prints the result as one line of JSON.

Usage: lvcs revoke [OPTIONS] <GRANT>

Arguments:
  <GRANT>
          The grant: its id, from `grant`'s result, or the start of one; or the participant holding it: its id, alias, or a prefix of its id

Options:
      --root <ROOT>
          The project root (default: the nearest ancestor of the current directory holding `.lvcs/`)

      --as <PARTICIPANT>
          The participant to act as (default: `LVCS_PARTICIPANT`, else the one key bound to this OS user, else, as the daemon's own user, the owner)

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

lvcs update

Update lvcs to the latest signed release and restart the daemon.

Keeps the old binary as lvcs.prev. The daemon also checks daily and, with auto-update on (the default), updates itself.

Usage: lvcs update [OPTIONS]

Options:
      --check
          Only say whether a release is available; change nothing

      --auto <on|off>
          Turn auto-update on, or off (the daemon then only notifies)

          Possible values:
          - on:  Auto-update on
          - off: Auto-update off: notify only

      --rollback
          Put back the binary the last update replaced, and hold the version rolled back from until the next `lvcs update`

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