@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 +129 -3
- package/claude-any +7 -0
- package/claude-any-stop +7 -0
- package/claude-any-stop.cmd +18 -0
- package/claude-any-stop.ps1 +20 -0
- package/claude-any-tool-guard.py +13 -12
- package/claude-any.cmd +18 -0
- package/claude-any.ps1 +20 -0
- package/claude-anyctl +7 -0
- package/claude-anyctl.cmd +18 -0
- package/claude-anyctl.ps1 +20 -0
- package/claude_any.py +1699 -113
- package/claude_any_support/__init__.py +6 -0
- package/claude_any_support/observability.py +214 -0
- package/claude_any_support/transcript_filter.py +31 -0
- package/docs/README.ja.md +24 -1
- package/docs/README.ko.md +30 -1
- package/docs/README.zh.md +24 -1
- package/docs/manual.md +1 -1
- package/install.ps1 +5 -0
- package/install.sh +3 -1
- package/package.json +12 -2
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.
|
|
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
|
|
162
|
-
|
|
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
package/claude-any-stop
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 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
|
package/claude-any-tool-guard.py
CHANGED
|
@@ -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
|
-
#
|
|
745
|
-
#
|
|
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
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
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,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
|