@oneciel-ai/claude-any 0.1.68 → 0.1.70

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,12 @@
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
+
28
34
  ### 2026-05-15
29
35
 
30
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.
@@ -62,7 +68,7 @@ arguments through unchanged.
62
68
 
63
69
  Credits: One Ciel LLC
64
70
 
65
- Current version: `0.1.68`
71
+ Current version: `0.1.70`
66
72
 
67
73
  ## Why This Exists
68
74
 
@@ -129,6 +135,33 @@ claude-any --ca-provider ollama-cloud --ca-model glm-5.1
129
135
  claude-any --ca-provider ollama --ca-base-url http://127.0.0.1:11434 --ca-model qwen3-coder
130
136
  ```
131
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
+
132
165
  Run one non-interactive Claude Code prompt:
133
166
 
134
167
  ```sh
@@ -147,6 +180,30 @@ Configure every launch option with flags:
147
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
148
181
  ```
149
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
+
150
207
  Or put the same values in environment variables:
151
208
 
152
209
  ```sh
@@ -164,18 +221,57 @@ export CLAUDE_ANY_RATE_LIMIT_STATUS=on
164
221
  claude-any -p "Reply with OK only." --output-format text
165
222
  ```
166
223
 
167
- For `.env` driven runs, save the same `CLAUDE_ANY_*` values in a file and pass
168
- 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:
169
247
 
170
248
  ```sh
171
249
  claude-any --ca-env-file .env.claude-any -p "Reply with OK only." --output-format text
172
250
  ```
173
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
+
174
264
  Override order is deterministic: saved user choices from the menu are the
175
265
  baseline, OS environment variables override them, `--ca-env-file` values
176
266
  override the OS environment, CLI `--ca-*` parameters override the env file, and
177
267
  `--ca-menu` lets the final interactive menu choice override everything.
178
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
+
179
275
  Headless coverage checklist: provider, base URL, model, Advisor model, API key
180
276
  or API-key environment variable, max output, context window, request timeout,
181
277
  RPM limit, RPM status display, streaming, web search, web fetch, Claude skills,
@@ -399,6 +495,25 @@ steps under that larger model's supervision.
399
495
 
400
496
  ## Changelog
401
497
 
498
+ ### 0.1.70
499
+
500
+ - **Linux menu debug log fix**: key-debug logging now writes under the user's
501
+ Claude Any config directory instead of global `/tmp`, avoiding permission
502
+ crashes on locked-down Linux systems.
503
+ - **Best-effort key logging**: menu input no longer fails if the optional
504
+ key-debug log cannot be written.
505
+
506
+ ### 0.1.69
507
+
508
+ - **Realtime channel bridge**: added `/ca/channel/messages`, `/ca/channel/wait`,
509
+ `/ca/channel/stream`, `/ca/channel/notify`, and runtime SSE connector controls
510
+ so external systems can deliver live messages into Claude Any.
511
+ - **`/channel` slash command**: Claude Code can inspect bridge status, poll,
512
+ wait, send messages, and check SSE connector state without leaving the session.
513
+ - **Advisor and coordination parity**: Advisor feedback is summarized back into
514
+ the visible transcript/executor flow, while channel and Cron-compatible tool
515
+ schemas make third-party model sessions behave closer to native Claude Code.
516
+
402
517
  ### 0.1.68
403
518
 
404
519
  - **Tabbed router management page**: the router root page now has top-menu
@@ -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")