claude-code-tools 0.1.12__tar.gz → 0.1.13__tar.gz
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.
Potentially problematic release.
This version of claude-code-tools might be problematic. Click here for more details.
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/.gitignore +5 -1
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/PKG-INFO +25 -6
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/README.md +24 -5
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/claude_code_tools/__init__.py +1 -1
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/claude_code_tools/find_claude_session.py +27 -9
- claude_code_tools-0.1.13/docs/claude-code-chutes.md +138 -0
- claude_code_tools-0.1.13/docs/reddit-post.md +55 -0
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/pyproject.toml +2 -2
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/claude_code_tools/dotenv_vault.py +0 -0
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/claude_code_tools/tmux_cli_controller.py +0 -0
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/claude_code_tools/tmux_remote_controller.py +0 -0
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/docs/claude-code-tmux-tutorials.md +0 -0
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/docs/find-claude-session.md +0 -0
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/docs/tmux-cli-instructions.md +0 -0
- {claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/docs/vault-documentation.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-tools
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.13
|
|
4
4
|
Summary: Collection of tools for working with Claude Code
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Requires-Dist: click>=8.0.0
|
|
@@ -12,10 +12,13 @@ Description-Content-Type: text/markdown
|
|
|
12
12
|
|
|
13
13
|
# claude-code-tools
|
|
14
14
|
|
|
15
|
-
A collection of practical tools, hooks, and utilities for enhancing Claude Code
|
|
15
|
+
A collection of practical tools, hooks, and utilities for enhancing Claude Code
|
|
16
|
+
and other CLI coding agents.
|
|
16
17
|
|
|
17
18
|
## 🎮 tmux-cli: Bridging Claude Code and Interactive CLIs
|
|
18
19
|
|
|
20
|
+
> **Note**: While the description below focuses on Claude Code, tmux-cli works with any CLI coding agent.
|
|
21
|
+
|
|
19
22
|

|
|
20
23
|
|
|
21
24
|
Consider these scenarios:
|
|
@@ -25,8 +28,9 @@ for user input, but CC can't respond to prompts.
|
|
|
25
28
|
|
|
26
29
|
You want Claude Code to debug using pdb, stepping through code line by line.
|
|
27
30
|
|
|
28
|
-
You need
|
|
29
|
-
|
|
31
|
+
You need your CLI code agent to launch another instance of the same OR different
|
|
32
|
+
CLI code agent, AND interact with it, not as a hidden sub-agent,
|
|
33
|
+
but as a visible session you can monitor (as shown in gif above).
|
|
30
34
|
|
|
31
35
|
**tmux-cli enables these workflows** by giving Claude Code programmatic control
|
|
32
36
|
over terminal applications.
|
|
@@ -47,7 +51,10 @@ use tmux-cli behind the scenes.
|
|
|
47
51
|
## 🚀 Quick Start
|
|
48
52
|
|
|
49
53
|
```bash
|
|
50
|
-
# Install
|
|
54
|
+
# Install from PyPI (recommended)
|
|
55
|
+
uv tool install claude-code-tools
|
|
56
|
+
|
|
57
|
+
# Or install the latest development version from GitHub
|
|
51
58
|
uv tool install git+https://github.com/pchalasani/claude-code-tools
|
|
52
59
|
```
|
|
53
60
|
|
|
@@ -111,7 +118,15 @@ Add this function to your shell config (.bashrc/.zshrc) for persistent directory
|
|
|
111
118
|
changes:
|
|
112
119
|
|
|
113
120
|
```bash
|
|
114
|
-
fcs() {
|
|
121
|
+
fcs() {
|
|
122
|
+
# Check if user is asking for help
|
|
123
|
+
if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
|
|
124
|
+
find-claude-session --help
|
|
125
|
+
return
|
|
126
|
+
fi
|
|
127
|
+
# Run find-claude-session in shell mode and evaluate the output
|
|
128
|
+
eval "$(find-claude-session --shell "$@" | sed '/^$/d')"
|
|
129
|
+
}
|
|
115
130
|
```
|
|
116
131
|
|
|
117
132
|
Or source the provided function:
|
|
@@ -142,6 +157,10 @@ won't persist after exiting Claude Code.
|
|
|
142
157
|
|
|
143
158
|
For detailed documentation, see [docs/find-claude-session.md](docs/find-claude-session.md).
|
|
144
159
|
|
|
160
|
+
Looks like this --
|
|
161
|
+
|
|
162
|
+

|
|
163
|
+
|
|
145
164
|
## 🔐 vault
|
|
146
165
|
|
|
147
166
|
Centralized encrypted backup for .env files across all your projects using SOPS.
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
# claude-code-tools
|
|
2
2
|
|
|
3
|
-
A collection of practical tools, hooks, and utilities for enhancing Claude Code
|
|
3
|
+
A collection of practical tools, hooks, and utilities for enhancing Claude Code
|
|
4
|
+
and other CLI coding agents.
|
|
4
5
|
|
|
5
6
|
## 🎮 tmux-cli: Bridging Claude Code and Interactive CLIs
|
|
6
7
|
|
|
8
|
+
> **Note**: While the description below focuses on Claude Code, tmux-cli works with any CLI coding agent.
|
|
9
|
+
|
|
7
10
|

|
|
8
11
|
|
|
9
12
|
Consider these scenarios:
|
|
@@ -13,8 +16,9 @@ for user input, but CC can't respond to prompts.
|
|
|
13
16
|
|
|
14
17
|
You want Claude Code to debug using pdb, stepping through code line by line.
|
|
15
18
|
|
|
16
|
-
You need
|
|
17
|
-
|
|
19
|
+
You need your CLI code agent to launch another instance of the same OR different
|
|
20
|
+
CLI code agent, AND interact with it, not as a hidden sub-agent,
|
|
21
|
+
but as a visible session you can monitor (as shown in gif above).
|
|
18
22
|
|
|
19
23
|
**tmux-cli enables these workflows** by giving Claude Code programmatic control
|
|
20
24
|
over terminal applications.
|
|
@@ -35,7 +39,10 @@ use tmux-cli behind the scenes.
|
|
|
35
39
|
## 🚀 Quick Start
|
|
36
40
|
|
|
37
41
|
```bash
|
|
38
|
-
# Install
|
|
42
|
+
# Install from PyPI (recommended)
|
|
43
|
+
uv tool install claude-code-tools
|
|
44
|
+
|
|
45
|
+
# Or install the latest development version from GitHub
|
|
39
46
|
uv tool install git+https://github.com/pchalasani/claude-code-tools
|
|
40
47
|
```
|
|
41
48
|
|
|
@@ -99,7 +106,15 @@ Add this function to your shell config (.bashrc/.zshrc) for persistent directory
|
|
|
99
106
|
changes:
|
|
100
107
|
|
|
101
108
|
```bash
|
|
102
|
-
fcs() {
|
|
109
|
+
fcs() {
|
|
110
|
+
# Check if user is asking for help
|
|
111
|
+
if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
|
|
112
|
+
find-claude-session --help
|
|
113
|
+
return
|
|
114
|
+
fi
|
|
115
|
+
# Run find-claude-session in shell mode and evaluate the output
|
|
116
|
+
eval "$(find-claude-session --shell "$@" | sed '/^$/d')"
|
|
117
|
+
}
|
|
103
118
|
```
|
|
104
119
|
|
|
105
120
|
Or source the provided function:
|
|
@@ -130,6 +145,10 @@ won't persist after exiting Claude Code.
|
|
|
130
145
|
|
|
131
146
|
For detailed documentation, see [docs/find-claude-session.md](docs/find-claude-session.md).
|
|
132
147
|
|
|
148
|
+
Looks like this --
|
|
149
|
+
|
|
150
|
+

|
|
151
|
+
|
|
133
152
|
## 🔐 vault
|
|
134
153
|
|
|
135
154
|
Centralized encrypted backup for .env files across all your projects using SOPS.
|
{claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/claude_code_tools/find_claude_session.py
RENAMED
|
@@ -38,19 +38,31 @@ except ImportError:
|
|
|
38
38
|
console = Console() if RICH_AVAILABLE else None
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
def get_claude_project_dir() -> Path:
|
|
41
|
+
def get_claude_project_dir(claude_home: Optional[str] = None) -> Path:
|
|
42
42
|
"""Convert current working directory to Claude project directory path."""
|
|
43
43
|
cwd = os.getcwd()
|
|
44
|
+
|
|
45
|
+
# Use provided claude_home or default to ~/.claude
|
|
46
|
+
if claude_home:
|
|
47
|
+
base_dir = Path(claude_home).expanduser()
|
|
48
|
+
else:
|
|
49
|
+
base_dir = Path.home() / ".claude"
|
|
44
50
|
|
|
45
51
|
# Replace / with - to match Claude's directory naming convention
|
|
46
52
|
project_path = cwd.replace("/", "-")
|
|
47
|
-
claude_dir =
|
|
53
|
+
claude_dir = base_dir / "projects" / project_path
|
|
48
54
|
return claude_dir
|
|
49
55
|
|
|
50
56
|
|
|
51
|
-
def get_all_claude_projects() -> List[Tuple[Path, str]]:
|
|
57
|
+
def get_all_claude_projects(claude_home: Optional[str] = None) -> List[Tuple[Path, str]]:
|
|
52
58
|
"""Get all Claude project directories with their original paths."""
|
|
53
|
-
|
|
59
|
+
# Use provided claude_home or default to ~/.claude
|
|
60
|
+
if claude_home:
|
|
61
|
+
base_dir = Path(claude_home).expanduser()
|
|
62
|
+
else:
|
|
63
|
+
base_dir = Path.home() / ".claude"
|
|
64
|
+
|
|
65
|
+
projects_dir = base_dir / "projects"
|
|
54
66
|
|
|
55
67
|
if not projects_dir.exists():
|
|
56
68
|
return []
|
|
@@ -175,13 +187,14 @@ def get_session_preview(filepath: Path) -> str:
|
|
|
175
187
|
return "No preview available"
|
|
176
188
|
|
|
177
189
|
|
|
178
|
-
def find_sessions(keywords: List[str], global_search: bool = False) -> List[Tuple[str, float, int, str, str, str]]:
|
|
190
|
+
def find_sessions(keywords: List[str], global_search: bool = False, claude_home: Optional[str] = None) -> List[Tuple[str, float, int, str, str, str]]:
|
|
179
191
|
"""
|
|
180
192
|
Find all Claude Code sessions containing the specified keywords.
|
|
181
193
|
|
|
182
194
|
Args:
|
|
183
195
|
keywords: List of keywords to search for
|
|
184
196
|
global_search: If True, search all projects; if False, search current project only
|
|
197
|
+
claude_home: Optional custom Claude home directory (defaults to ~/.claude)
|
|
185
198
|
|
|
186
199
|
Returns:
|
|
187
200
|
List of tuples (session_id, modification_time, line_count, project_name, preview, project_path) sorted by modification time
|
|
@@ -190,7 +203,7 @@ def find_sessions(keywords: List[str], global_search: bool = False) -> List[Tupl
|
|
|
190
203
|
|
|
191
204
|
if global_search:
|
|
192
205
|
# Search all projects
|
|
193
|
-
projects = get_all_claude_projects()
|
|
206
|
+
projects = get_all_claude_projects(claude_home)
|
|
194
207
|
|
|
195
208
|
if RICH_AVAILABLE and console:
|
|
196
209
|
with Progress(
|
|
@@ -229,7 +242,7 @@ def find_sessions(keywords: List[str], global_search: bool = False) -> List[Tupl
|
|
|
229
242
|
matching_sessions.append((session_id, mod_time, line_count, project_name, preview, original_path))
|
|
230
243
|
else:
|
|
231
244
|
# Search current project only
|
|
232
|
-
claude_dir = get_claude_project_dir()
|
|
245
|
+
claude_dir = get_claude_project_dir(claude_home)
|
|
233
246
|
|
|
234
247
|
if not claude_dir.exists():
|
|
235
248
|
return []
|
|
@@ -438,6 +451,11 @@ To persist directory changes when resuming sessions:
|
|
|
438
451
|
action="store_true",
|
|
439
452
|
help="Output shell commands for evaluation (for use with shell function)"
|
|
440
453
|
)
|
|
454
|
+
parser.add_argument(
|
|
455
|
+
"--claude-home",
|
|
456
|
+
type=str,
|
|
457
|
+
help="Path to Claude home directory (default: ~/.claude)"
|
|
458
|
+
)
|
|
441
459
|
|
|
442
460
|
args = parser.parse_args()
|
|
443
461
|
|
|
@@ -450,7 +468,7 @@ To persist directory changes when resuming sessions:
|
|
|
450
468
|
|
|
451
469
|
# Check if searching current project only
|
|
452
470
|
if not getattr(args, 'global'):
|
|
453
|
-
claude_dir = get_claude_project_dir()
|
|
471
|
+
claude_dir = get_claude_project_dir(args.claude_home)
|
|
454
472
|
|
|
455
473
|
if not claude_dir.exists():
|
|
456
474
|
print(f"No Claude project directory found for: {os.getcwd()}", file=sys.stderr)
|
|
@@ -458,7 +476,7 @@ To persist directory changes when resuming sessions:
|
|
|
458
476
|
sys.exit(1)
|
|
459
477
|
|
|
460
478
|
# Find matching sessions
|
|
461
|
-
matching_sessions = find_sessions(keywords, global_search=getattr(args, 'global'))
|
|
479
|
+
matching_sessions = find_sessions(keywords, global_search=getattr(args, 'global'), claude_home=args.claude_home)
|
|
462
480
|
|
|
463
481
|
if not matching_sessions:
|
|
464
482
|
scope = "all projects" if getattr(args, 'global') else "current project"
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
Here’s what I found (forums + docs) and the cleanest ways to run **Claude Code** against **Chutes (OpenAI-compatible) instead of Anthropic models**—including whether you need an extra router.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## TL;DR
|
|
6
|
+
|
|
7
|
+
* **You can’t point Claude Code directly at Chutes** because Claude Code speaks the **Anthropic `/v1/messages`** format, while Chutes exposes an **OpenAI-compatible `/v1/chat/completions`** API. You need a **translator/gateway** in the middle. ([Anthropic][1])
|
|
8
|
+
* Two working choices seen in the community and in Anthropic’s docs:
|
|
9
|
+
|
|
10
|
+
1. **Claude Code Router (CCR)** — purpose-built local proxy that converts Claude Code → OpenAI format; works with OpenRouter, DeepSeek, Groq, etc., and also with custom OpenAI-compatible bases like **Chutes**. ([GitHub][2], [npm][3])
|
|
11
|
+
2. **LiteLLM “Anthropic unified endpoint”** — run LiteLLM as a gateway that **exposes an Anthropic-style endpoint** to Claude Code, while LiteLLM calls Chutes behind the scenes using its **OpenAI-compatible** route. ([Anthropic][1], [LiteLLM][4], [LiteLLM][5])
|
|
12
|
+
|
|
13
|
+
Reddit users repeatedly report running **Claude Code + Chutes** successfully (often with GLM-4.5, DeepSeek, or Kimi K2) by using a router/gateway. ([Reddit][6], [Reddit][7], [Reddit][8])
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Option A — Claude Code Router (simplest)
|
|
18
|
+
|
|
19
|
+
**When to choose:** quick setup focused on Claude Code; easy model switching with `/model`.
|
|
20
|
+
|
|
21
|
+
1. **Install**
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm i -g @anthropic-ai/claude-code @musistudio/claude-code-router
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
CCR runs a local server and translates requests for you. ([GitHub][2])
|
|
28
|
+
|
|
29
|
+
2. **Configure CCR for Chutes**
|
|
30
|
+
Create `~/.claude-code-router/config.json` like:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"Providers": [
|
|
35
|
+
{
|
|
36
|
+
"name": "chutes",
|
|
37
|
+
"api_base_url": "https://llm.chutes.ai/v1/chat/completions",
|
|
38
|
+
"api_keys": ["YOUR_CHUTES_API_KEY"],
|
|
39
|
+
"models": ["deepseek-ai/DeepSeek-V3-0324"],
|
|
40
|
+
"transformer": { "use": ["openrouter"] }
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"Router": { "default": "chutes,deepseek-ai/DeepSeek-V3-0324" }
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Notes:
|
|
48
|
+
|
|
49
|
+
* Chutes’ **base URL** is OpenAI-style: `https://llm.chutes.ai/v1/chat/completions`. ([Reddit][9])
|
|
50
|
+
* Model IDs vary (e.g., `deepseek-ai/DeepSeek-V3-0324`, `Qwen/Qwen3-235B-A22B`, `ZhipuAI/glm-4.5`)—grab the exact string from Chutes’ model page. ([Reddit][9])
|
|
51
|
+
|
|
52
|
+
3. **Start CCR and point Claude Code at it**
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
ccr start
|
|
56
|
+
export ANTHROPIC_BASE_URL=http://127.0.0.1:3456
|
|
57
|
+
claude
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
CCR exposes an Anthropic-compatible endpoint; setting `ANTHROPIC_BASE_URL` makes Claude Code use it. In the Claude Code REPL you can switch models with `/model provider,model`. ([npm][3])
|
|
61
|
+
|
|
62
|
+
**Community confirmation:** multiple Reddit threads mention using Claude Code with GLM-4.5/DeepSeek **via Chutes** (often preferring CCR). ([Reddit][6], [Reddit][7])
|
|
63
|
+
**Video walkthroughs:** several YouTube explainers demo **Claude Code Router**, setup, and model routing. ([YouTube][10], [YouTube][11])
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Option B — LiteLLM “Anthropic unified endpoint” (more general)
|
|
68
|
+
|
|
69
|
+
**When to choose:** you want observability, spend controls, or to route many providers with one gateway.
|
|
70
|
+
|
|
71
|
+
1. **Define a LiteLLM model that points to Chutes**
|
|
72
|
+
Create `litellm_config.yaml`:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
model_list:
|
|
76
|
+
- model_name: chutes-deepseek-v3
|
|
77
|
+
litellm_params:
|
|
78
|
+
model: openai/deepseek-ai/DeepSeek-V3-0324 # tell LiteLLM it's OpenAI-compatible
|
|
79
|
+
api_base: https://llm.chutes.ai/v1 # base should include /v1
|
|
80
|
+
api_key: YOUR_CHUTES_API_KEY
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
LiteLLM’s OpenAI-compatible docs show the `openai/` prefix and the need for `/v1` in `api_base`. ([LiteLLM][5])
|
|
84
|
+
|
|
85
|
+
2. **Run LiteLLM and expose an Anthropic-style endpoint**
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
litellm --config /path/to/litellm_config.yaml
|
|
89
|
+
export ANTHROPIC_BASE_URL=http://127.0.0.1:4000
|
|
90
|
+
claude
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Anthropic’s **LLM Gateway** guide explicitly supports setting `ANTHROPIC_BASE_URL` to a LiteLLM endpoint that speaks the **Anthropic messages** format. ([Anthropic][1], [LiteLLM][4])
|
|
94
|
+
|
|
95
|
+
**Working example calling Chutes through LiteLLM (code snippet/gist):** shows `api_base="https://llm.chutes.ai/v1"` and an `openai/...` model. ([Gist][12])
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Do you need “Claude Code Router”?
|
|
100
|
+
|
|
101
|
+
* **You need some router/gateway.** Claude Code won’t talk directly to Chutes’ OpenAI endpoint. You can use **CCR** (purpose-built) **or** **LiteLLM** (general gateway). Anthropic’s own docs describe the LiteLLM route with `ANTHROPIC_BASE_URL`, which is often the most “officially documented” path. ([Anthropic][1])
|
|
102
|
+
* If you already run LiteLLM for other projects, use **Option B**. If you just want the fastest path specifically for Claude Code, **Option A (CCR)** is very popular on Reddit/YouTube. ([Reddit][7], [YouTube][10])
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Model tips & quirks from forums
|
|
107
|
+
|
|
108
|
+
* **GLM-4.5** and **DeepSeek** models are frequently called out as working well with Claude Code via Chutes (router required). ([Reddit][6])
|
|
109
|
+
* Some users report **tool-call robustness varies by model** (e.g., mixed results for Qwen Coder vs GLM-4.5). Test your target model for tool use. ([Reddit][13])
|
|
110
|
+
* Chutes availability/rate-limit errors happen occasionally; regenerating keys or retrial often resolves. Base URL must be exact. ([Reddit][9])
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### Sources
|
|
115
|
+
|
|
116
|
+
* Anthropic docs — **LLM Gateway configuration** (LiteLLM, `ANTHROPIC_BASE_URL`, Anthropic-format endpoint). ([Anthropic][1])
|
|
117
|
+
* LiteLLM docs — **Anthropic unified endpoint** and **OpenAI-compatible** config (`openai/` model prefix, `/v1` base). ([LiteLLM][4], [LiteLLM][5])
|
|
118
|
+
* **Claude Code Router** repo/features and usage, plus fork with added key rotation & commands. ([GitHub][2], [npm][3])
|
|
119
|
+
* Reddit confirmations & how-tos (Chutes base URL, examples, and user reports running Claude Code + Chutes): ([Reddit][9], [Reddit][6], [Reddit][7])
|
|
120
|
+
* YouTube demos of **Claude Code Router** setup/routing. ([YouTube][10], [YouTube][11])
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
If you’d like, tell me your target model on Chutes (e.g., DeepSeek V3, GLM-4.5, Kimi K2), and I’ll hand you an exact `config.json` (CCR) or `litellm_config.yaml` that you can paste in and run.
|
|
125
|
+
|
|
126
|
+
[1]: https://docs.anthropic.com/en/docs/claude-code/llm-gateway "LLM gateway configuration - Anthropic"
|
|
127
|
+
[2]: https://github.com/musistudio/claude-code-router "GitHub - musistudio/claude-code-router: Use Claude Code as the foundation for coding infrastructure, allowing you to decide how to interact with the model while enjoying updates from Anthropic."
|
|
128
|
+
[3]: https://www.npmjs.com/package/%40tellerlin/claude-code-router?activeTab=code "@tellerlin/claude-code-router - npm"
|
|
129
|
+
[4]: https://docs.litellm.ai/docs/anthropic_unified?utm_source=chatgpt.com "v1/messages"
|
|
130
|
+
[5]: https://docs.litellm.ai/docs/providers/openai_compatible?utm_source=chatgpt.com "OpenAI-Compatible Endpoints"
|
|
131
|
+
[6]: https://www.reddit.com/r/ChatGPTCoding/comments/1mcgm9s/psa_zaiglm45_is_absolutely_crushing_it_for_coding/?utm_source=chatgpt.com "zai/glm-4.5 is absolutely crushing it for coding - way better ..."
|
|
132
|
+
[7]: https://www.reddit.com/r/LocalLLaMA/comments/1mchsyd/tutorial_use_glm_45_or_any_llm_with_claude_code/?utm_source=chatgpt.com "[tutorial] Use GLM 4.5 (or any LLM) with Claude Code"
|
|
133
|
+
[8]: https://www.reddit.com/r/ClaudeAI/comments/1m3nyrn/who_is_using_claude_code_with_kimi_k2_thoughts/?utm_source=chatgpt.com "Who is using Claude Code with kimi k2? Thoughts? Tips?"
|
|
134
|
+
[9]: https://www.reddit.com/r/JanitorAI_Official/comments/1ju5vih/visual_guide_for_deepseek_users_via_chutesai_full/ "Visual Guide for DeepSeek Users (via Chutes.ai) – Full Credit to u/r3dux1337! : r/JanitorAI_Official"
|
|
135
|
+
[10]: https://www.youtube.com/watch?pp=0gcJCfwAo7VqN5tD&v=sAuCUAZnXAE&utm_source=chatgpt.com "Claude Code Router + Gemini 2.5 Pro FREE API: RIP Gemini ..."
|
|
136
|
+
[11]: https://www.youtube.com/watch?v=df-Fu2n7SLM&utm_source=chatgpt.com "The Claude Code HACK Anthropic Does Not Want You To Use"
|
|
137
|
+
[12]: https://gist.github.com/aquan9/58f4a77414a74703157bf79ea1bf009f?utm_source=chatgpt.com "Using litellm with chutes.ai from the bit-tensor chutes subnet."
|
|
138
|
+
[13]: https://www.reddit.com/r/LocalLLaMA/comments/1mf8la7/qwen3coder_is_bad_at_tool_call_while_glm45_is/?utm_source=chatgpt.com "Qwen3-Coder is bad at tool call while glm-4.5 is ..."
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Made a tool that lets Claude Code control terminal apps - thought some of you might find it useful
|
|
2
|
+
|
|
3
|
+
Hey everyone! I've been using Claude Code a lot lately and kept running into the same frustration - it couldn't interact with CLI applications that need user input. So I built something to fix that.
|
|
4
|
+
|
|
5
|
+
## What it does
|
|
6
|
+
|
|
7
|
+
It's basically like Playwright/Puppeteer but for the terminal. Claude Code can now:
|
|
8
|
+
- Run interactive scripts and respond to prompts
|
|
9
|
+
- Use debuggers like pdb to step through code
|
|
10
|
+
- Launch and control other CLI apps
|
|
11
|
+
- Even spin up another Claude Code instance to have it work as a sub-agent --
|
|
12
|
+
and unlike the built-in sub-agents, you can clearly see what's going on.
|
|
13
|
+
|
|
14
|
+
[GIF PLACEHOLDER - Shows tmux-cli in action]
|
|
15
|
+
|
|
16
|
+
## How it works
|
|
17
|
+
|
|
18
|
+
The magic happens through tmux (terminal multiplexer). I created a tool called `tmux-cli` that gives Claude Code the ability to:
|
|
19
|
+
- Launch apps in separate tmux panes
|
|
20
|
+
- Send keystrokes to them
|
|
21
|
+
- Capture their output
|
|
22
|
+
- Wait for them to idle
|
|
23
|
+
|
|
24
|
+
You don't need to know tmux commands - Claude Code handles everything. Just tell it what you want and it figures out the tmux stuff.
|
|
25
|
+
|
|
26
|
+
## Real use cases I've found helpful
|
|
27
|
+
|
|
28
|
+
- **Debugging**: Claude can now use pdb to step through Python code, examine variables, and help me understand program flow
|
|
29
|
+
- **Testing interactive scripts**: No more manually entering test inputs - Claude handles it
|
|
30
|
+
- **Spawn other Claudes**: I can have Claude launch another Claude instance to work on
|
|
31
|
+
a task and interact with it. And unlike the built-in sub-agents, it's fully visible.
|
|
32
|
+
|
|
33
|
+
## Getting it
|
|
34
|
+
|
|
35
|
+
If you want to try it:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Install from PyPI
|
|
39
|
+
uv tool install claude-code-tools
|
|
40
|
+
|
|
41
|
+
# Or get latest from GitHub
|
|
42
|
+
uv tool install git+https://github.com/pchalasani/claude-code-tools
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Then add a snippet to your `~/.claude/CLAUDE.md` to let Claude Code know about tmux-cli.
|
|
46
|
+
|
|
47
|
+
The repo also includes some other tools like encrypted .env backup and a Claude session finder, but tmux-cli is the main thing I wanted to share.
|
|
48
|
+
|
|
49
|
+
## Not trying to oversell
|
|
50
|
+
|
|
51
|
+
This isn't revolutionary or anything - it's just a practical tool that solved a real problem I kept hitting. If you work with Claude Code and interactive CLIs, you might find it useful too.
|
|
52
|
+
|
|
53
|
+
Happy to answer questions or hear if anyone has similar tools they've built!
|
|
54
|
+
|
|
55
|
+
Repo: https://github.com/pchalasani/claude-code-tools
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "claude-code-tools"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.13"
|
|
4
4
|
description = "Collection of tools for working with Claude Code"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -40,7 +40,7 @@ exclude = [
|
|
|
40
40
|
|
|
41
41
|
[tool.commitizen]
|
|
42
42
|
name = "cz_conventional_commits"
|
|
43
|
-
version = "0.1.
|
|
43
|
+
version = "0.1.13"
|
|
44
44
|
tag_format = "v$version"
|
|
45
45
|
version_files = [
|
|
46
46
|
"pyproject.toml:version",
|
|
File without changes
|
{claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/claude_code_tools/tmux_cli_controller.py
RENAMED
|
File without changes
|
{claude_code_tools-0.1.12 → claude_code_tools-0.1.13}/claude_code_tools/tmux_remote_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|