Skip to content

bob relations

List, hide, unhide, and rename relation labels

bob relations --help
List, hide, unhide, and rename relation labels

Bare `bob relations` runs the read-only list. hide and unhide append to the vault journal; rename commits one verified vault rewrite.

Usage: bob relations [COMMAND]

Commands:
  hide    Hide relation labels from suggestions
  list    List relation labels in the vault (default)
  rename  Rename a relation label everywhere in one commit
  unhide  Show hidden relation labels in suggestions again

Options:
  -h, --help  Print help

Bare `bob relations` runs the read-only list.

Examples:
  bob relations                      Visible labels, most-used first
  bob relations -q insp -f json      Rank inspiration matches as JSON
  bob relations -a                   Include hidden labels
  bob relations hide "inspired by"   Hide a label from suggestions
  bob relations rename OLD NEW       Rename a label everywhere
  bob relations unhide "inspired by" Put a label back in suggestions

See docs/task-relations.md for the label-vocabulary contract.
Run 'bob relations <command> --help' for more information on a command.

bob relations hide

Hide relation labels from suggestions

bob relations hide --help
Hide one or more relation labels from suggestions only: the card rows, the Obsidian stage, `relations list` defaults, and shell completion. LINKS text, LINKED FROM mirrors, chips, counts, and typed use are unchanged, and using a hidden label never unhides it.

Each hide appends one relation_label.hide event to .bob/relations/<host>.jsonl under bob_sync.lock (wait at most 3s). A label that is already hidden is a no-op.

Usage: bob relations hide [OPTIONS] <LABEL>...

Arguments:
  <LABEL>...
          Relation label as it appears on a LINKS entry

Options:
      --allow-unused
          Hide a label the catalog has not seen yet

  -b, --bob-dir <DIR>
          Bob vault root; defaults to BOB_DIR or ~/bob

  -f, --format <FORMAT>
          Output format: human or json

          [default: human]
          [possible values: human, json]

  -h, --help
          Show help

Examples:
  bob relations hide "inspired by"
  bob relations hide "inspired by" implements -f json
  bob relations hide "brand new" --allow-unused

Environment:
  BOB_CONFIG_FILE         Exact Bob config file; defaults to ~/.config/bob/config.yml
  BOB_DIR                   Bob vault root when --bob-dir is omitted
  HOSTNAME                  Host label for the journal file; same slug vault-sync uses
  BOB_VAULT_SYNC_LOCK_FILE  Maintenance lock; defaults to ${XDG_RUNTIME_DIR:-/tmp}/bob_sync.lock

Exit codes:
  0  wrote the hide event
  1  unknown label, invalid label, unchanged, lock busy, or I/O failure
  2  usage error

See docs/task-relations.md for hide semantics and the journal contract.

bob relations list

List relation labels in the vault (default)

bob relations list --help
List the relation-label vocabulary derived from every LINKS entry in the vault: open, closed, done/, daily notes, nested projects, and references. The catalog is read-only: it never writes the vault. Bare `bob relations` runs this command.

By default the list shows visible labels, most-used first. Hidden labels stay out of the default list; they still label their links. Use --all to include every known label, --hidden to show only hidden labels, --query to rank exact/prefix matches before substring matches.

Usage: bob relations list [OPTIONS]

Options:
  -a, --all
          List every known label, flagging hidden ones

  -b, --bob-dir <DIR>
          Bob vault root; defaults to BOB_DIR or ~/bob

  -f, --format <FORMAT>
          Output format: human or json

          [default: human]
          [possible values: human, json]

  -h, --help
          Show help

  -H, --hidden
          List only hidden labels

  -n, --limit <N>
          Show at most N labels after filtering and ranking

  -q, --query <Q>
          Rank exact and prefix matches first, then substring matches

Examples:
  bob relations
  bob relations list
  bob relations -q insp -f json
  bob relations -a
  bob relations -H
  bob relations -n 10 -q dup

