@oneciel-ai/claude-any 0.1.67 → 0.1.69

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 CHANGED
@@ -25,6 +25,18 @@
25
25
 
26
26
  ## Today's Top 3 Benefits
27
27
 
28
+ ### 2026-05-18
29
+
30
+ 1. **Realtime channel bridge for external agents** — Claude Any now exposes `/ca/channel/*` endpoints and an SSE connector so systems like AI-Net can push live agent messages into Claude Code sessions.
31
+ 2. **Advisor feedback is visible and actionable** — Advisor reviews can be surfaced in the Claude Code transcript and fed back into the executor model before plan approval or risky continuation points.
32
+ 3. **Better non-Anthropic workflow parity** — Cron-style task scheduling, channel polling, and router-native coordination commands are modeled more closely to Claude Code's native behavior for Ollama, Ollama Cloud, NVIDIA hosted, vLLM, and NIM.
33
+
34
+ ### 2026-05-15
35
+
36
+ 1. **Router management is now navigable** — the built-in router home page is split into top-menu sections for Overview, LLM Settings, Events, and Endpoints instead of crowding everything into one long screen.
37
+ 2. **Safer remote debug exposure** — router external access is off by default, requires an explicit confirmed toggle, can be switched with `/router-debug`, restarts the router to apply the bind address, and shows `debug external` in the Claude Code status line when enabled.
38
+ 3. **Operator-grade observability and live settings** — the router now exposes structured event views plus live LLM setting controls, making long Claude Code sessions easier to monitor, tune, and debug without editing config files by hand.
39
+
28
40
  ### 2026-05-14
29
41
 
30
42
  1. **Plan Mode loop recovery is semantic, not hard-coded** — unchanged `Read` results are now converted with the previous authoritative observation and current Plan Mode state, so Claude Code can move to `ExitPlanMode` or the next real step instead of rereading the same slice.
@@ -56,7 +68,7 @@ arguments through unchanged.
56
68
 
57
69
  Credits: One Ciel LLC
58
70
 
59
- Current version: `0.1.67`
71
+ Current version: `0.1.69`
60
72
 
61
73
  ## Why This Exists
62
74
 
@@ -123,6 +135,33 @@ claude-any --ca-provider ollama-cloud --ca-model glm-5.1
123
135
  claude-any --ca-provider ollama --ca-base-url http://127.0.0.1:11434 --ca-model qwen3-coder
124
136
  ```
125
137
 
138
+ Apply settings only, without launching Claude Code:
139
+
140
+ ```sh
141
+ claude-any --ca-provider ollama-cloud --ca-model deepseek-v4-flash --ca-context-window 1048576 --ca-request-timeout-ms 300000 --ca-no-launch
142
+ ```
143
+
144
+ Apply the recommended LLM options for the saved provider/model, then exit:
145
+
146
+ ```sh
147
+ claude-any --ca-auto-llm-options --ca-no-launch
148
+ ```
149
+
150
+ Apply the recommended LLM options for a specific model name, then exit:
151
+
152
+ ```sh
153
+ claude-any --ca-provider ollama-cloud --ca-auto-llm-options deepseek-v4-flash --ca-no-launch
154
+ ```
155
+
156
+ ```sh
157
+ claude-any --ca-env-file .env.claude-any --ca-no-launch
158
+ ```
159
+
160
+ This is useful for remote provisioning, CI setup, base image preparation, or a
161
+ parent agent that wants to configure Claude Any once and launch Claude Code in a
162
+ separate step. Without `--ca-no-launch`, Claude Any applies the settings and
163
+ then launches Claude Code as usual.
164
+
126
165
  Run one non-interactive Claude Code prompt:
127
166
 
128
167
  ```sh
@@ -141,6 +180,30 @@ Configure every launch option with flags:
141
180
  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 120000 --ca-rate-limit-rpm 40 --ca-rate-limit-status on --ca-no-update-check -p "Reply with OK only." --output-format text
