@dst-justin/relay 2.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/package.json +1 -1
- package/relay +131 -46
package/README.md
CHANGED
|
@@ -288,6 +288,14 @@ Sessions live in `~/.claude/projects/` and are shared across all accounts — af
|
|
|
288
288
|
|
|
289
289
|
## Changelog
|
|
290
290
|
|
|
291
|
+
### v2.6.0 — 2026-09-04
|
|
292
|
+
- Add `relay run -c`/`--continue`/`-r`/`--resume` — replays the last account/provider `relay run` used in the current directory, so a crashed or Ctrl-C'd one-off provider session can resume without retyping the provider name.
|
|
293
|
+
|
|
294
|
+
### v2.5.0 — 2026-08-12
|
|
295
|
+
- Add `--subagent-model` to `relay provider add`, storing a `subagent_model` field that `relay provider use`/`relay run` inject as `CLAUDE_CODE_SUBAGENT_MODEL` — lets a LiteLLM provider pin the subagent model independently of the main `ANTHROPIC_MODEL`.
|
|
296
|
+
- `relay provider list` now also shows `subagent_model` when set.
|
|
297
|
+
- Expand `relay help` with every subcommand's flags (provider add's `--base-url`/`--token`/`--model`/`--subagent-model`/`--discover-models`, `list -f`/`--no-usage`, `run -- <args>`, `warmup test`, aliases, etc.)
|
|
298
|
+
|
|
291
299
|
### v2.4.0 — 2026-07-25
|
|
292
300
|
- Add LiteLLM provider support: `relay provider add/list/use/off/remove` routes Claude Code through a LiteLLM proxy instead of a subscription account, via `${CLAUDE_DIR}/settings.json`'s env block (never touches Keychain/credentials).
|
|
293
301
|
- Add `relay run <name>` for a one-off session pinned to a specific account or provider, independent of any global switch.
|
package/package.json
CHANGED
package/relay
CHANGED
|
@@ -304,7 +304,7 @@ _settings_env_activate_locked() {
|
|
|
304
304
|
"${PY}" <<'EOF'
|
|
305
305
|
import json, os, sys, tempfile
|
|
306
306
|
|
|
307
|
-
MANAGED = ["ANTHROPIC_BASE_URL", "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_MODEL", "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY"]
|
|
307
|
+
MANAGED = ["ANTHROPIC_BASE_URL", "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_MODEL", "CLAUDE_CODE_SUBAGENT_MODEL", "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY"]
|
|
308
308
|
|
|
309
309
|
def load_json(p, default):
|
|
310
310
|
if not os.path.exists(p):
|
|
@@ -367,7 +367,7 @@ _settings_env_restore_locked() {
|
|
|
367
367
|
"${PY}" - "${CLAUDE_SETTINGS}" "${SETTINGS_ENV_SNAPSHOT}" <<'EOF'
|
|
368
368
|
import json, os, sys, tempfile
|
|
369
369
|
|
|
370
|
-
MANAGED = ["ANTHROPIC_BASE_URL", "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_MODEL", "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY"]
|
|
370
|
+
MANAGED = ["ANTHROPIC_BASE_URL", "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_MODEL", "CLAUDE_CODE_SUBAGENT_MODEL", "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY"]
|
|
371
371
|
|
|
372
372
|
def load_json(p, default):
|
|
373
373
|
if not os.path.exists(p):
|
|
@@ -966,7 +966,7 @@ PYEOF
|
|
|
966
966
|
|
|
967
967
|
cmd_provider_add() {
|
|
968
968
|
local name="${1:-}"
|
|
969
|
-
[[ -z "${name}" ]] && { err "usage: relay provider add <name> --base-url <url> --token <token> [--model <model>] [--discover-models]"; exit 1; }
|
|
969
|
+
[[ -z "${name}" ]] && { err "usage: relay provider add <name> --base-url <url> --token <token> [--model <model>] [--subagent-model <model>] [--discover-models]"; exit 1; }
|
|
970
970
|
shift
|
|
971
971
|
case "${name}" in
|
|
972
972
|
*[!a-zA-Z0-9_-]*) err "name must contain only letters, numbers, underscores, or hyphens"; exit 1 ;;
|
|
@@ -981,12 +981,13 @@ cmd_provider_add() {
|
|
|
981
981
|
return 0
|
|
982
982
|
fi
|
|
983
983
|
|
|
984
|
-
local base_url="" token="" model="" discover=0
|
|
984
|
+
local base_url="" token="" model="" subagent_model="" discover=0
|
|
985
985
|
while [[ $# -gt 0 ]]; do
|
|
986
986
|
case "$1" in
|
|
987
987
|
--base-url) base_url="${2:-}"; shift 2 ;;
|
|
988
988
|
--token) token="${2:-}"; shift 2 ;;
|
|
989
989
|
--model) model="${2:-}"; shift 2 ;;
|
|
990
|
+
--subagent-model) subagent_model="${2:-}"; shift 2 ;;
|
|
990
991
|
--discover-models) discover=1; shift ;;
|
|
991
992
|
*) err "unknown option: $1"; exit 1 ;;
|
|
992
993
|
esac
|
|
@@ -1003,6 +1004,7 @@ cmd_provider_add() {
|
|
|
1003
1004
|
RELAY_PROVIDER_BASE_URL="${base_url}" \
|
|
1004
1005
|
RELAY_PROVIDER_TOKEN="${token}" \
|
|
1005
1006
|
RELAY_PROVIDER_MODEL="${model}" \
|
|
1007
|
+
RELAY_PROVIDER_SUBAGENT_MODEL="${subagent_model}" \
|
|
1006
1008
|
RELAY_PROVIDER_DISCOVER="${discover}" \
|
|
1007
1009
|
"${PY}" -c '
|
|
1008
1010
|
import json, os
|
|
@@ -1010,10 +1012,13 @@ path = os.environ["RELAY_PROVIDER_PATH"]
|
|
|
1010
1012
|
base_url = os.environ["RELAY_PROVIDER_BASE_URL"]
|
|
1011
1013
|
token = os.environ["RELAY_PROVIDER_TOKEN"]
|
|
1012
1014
|
model = os.environ.get("RELAY_PROVIDER_MODEL", "")
|
|
1015
|
+
subagent_model = os.environ.get("RELAY_PROVIDER_SUBAGENT_MODEL", "")
|
|
1013
1016
|
discover = os.environ.get("RELAY_PROVIDER_DISCOVER", "")
|
|
1014
1017
|
d = {"base_url": base_url, "auth_token": token}
|
|
1015
1018
|
if model:
|
|
1016
1019
|
d["model"] = model
|
|
1020
|
+
if subagent_model:
|
|
1021
|
+
d["subagent_model"] = subagent_model
|
|
1017
1022
|
if discover == "1":
|
|
1018
1023
|
d["discover_models"] = True
|
|
1019
1024
|
with open(path, "w") as f:
|
|
@@ -1032,13 +1037,15 @@ cmd_provider_list() {
|
|
|
1032
1037
|
return 0
|
|
1033
1038
|
fi
|
|
1034
1039
|
local active; active=$(active_provider_name)
|
|
1035
|
-
local name base_url model info
|
|
1040
|
+
local name base_url model subagent_model info
|
|
1036
1041
|
while IFS= read -r name; do
|
|
1037
1042
|
[[ -z "${name}" ]] && continue
|
|
1038
1043
|
base_url=$(_provider_field "${name}" base_url)
|
|
1039
1044
|
model=$(_provider_field "${name}" model)
|
|
1045
|
+
subagent_model=$(_provider_field "${name}" subagent_model)
|
|
1040
1046
|
info="${base_url}"
|
|
1041
1047
|
[[ -n "${model}" ]] && info="${info} model=${model}"
|
|
1048
|
+
[[ -n "${subagent_model}" ]] && info="${info} subagent_model=${subagent_model}"
|
|
1042
1049
|
if [[ "${name}" == "${active}" ]]; then
|
|
1043
1050
|
printf " ${GR}${B}✓ %-16s${R} ${D}%s${R}\n" "${name}" "${info}"
|
|
1044
1051
|
else
|
|
@@ -1052,14 +1059,16 @@ cmd_provider_use() {
|
|
|
1052
1059
|
[[ -z "${name}" ]] && { err "usage: relay provider use <name>"; exit 1; }
|
|
1053
1060
|
provider_exists "${name}" || { err "Provider '${name}' not found"; exit 1; }
|
|
1054
1061
|
|
|
1055
|
-
local base_url token model discover
|
|
1062
|
+
local base_url token model subagent_model discover
|
|
1056
1063
|
base_url=$(_provider_field "${name}" base_url)
|
|
1057
1064
|
token=$(_provider_field "${name}" auth_token)
|
|
1058
1065
|
model=$(_provider_field "${name}" model)
|
|
1066
|
+
subagent_model=$(_provider_field "${name}" subagent_model)
|
|
1059
1067
|
discover=$(_provider_discover "${name}")
|
|
1060
1068
|
|
|
1061
1069
|
local pairs=("ANTHROPIC_BASE_URL=${base_url}" "ANTHROPIC_AUTH_TOKEN=${token}")
|
|
1062
1070
|
[[ -n "${model}" ]] && pairs+=("ANTHROPIC_MODEL=${model}")
|
|
1071
|
+
[[ -n "${subagent_model}" ]] && pairs+=("CLAUDE_CODE_SUBAGENT_MODEL=${subagent_model}")
|
|
1063
1072
|
[[ -n "${discover}" ]] && pairs+=("CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1")
|
|
1064
1073
|
|
|
1065
1074
|
_settings_env_activate "${pairs[@]}" || { err "Failed to update ${CLAUDE_SETTINGS}"; exit 1; }
|
|
@@ -1094,22 +1103,54 @@ cmd_provider_remove() {
|
|
|
1094
1103
|
ok "Deleted provider '${name}'"
|
|
1095
1104
|
}
|
|
1096
1105
|
|
|
1106
|
+
_run_history_dir() { printf '%s/run-history' "${RELAY_DIR}"; }
|
|
1107
|
+
|
|
1108
|
+
# Per-directory "last name run here" pointer so `relay run -c`/`--resume` can
|
|
1109
|
+
# replay the same account/provider without retyping it — a crashed or
|
|
1110
|
+
# Ctrl-C'd `relay run <provider>` has no other record of what backend that
|
|
1111
|
+
# session used, since exec replaces the process before any trap could fire.
|
|
1112
|
+
_run_history_key() { printf '%s' "${PWD}" | cksum | awk '{print $1}'; }
|
|
1113
|
+
|
|
1114
|
+
_run_record_last() {
|
|
1115
|
+
mkdir -p "$(_run_history_dir)"
|
|
1116
|
+
printf '%s' "$1" > "$(_run_history_dir)/$(_run_history_key)"
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
_run_last_name_for_cwd() {
|
|
1120
|
+
local f; f="$(_run_history_dir)/$(_run_history_key)"
|
|
1121
|
+
[[ -f "${f}" ]] && cat "${f}"
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1097
1124
|
cmd_run() {
|
|
1098
1125
|
local name="${1:-}"
|
|
1099
1126
|
[[ -z "${name}" ]] && { err "usage: relay run <name> [-- <claude args...>]"; exit 1; }
|
|
1100
|
-
shift
|
|
1101
|
-
[[ "${1:-}" == "--" ]] && shift
|
|
1102
1127
|
|
|
1103
1128
|
require_claude
|
|
1104
1129
|
|
|
1130
|
+
case "${name}" in
|
|
1131
|
+
-c|--continue|-r|--resume)
|
|
1132
|
+
# Reuse the last account/provider run from this directory; leave "$@"
|
|
1133
|
+
# untouched so -c/--resume (and any session id after it) still reach claude.
|
|
1134
|
+
name=$(_run_last_name_for_cwd)
|
|
1135
|
+
[[ -z "${name}" ]] && { err "No previous 'relay run <name>' recorded for this directory — run 'relay run <name>' once first"; exit 1; }
|
|
1136
|
+
;;
|
|
1137
|
+
*)
|
|
1138
|
+
shift
|
|
1139
|
+
[[ "${1:-}" == "--" ]] && shift
|
|
1140
|
+
;;
|
|
1141
|
+
esac
|
|
1142
|
+
|
|
1105
1143
|
if account_exists "${name}"; then
|
|
1144
|
+
_run_record_last "${name}"
|
|
1106
1145
|
do_switch "${name}"
|
|
1107
1146
|
exec "${REAL_CLAUDE}" "$@"
|
|
1108
1147
|
elif provider_exists "${name}"; then
|
|
1109
|
-
|
|
1148
|
+
_run_record_last "${name}"
|
|
1149
|
+
local base_url token model subagent_model discover settings_file
|
|
1110
1150
|
base_url=$(_provider_field "${name}" base_url)
|
|
1111
1151
|
token=$(_provider_field "${name}" auth_token)
|
|
1112
1152
|
model=$(_provider_field "${name}" model)
|
|
1153
|
+
subagent_model=$(_provider_field "${name}" subagent_model)
|
|
1113
1154
|
discover=$(_provider_discover "${name}")
|
|
1114
1155
|
|
|
1115
1156
|
# Opportunistic cleanup: a prior `relay run <provider>` can't clean up
|
|
@@ -1127,6 +1168,7 @@ cmd_run() {
|
|
|
1127
1168
|
RELAY_RUN_BASE_URL="${base_url}" \
|
|
1128
1169
|
RELAY_RUN_TOKEN="${token}" \
|
|
1129
1170
|
RELAY_RUN_MODEL="${model}" \
|
|
1171
|
+
RELAY_RUN_SUBAGENT_MODEL="${subagent_model}" \
|
|
1130
1172
|
RELAY_RUN_DISCOVER="${discover}" \
|
|
1131
1173
|
RELAY_RUN_SETTINGS_FILE="${settings_file}" \
|
|
1132
1174
|
"${PY}" -c '
|
|
@@ -1134,10 +1176,13 @@ import json, os
|
|
|
1134
1176
|
base_url = os.environ["RELAY_RUN_BASE_URL"]
|
|
1135
1177
|
token = os.environ["RELAY_RUN_TOKEN"]
|
|
1136
1178
|
model = os.environ.get("RELAY_RUN_MODEL", "")
|
|
1179
|
+
subagent_model = os.environ.get("RELAY_RUN_SUBAGENT_MODEL", "")
|
|
1137
1180
|
discover = os.environ.get("RELAY_RUN_DISCOVER", "")
|
|
1138
1181
|
env = {"ANTHROPIC_BASE_URL": base_url, "ANTHROPIC_AUTH_TOKEN": token}
|
|
1139
1182
|
if model:
|
|
1140
1183
|
env["ANTHROPIC_MODEL"] = model
|
|
1184
|
+
if subagent_model:
|
|
1185
|
+
env["CLAUDE_CODE_SUBAGENT_MODEL"] = subagent_model
|
|
1141
1186
|
if discover == "1":
|
|
1142
1187
|
env["CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY"] = "1"
|
|
1143
1188
|
with open(os.environ["RELAY_RUN_SETTINGS_FILE"], "w") as f:
|
|
@@ -2723,52 +2768,92 @@ cmd_uninstall() {
|
|
|
2723
2768
|
|
|
2724
2769
|
cmd_help() {
|
|
2725
2770
|
printf "\n${B}${CY} relay${R} ${D}%s — multi-account switcher for Claude Code${R}\n\n" "$(_read_version)"
|
|
2771
|
+
|
|
2726
2772
|
printf " ${B}Inside Claude Code (prefix with !)${R}\n"
|
|
2727
|
-
printf " %-
|
|
2728
|
-
printf " %-
|
|
2729
|
-
printf " %-
|
|
2730
|
-
printf " %-
|
|
2773
|
+
printf " %-42s %s\n" " !relay" "account menu + 5hr usage"
|
|
2774
|
+
printf " %-42s %s\n" " !relay 2" "switch to account #2 (by index shown in the menu)"
|
|
2775
|
+
printf " %-42s %s\n" " !relay work" "switch to account named 'work'"
|
|
2776
|
+
printf " %-42s %s\n" " !relay status" "detailed usage for current account"
|
|
2731
2777
|
echo ""
|
|
2778
|
+
|
|
2732
2779
|
printf " ${B}Account management${R}\n"
|
|
2733
|
-
printf " %-
|
|
2734
|
-
printf " %-
|
|
2735
|
-
printf " %-
|
|
2736
|
-
printf " %-
|
|
2737
|
-
printf " %-
|
|
2738
|
-
printf " %-
|
|
2739
|
-
printf " %-
|
|
2740
|
-
printf " %-
|
|
2741
|
-
printf " %-
|
|
2742
|
-
printf " %-
|
|
2743
|
-
printf " %-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
printf "
|
|
2747
|
-
printf " %-
|
|
2748
|
-
printf " %-
|
|
2749
|
-
printf " %-
|
|
2780
|
+
printf " %-42s %s\n" " relay add <name>" "add account via browser login (opens claude /login)"
|
|
2781
|
+
printf " %-42s %s\n" " relay add-force <name>" "wipe stored creds/meta first, then force re-login"
|
|
2782
|
+
printf " %-42s %s\n" " relay refresh <name>" "re-login to refresh an expired/expiring token"
|
|
2783
|
+
printf " %-42s %s\n" " relay refresh-all" "silent OAuth refresh for every stored account"
|
|
2784
|
+
printf " %-42s %s\n" " relay save <name>" "save whatever is currently logged in as <name>"
|
|
2785
|
+
printf " %-42s %s\n" " relay rename <old> <new>" "rename an account (updates order + current pointer)"
|
|
2786
|
+
printf " %-42s %s\n" " relay remove <name>" "delete an account (alias: rm, del)"
|
|
2787
|
+
printf " %-42s %s\n" " relay reorder" "interactively change account display/switch order"
|
|
2788
|
+
printf " %-42s %s\n" " relay switch <name|#>" "switch account by name or index (alias: sw, use)"
|
|
2789
|
+
printf " %-42s %s\n" " relay <name>" "bare name/index also switches (shortcut for switch)"
|
|
2790
|
+
printf " %-42s %s\n" " relay continue [name]" "optionally switch, then exec 'claude --continue' (alias: cont, c)"
|
|
2791
|
+
echo ""
|
|
2792
|
+
|
|
2793
|
+
printf " ${B}Listing & status${R}\n"
|
|
2794
|
+
printf " %-42s %s\n" " relay list" "full account list with weekly usage (alias: ls)"
|
|
2795
|
+
printf " %-42s %s\n" " -f, --follow" "live-refresh mode, redraws every 30s (Ctrl+C to exit)"
|
|
2796
|
+
printf " %-42s %s\n" " --no-usage" "list without querying the usage API (fast, offline)"
|
|
2797
|
+
printf " %-42s %s\n" " relay status" "detailed usage for the current account (alias: st)"
|
|
2798
|
+
printf " %-42s %s\n" " -f" "live-refresh current account status"
|
|
2799
|
+
printf " %-42s %s\n" " relay sessions" "show all local Claude sessions (alias: sess)"
|
|
2750
2800
|
echo ""
|
|
2751
|
-
|
|
2752
|
-
printf "
|
|
2753
|
-
printf " %-
|
|
2754
|
-
printf " %-
|
|
2801
|
+
|
|
2802
|
+
printf " ${B}One-off runs${R}\n"
|
|
2803
|
+
printf " %-42s %s\n" " relay run <name>" "one-off session on an account or provider, then exec claude"
|
|
2804
|
+
printf " %-42s %s\n" " relay run <name> -- <args>" "forward extra args to claude itself, e.g. -- --resume"
|
|
2805
|
+
printf " %-42s %s\n" " relay run -c|--resume" "replay last account/provider used by 'relay run' in this dir"
|
|
2806
|
+
printf " %-42s %s\n" " (leaves global switch/provider state untouched — safe for concurrent sessions)"
|
|
2755
2807
|
echo ""
|
|
2808
|
+
|
|
2756
2809
|
printf " ${B}LiteLLM providers${R}\n"
|
|
2757
|
-
printf " %-
|
|
2758
|
-
printf " %-
|
|
2759
|
-
printf " %-
|
|
2760
|
-
printf " %-
|
|
2761
|
-
printf " %-
|
|
2810
|
+
printf " %-42s %s\n" " relay provider add <name>" "add a LiteLLM-compatible provider (alias: prov)"
|
|
2811
|
+
printf " %-42s %s\n" " --base-url <url>" "required: http(s):// base URL of the gateway"
|
|
2812
|
+
printf " %-42s %s\n" " --token <token>" "required: auth token/API key for the gateway"
|
|
2813
|
+
printf " %-42s %s\n" " --model <model>" "optional: pin ANTHROPIC_MODEL to this alias"
|
|
2814
|
+
printf " %-42s %s\n" " --subagent-model <model>" "optional: pin CLAUDE_CODE_SUBAGENT_MODEL"
|
|
2815
|
+
printf " %-42s %s\n" " " "(overrides every subagent's own model: frontmatter)"
|
|
2816
|
+
printf " %-42s %s\n" " --discover-models" "optional: enable gateway model discovery instead of pinning"
|
|
2817
|
+
printf " %-42s %s\n" " relay provider list" "list configured providers + their settings"
|
|
2818
|
+
printf " %-42s %s\n" " relay provider use <name>" "route all future sessions through this provider"
|
|
2819
|
+
printf " %-42s %s\n" " relay provider off" "stop routing through a provider, resume subscription account"
|
|
2820
|
+
printf " %-42s %s\n" " relay provider remove <name>" "delete a provider (prompts for confirmation)"
|
|
2821
|
+
echo ""
|
|
2822
|
+
|
|
2823
|
+
printf " ${B}Autoswitch daemon${R}\n"
|
|
2824
|
+
printf " %-42s %s\n" " relay autoswitch config" "interactive setup: order, thresholds, poll interval (alias: as)"
|
|
2825
|
+
printf " %-42s %s\n" " relay autoswitch start" "install + start the background launchd/systemd daemon"
|
|
2826
|
+
printf " %-42s %s\n" " relay autoswitch stop" "stop and uninstall the background daemon"
|
|
2827
|
+
printf " %-42s %s\n" " relay autoswitch status" "daemon running state + per-account thresholds"
|
|
2828
|
+
printf " %-42s %s\n" " relay autoswitch log" "tail the daemon's log file"
|
|
2829
|
+
printf " %-42s %s\n" " relay autoswitch" "no subcommand: config if unset, else status"
|
|
2762
2830
|
echo ""
|
|
2831
|
+
|
|
2832
|
+
printf " ${B}Locking (autoswitch)${R}\n"
|
|
2833
|
+
printf " %-42s %s\n" " relay lock <name>" "exclude an account from autoswitch cycling when over limit"
|
|
2834
|
+
printf " %-42s %s\n" " relay unlock <name>" "remove a lock"
|
|
2835
|
+
printf " %-42s %s\n" " relay lock" "no argument: show all locked accounts"
|
|
2836
|
+
echo ""
|
|
2837
|
+
|
|
2763
2838
|
printf " ${B}Warmup${R}\n"
|
|
2764
|
-
printf " %-
|
|
2765
|
-
printf " %-
|
|
2766
|
-
printf " %-
|
|
2767
|
-
printf " %-
|
|
2768
|
-
printf " %-
|
|
2769
|
-
printf " %-
|
|
2770
|
-
printf " %-
|
|
2839
|
+
printf " %-42s %s\n" " relay warmup add <acct> <HH:MM>" "schedule a daily pre-warm ping (24h local time)"
|
|
2840
|
+
printf " %-42s %s\n" " relay warmup remove <acct> [HH:MM]" "remove one scheduled time, or all for <acct> if omitted (alias: rm)"
|
|
2841
|
+
printf " %-42s %s\n" " relay warmup list" "show scheduled warmups + last-run result (alias: ls)"
|
|
2842
|
+
printf " %-42s %s\n" " relay warmup test <acct>" "fire a warmup ping for <acct> right now, synchronously"
|
|
2843
|
+
printf " %-42s %s\n" " relay warmup pause" "suspend all warmups without deleting entries"
|
|
2844
|
+
printf " %-42s %s\n" " relay warmup resume" "re-enable previously paused warmups"
|
|
2845
|
+
printf " %-42s %s\n" " relay warmup" "no subcommand: same as 'relay warmup list'"
|
|
2846
|
+
printf " %-42s %s\n" " requires the autoswitch daemon running (relay autoswitch start) to actually fire"
|
|
2771
2847
|
echo ""
|
|
2848
|
+
|
|
2849
|
+
printf " ${B}Maintenance${R}\n"
|
|
2850
|
+
printf " %-42s %s\n" " relay version" "show current version (alias: --version, -V)"
|
|
2851
|
+
printf " %-42s %s\n" " relay update" "update relay to latest version"
|
|
2852
|
+
printf " %-42s %s\n" " relay install" "(re)install shell integration / launcher"
|
|
2853
|
+
printf " %-42s %s\n" " relay uninstall" "remove relay and all account data"
|
|
2854
|
+
printf " %-42s %s\n" " relay help" "show this help (alias: --help, -h)"
|
|
2855
|
+
echo ""
|
|
2856
|
+
|
|
2772
2857
|
printf " ${D}switches the OAuth credential (macOS Keychain / Linux ~/.claude/.credentials.json); sessions are shared${R}\n"
|
|
2773
2858
|
printf " ${D}after switching: claude -c to resume, claude --resume <id> for a specific session${R}\n\n"
|
|
2774
2859
|
_check_update_bg
|