Environment:
  BOB_CONFIG_FILE         Exact Bob config file; defaults to ~/.config/bob/config.yml
  BOB_DIR                   Bob vault root when --bob-dir is omitted
  NO_COLOR                  Disable colored output

Exit codes:
  0  list
  1  vault I/O failure
  2  usage or config error

See docs/task-relations.md for the label-vocabulary contract.

bob relations rename

Rename a relation label everywhere in one commit

bob relations rename --help
Rename one relation label across every task note, including done/ and the previous daily note, in one verified Git commit. Only label spans on LINKS and LINKED FROM lines change; entries keep their order and every other byte is preserved.

The preview scans the current vault. A write takes bob_sync.lock, pre-syncs unless --offline, snapshots each target and compares again before writing, appends one relation_label.rename event, verifies the result, makes one commit, then post-syncs. Undo with git revert.

Usage: bob relations rename [OPTIONS] <OLD> <NEW>

Arguments:
  <OLD>
          Current relation label

  <NEW>
          New relation label

Options:
  -b, --bob-dir <DIR>
          Bob vault root; defaults to BOB_DIR or ~/bob

  -d, --dry-run
          Preview the rename without writing, committing, or syncing

  -f, --format <FORMAT>
          Output format: human or json

          [default: human]
          [possible values: human, json]

  -h, --help
          Show help

  -m, --merge
          Merge OLD into NEW when NEW is already used

  -o, --offline
          Commit locally; skip vault sync before and after

Examples:
  bob relations rename "inspired by" "prompted by" -d
  bob relations rename "inspired by" "prompted by" -d -f json
  bob relations rename old new --merge
  bob relations rename old new -o

Environment:
  BOB_CONFIG_FILE         Exact Bob config file; defaults to ~/.config/bob/config.yml
  BOB_DIR                   Bob vault root when --bob-dir is omitted
  HOSTNAME                  Host label for the journal file; same slug vault-sync uses
  BOB_VAULT_SYNC_LOCK_FILE  Maintenance lock; defaults to the runtime bob_sync.lock

Exit codes:
  0  renamed (or dry-run planned)
  1  unknown label, invalid label, unchanged, label exists, malformed line, lock busy, dirty paths, not a worktree, sync failed, stale note, verify failed, or I/O failure
  2  usage error

See docs/task-relations.md for the rename contract, refusal table, and revert runbook.

bob relations unhide

Show hidden relation labels in suggestions again

bob relations unhide --help
Put hidden relation labels back in suggestion rows.

Each unhide appends one relation_label.unhide event to .bob/relations/<host>.jsonl under bob_sync.lock (wait at most 3s). A label that is not hidden is a no-op.

Usage: bob relations unhide [OPTIONS] <LABEL>...

Arguments:
  <LABEL>...
          Relation label as it appears on a LINKS entry

Options:
  -b, --bob-dir <DIR>
          Bob vault root; defaults to BOB_DIR or ~/bob

  -f, --format <FORMAT>
          Output format: human or json

          [default: human]
          [possible values: human, json]

  -h, --help
          Show help

Examples:
  bob relations unhide "inspired by"
  bob relations unhide "inspired by" -f json

Environment:
  BOB_CONFIG_FILE         Exact Bob config file; defaults to ~/.config/bob/config.yml
  BOB_DIR                   Bob vault root when --bob-dir is omitted
  HOSTNAME                  Host label for the journal file; same slug vault-sync uses
  BOB_VAULT_SYNC_LOCK_FILE  Maintenance lock; defaults to ${XDG_RUNTIME_DIR:-/tmp}/bob_sync.lock

Exit codes:
  0  wrote the unhide event
  1  unknown label, invalid label, unchanged, lock busy, or I/O failure
  2  usage error

See docs/task-relations.md for hide semantics and the journal contract.
Tested rolling snapshot bob-cli 41afa14 bob-mac-capture 556bb67 bob-plugins af1e691 Built 2026-10-24T22:34:13Z (zensical) build.json