142
181
  ```
143
182
 
183
+ Full Ollama Cloud 1M-context setup with flags:
184
+
185
+ ```sh
186
+ claude-any --ca-provider ollama-cloud --ca-base-url https://ollama.com --ca-model deepseek-v4-flash --ca-advisor-model deepseek-v4-pro --ca-api-key-env OLLAMA_API_KEY --ca-context-window 1048576 --ca-max-output-tokens 8192 --ca-request-timeout-ms 300000 --ca-stream on --ca-stream-word-chunking off --ca-rate-limit-rpm 0 --ca-rate-limit-status on -p "Create an implementation plan." --output-format text
187
+ ```
188
+
189
+ The same setup can let Claude Any choose the model's recommended LLM options:
190
+
191
+ ```sh
192
+ claude-any --ca-provider ollama-cloud --ca-base-url https://ollama.com --ca-auto-llm-options deepseek-v4-flash --ca-advisor-model deepseek-v4-pro --ca-api-key-env OLLAMA_API_KEY --ca-stream on --ca-rate-limit-status on -p "Create an implementation plan." --output-format text
193
+ ```
194
+
195
+ Full local Ollama setup with flags:
196
+
197
+ ```sh
198
+ claude-any --ca-provider ollama --ca-base-url http://127.0.0.1:11434 --ca-model qwen3-coder --ca-ollama-num-ctx auto --ca-ollama-ctx-range 65536 262144 --ca-request-timeout-ms 180000 --ca-stream on --ca-no-update-check -p "Inspect the current project and summarize risks." --output-format text
199
+ ```
200
+
201
+ Full NVIDIA hosted setup with rate-limit management:
202
+
203
+ ```sh
204
+ 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-context-window 65536 --ca-max-output-tokens 4096 --ca-request-timeout-ms 180000 --ca-stream on --ca-rate-limit-rpm 40 --ca-rate-limit-status on -p "Review this repository and list next actions." --output-format text
205
+ ```
206
+
144
207
  Or put the same values in environment variables:
145
208
 
146
209
  ```sh
@@ -158,18 +221,57 @@ export CLAUDE_ANY_RATE_LIMIT_STATUS=on
158
221
  claude-any -p "Reply with OK only." --output-format text
159
222
  ```
160
223
 
161
- For `.env` driven runs, save the same `CLAUDE_ANY_*` values in a file and pass
162
- it explicitly:
224
+ For `.env` driven runs, save the same `CLAUDE_ANY_*` values in a file:
225
+
226
+ ```dotenv
227
+ CLAUDE_ANY_SKIP_MENU=1
228
+ CLAUDE_ANY_PROVIDER=ollama-cloud
229
+ CLAUDE_ANY_BASE_URL=https://ollama.com
230
+ CLAUDE_ANY_MODEL=deepseek-v4-flash
231
+ CLAUDE_ANY_ADVISOR_MODEL=deepseek-v4-pro
232
+ CLAUDE_ANY_API_KEY_ENV=OLLAMA_API_KEY
233
+ CLAUDE_ANY_CONTEXT_WINDOW=1048576
234
+ CLAUDE_ANY_MAX_OUTPUT_TOKENS=8192
235
+ CLAUDE_ANY_REQUEST_TIMEOUT_MS=300000
236
+ CLAUDE_ANY_STREAM=on
237
+ CLAUDE_ANY_STREAM_WORD_CHUNKING=off
238
+ CLAUDE_ANY_RATE_LIMIT_RPM=0
239
+ CLAUDE_ANY_RATE_LIMIT_STATUS=on
240
+ CLAUDE_ANY_WEB_SEARCH=on
241
+ CLAUDE_ANY_WEB_FETCH=on
242
+ CLAUDE_ANY_SELF_UPDATE_CHECK=off
243
+ CLAUDE_ANY_UPDATE_CHECK=off
244
+ ```
245
+
246
+ Then apply and launch:
163
247
 
164
248
  ```sh
