@oneciel-ai/claude-any 0.1.33 → 0.1.34
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 +60 -9
- package/claude_any.py +286 -80
- package/docs/README.ja.md +55 -8
- package/docs/README.ko.md +56 -9
- package/docs/README.zh.md +55 -8
- package/docs/manual.md +138 -33
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -48,7 +48,7 @@ arguments through unchanged.
|
|
|
48
48
|
|
|
49
49
|
Credits: One Ciel LLC
|
|
50
50
|
|
|
51
|
-
Current version: `0.1.
|
|
51
|
+
Current version: `0.1.34`
|
|
52
52
|
|
|
53
53
|
## Why This Exists
|
|
54
54
|
|
|
@@ -121,14 +121,57 @@ Run one non-interactive Claude Code prompt:
|
|
|
121
121
|
claude-any --ca-provider nvidia-hosted --ca-model z-ai/glm-4.7 --ca-no-update-check -p "Reply with OK only." --output-format text
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
Use the saved provider/model and only skip the menu:
|
|
125
|
-
|
|
126
|
-
```sh
|
|
127
|
-
CLAUDE_ANY_SKIP_MENU=1 claude-any -p "Summarize this repository." --output-format text
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
Use the saved provider/model and only skip the menu:
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
CLAUDE_ANY_SKIP_MENU=1 claude-any -p "Summarize this repository." --output-format text
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Configure every launch option with flags:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
claude-any --ca-provider nvidia-hosted --ca-base-url https://integrate.api.nvidia.com/v1 --ca-model z-ai/glm-4.7 --ca-advisor-model deepseek-ai/deepseek-v4-pro --ca-api-key-env NVIDIA_API_KEY --ca-max-output-tokens 4096 --ca-context-window 65536 --ca-request-timeout-ms 300000 --ca-rate-limit-rpm 40 --ca-rate-limit-status on --ca-no-update-check -p "Reply with OK only." --output-format text
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Or put the same values in environment variables:
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
export CLAUDE_ANY_SKIP_MENU=1
|
|
140
|
+
export CLAUDE_ANY_PROVIDER=nvidia-hosted
|
|
141
|
+
export CLAUDE_ANY_BASE_URL=https://integrate.api.nvidia.com/v1
|
|
142
|
+
export CLAUDE_ANY_MODEL=z-ai/glm-4.7
|
|
143
|
+
export CLAUDE_ANY_ADVISOR_MODEL=deepseek-ai/deepseek-v4-pro
|
|
144
|
+
export CLAUDE_ANY_API_KEY_ENV=NVIDIA_API_KEY
|
|
145
|
+
export CLAUDE_ANY_MAX_OUTPUT_TOKENS=4096
|
|
146
|
+
export CLAUDE_ANY_CONTEXT_WINDOW=65536
|
|
147
|
+
export CLAUDE_ANY_REQUEST_TIMEOUT_MS=300000
|
|
148
|
+
export CLAUDE_ANY_RATE_LIMIT_RPM=40
|
|
149
|
+
export CLAUDE_ANY_RATE_LIMIT_STATUS=on
|
|
150
|
+
claude-any -p "Reply with OK only." --output-format text
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
For `.env` driven runs, save the same `CLAUDE_ANY_*` values in a file and pass
|
|
154
|
+
it explicitly:
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
claude-any --ca-env-file .env.claude-any -p "Reply with OK only." --output-format text
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Override order is deterministic: saved user choices from the menu are the
|
|
161
|
+
baseline, OS environment variables override them, `--ca-env-file` values
|
|
162
|
+
override the OS environment, CLI `--ca-*` parameters override the env file, and
|
|
163
|
+
`--ca-menu` lets the final interactive menu choice override everything.
|
|
164
|
+
|
|
165
|
+
Headless coverage checklist: provider, base URL, model, Advisor model, API key
|
|
166
|
+
or API-key environment variable, max output, context window, request timeout,
|
|
167
|
+
RPM limit, RPM status display, streaming, web search, web fetch, Claude skills,
|
|
168
|
+
update check, language, Ollama context/options, and normal Claude Code
|
|
169
|
+
passthrough arguments are all configurable without opening the menu. API keys
|
|
170
|
+
can be passed directly with `--ca-api-key`, but `--ca-api-key-env` is safer for
|
|
171
|
+
scripts because the secret does not appear in shell history.
|
|
172
|
+
|
|
173
|
+
More examples are in [Headless Examples](#headless-examples) and
|
|
174
|
+
[the full manual](docs/manual.md#headless-usage).
|
|
132
175
|
|
|
133
176
|
**Upgrade:**
|
|
134
177
|
|
|
@@ -338,6 +381,14 @@ steps under that larger model's supervision.
|
|
|
338
381
|
|
|
339
382
|
## Changelog
|
|
340
383
|
|
|
384
|
+
### 0.1.34
|
|
385
|
+
|
|
386
|
+
- **Complete headless configuration path**: add `--ca-env-file`,
|
|
387
|
+
environment-variable mapping, Advisor model, rate-limit, streaming, language,
|
|
388
|
+
and web-fetch headless controls.
|
|
389
|
+
- **Documented override order**: saved menu choices < OS environment <
|
|
390
|
+
`.env` file < CLI parameters < final interactive menu choice via `--ca-menu`.
|
|
391
|
+
|
|
341
392
|
### 0.1.33
|
|
342
393
|
|
|
343
394
|
- **Logo branding in every README**: add the Claude Any logo at the top of the
|
package/claude_any.py
CHANGED
|
@@ -31,9 +31,9 @@ try:
|
|
|
31
31
|
except Exception:
|
|
32
32
|
pass
|
|
33
33
|
|
|
34
|
-
HOME = Path.home()
|
|
35
|
-
CONFIG_DIR = HOME / ".config" / "claude-any"
|
|
36
|
-
CONFIG_PATH = CONFIG_DIR / "config.json"
|
|
34
|
+
HOME = Path.home()
|
|
35
|
+
CONFIG_DIR = Path(os.environ.get("CLAUDE_ANY_CONFIG_DIR") or (HOME / ".config" / "claude-any"))
|
|
36
|
+
CONFIG_PATH = CONFIG_DIR / "config.json"
|
|
37
37
|
LOG_PATH = CONFIG_DIR / "router.log"
|
|
38
38
|
LOG_LEVEL_PATH = CONFIG_DIR / "log-level"
|
|
39
39
|
REQUEST_DUMP_PATH = CONFIG_DIR / "requests.jsonl"
|
|
@@ -84,7 +84,7 @@ PROVIDER_LABELS = {
|
|
|
84
84
|
"self-hosted-nim": "Self Hosted NIM",
|
|
85
85
|
}
|
|
86
86
|
APP_NAME = "Claude Any"
|
|
87
|
-
VERSION = "0.1.
|
|
87
|
+
VERSION = "0.1.34"
|
|
88
88
|
CREDITS = "Credits: One Ciel LLC"
|
|
89
89
|
|
|
90
90
|
LOG_LEVELS = {"SILENT": 0, "ERROR": 1, "WARN": 2, "INFO": 3, "DEBUG": 4, "TRACE": 5}
|
|
@@ -955,11 +955,28 @@ def read_env_file(path: Path) -> dict[str, str]:
|
|
|
955
955
|
return env
|
|
956
956
|
|
|
957
957
|
|
|
958
|
-
def meaningful_key_value(value: Any) -> bool:
|
|
959
|
-
if value is None:
|
|
960
|
-
return False
|
|
961
|
-
text = str(value).strip()
|
|
962
|
-
return bool(text and text not in ("dummy", "not-used", "ollama"))
|
|
958
|
+
def meaningful_key_value(value: Any) -> bool:
|
|
959
|
+
if value is None:
|
|
960
|
+
return False
|
|
961
|
+
text = str(value).strip()
|
|
962
|
+
return bool(text and text not in ("dummy", "not-used", "ollama"))
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
def env_bool(value: str | None, default: bool | None = None) -> bool | None:
|
|
966
|
+
if value is None:
|
|
967
|
+
return default
|
|
968
|
+
text = value.strip().lower()
|
|
969
|
+
if text in ("1", "true", "yes", "on", "y"):
|
|
970
|
+
return True
|
|
971
|
+
if text in ("0", "false", "no", "off", "n"):
|
|
972
|
+
return False
|
|
973
|
+
return default
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
def load_dotenv_into_environ(path: Path, *, override: bool = True) -> None:
|
|
977
|
+
for key, value in read_env_file(path).items():
|
|
978
|
+
if override or key not in os.environ:
|
|
979
|
+
os.environ[key] = value
|
|
963
980
|
|
|
964
981
|
|
|
965
982
|
def executable_candidates(name: str) -> list[str]:
|
|
@@ -7900,9 +7917,11 @@ def has_noninteractive_claude_args(passthrough: list[str]) -> bool:
|
|
|
7900
7917
|
return any(arg == "-p" or arg == "--print" or arg.startswith("--print=") for arg in passthrough)
|
|
7901
7918
|
|
|
7902
7919
|
|
|
7903
|
-
def run_prelaunch_menu(passthrough: list[str], skip_menu: bool = False) -> int:
|
|
7904
|
-
if
|
|
7905
|
-
|
|
7920
|
+
def run_prelaunch_menu(passthrough: list[str], skip_menu: bool = False, force_menu: bool = False) -> int:
|
|
7921
|
+
if not force_menu and (
|
|
7922
|
+
skip_menu or has_noninteractive_claude_args(passthrough) or os.environ.get("CLAUDE_ANY_SKIP_MENU") == "1"
|
|
7923
|
+
):
|
|
7924
|
+
return 0
|
|
7906
7925
|
if not (sys.stdin.isatty() and sys.stdout.isatty()):
|
|
7907
7926
|
return 0
|
|
7908
7927
|
if os.environ.get("CLAUDE_ANY_USE_LEGACY_MENU") == "1":
|
|
@@ -8037,14 +8056,15 @@ def run_claude_update_check(claude: str, enabled: bool = True) -> None:
|
|
|
8037
8056
|
print(f"Claude Code update check exited with {p.returncode}; continuing.", flush=True)
|
|
8038
8057
|
|
|
8039
8058
|
|
|
8040
|
-
def launch_claude(
|
|
8041
|
-
passthrough: list[str],
|
|
8042
|
-
skip_menu: bool = False,
|
|
8043
|
-
|
|
8044
|
-
|
|
8045
|
-
|
|
8046
|
-
|
|
8047
|
-
|
|
8059
|
+
def launch_claude(
|
|
8060
|
+
passthrough: list[str],
|
|
8061
|
+
skip_menu: bool = False,
|
|
8062
|
+
force_menu: bool = False,
|
|
8063
|
+
web_search_override: bool | None = None,
|
|
8064
|
+
disable_skills_override: bool | None = None,
|
|
8065
|
+
update_check: bool = True,
|
|
8066
|
+
) -> int:
|
|
8067
|
+
rc = run_prelaunch_menu(passthrough, skip_menu=skip_menu, force_menu=force_menu)
|
|
8048
8068
|
if rc == 10:
|
|
8049
8069
|
return 0
|
|
8050
8070
|
if rc != 0:
|
|
@@ -8121,8 +8141,8 @@ def launch_claude(
|
|
|
8121
8141
|
return subprocess.call(cmd, env=env)
|
|
8122
8142
|
|
|
8123
8143
|
|
|
8124
|
-
def cli_usage() -> str:
|
|
8125
|
-
return """Usage:
|
|
8144
|
+
def cli_usage() -> str:
|
|
8145
|
+
return """Usage:
|
|
8126
8146
|
claude-any Launch Claude Code through claude-any router
|
|
8127
8147
|
|
|
8128
8148
|
Control plane, runs before Claude Code and does not require LLM connectivity:
|
|
@@ -8148,21 +8168,31 @@ Control plane, runs before Claude Code and does not require LLM connectivity:
|
|
|
8148
8168
|
claude-any stop Stop router/proxy
|
|
8149
8169
|
|
|
8150
8170
|
Headless setup flags, namespaced to avoid Claude CLI collisions:
|
|
8151
|
-
claude-any --ca-provider PROVIDER Set provider, then launch
|
|
8152
|
-
claude-any --ca-
|
|
8153
|
-
claude-any --ca-
|
|
8154
|
-
claude-any --ca-
|
|
8155
|
-
claude-any --ca-
|
|
8156
|
-
claude-any --ca-
|
|
8157
|
-
claude-any --ca-
|
|
8171
|
+
claude-any --ca-provider PROVIDER Set provider, then launch
|
|
8172
|
+
claude-any --ca-env-file PATH Load CLAUDE_ANY_* values from a .env file
|
|
8173
|
+
claude-any --ca-menu Apply setup values, then open the menu
|
|
8174
|
+
claude-any --ca-language en|ko|ja|zh
|
|
8175
|
+
claude-any --ca-base-url URL Set current provider base URL, then launch
|
|
8176
|
+
claude-any --ca-model MODEL_ID Set provider model, then launch
|
|
8177
|
+
claude-any --ca-advisor-model MODEL_ID
|
|
8178
|
+
claude-any --ca-api-key KEY Set current provider API key, then launch
|
|
8179
|
+
claude-any --ca-api-key-env ENVVAR Set current provider API key from env, then launch
|
|
8180
|
+
claude-any --ca-set-api-key PROVIDER KEY
|
|
8181
|
+
claude-any --ca-set-api-key-env PROVIDER ENVVAR
|
|
8158
8182
|
claude-any --ca-ollama-num-ctx VALUE
|
|
8159
8183
|
claude-any --ca-ollama-ctx-range MIN MAX
|
|
8160
8184
|
claude-any --ca-ollama-option KEY=VALUE
|
|
8161
8185
|
claude-any --ca-max-output-tokens VALUE
|
|
8162
|
-
claude-any --ca-context-window VALUE
|
|
8163
|
-
claude-any --ca-request-timeout-ms VALUE
|
|
8164
|
-
claude-any --ca-
|
|
8165
|
-
claude-any --ca-
|
|
8186
|
+
claude-any --ca-context-window VALUE
|
|
8187
|
+
claude-any --ca-request-timeout-ms VALUE
|
|
8188
|
+
claude-any --ca-rate-limit-rpm VALUE
|
|
8189
|
+
claude-any --ca-rate-limit-status on|off
|
|
8190
|
+
claude-any --ca-stream on|off
|
|
8191
|
+
claude-any --ca-stream-word-chunking on|off
|
|
8192
|
+
claude-any --ca-web-search Force DuckDuckGo MCP for this launch
|
|
8193
|
+
claude-any --ca-no-web-search Disable DuckDuckGo MCP for this launch
|
|
8194
|
+
claude-any --ca-web-fetch Enable fetch MCP
|
|
8195
|
+
claude-any --ca-no-web-fetch Disable fetch MCP
|
|
8166
8196
|
claude-any --ca-disable-skills Disable Claude Code skills for this launch
|
|
8167
8197
|
claude-any --ca-enable-skills Keep Claude Code skills enabled for this launch
|
|
8168
8198
|
claude-any --ca-no-update-check Skip Claude Code update check for this launch
|
|
@@ -8171,15 +8201,112 @@ Headless setup flags, namespaced to avoid Claude CLI collisions:
|
|
|
8171
8201
|
|
|
8172
8202
|
Provider names: anthropic, ollama, ollama-cloud, vllm, nvidia-hosted, self-hosted-nim
|
|
8173
8203
|
Any other arguments are passed through to claude. Use -- before Claude flags that
|
|
8174
|
-
collide with claude-any setup flags."""
|
|
8175
|
-
|
|
8176
|
-
|
|
8177
|
-
def
|
|
8178
|
-
|
|
8179
|
-
|
|
8180
|
-
|
|
8181
|
-
|
|
8182
|
-
|
|
8204
|
+
collide with claude-any setup flags."""
|
|
8205
|
+
|
|
8206
|
+
|
|
8207
|
+
def pop_headless_env_file_args(argv: list[str]) -> list[str]:
|
|
8208
|
+
cleaned: list[str] = []
|
|
8209
|
+
i = 0
|
|
8210
|
+
while i < len(argv):
|
|
8211
|
+
arg = argv[i]
|
|
8212
|
+
if arg == "--ca-env-file" or arg.startswith("--ca-env-file="):
|
|
8213
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8214
|
+
if value is None:
|
|
8215
|
+
if i + 1 >= len(argv):
|
|
8216
|
+
raise SystemExit("Missing path for --ca-env-file")
|
|
8217
|
+
value = argv[i + 1]
|
|
8218
|
+
i += 2
|
|
8219
|
+
else:
|
|
8220
|
+
i += 1
|
|
8221
|
+
path = Path(value).expanduser()
|
|
8222
|
+
if not path.exists():
|
|
8223
|
+
raise SystemExit(f"--ca-env-file not found: {path}")
|
|
8224
|
+
load_dotenv_into_environ(path, override=True)
|
|
8225
|
+
else:
|
|
8226
|
+
cleaned.append(arg)
|
|
8227
|
+
i += 1
|
|
8228
|
+
return cleaned
|
|
8229
|
+
|
|
8230
|
+
|
|
8231
|
+
def apply_headless_env_config() -> tuple[bool, bool | None, bool | None, bool | None, bool]:
|
|
8232
|
+
skip_menu = os.environ.get("CLAUDE_ANY_SKIP_MENU") == "1"
|
|
8233
|
+
force_menu = bool(env_bool(os.environ.get("CLAUDE_ANY_FORCE_MENU"), False))
|
|
8234
|
+
web_search_override = env_bool(os.environ.get("CLAUDE_ANY_WEB_SEARCH"))
|
|
8235
|
+
disable_skills_override = env_bool(os.environ.get("CLAUDE_ANY_DISABLE_SKILLS"))
|
|
8236
|
+
update_check_override = env_bool(os.environ.get("CLAUDE_ANY_UPDATE_CHECK"))
|
|
8237
|
+
language = os.environ.get("CLAUDE_ANY_LANGUAGE", "").strip()
|
|
8238
|
+
if language:
|
|
8239
|
+
cmd_language(argparse.Namespace(value=language))
|
|
8240
|
+
skip_menu = True
|
|
8241
|
+
web_fetch = env_bool(os.environ.get("CLAUDE_ANY_WEB_FETCH"))
|
|
8242
|
+
if web_fetch is not None:
|
|
8243
|
+
cmd_web_fetch(argparse.Namespace(value="on" if web_fetch else "off"))
|
|
8244
|
+
skip_menu = True
|
|
8245
|
+
provider = os.environ.get("CLAUDE_ANY_PROVIDER", "").strip()
|
|
8246
|
+
if provider:
|
|
8247
|
+
cmd_provider(argparse.Namespace(name=provider))
|
|
8248
|
+
skip_menu = True
|
|
8249
|
+
api_key_env = os.environ.get("CLAUDE_ANY_API_KEY_ENV", "").strip()
|
|
8250
|
+
api_key = os.environ.get("CLAUDE_ANY_API_KEY", "").strip()
|
|
8251
|
+
current_provider, _ = get_current_provider(load_config())
|
|
8252
|
+
if api_key_env:
|
|
8253
|
+
value = os.environ.get(api_key_env, "")
|
|
8254
|
+
if not value:
|
|
8255
|
+
raise SystemExit(f"Environment variable {api_key_env} is empty or not set")
|
|
8256
|
+
cmd_set_api_key(argparse.Namespace(provider=current_provider, key=value))
|
|
8257
|
+
skip_menu = True
|
|
8258
|
+
elif api_key:
|
|
8259
|
+
cmd_set_api_key(argparse.Namespace(provider=current_provider, key=api_key))
|
|
8260
|
+
skip_menu = True
|
|
8261
|
+
base_url = os.environ.get("CLAUDE_ANY_BASE_URL", "").strip()
|
|
8262
|
+
if base_url:
|
|
8263
|
+
current_provider, _ = get_current_provider(load_config())
|
|
8264
|
+
cmd_base_url(argparse.Namespace(provider=current_provider, url=base_url))
|
|
8265
|
+
skip_menu = True
|
|
8266
|
+
model = os.environ.get("CLAUDE_ANY_MODEL", "").strip()
|
|
8267
|
+
if model:
|
|
8268
|
+
cmd_model(argparse.Namespace(value=[model]))
|
|
8269
|
+
skip_menu = True
|
|
8270
|
+
advisor_model = os.environ.get("CLAUDE_ANY_ADVISOR_MODEL", "").strip()
|
|
8271
|
+
if advisor_model:
|
|
8272
|
+
set_advisor_model_config(advisor_model)
|
|
8273
|
+
skip_menu = True
|
|
8274
|
+
provider_option_keys = {
|
|
8275
|
+
"CLAUDE_ANY_MAX_OUTPUT_TOKENS": "max_output_tokens",
|
|
8276
|
+
"CLAUDE_ANY_CONTEXT_WINDOW": "context_window",
|
|
8277
|
+
"CLAUDE_ANY_REQUEST_TIMEOUT_MS": "request_timeout_ms",
|
|
8278
|
+
"CLAUDE_ANY_RATE_LIMIT_RPM": "rate_limit_rpm",
|
|
8279
|
+
"CLAUDE_ANY_RATE_LIMIT_STATUS": "rate_limit_status",
|
|
8280
|
+
"CLAUDE_ANY_STREAM": "stream_enabled",
|
|
8281
|
+
"CLAUDE_ANY_STREAM_WORD_CHUNKING": "stream_word_chunking",
|
|
8282
|
+
}
|
|
8283
|
+
provider_values = [
|
|
8284
|
+
f"{option_key}={os.environ[env_key].strip()}"
|
|
8285
|
+
for env_key, option_key in provider_option_keys.items()
|
|
8286
|
+
if os.environ.get(env_key, "").strip()
|
|
8287
|
+
]
|
|
8288
|
+
if provider_values:
|
|
8289
|
+
cmd_provider_options(argparse.Namespace(values=provider_values))
|
|
8290
|
+
skip_menu = True
|
|
8291
|
+
ollama_values: list[str] = []
|
|
8292
|
+
if os.environ.get("CLAUDE_ANY_OLLAMA_NUM_CTX", "").strip():
|
|
8293
|
+
ollama_values.append(f"num_ctx={os.environ['CLAUDE_ANY_OLLAMA_NUM_CTX'].strip()}")
|
|
8294
|
+
for item in os.environ.get("CLAUDE_ANY_OLLAMA_OPTIONS", "").replace(",", " ").split():
|
|
8295
|
+
if item.strip():
|
|
8296
|
+
ollama_values.append(item.strip())
|
|
8297
|
+
if ollama_values:
|
|
8298
|
+
cmd_ollama_options(argparse.Namespace(values=ollama_values))
|
|
8299
|
+
skip_menu = True
|
|
8300
|
+
return skip_menu, web_search_override, disable_skills_override, update_check_override, force_menu
|
|
8301
|
+
|
|
8302
|
+
|
|
8303
|
+
def run_cli(argv: list[str]) -> int:
|
|
8304
|
+
if argv and argv[0] in ("help", "--help", "-h"):
|
|
8305
|
+
print(cli_usage())
|
|
8306
|
+
return 0
|
|
8307
|
+
argv = pop_headless_env_file_args(argv)
|
|
8308
|
+
if argv:
|
|
8309
|
+
head, rest = argv[0], argv[1:]
|
|
8183
8310
|
if head in ("version", "--version", "-v"):
|
|
8184
8311
|
print(f"claude-any {VERSION}")
|
|
8185
8312
|
return 0
|
|
@@ -8263,16 +8390,30 @@ def run_cli(argv: list[str]) -> int:
|
|
|
8263
8390
|
subprocess.run([ncp, "kill"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
8264
8391
|
return 0
|
|
8265
8392
|
|
|
8266
|
-
passthrough: list[str] = []
|
|
8267
|
-
skip_menu =
|
|
8268
|
-
|
|
8269
|
-
|
|
8270
|
-
|
|
8271
|
-
i = 0
|
|
8272
|
-
while i < len(argv):
|
|
8273
|
-
arg = argv[i]
|
|
8274
|
-
if arg
|
|
8275
|
-
|
|
8393
|
+
passthrough: list[str] = []
|
|
8394
|
+
skip_menu, web_search_override, disable_skills_override, update_check_override, force_menu = apply_headless_env_config()
|
|
8395
|
+
update_check = True
|
|
8396
|
+
if update_check_override is not None:
|
|
8397
|
+
update_check = update_check_override
|
|
8398
|
+
i = 0
|
|
8399
|
+
while i < len(argv):
|
|
8400
|
+
arg = argv[i]
|
|
8401
|
+
if arg in ("--ca-menu", "--ca-interactive"):
|
|
8402
|
+
force_menu = True
|
|
8403
|
+
i += 1
|
|
8404
|
+
elif arg == "--ca-language" or arg.startswith("--ca-language="):
|
|
8405
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8406
|
+
if value is None:
|
|
8407
|
+
if i + 1 >= len(argv):
|
|
8408
|
+
raise SystemExit("Missing language for --ca-language")
|
|
8409
|
+
value = argv[i + 1]
|
|
8410
|
+
i += 2
|
|
8411
|
+
else:
|
|
8412
|
+
i += 1
|
|
8413
|
+
cmd_language(argparse.Namespace(value=value))
|
|
8414
|
+
skip_menu = True
|
|
8415
|
+
elif arg == "--ca-provider" or arg.startswith("--ca-provider="):
|
|
8416
|
+
provider_value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8276
8417
|
if provider_value:
|
|
8277
8418
|
cmd_provider(argparse.Namespace(name=provider_value))
|
|
8278
8419
|
skip_menu = True
|
|
@@ -8301,20 +8442,32 @@ def run_cli(argv: list[str]) -> int:
|
|
|
8301
8442
|
provider, _ = get_current_provider(load_config())
|
|
8302
8443
|
cmd_base_url(argparse.Namespace(provider=provider, url=value))
|
|
8303
8444
|
skip_menu = True
|
|
8304
|
-
elif arg == "--ca-model" or arg.startswith("--ca-model="):
|
|
8305
|
-
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8306
|
-
if value is None:
|
|
8307
|
-
if i + 1 >= len(argv):
|
|
8308
|
-
raise SystemExit("Missing model id for --ca-model")
|
|
8445
|
+
elif arg == "--ca-model" or arg.startswith("--ca-model="):
|
|
8446
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8447
|
+
if value is None:
|
|
8448
|
+
if i + 1 >= len(argv):
|
|
8449
|
+
raise SystemExit("Missing model id for --ca-model")
|
|
8309
8450
|
value = argv[i + 1]
|
|
8310
8451
|
i += 2
|
|
8311
8452
|
else:
|
|
8312
8453
|
i += 1
|
|
8313
|
-
cmd_model(argparse.Namespace(value=[value]))
|
|
8314
|
-
skip_menu = True
|
|
8315
|
-
elif arg == "--ca-
|
|
8316
|
-
|
|
8317
|
-
|
|
8454
|
+
cmd_model(argparse.Namespace(value=[value]))
|
|
8455
|
+
skip_menu = True
|
|
8456
|
+
elif arg == "--ca-advisor-model" or arg.startswith("--ca-advisor-model="):
|
|
8457
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8458
|
+
if value is None:
|
|
8459
|
+
if i + 1 >= len(argv):
|
|
8460
|
+
raise SystemExit("Missing model id for --ca-advisor-model")
|
|
8461
|
+
value = argv[i + 1]
|
|
8462
|
+
i += 2
|
|
8463
|
+
else:
|
|
8464
|
+
i += 1
|
|
8465
|
+
for line in set_advisor_model_config(value):
|
|
8466
|
+
print(line)
|
|
8467
|
+
skip_menu = True
|
|
8468
|
+
elif arg == "--ca-models":
|
|
8469
|
+
cmd_models(argparse.Namespace(provider=None))
|
|
8470
|
+
return 0
|
|
8318
8471
|
elif arg == "--ca-api-key" or arg.startswith("--ca-api-key="):
|
|
8319
8472
|
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8320
8473
|
if value is None:
|
|
@@ -8419,25 +8572,77 @@ def run_cli(argv: list[str]) -> int:
|
|
|
8419
8572
|
i += 1
|
|
8420
8573
|
cmd_provider_options(argparse.Namespace(values=[f"context_window={value}"]))
|
|
8421
8574
|
skip_menu = True
|
|
8422
|
-
elif arg == "--ca-request-timeout-ms" or arg.startswith("--ca-request-timeout-ms="):
|
|
8423
|
-
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8424
|
-
if value is None:
|
|
8425
|
-
if i + 1 >= len(argv):
|
|
8426
|
-
raise SystemExit("Missing value for --ca-request-timeout-ms")
|
|
8575
|
+
elif arg == "--ca-request-timeout-ms" or arg.startswith("--ca-request-timeout-ms="):
|
|
8576
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8577
|
+
if value is None:
|
|
8578
|
+
if i + 1 >= len(argv):
|
|
8579
|
+
raise SystemExit("Missing value for --ca-request-timeout-ms")
|
|
8427
8580
|
value = argv[i + 1]
|
|
8428
8581
|
i += 2
|
|
8429
8582
|
else:
|
|
8430
8583
|
i += 1
|
|
8431
|
-
cmd_provider_options(argparse.Namespace(values=[f"request_timeout_ms={value}"]))
|
|
8432
|
-
skip_menu = True
|
|
8433
|
-
elif arg == "--ca-
|
|
8434
|
-
|
|
8435
|
-
|
|
8436
|
-
|
|
8437
|
-
|
|
8438
|
-
|
|
8439
|
-
|
|
8440
|
-
|
|
8584
|
+
cmd_provider_options(argparse.Namespace(values=[f"request_timeout_ms={value}"]))
|
|
8585
|
+
skip_menu = True
|
|
8586
|
+
elif arg == "--ca-rate-limit-rpm" or arg.startswith("--ca-rate-limit-rpm="):
|
|
8587
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8588
|
+
if value is None:
|
|
8589
|
+
if i + 1 >= len(argv):
|
|
8590
|
+
raise SystemExit("Missing value for --ca-rate-limit-rpm")
|
|
8591
|
+
value = argv[i + 1]
|
|
8592
|
+
i += 2
|
|
8593
|
+
else:
|
|
8594
|
+
i += 1
|
|
8595
|
+
cmd_provider_options(argparse.Namespace(values=[f"rate_limit_rpm={value}"]))
|
|
8596
|
+
skip_menu = True
|
|
8597
|
+
elif arg == "--ca-rate-limit-status" or arg.startswith("--ca-rate-limit-status="):
|
|
8598
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8599
|
+
if value is None:
|
|
8600
|
+
if i + 1 >= len(argv):
|
|
8601
|
+
raise SystemExit("Missing on/off for --ca-rate-limit-status")
|
|
8602
|
+
value = argv[i + 1]
|
|
8603
|
+
i += 2
|
|
8604
|
+
else:
|
|
8605
|
+
i += 1
|
|
8606
|
+
cmd_provider_options(argparse.Namespace(values=[f"rate_limit_status={value}"]))
|
|
8607
|
+
skip_menu = True
|
|
8608
|
+
elif arg == "--ca-stream" or arg.startswith("--ca-stream="):
|
|
8609
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8610
|
+
if value is None:
|
|
8611
|
+
if i + 1 >= len(argv):
|
|
8612
|
+
raise SystemExit("Missing on/off for --ca-stream")
|
|
8613
|
+
value = argv[i + 1]
|
|
8614
|
+
i += 2
|
|
8615
|
+
else:
|
|
8616
|
+
i += 1
|
|
8617
|
+
cmd_provider_options(argparse.Namespace(values=[f"stream_enabled={value}"]))
|
|
8618
|
+
skip_menu = True
|
|
8619
|
+
elif arg == "--ca-stream-word-chunking" or arg.startswith("--ca-stream-word-chunking="):
|
|
8620
|
+
value = arg.split("=", 1)[1] if "=" in arg else None
|
|
8621
|
+
if value is None:
|
|
8622
|
+
if i + 1 >= len(argv):
|
|
8623
|
+
raise SystemExit("Missing on/off for --ca-stream-word-chunking")
|
|
8624
|
+
value = argv[i + 1]
|
|
8625
|
+
i += 2
|
|
8626
|
+
else:
|
|
8627
|
+
i += 1
|
|
8628
|
+
cmd_provider_options(argparse.Namespace(values=[f"stream_word_chunking={value}"]))
|
|
8629
|
+
skip_menu = True
|
|
8630
|
+
elif arg == "--ca-web-search":
|
|
8631
|
+
web_search_override = True
|
|
8632
|
+
skip_menu = True
|
|
8633
|
+
i += 1
|
|
8634
|
+
elif arg == "--ca-no-web-search":
|
|
8635
|
+
web_search_override = False
|
|
8636
|
+
skip_menu = True
|
|
8637
|
+
i += 1
|
|
8638
|
+
elif arg == "--ca-web-fetch":
|
|
8639
|
+
cmd_web_fetch(argparse.Namespace(value="on"))
|
|
8640
|
+
skip_menu = True
|
|
8641
|
+
i += 1
|
|
8642
|
+
elif arg == "--ca-no-web-fetch":
|
|
8643
|
+
cmd_web_fetch(argparse.Namespace(value="off"))
|
|
8644
|
+
skip_menu = True
|
|
8645
|
+
i += 1
|
|
8441
8646
|
elif arg == "--ca-disable-skills":
|
|
8442
8647
|
disable_skills_override = True
|
|
8443
8648
|
skip_menu = True
|
|
@@ -8462,9 +8667,10 @@ def run_cli(argv: list[str]) -> int:
|
|
|
8462
8667
|
else:
|
|
8463
8668
|
passthrough.append(arg)
|
|
8464
8669
|
i += 1
|
|
8465
|
-
return launch_claude(
|
|
8466
|
-
passthrough,
|
|
8467
|
-
skip_menu=skip_menu,
|
|
8670
|
+
return launch_claude(
|
|
8671
|
+
passthrough,
|
|
8672
|
+
skip_menu=skip_menu,
|
|
8673
|
+
force_menu=force_menu,
|
|
8468
8674
|
web_search_override=web_search_override,
|
|
8469
8675
|
disable_skills_override=disable_skills_override,
|
|
8470
8676
|
update_check=update_check,
|
package/docs/README.ja.md
CHANGED
|
@@ -47,7 +47,7 @@ vLLM、NVIDIA hosted、self-hosted NIM を選択し、通常の Claude Code 引
|
|
|
47
47
|
|
|
48
48
|
Credits: One Ciel LLC
|
|
49
49
|
|
|
50
|
-
現在のバージョン: `0.1.
|
|
50
|
+
現在のバージョン: `0.1.34`
|
|
51
51
|
|
|
52
52
|
## 作られた理由
|
|
53
53
|
|
|
@@ -116,13 +116,53 @@ claude-any --ca-provider ollama --ca-base-url http://127.0.0.1:11434 --ca-model
|
|
|
116
116
|
claude-any --ca-provider nvidia-hosted --ca-model z-ai/glm-4.7 --ca-no-update-check -p "Reply with OK only." --output-format text
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
保存済み provider/model を使い、メニューだけをスキップ:
|
|
120
|
-
|
|
121
|
-
```sh
|
|
122
|
-
CLAUDE_ANY_SKIP_MENU=1 claude-any -p "Summarize this repository." --output-format text
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
保存済み provider/model を使い、メニューだけをスキップ:
|
|
120
|
+
|
|
121
|
+
```sh
|
|
122
|
+
CLAUDE_ANY_SKIP_MENU=1 claude-any -p "Summarize this repository." --output-format text
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
すべての起動オプションをフラグで渡す例:
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
claude-any --ca-provider nvidia-hosted --ca-base-url https://integrate.api.nvidia.com/v1 --ca-model z-ai/glm-4.7 --ca-advisor-model deepseek-ai/deepseek-v4-pro --ca-api-key-env NVIDIA_API_KEY --ca-max-output-tokens 4096 --ca-context-window 65536 --ca-request-timeout-ms 300000 --ca-rate-limit-rpm 40 --ca-rate-limit-status on --ca-no-update-check -p "Reply with OK only." --output-format text
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
同じ値を環境変数で指定:
|
|
132
|
+
|
|
133
|
+
```sh
|
|
134
|
+
export CLAUDE_ANY_SKIP_MENU=1
|
|
135
|
+
export CLAUDE_ANY_PROVIDER=nvidia-hosted
|
|
136
|
+
export CLAUDE_ANY_BASE_URL=https://integrate.api.nvidia.com/v1
|
|
137
|
+
export CLAUDE_ANY_MODEL=z-ai/glm-4.7
|
|
138
|
+
export CLAUDE_ANY_ADVISOR_MODEL=deepseek-ai/deepseek-v4-pro
|
|
139
|
+
export CLAUDE_ANY_API_KEY_ENV=NVIDIA_API_KEY
|
|
140
|
+
export CLAUDE_ANY_MAX_OUTPUT_TOKENS=4096
|
|
141
|
+
export CLAUDE_ANY_CONTEXT_WINDOW=65536
|
|
142
|
+
export CLAUDE_ANY_REQUEST_TIMEOUT_MS=300000
|
|
143
|
+
export CLAUDE_ANY_RATE_LIMIT_RPM=40
|
|
144
|
+
export CLAUDE_ANY_RATE_LIMIT_STATUS=on
|
|
145
|
+
claude-any -p "Reply with OK only." --output-format text
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`.env` 方式では、同じ `CLAUDE_ANY_*` 値をファイルに保存して明示的に読み込みます:
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
claude-any --ca-env-file .env.claude-any -p "Reply with OK only." --output-format text
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
上書き順序は固定です: メニューで保存された最後のユーザー選択が基準になり、
|
|
155
|
+
OS 環境変数、`--ca-env-file` の `.env` 値、CLI `--ca-*` パラメータ、
|
|
156
|
+
`--ca-menu` で再度開いた UI での最終選択の順に上書きされます。
|
|
157
|
+
|
|
158
|
+
ヘッドレス対応範囲: provider、base URL、model、Advisor model、API key または
|
|
159
|
+
API-key 環境変数、max output、context window、request timeout、RPM limit、
|
|
160
|
+
RPM status 表示、streaming、web search、web fetch、Claude skills、update check、
|
|
161
|
+
language、Ollama context/options、通常の Claude Code passthrough 引数をすべて
|
|
162
|
+
メニューなしで設定できます。API key は `--ca-api-key` で直接渡せますが、
|
|
163
|
+
スクリプトでは shell history に秘密値を残さない `--ca-api-key-env` を推奨します。
|
|
164
|
+
|
|
165
|
+
その他の例は [manual](manual.md#headless-usage) を参照してください。
|
|
126
166
|
|
|
127
167
|
**アップグレード:**
|
|
128
168
|
|
|
@@ -311,6 +351,13 @@ Windows/Linux 管理、クリーンアップスクリプト、定期的なセキ
|
|
|
311
351
|
|
|
312
352
|
## 変更履歴
|
|
313
353
|
|
|
354
|
+
### 0.1.34
|
|
355
|
+
|
|
356
|
+
- **完全な headless 設定経路**: `--ca-env-file`、環境変数マッピング、Advisor
|
|
357
|
+
model、rate-limit、streaming、language、web-fetch の headless 制御を追加。
|
|
358
|
+
- **上書き順序を文書化**: 保存済みメニュー選択 < OS 環境変数 < `.env` ファイル <
|
|
359
|
+
CLI パラメータ < `--ca-menu` で直接選んだ最終 UI 選択。
|
|
360
|
+
|
|
314
361
|
### 0.1.33
|
|
315
362
|
|
|
316
363
|
- **すべての README の先頭にロゴを追加**: 英語、韓国語、日本語、中国語 README
|
package/docs/README.ko.md
CHANGED
|
@@ -47,7 +47,7 @@ NVIDIA hosted, self-hosted NIM을 선택하고, Claude Code의 일반 인자는
|
|
|
47
47
|
|
|
48
48
|
Credits: One Ciel LLC
|
|
49
49
|
|
|
50
|
-
현재 버전: `0.1.
|
|
50
|
+
현재 버전: `0.1.34`
|
|
51
51
|
|
|
52
52
|
## 왜 만들었나
|
|
53
53
|
|
|
@@ -116,14 +116,54 @@ claude-any --ca-provider ollama --ca-base-url http://127.0.0.1:11434 --ca-model
|
|
|
116
116
|
claude-any --ca-provider nvidia-hosted --ca-model z-ai/glm-4.7 --ca-no-update-check -p "Reply with OK only." --output-format text
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
저장된 provider/model을 그대로 쓰고 메뉴만 건너뛰기:
|
|
120
|
-
|
|
121
|
-
```sh
|
|
122
|
-
CLAUDE_ANY_SKIP_MENU=1 claude-any -p "Summarize this repository." --output-format text
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
119
|
+
저장된 provider/model을 그대로 쓰고 메뉴만 건너뛰기:
|
|
120
|
+
|
|
121
|
+
```sh
|
|
122
|
+
CLAUDE_ANY_SKIP_MENU=1 claude-any -p "Summarize this repository." --output-format text
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
모든 실행 옵션을 플래그로 전달:
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
claude-any --ca-provider nvidia-hosted --ca-base-url https://integrate.api.nvidia.com/v1 --ca-model z-ai/glm-4.7 --ca-advisor-model deepseek-ai/deepseek-v4-pro --ca-api-key-env NVIDIA_API_KEY --ca-max-output-tokens 4096 --ca-context-window 65536 --ca-request-timeout-ms 300000 --ca-rate-limit-rpm 40 --ca-rate-limit-status on --ca-no-update-check -p "Reply with OK only." --output-format text
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
같은 값을 환경변수로 설정:
|
|
132
|
+
|
|
133
|
+
```sh
|
|
134
|
+
export CLAUDE_ANY_SKIP_MENU=1
|
|
135
|
+
export CLAUDE_ANY_PROVIDER=nvidia-hosted
|
|
136
|
+
export CLAUDE_ANY_BASE_URL=https://integrate.api.nvidia.com/v1
|
|
137
|
+
export CLAUDE_ANY_MODEL=z-ai/glm-4.7
|
|
138
|
+
export CLAUDE_ANY_ADVISOR_MODEL=deepseek-ai/deepseek-v4-pro
|
|
139
|
+
export CLAUDE_ANY_API_KEY_ENV=NVIDIA_API_KEY
|
|
140
|
+
export CLAUDE_ANY_MAX_OUTPUT_TOKENS=4096
|
|
141
|
+
export CLAUDE_ANY_CONTEXT_WINDOW=65536
|
|
142
|
+
export CLAUDE_ANY_REQUEST_TIMEOUT_MS=300000
|
|
143
|
+
export CLAUDE_ANY_RATE_LIMIT_RPM=40
|
|
144
|
+
export CLAUDE_ANY_RATE_LIMIT_STATUS=on
|
|
145
|
+
claude-any -p "Reply with OK only." --output-format text
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`.env` 방식은 같은 `CLAUDE_ANY_*` 값을 파일에 저장한 뒤 명시적으로 불러옵니다:
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
claude-any --ca-env-file .env.claude-any -p "Reply with OK only." --output-format text
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
오버라이드 순서는 고정되어 있습니다: 메뉴에서 저장된 최종 사용자 선택값이
|
|
155
|
+
기본값이고, OS 환경변수, `--ca-env-file`의 `.env` 값, CLI `--ca-*` 파라미터,
|
|
156
|
+
`--ca-menu`로 다시 연 인터페이스에서 사용자가 직접 고른 값 순서로 덮어씁니다.
|
|
157
|
+
|
|
158
|
+
헤드리스 지원 범위: provider, base URL, model, Advisor model, API key 또는
|
|
159
|
+
API-key 환경변수, max output, context window, request timeout, RPM limit,
|
|
160
|
+
RPM status 표시, streaming, web search, web fetch, Claude skills, update check,
|
|
161
|
+
language, Ollama context/options, 일반 Claude Code passthrough 인자를 모두 메뉴
|
|
162
|
+
없이 설정할 수 있습니다. API key는 `--ca-api-key`로 직접 전달할 수 있지만,
|
|
163
|
+
스크립트에서는 shell history에 비밀값이 남지 않는 `--ca-api-key-env`를 권장합니다.
|
|
164
|
+
|
|
165
|
+
더 많은 예시는 [헤드리스 예제](#헤드리스-에이전트-채팅)와
|
|
166
|
+
[전체 manual](manual.md#headless-usage)을 참고하세요.
|
|
127
167
|
|
|
128
168
|
**업그레이드:**
|
|
129
169
|
|
|
@@ -311,6 +351,13 @@ Windows 이벤트 로그 리뷰, 바이러스/랜섬웨어 침입 시도 정리,
|
|
|
311
351
|
|
|
312
352
|
## 변경 이력
|
|
313
353
|
|
|
354
|
+
### 0.1.34
|
|
355
|
+
|
|
356
|
+
- **완전한 headless 설정 경로**: `--ca-env-file`, 환경변수 매핑, Advisor model,
|
|
357
|
+
rate-limit, streaming, language, web-fetch headless 제어를 추가했습니다.
|
|
358
|
+
- **오버라이드 순서 문서화**: 저장된 메뉴 선택값 < OS 환경변수 < `.env` 파일 <
|
|
359
|
+
CLI 파라미터 < `--ca-menu`로 직접 고른 최종 인터페이스 선택값.
|
|
360
|
+
|
|
314
361
|
### 0.1.33
|
|
315
362
|
|
|
316
363
|
- **모든 README 상단 로고 브랜딩**: 영어, 한국어, 일본어, 중국어 README 최상단에
|
package/docs/README.zh.md
CHANGED
|
@@ -47,7 +47,7 @@ NIM,并把普通 Claude Code 参数原样传递。
|
|
|
47
47
|
|
|
48
48
|
Credits: One Ciel LLC
|
|
49
49
|
|
|
50
|
-
当前版本: `0.1.
|
|
50
|
+
当前版本: `0.1.34`
|
|
51
51
|
|
|
52
52
|
## 为什么存在
|
|
53
53
|
|
|
@@ -113,13 +113,53 @@ claude-any --ca-provider ollama --ca-base-url http://127.0.0.1:11434 --ca-model
|
|
|
113
113
|
claude-any --ca-provider nvidia-hosted --ca-model z-ai/glm-4.7 --ca-no-update-check -p "Reply with OK only." --output-format text
|
|
114
114
|
```
|
|
115
115
|
|
|
116
|
-
使用已保存的 provider/model,只跳过菜单:
|
|
117
|
-
|
|
118
|
-
```sh
|
|
119
|
-
CLAUDE_ANY_SKIP_MENU=1 claude-any -p "Summarize this repository." --output-format text
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
|
|
116
|
+
使用已保存的 provider/model,只跳过菜单:
|
|
117
|
+
|
|
118
|
+
```sh
|
|
119
|
+
CLAUDE_ANY_SKIP_MENU=1 claude-any -p "Summarize this repository." --output-format text
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
用 flags 传入全部启动选项:
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
claude-any --ca-provider nvidia-hosted --ca-base-url https://integrate.api.nvidia.com/v1 --ca-model z-ai/glm-4.7 --ca-advisor-model deepseek-ai/deepseek-v4-pro --ca-api-key-env NVIDIA_API_KEY --ca-max-output-tokens 4096 --ca-context-window 65536 --ca-request-timeout-ms 300000 --ca-rate-limit-rpm 40 --ca-rate-limit-status on --ca-no-update-check -p "Reply with OK only." --output-format text
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
也可以用环境变量传入同样的值:
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
export CLAUDE_ANY_SKIP_MENU=1
|
|
132
|
+
export CLAUDE_ANY_PROVIDER=nvidia-hosted
|
|
133
|
+
export CLAUDE_ANY_BASE_URL=https://integrate.api.nvidia.com/v1
|
|
134
|
+
export CLAUDE_ANY_MODEL=z-ai/glm-4.7
|
|
135
|
+
export CLAUDE_ANY_ADVISOR_MODEL=deepseek-ai/deepseek-v4-pro
|
|
136
|
+
export CLAUDE_ANY_API_KEY_ENV=NVIDIA_API_KEY
|
|
137
|
+
export CLAUDE_ANY_MAX_OUTPUT_TOKENS=4096
|
|
138
|
+
export CLAUDE_ANY_CONTEXT_WINDOW=65536
|
|
139
|
+
export CLAUDE_ANY_REQUEST_TIMEOUT_MS=300000
|
|
140
|
+
export CLAUDE_ANY_RATE_LIMIT_RPM=40
|
|
141
|
+
export CLAUDE_ANY_RATE_LIMIT_STATUS=on
|
|
142
|
+
claude-any -p "Reply with OK only." --output-format text
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
`.env` 方式是把同样的 `CLAUDE_ANY_*` 值保存到文件,并显式加载:
|
|
146
|
+
|
|
147
|
+
```sh
|
|
148
|
+
claude-any --ca-env-file .env.claude-any -p "Reply with OK only." --output-format text
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
覆盖顺序是固定的: 菜单保存的最后一次用户选择是基线,随后依次由 OS 环境变量、
|
|
152
|
+
`--ca-env-file` 的 `.env` 值、CLI `--ca-*` 参数覆盖;如果使用 `--ca-menu`
|
|
153
|
+
重新打开界面,用户在界面中的最终选择会覆盖前面所有值。
|
|
154
|
+
|
|
155
|
+
Headless 覆盖范围: provider、base URL、model、Advisor model、API key 或
|
|
156
|
+
API-key 环境变量、max output、context window、request timeout、RPM limit、
|
|
157
|
+
RPM status 显示、streaming、web search、web fetch、Claude skills、update check、
|
|
158
|
+
language、Ollama context/options,以及普通 Claude Code passthrough 参数,都可以
|
|
159
|
+
不打开菜单直接配置。API key 可以用 `--ca-api-key` 直接传入,但脚本中更推荐
|
|
160
|
+
`--ca-api-key-env`,避免密钥进入 shell history。
|
|
161
|
+
|
|
162
|
+
更多示例见 [manual](manual.md#headless-usage)。
|
|
123
163
|
|
|
124
164
|
**升级:**
|
|
125
165
|
|
|
@@ -297,6 +337,13 @@ Hermes 格式模型或部分较旧的 Qwen tool template。
|
|
|
297
337
|
|
|
298
338
|
## 更新日志
|
|
299
339
|
|
|
340
|
+
### 0.1.34
|
|
341
|
+
|
|
342
|
+
- **完整 headless 配置路径**:新增 `--ca-env-file`、环境变量映射、Advisor
|
|
343
|
+
model、rate-limit、streaming、language、web-fetch headless 控制。
|
|
344
|
+
- **记录覆盖顺序**:已保存菜单选择 < OS 环境变量 < `.env` 文件 < CLI 参数 <
|
|
345
|
+
通过 `--ca-menu` 直接选择的最终界面值。
|
|
346
|
+
|
|
300
347
|
### 0.1.33
|
|
301
348
|
|
|
302
349
|
- **所有 README 顶部加入 Logo 品牌展示**:在英文、韩文、日文和中文 README
|
package/docs/manual.md
CHANGED
|
@@ -10,7 +10,7 @@ Code starts, while passing normal Claude Code arguments through unchanged.
|
|
|
10
10
|
|
|
11
11
|
Credits: One Ciel LLC
|
|
12
12
|
|
|
13
|
-
Current version: `0.1.
|
|
13
|
+
Current version: `0.1.34`
|
|
14
14
|
|
|
15
15
|
## Install
|
|
16
16
|
|
|
@@ -247,11 +247,22 @@ Any's saved configuration first, skips the menu, starts the required
|
|
|
247
247
|
router services, then immediately executes Claude Code with the remaining
|
|
248
248
|
arguments.
|
|
249
249
|
|
|
250
|
-
Basic pattern:
|
|
251
|
-
|
|
252
|
-
```sh
|
|
253
|
-
claude-any --ca-provider PROVIDER --ca-model MODEL [claude-code args...]
|
|
254
|
-
```
|
|
250
|
+
Basic pattern:
|
|
251
|
+
|
|
252
|
+
```sh
|
|
253
|
+
claude-any --ca-provider PROVIDER --ca-model MODEL [claude-code args...]
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Configuration precedence is deterministic:
|
|
257
|
+
|
|
258
|
+
1. Saved user choices from the interactive menu.
|
|
259
|
+
2. OS environment variables such as `CLAUDE_ANY_PROVIDER`.
|
|
260
|
+
3. Values loaded from `--ca-env-file .env.claude-any`.
|
|
261
|
+
4. CLI `--ca-*` parameters.
|
|
262
|
+
5. If `--ca-menu` is present, the final choice made in the interactive menu.
|
|
263
|
+
|
|
264
|
+
That lets automation provide defaults while still allowing a human operator to
|
|
265
|
+
make the final choice when needed.
|
|
255
266
|
|
|
256
267
|
Direct Claude Code launch examples:
|
|
257
268
|
|
|
@@ -304,11 +315,11 @@ claude-any \
|
|
|
304
315
|
--ca-context-window 65536 \
|
|
305
316
|
--ca-max-output-tokens 4096
|
|
306
317
|
|
|
307
|
-
# NVIDIA hosted API Catalog through the local Claude Any router
|
|
308
|
-
export NVIDIA_API_KEY="..."
|
|
309
|
-
claude-any \
|
|
310
|
-
--ca-provider nvidia-hosted \
|
|
311
|
-
--ca-api-key-env NVIDIA_API_KEY \
|
|
318
|
+
# NVIDIA hosted API Catalog through the local Claude Any router
|
|
319
|
+
export NVIDIA_API_KEY="..."
|
|
320
|
+
claude-any \
|
|
321
|
+
--ca-provider nvidia-hosted \
|
|
322
|
+
--ca-api-key-env NVIDIA_API_KEY \
|
|
312
323
|
--ca-model moonshotai/kimi-k2.6 \
|
|
313
324
|
--ca-request-timeout-ms 300000
|
|
314
325
|
|
|
@@ -316,9 +327,92 @@ claude-any \
|
|
|
316
327
|
claude-any \
|
|
317
328
|
--ca-provider self-hosted-nim \
|
|
318
329
|
--ca-base-url http://127.0.0.1:8000 \
|
|
319
|
-
--ca-model model \
|
|
320
|
-
--ca-api-key not-used
|
|
321
|
-
```
|
|
330
|
+
--ca-model model \
|
|
331
|
+
--ca-api-key not-used
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Full headless configuration with flags:
|
|
335
|
+
|
|
336
|
+
```sh
|
|
337
|
+
claude-any \
|
|
338
|
+
--ca-language en \
|
|
339
|
+
--ca-provider nvidia-hosted \
|
|
340
|
+
--ca-base-url https://integrate.api.nvidia.com/v1 \
|
|
341
|
+
--ca-model z-ai/glm-4.7 \
|
|
342
|
+
--ca-advisor-model deepseek-ai/deepseek-v4-pro \
|
|
343
|
+
--ca-api-key-env NVIDIA_API_KEY \
|
|
344
|
+
--ca-max-output-tokens 4096 \
|
|
345
|
+
--ca-context-window 65536 \
|
|
346
|
+
--ca-request-timeout-ms 300000 \
|
|
347
|
+
--ca-rate-limit-rpm 40 \
|
|
348
|
+
--ca-rate-limit-status on \
|
|
349
|
+
--ca-stream on \
|
|
350
|
+
--ca-stream-word-chunking off \
|
|
351
|
+
--ca-web-search \
|
|
352
|
+
--ca-web-fetch \
|
|
353
|
+
--ca-enable-skills \
|
|
354
|
+
--ca-no-update-check \
|
|
355
|
+
-p "Reply with OK only." \
|
|
356
|
+
--output-format text
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Full headless configuration with environment variables:
|
|
360
|
+
|
|
361
|
+
```sh
|
|
362
|
+
export CLAUDE_ANY_SKIP_MENU=1
|
|
363
|
+
export CLAUDE_ANY_LANGUAGE=en
|
|
364
|
+
export CLAUDE_ANY_PROVIDER=nvidia-hosted
|
|
365
|
+
export CLAUDE_ANY_BASE_URL=https://integrate.api.nvidia.com/v1
|
|
366
|
+
export CLAUDE_ANY_MODEL=z-ai/glm-4.7
|
|
367
|
+
export CLAUDE_ANY_ADVISOR_MODEL=deepseek-ai/deepseek-v4-pro
|
|
368
|
+
export CLAUDE_ANY_API_KEY_ENV=NVIDIA_API_KEY
|
|
369
|
+
export CLAUDE_ANY_MAX_OUTPUT_TOKENS=4096
|
|
370
|
+
export CLAUDE_ANY_CONTEXT_WINDOW=65536
|
|
371
|
+
export CLAUDE_ANY_REQUEST_TIMEOUT_MS=300000
|
|
372
|
+
export CLAUDE_ANY_RATE_LIMIT_RPM=40
|
|
373
|
+
export CLAUDE_ANY_RATE_LIMIT_STATUS=on
|
|
374
|
+
export CLAUDE_ANY_STREAM=on
|
|
375
|
+
export CLAUDE_ANY_STREAM_WORD_CHUNKING=off
|
|
376
|
+
export CLAUDE_ANY_WEB_SEARCH=on
|
|
377
|
+
export CLAUDE_ANY_WEB_FETCH=on
|
|
378
|
+
export CLAUDE_ANY_DISABLE_SKILLS=off
|
|
379
|
+
export CLAUDE_ANY_UPDATE_CHECK=off
|
|
380
|
+
claude-any -p "Reply with OK only." --output-format text
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
The same values can be stored in a dotenv-style file and loaded explicitly:
|
|
384
|
+
|
|
385
|
+
```dotenv
|
|
386
|
+
CLAUDE_ANY_SKIP_MENU=1
|
|
387
|
+
CLAUDE_ANY_LANGUAGE=en
|
|
388
|
+
CLAUDE_ANY_PROVIDER=nvidia-hosted
|
|
389
|
+
CLAUDE_ANY_BASE_URL=https://integrate.api.nvidia.com/v1
|
|
390
|
+
CLAUDE_ANY_MODEL=z-ai/glm-4.7
|
|
391
|
+
CLAUDE_ANY_ADVISOR_MODEL=deepseek-ai/deepseek-v4-pro
|
|
392
|
+
CLAUDE_ANY_API_KEY_ENV=NVIDIA_API_KEY
|
|
393
|
+
CLAUDE_ANY_MAX_OUTPUT_TOKENS=4096
|
|
394
|
+
CLAUDE_ANY_CONTEXT_WINDOW=65536
|
|
395
|
+
CLAUDE_ANY_REQUEST_TIMEOUT_MS=300000
|
|
396
|
+
CLAUDE_ANY_RATE_LIMIT_RPM=40
|
|
397
|
+
CLAUDE_ANY_RATE_LIMIT_STATUS=on
|
|
398
|
+
CLAUDE_ANY_STREAM=on
|
|
399
|
+
CLAUDE_ANY_STREAM_WORD_CHUNKING=off
|
|
400
|
+
CLAUDE_ANY_WEB_SEARCH=on
|
|
401
|
+
CLAUDE_ANY_WEB_FETCH=on
|
|
402
|
+
CLAUDE_ANY_DISABLE_SKILLS=off
|
|
403
|
+
CLAUDE_ANY_UPDATE_CHECK=off
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
```sh
|
|
407
|
+
claude-any --ca-env-file .env.claude-any -p "Reply with OK only." --output-format text
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
To let `.env` or CLI values prefill the menu while the user makes the final
|
|
411
|
+
choice, add `--ca-menu`:
|
|
412
|
+
|
|
413
|
+
```sh
|
|
414
|
+
claude-any --ca-env-file .env.claude-any --ca-model z-ai/glm-4.7 --ca-menu
|
|
415
|
+
```
|
|
322
416
|
|
|
323
417
|
Passing Claude Code arguments:
|
|
324
418
|
|
|
@@ -352,31 +446,42 @@ claude-any stop
|
|
|
352
446
|
|
|
353
447
|
Common Claude Any setup flags:
|
|
354
448
|
|
|
355
|
-
| Flag | Purpose |
|
|
356
|
-
| --- | --- |
|
|
357
|
-
| `--ca-
|
|
358
|
-
| `--ca-
|
|
359
|
-
| `--ca-
|
|
360
|
-
| `--ca-
|
|
361
|
-
| `--ca-
|
|
449
|
+
| Flag | Purpose |
|
|
450
|
+
| --- | --- |
|
|
451
|
+
| `--ca-env-file PATH` | Load `CLAUDE_ANY_*` values from a dotenv-style file. |
|
|
452
|
+
| `--ca-menu` | Apply env/flag values, then open the interactive menu for the final user choice. |
|
|
453
|
+
| `--ca-language en|ko|ja|zh` | Set display language. |
|
|
454
|
+
| `--ca-provider PROVIDER` | Set provider and skip the menu for this launch. |
|
|
455
|
+
| `--ca-model MODEL` | Set the current provider model. |
|
|
456
|
+
| `--ca-advisor-model MODEL` | Set the Advisor model; use `off` to disable it. |
|
|
457
|
+
| `--ca-base-url URL` | Set the current provider base URL. |
|
|
458
|
+
| `--ca-api-key KEY` | Store the current provider API key directly. Prefer env vars for scripts. |
|
|
459
|
+
| `--ca-api-key-env ENVVAR` | Store the current provider API key from an environment variable. |
|
|
362
460
|
| `--ca-set-api-key PROVIDER KEY` | Store a key for a specific provider. |
|
|
363
461
|
| `--ca-set-api-key-env PROVIDER ENVVAR` | Store a provider key from an environment variable. |
|
|
364
|
-
| `--ca-max-output-tokens VALUE` | Set provider output-token cap. |
|
|
365
|
-
| `--ca-context-window VALUE` | Set provider/router context-window cap where supported. |
|
|
366
|
-
| `--ca-request-timeout-ms VALUE` | Set upstream request timeout in milliseconds. |
|
|
367
|
-
| `--ca-
|
|
368
|
-
| `--ca-
|
|
369
|
-
| `--ca-
|
|
370
|
-
| `--ca-
|
|
371
|
-
| `--ca-
|
|
372
|
-
| `--ca-
|
|
373
|
-
| `--ca-
|
|
462
|
+
| `--ca-max-output-tokens VALUE` | Set provider output-token cap. |
|
|
463
|
+
| `--ca-context-window VALUE` | Set provider/router context-window cap where supported. |
|
|
464
|
+
| `--ca-request-timeout-ms VALUE` | Set upstream request timeout in milliseconds. |
|
|
465
|
+
| `--ca-rate-limit-rpm VALUE` | Set provider RPM limit; `0` disables throttling but keeps usage display. |
|
|
466
|
+
| `--ca-rate-limit-status on|off` | Show or hide RPM/rate-limit status in the Claude Code statusline. |
|
|
467
|
+
| `--ca-stream on|off` | Enable or disable streaming through the router. |
|
|
468
|
+
| `--ca-stream-word-chunking on|off` | Split streamed text into smaller word-like chunks when enabled. |
|
|
469
|
+
| `--ca-ollama-num-ctx VALUE` | Set Ollama `num_ctx`. |
|
|
470
|
+
| `--ca-ollama-ctx-range MIN MAX` | Set Ollama auto context range. |
|
|
471
|
+
| `--ca-ollama-option KEY=VALUE` | Set an Ollama option such as `temperature=0.3`. |
|
|
472
|
+
| `--ca-web-search` / `--ca-no-web-search` | Force-enable or disable web-search MCP for this launch. |
|
|
473
|
+
| `--ca-web-fetch` / `--ca-no-web-fetch` | Enable or disable fetch MCP for web page content. |
|
|
474
|
+
| `--ca-disable-skills` / `--ca-enable-skills` | Control Claude Code skills for this launch. |
|
|
475
|
+
| `--ca-no-update-check` | Skip the Claude Code update check. |
|
|
476
|
+
| `--ca-status` | Print status and exit. |
|
|
374
477
|
| `--ca-stop` | Stop managed router services and exit. |
|
|
375
478
|
|
|
376
479
|
Notes for automation:
|
|
377
480
|
|
|
378
|
-
- `--ca-api-key-env` avoids putting secrets directly in shell history.
|
|
379
|
-
-
|
|
481
|
+
- `--ca-api-key-env` avoids putting secrets directly in shell history.
|
|
482
|
+
- `--ca-api-key` and `--ca-set-api-key` are available for direct key passing,
|
|
483
|
+
but prefer the environment-variable forms in shared scripts and terminals.
|
|
484
|
+
- `claude-any stop` is safe to run before scripted tests to remove stale
|
|
380
485
|
router/proxy processes.
|
|
381
486
|
- Use `claude-any test 60 auto` for a quick readiness check and reserve
|
|
382
487
|
`claude-any test 180 full` for deeper provider validation.
|
package/package.json
CHANGED