165
249
  claude-any --ca-env-file .env.claude-any -p "Reply with OK only." --output-format text
166
250
  ```
167
251
 
252
+ Or apply only and exit:
253
+
254
+ ```sh
255
+ claude-any --ca-env-file .env.claude-any --ca-no-launch
256
+ ```
257
+
258
+ You can also use a CLI flag to override one `.env` value for a single run:
259
+
260
+ ```sh
261
+ claude-any --ca-env-file .env.claude-any --ca-model glm-5.1 -p "Use the overridden model for this run." --output-format text
262
+ ```
263
+
168
264
  Override order is deterministic: saved user choices from the menu are the
169
265
  baseline, OS environment variables override them, `--ca-env-file` values
170
266
  override the OS environment, CLI `--ca-*` parameters override the env file, and
171
267
  `--ca-menu` lets the final interactive menu choice override everything.
172
268
 
269
+ Quietly upgrade Claude Any and Claude Code, then exit without launching Claude:
270
+
271
+ ```sh
272
+ claude-any --ca-upgrade-and-exit
273
+ ```
274
+
173
275
  Headless coverage checklist: provider, base URL, model, Advisor model, API key
174
276
  or API-key environment variable, max output, context window, request timeout,
175
277
  RPM limit, RPM status display, streaming, web search, web fetch, Claude skills,
@@ -393,6 +495,30 @@ steps under that larger model's supervision.
393
495
 
394
496
  ## Changelog
395
497
 
498
+ ### 0.1.69
499
+
500
+ - **Realtime channel bridge**: added `/ca/channel/messages`, `/ca/channel/wait`,
501
+ `/ca/channel/stream`, `/ca/channel/notify`, and runtime SSE connector controls
502
+ so external systems can deliver live messages into Claude Any.
503
+ - **`/channel` slash command**: Claude Code can inspect bridge status, poll,
504
+ wait, send messages, and check SSE connector state without leaving the session.
505
+ - **Advisor and coordination parity**: Advisor feedback is summarized back into
506
+ the visible transcript/executor flow, while channel and Cron-compatible tool
507
+ schemas make third-party model sessions behave closer to native Claude Code.
508
+
509
+ ### 0.1.68
510
+
511
+ - **Tabbed router management page**: the router root page now has top-menu
512
+ sections for Overview, LLM Settings, Events, and Endpoints, keeping remote
513
+ management usable as more controls are added.
514
+ - **Safe `/router-debug` toggle**: external router exposure is off by default,
515
+ requires an explicit confirmed setting, can be toggled inside Claude Code
516
+ with `/router-debug`, and automatically restarts the router so the bind
517
+ address changes immediately.
518
+ - **Main-branch npm automation**: pushing or merging to `main` now triggers the
519
+ npm publish workflow, but the workflow first checks whether the package
520
+ version already exists on npm and skips duplicate publishes.
521
+
396
522
  ### 0.1.67
397
523
 
398
524
  - **Fast prelaunch navigation**: arrow-key redraws no longer call the router
package/claude-any ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env sh
2
+ set -eu
3
+
4
+ PYTHON_BIN="${CLAUDE_ANY_PYTHON:-python3}"
5
+ CLAUDE_ANY_DIR="${CLAUDE_ANY_HOME:-"$HOME/.local/share/claude-any"}"
6
+
7
+ exec "$PYTHON_BIN" "$CLAUDE_ANY_DIR/claude_any.py" cli "$@"
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env sh
2
+ set -eu
3
+
4
+ PYTHON_BIN="${CLAUDE_ANY_PYTHON:-python3}"
5
+ CLAUDE_ANY_DIR="${CLAUDE_ANY_HOME:-"$HOME/.local/share/claude-any"}"
6
+
7
+ exec "$PYTHON_BIN" "$CLAUDE_ANY_DIR/claude_any.py" cli stop
@@ -0,0 +1,18 @@
1
+ @echo off
2
+ setlocal
3
+
4
+ if defined CLAUDE_ANY_HOME (
5
+ set "CLAUDE_ANY_SCRIPT=%CLAUDE_ANY_HOME%\claude_any.py"
6
+ ) else (
7
+ set "CLAUDE_ANY_SCRIPT=%USERPROFILE%\.local\share\claude-any\claude_any.py"
8
+ )
9
+
10
+ if defined CLAUDE_ANY_PYTHON (
11
+ "%CLAUDE_ANY_PYTHON%" "%CLAUDE_ANY_SCRIPT%" cli stop
12
+ exit /b %ERRORLEVEL%
13
+ )
14
+
15
+ py -3 "%CLAUDE_ANY_SCRIPT%" cli stop
16
+ if not %ERRORLEVEL%==9009 exit /b %ERRORLEVEL%
17
+ python "%CLAUDE_ANY_SCRIPT%" cli stop
18
+ exit /b %ERRORLEVEL%
@@ -0,0 +1,20 @@
1
+ $ErrorActionPreference = "Stop"
2
+
3
+ if ($env:CLAUDE_ANY_HOME) {
4
+ $script = Join-Path $env:CLAUDE_ANY_HOME "claude_any.py"
5
+ } else {
6
+ $script = Join-Path $HOME ".local\share\claude-any\claude_any.py"
7
+ }
8
+
9
+ if ($env:CLAUDE_ANY_PYTHON) {
10
+ & $env:CLAUDE_ANY_PYTHON $script cli stop
11
+ exit $LASTEXITCODE
12
+ }
13
+
14
+ $py = Get-Command py -ErrorAction SilentlyContinue
15
+ if ($py) {
16
+ & $py.Source -3 $script cli stop
17
+ } else {
18
+ & python $script cli stop
19
+ }
20
+ exit $LASTEXITCODE
@@ -740,9 +740,16 @@ def main() -> int:
740
740
  except Exception:
741
741
  return 0
742
742
  name = str(event.get("hook_event_name") or "")
743
+ provider = os.environ.get("CLAUDE_ANY_PROVIDER", "").strip()
744
+ is_active = active()
745
+ if not is_active:
746
+ if provider:
747
+ log_event(f"inactive provider={provider}")
748
+ return 0
743
749
 
744
- # Worktree handlers always run, regardless of provider, so the non-git
745
- # worktree fallback works whenever the hook is installed at all.
750
+ # Claude Any hooks are installed in Claude Code's global settings, so they
751
+ # must be silent for native Claude sessions. Only alter worktree, stop, and
752
+ # tool behavior when Claude Any launched the process with an active provider.
746
753
  if name == "WorktreeCreate":
747
754
  return handle_worktree_create(event)
748
755
  if name == "WorktreeRemove":
@@ -753,19 +760,13 @@ def main() -> int:
753
760
  # Lightweight observation for events we do not act on. Skip when inactive
754
761
  # to avoid touching disk on every event.
755
762
  if name in OBSERVE_ONLY_EVENTS:
756
- if active():
757
- try:
758
- log_json_event(event)
759
- except Exception:
760
- pass
763
+ try:
764
+ log_json_event(event)
765
+ except Exception:
766
+ pass
761
767
  return 0
762
768
 
763
769
  # Tool/task events: keep existing provider gating.
764
- provider = os.environ.get("CLAUDE_ANY_PROVIDER", "").strip()
765
- if not active():
766
- if provider:
767
- log_event(f"inactive provider={provider}")
768
- return 0
769
770
  if name == "PreToolUse":
770
771
  tool = str(event.get("tool_name") or "")
771
772
  raw = event.get("tool_input")
package/claude-any.cmd ADDED
@@ -0,0 +1,18 @@
1
+ @echo off
2
+ setlocal
3
+
4
+ if defined CLAUDE_ANY_HOME (
5
+ set "CLAUDE_ANY_SCRIPT=%CLAUDE_ANY_HOME%\claude_any.py"
6
+ ) else (
7
+ set "CLAUDE_ANY_SCRIPT=%USERPROFILE%\.local\share\claude-any\claude_any.py"
8
+ )
9
+
10
+ if defined CLAUDE_ANY_PYTHON (
11
+ "%CLAUDE_ANY_PYTHON%" "%CLAUDE_ANY_SCRIPT%" cli %*
12
+ exit /b %ERRORLEVEL%
13
+ )
14
+
15
+ py -3 "%CLAUDE_ANY_SCRIPT%" cli %*
16
+ if not %ERRORLEVEL%==9009 exit /b %ERRORLEVEL%
17
+ python "%CLAUDE_ANY_SCRIPT%" cli %*
18
+ exit /b %ERRORLEVEL%
package/claude-any.ps1 ADDED
@@ -0,0 +1,20 @@
1
+ $ErrorActionPreference = "Stop"
2
+
3
+ if ($env:CLAUDE_ANY_HOME) {
4
+ $script = Join-Path $env:CLAUDE_ANY_HOME "claude_any.py"
5
+ } else {
6
+ $script = Join-Path $HOME ".local\share\claude-any\claude_any.py"
7
+ }
8
+
9
+ if ($env:CLAUDE_ANY_PYTHON) {
10
+ & $env:CLAUDE_ANY_PYTHON $script cli @args
11
+ exit $LASTEXITCODE
12
+ }
13
+
14
+ $py = Get-Command py -ErrorAction SilentlyContinue
15
+ if ($py) {
16
+ & $py.Source -3 $script cli @args
17
+ } else {
18
+ & python $script cli @args
19
+ }
20
+ exit $LASTEXITCODE
package/claude-anyctl ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env sh
2
+ set -eu
3
+
4
+ PYTHON_BIN="${CLAUDE_ANY_PYTHON:-python3}"
5
+ CLAUDE_ANY_DIR="${CLAUDE_ANY_HOME:-"$HOME/.local/share/claude-any"}"
6
+
7
+ exec "$PYTHON_BIN" "$CLAUDE_ANY_DIR/claude_any.py" "$@"
@@ -0,0 +1,18 @@
1
+ @echo off
2
+ setlocal
3
+
4
+ if defined CLAUDE_ANY_HOME (
5
+ set "CLAUDE_ANY_SCRIPT=%CLAUDE_ANY_HOME%\claude_any.py"
6
+ ) else (
7
+ set "CLAUDE_ANY_SCRIPT=%USERPROFILE%\.local\share\claude-any\claude_any.py"
8
+ )
9
+
10
+ if defined CLAUDE_ANY_PYTHON (
11
+ "%CLAUDE_ANY_PYTHON%" "%CLAUDE_ANY_SCRIPT%" %*
12
+ exit /b %ERRORLEVEL%
13
+ )
14
+
15
+ py -3 "%CLAUDE_ANY_SCRIPT%" %*
16
+ if not %ERRORLEVEL%==9009 exit /b %ERRORLEVEL%
17
+ python "%CLAUDE_ANY_SCRIPT%" %*
18
+ exit /b %ERRORLEVEL%
@@ -0,0 +1,20 @@
1
+ $ErrorActionPreference = "Stop"
2
+
3
+ if ($env:CLAUDE_ANY_HOME) {
4
+ $script = Join-Path $env:CLAUDE_ANY_HOME "claude_any.py"
5
+ } else {
6
+ $script = Join-Path $HOME ".local\share\claude-any\claude_any.py"
7
+ }
8
+
9
+ if ($env:CLAUDE_ANY_PYTHON) {
10
+ & $env:CLAUDE_ANY_PYTHON $script @args
11
+ exit $LASTEXITCODE
12
+ }
13
+
14
+ $py = Get-Command py -ErrorAction SilentlyContinue
15
+ if ($py) {
16
+ & $py.Source -3 $script @args
17
+ } else {
18
+ & python $script @args
19
+ }
20
+ exit $LASTEXITCODE