cade-cli 0.3.4__tar.gz → 0.5.0__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.
- {cade_cli-0.3.4 → cade_cli-0.5.0}/.gitignore +3 -0
- cade_cli-0.5.0/LICENSE +21 -0
- cade_cli-0.5.0/PKG-INFO +385 -0
- cade_cli-0.3.4/PKG-INFO → cade_cli-0.5.0/README.md +91 -59
- {cade_cli-0.3.4 → cade_cli-0.5.0}/pyproject.toml +5 -5
- cade_cli-0.5.0/src/cadecoder/__init__.py +1 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/app.py +7 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/auth.py +0 -30
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/commands/chat.py +99 -29
- cade_cli-0.5.0/src/cadecoder/cli/commands/context.py +333 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/commands/mcp.py +11 -2
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/commands/model.py +5 -2
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/commands/thread.py +55 -31
- cade_cli-0.5.0/src/cadecoder/cli/commands/tools.py +339 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/core/config.py +16 -17
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/core/constants.py +0 -2
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/core/errors.py +19 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/execution/orchestrator.py +5 -2
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/providers/__init__.py +35 -15
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/providers/base.py +1 -0
- cade_cli-0.5.0/src/cadecoder/providers/ollama.py +308 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/providers/openai.py +5 -2
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/__init__.py +9 -21
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/manager/__init__.py +3 -10
- cade_cli-0.5.0/src/cadecoder/tools/manager/composite.py +267 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/manager/config.py +21 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/manager/mcp.py +243 -7
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/ui/session.py +23 -7
- cade_cli-0.3.4/README.md +0 -224
- cade_cli-0.3.4/src/cadecoder/__init__.py +0 -1
- cade_cli-0.3.4/src/cadecoder/cli/commands/tools.py +0 -226
- cade_cli-0.3.4/src/cadecoder/tools/manager/arcade.py +0 -277
- cade_cli-0.3.4/src/cadecoder/tools/manager/cache.py +0 -129
- cade_cli-0.3.4/src/cadecoder/tools/manager/composite.py +0 -157
- cade_cli-0.3.4/src/cadecoder/tools/manager/local.py +0 -122
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/ai/__init__.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/ai/prompts.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/__init__.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/commands/__init__.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/cli/commands/auth.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/core/__init__.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/core/logging.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/core/names.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/core/types.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/execution/__init__.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/execution/context_window.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/execution/parallel.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/providers/anthropic.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/storage/__init__.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/storage/threads.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/templates/login_failed.html +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/templates/login_success.html +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/templates/styles.css +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/local/__init__.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/local/filesystem.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/local/git.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/local/search.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/local/shell.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/tools/manager/base.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/ui/__init__.py +0 -0
- {cade_cli-0.3.4 → cade_cli-0.5.0}/src/cadecoder/ui/display.py +0 -0
cade_cli-0.5.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Arcade AI Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
cade_cli-0.5.0/PKG-INFO
ADDED
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cade-cli
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Cade - The CLI Agent from Arcade.dev
|
|
5
|
+
Project-URL: Homepage, https://arcade.dev
|
|
6
|
+
Project-URL: Documentation, https://docs.arcade.dev
|
|
7
|
+
Project-URL: Repository, https://github.com/arcadeai-labs/cade
|
|
8
|
+
Project-URL: Issues, https://github.com/arcadeai-labs/cade/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/arcadeai-labs/cade/releases
|
|
10
|
+
Author-email: "Arcade AI Inc." <dev@arcade.dev>
|
|
11
|
+
License: MIT License
|
|
12
|
+
|
|
13
|
+
Copyright (c) 2024 Arcade AI Inc.
|
|
14
|
+
|
|
15
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
16
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
17
|
+
in the Software without restriction, including without limitation the rights
|
|
18
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
19
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
20
|
+
furnished to do so, subject to the following conditions:
|
|
21
|
+
|
|
22
|
+
The above copyright notice and this permission notice shall be included in all
|
|
23
|
+
copies or substantial portions of the Software.
|
|
24
|
+
|
|
25
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
26
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
27
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
28
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
29
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
30
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
31
|
+
SOFTWARE.
|
|
32
|
+
License-File: LICENSE
|
|
33
|
+
Keywords: agent,ai,arcade,cli,coding-assistant,llm,mcp
|
|
34
|
+
Classifier: Development Status :: 4 - Beta
|
|
35
|
+
Classifier: Environment :: Console
|
|
36
|
+
Classifier: Intended Audience :: Developers
|
|
37
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
38
|
+
Classifier: Operating System :: OS Independent
|
|
39
|
+
Classifier: Programming Language :: Python :: 3
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
42
|
+
Classifier: Topic :: Software Development
|
|
43
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
44
|
+
Classifier: Typing :: Typed
|
|
45
|
+
Requires-Python: >=3.11
|
|
46
|
+
Requires-Dist: anthropic<1.0.0,>=0.34.0
|
|
47
|
+
Requires-Dist: arcade-core<5.0.0,>=4.1.0
|
|
48
|
+
Requires-Dist: arcade-mcp-server>=1.0.0
|
|
49
|
+
Requires-Dist: arcade-tdk>=2.0.0
|
|
50
|
+
Requires-Dist: authlib<2.0.0,>=1.6.0
|
|
51
|
+
Requires-Dist: httpx<1.0.0,>=0.27.0
|
|
52
|
+
Requires-Dist: openai<2.0.0,>=1.0.0
|
|
53
|
+
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.52
|
|
54
|
+
Requires-Dist: pydantic[email]<3.0.0,>=2.0.0
|
|
55
|
+
Requires-Dist: pyperclip<2.0.0,>=1.8.0
|
|
56
|
+
Requires-Dist: pyyaml<7.0.0,>=6.0
|
|
57
|
+
Requires-Dist: rich<14.0.0,>=13.0.0
|
|
58
|
+
Requires-Dist: tiktoken<1.0.0,>=0.11.0
|
|
59
|
+
Requires-Dist: toml<1.0.0,>=0.10.0
|
|
60
|
+
Requires-Dist: typer>0.10.0
|
|
61
|
+
Requires-Dist: ulid==1.1
|
|
62
|
+
Provides-Extra: dev
|
|
63
|
+
Requires-Dist: mypy<2.0.0,>=1.10.0; extra == 'dev'
|
|
64
|
+
Requires-Dist: pytest-asyncio<1.0.0,>=0.24.0; extra == 'dev'
|
|
65
|
+
Requires-Dist: pytest-cov<5.0.0,>=4.0.0; extra == 'dev'
|
|
66
|
+
Requires-Dist: pytest-mock<4.0.0,>=3.11.0; extra == 'dev'
|
|
67
|
+
Requires-Dist: pytest<9.0.0,>=8.0.0; extra == 'dev'
|
|
68
|
+
Requires-Dist: ruff<1.0.0,>=0.5.0; extra == 'dev'
|
|
69
|
+
Provides-Extra: training
|
|
70
|
+
Requires-Dist: accelerate>=0.27.0; extra == 'training'
|
|
71
|
+
Requires-Dist: safetensors>=0.4.2; extra == 'training'
|
|
72
|
+
Requires-Dist: torch>=2.1.0; extra == 'training'
|
|
73
|
+
Requires-Dist: transformers>=4.38.0; extra == 'training'
|
|
74
|
+
Description-Content-Type: text/markdown
|
|
75
|
+
|
|
76
|
+
# Cade
|
|
77
|
+
|
|
78
|
+
An AI-powered CLI agent for coding and everyday tasks. Powered by [Arcade.dev](https://arcade.dev).
|
|
79
|
+
|
|
80
|
+
## Installation
|
|
81
|
+
|
|
82
|
+
### Prerequisites
|
|
83
|
+
|
|
84
|
+
- Python 3.11+
|
|
85
|
+
- Arcade account ([arcade.dev](https://arcade.dev))
|
|
86
|
+
- AI provider API key: `OPENAI_API_KEY` or `ANTHROPIC_API_KEY`
|
|
87
|
+
|
|
88
|
+
### Homebrew (macOS/Linux)
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
brew tap ArcadeAI/tap
|
|
92
|
+
brew install cade
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Install with uv
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
99
|
+
uv tool install cade-cli
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Install with pip
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
pip install cade-cli
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### From Source
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
git clone https://github.com/arcadeai-labs/cade.git
|
|
112
|
+
cd cade
|
|
113
|
+
uv venv --python 3.11
|
|
114
|
+
source .venv/bin/activate
|
|
115
|
+
uv sync
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Authenticate
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
cade login
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Usage
|
|
125
|
+
|
|
126
|
+
### Start a Chat
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
cade
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Resume a Thread
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
cade -r # Resume most recent
|
|
136
|
+
cade resume "my-project" # Resume by name
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Authentication
|
|
140
|
+
|
|
141
|
+
Cade uses Arcade Cloud for authentication and shares credentials with arcade-cli.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
cade login # Log in to Arcade Cloud
|
|
145
|
+
cade logout # Log out
|
|
146
|
+
cade whoami # Show current login status
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Context Management
|
|
150
|
+
|
|
151
|
+
Switch between organizations and projects for Arcade Cloud features.
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
cade context show # Show current org/project
|
|
155
|
+
cade context list # List available orgs and projects
|
|
156
|
+
cade context switch -i # Interactive selection
|
|
157
|
+
cade context switch --org my-org --project my-project
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Single Message Mode
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
cade -m "What files are in this directory?"
|
|
164
|
+
cat error.log | cade -m "What went wrong?"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Options
|
|
168
|
+
|
|
169
|
+
| Option | Description |
|
|
170
|
+
|--------|-------------|
|
|
171
|
+
| `-r`, `--resume` | Resume the most recent thread |
|
|
172
|
+
| `-m`, `--message` | Single message mode (non-interactive) |
|
|
173
|
+
| `-L`, `--local-only` | Disable remote tools (use only local tools) |
|
|
174
|
+
| `-v`, `--verbose` | Enable debug logging |
|
|
175
|
+
| `--version` | Show version |
|
|
176
|
+
|
|
177
|
+
### In-Chat Commands
|
|
178
|
+
|
|
179
|
+
| Command | Description |
|
|
180
|
+
|---------|-------------|
|
|
181
|
+
| `/help` | Show available commands |
|
|
182
|
+
| `/logs` | View recent log entries |
|
|
183
|
+
| `/clear` | Clear the screen |
|
|
184
|
+
| `/copy` | Copy last response to clipboard |
|
|
185
|
+
| `Ctrl+C` | Exit |
|
|
186
|
+
|
|
187
|
+
## Thread Management
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
cade thread list # List all threads
|
|
191
|
+
cade thread list --branch main # Filter by branch
|
|
192
|
+
cade thread get <thread-id> # Get thread details
|
|
193
|
+
cade thread get <thread-id> --messages # Show messages
|
|
194
|
+
cade thread delete <thread-id> # Delete thread
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Tool Management
|
|
198
|
+
|
|
199
|
+
Tools come from three sources: local, Arcade Cloud, and MCP servers.
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
cade tool list # List all tools
|
|
203
|
+
cade tool list --source local # Filter by source
|
|
204
|
+
cade tool search "file" # Search tools
|
|
205
|
+
cade tool info Local_ReadFile # Tool details
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Built-in Tools
|
|
209
|
+
|
|
210
|
+
| Tool | Description |
|
|
211
|
+
|------|-------------|
|
|
212
|
+
| `Local_ReadFile` | Read file contents |
|
|
213
|
+
| `Local_WriteFile` | Write or append to files |
|
|
214
|
+
| `Local_ListFiles` | List directory contents |
|
|
215
|
+
| `Local_SearchText` | Search for text patterns |
|
|
216
|
+
| `Local_ExecuteShell` | Run shell commands |
|
|
217
|
+
| `Local_CreateDirectory` | Create directories |
|
|
218
|
+
| `Local_DeleteFile` | Delete files |
|
|
219
|
+
| `Local_GetGitStatus` | Get git status |
|
|
220
|
+
|
|
221
|
+
## MCP Servers
|
|
222
|
+
|
|
223
|
+
Connect to [MCP](https://modelcontextprotocol.io/) servers for extended capabilities.
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
cade mcp list # List servers
|
|
227
|
+
cade mcp add my-server http://localhost:8080 # Add server
|
|
228
|
+
cade mcp add my-server http://localhost:8080 --auth bearer -t <token> # With auth
|
|
229
|
+
cade mcp test my-server # Test connection
|
|
230
|
+
cade mcp enable my-server # Enable
|
|
231
|
+
cade mcp disable my-server # Disable
|
|
232
|
+
cade mcp rm my-server # Remove
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Configuration
|
|
236
|
+
|
|
237
|
+
Config is stored in `~/.cadecoder/`:
|
|
238
|
+
|
|
239
|
+
| File | Description |
|
|
240
|
+
|------|-------------|
|
|
241
|
+
| `cadecoder.toml` | Settings |
|
|
242
|
+
| `cadecoder_history.db` | Thread history |
|
|
243
|
+
| `cadecoder.log` | Logs |
|
|
244
|
+
| `mcp_servers.yaml` | MCP server configs |
|
|
245
|
+
|
|
246
|
+
### Environment Variables
|
|
247
|
+
|
|
248
|
+
| Variable | Description |
|
|
249
|
+
|----------|-------------|
|
|
250
|
+
| `OPENAI_API_KEY` | OpenAI API key |
|
|
251
|
+
| `OPENAI_BASE_URL` | Custom OpenAI-compatible API endpoint |
|
|
252
|
+
| `ANTHROPIC_API_KEY` | Anthropic API key |
|
|
253
|
+
| `ARCADE_API_KEY` | Arcade API key (alternative to OAuth) |
|
|
254
|
+
| `ARCADE_BASE_URL` | Custom Arcade API endpoint |
|
|
255
|
+
| `CADE_LOCAL_ONLY` | Set to `1` to disable remote tools |
|
|
256
|
+
| `CADECODER_HOME` | Override config directory |
|
|
257
|
+
|
|
258
|
+
### Example Config
|
|
259
|
+
|
|
260
|
+
```toml
|
|
261
|
+
# ~/.cadecoder/cadecoder.toml
|
|
262
|
+
|
|
263
|
+
default_model = "gpt-4.1"
|
|
264
|
+
debug_mode = false
|
|
265
|
+
use_responses_api = true
|
|
266
|
+
|
|
267
|
+
[responses_config]
|
|
268
|
+
enabled = true
|
|
269
|
+
streaming_enabled = true
|
|
270
|
+
|
|
271
|
+
[model_settings]
|
|
272
|
+
provider = "openai"
|
|
273
|
+
model = "gpt-4.1"
|
|
274
|
+
|
|
275
|
+
[tool_settings]
|
|
276
|
+
# Tool filtering is managed via MCP server configuration
|
|
277
|
+
# See: cade mcp add --help
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
## Using Local or Custom LLMs
|
|
281
|
+
|
|
282
|
+
Cade works with any OpenAI-compatible API, including local servers (Ollama, vLLM, llama.cpp) and alternative cloud providers (Together AI, Groq, Fireworks).
|
|
283
|
+
|
|
284
|
+
### Local-Only Mode
|
|
285
|
+
|
|
286
|
+
When using local LLMs, you can skip Arcade Cloud authentication entirely with `--local-only`:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# Local Ollama server without Arcade Cloud
|
|
290
|
+
cade chat --local-only --endpoint "http://localhost:11434/v1" --model "llama3"
|
|
291
|
+
|
|
292
|
+
# Or via environment variable
|
|
293
|
+
CADE_LOCAL_ONLY=1 cade chat --endpoint "http://localhost:11434/v1" --model "llama3"
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
This disables remote tools and uses only local tools. Cade will also gracefully fall back to local-only mode if Arcade Cloud authentication is not configured.
|
|
297
|
+
|
|
298
|
+
### Via CLI Flags
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
# Local Ollama server
|
|
302
|
+
cade chat --endpoint "http://localhost:11434/v1" --model "glm-4.7-flash:latest"
|
|
303
|
+
|
|
304
|
+
# vLLM server
|
|
305
|
+
cade chat -e http://localhost:8000/v1 -m mistral-7b
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Via Environment Variables
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
export OPENAI_BASE_URL="http://localhost:11434/v1"
|
|
312
|
+
export OPENAI_API_KEY="ollama" # Dummy key for local model
|
|
313
|
+
cade chat --model glm-4.7-flash:latest
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Via Config File
|
|
317
|
+
|
|
318
|
+
```toml
|
|
319
|
+
# ~/.cadecoder/cadecoder.toml
|
|
320
|
+
|
|
321
|
+
default_model = "glm-4.7-flash:latest"
|
|
322
|
+
|
|
323
|
+
[model_settings]
|
|
324
|
+
host = "http://localhost:11434/v1"
|
|
325
|
+
api_key = "ollama"
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
After configuring the TOML file:
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
cade chat
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### `cade chat` Configuration Precedence
|
|
335
|
+
|
|
336
|
+
Settings are resolved in this order (first is used):
|
|
337
|
+
|
|
338
|
+
1. CLI flags (`--endpoint`, `--model`)
|
|
339
|
+
2. Environment variables (`OPENAI_BASE_URL`, `OPENAI_API_KEY`)
|
|
340
|
+
3. Config file (`model_settings.host`, `model_settings.api_key`)
|
|
341
|
+
4. Hardcoded defaults
|
|
342
|
+
|
|
343
|
+
## Contributing
|
|
344
|
+
|
|
345
|
+
### Development Setup
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
git clone https://github.com/arcadeai-labs/cade.git
|
|
349
|
+
cd cade
|
|
350
|
+
uv sync --extra dev
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Run Tests
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
pytest
|
|
357
|
+
ruff check src/
|
|
358
|
+
ruff format src/
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Code Style
|
|
362
|
+
|
|
363
|
+
- Python 3.11+ with modern type hints (`dict`, `list`, `| None`)
|
|
364
|
+
- Ruff for linting and formatting
|
|
365
|
+
- Pytest for testing
|
|
366
|
+
- Docstrings for public functions and classes
|
|
367
|
+
|
|
368
|
+
### Submitting Changes
|
|
369
|
+
|
|
370
|
+
1. Fork the repository
|
|
371
|
+
2. Create a feature branch
|
|
372
|
+
3. Make changes with tests
|
|
373
|
+
4. Run `ruff check . && pytest`
|
|
374
|
+
5. Open a Pull Request
|
|
375
|
+
|
|
376
|
+
## Resources
|
|
377
|
+
|
|
378
|
+
- [arcade.dev](https://arcade.dev)
|
|
379
|
+
- [Documentation](https://docs.arcade.dev)
|
|
380
|
+
- [Issues](https://github.com/arcadeai-labs/cade/issues)
|
|
381
|
+
- [Releases](https://github.com/arcadeai-labs/cade/releases)
|
|
382
|
+
|
|
383
|
+
## License
|
|
384
|
+
|
|
385
|
+
MIT
|
|
@@ -1,57 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: cade-cli
|
|
3
|
-
Version: 0.3.4
|
|
4
|
-
Summary: Cade - The CLI Agent from Arcade.dev
|
|
5
|
-
Project-URL: Homepage, https://arcade.dev
|
|
6
|
-
Project-URL: Documentation, https://docs.arcade.dev
|
|
7
|
-
Project-URL: Repository, https://github.com/arcadeai-labs/cade
|
|
8
|
-
Project-URL: Issues, https://github.com/arcadeai-labs/cade/issues
|
|
9
|
-
Project-URL: Changelog, https://github.com/arcadeai-labs/cade/releases
|
|
10
|
-
Author-email: "Arcade AI Inc." <dev@arcade.dev>
|
|
11
|
-
License: MIT
|
|
12
|
-
Keywords: agent,ai,arcade,cli,coding-assistant,llm,mcp
|
|
13
|
-
Classifier: Development Status :: 4 - Beta
|
|
14
|
-
Classifier: Environment :: Console
|
|
15
|
-
Classifier: Intended Audience :: Developers
|
|
16
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
-
Classifier: Operating System :: OS Independent
|
|
18
|
-
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
-
Classifier: Topic :: Software Development
|
|
22
|
-
Classifier: Topic :: Software Development :: Code Generators
|
|
23
|
-
Classifier: Typing :: Typed
|
|
24
|
-
Requires-Python: >=3.11
|
|
25
|
-
Requires-Dist: anthropic<1.0.0,>=0.34.0
|
|
26
|
-
Requires-Dist: arcade-core<5.0.0,>=4.1.0
|
|
27
|
-
Requires-Dist: arcade-tdk>=2.0.0
|
|
28
|
-
Requires-Dist: arcadepy>=1.3.1
|
|
29
|
-
Requires-Dist: authlib<2.0.0,>=1.6.0
|
|
30
|
-
Requires-Dist: httpx<1.0.0,>=0.27.0
|
|
31
|
-
Requires-Dist: openai<2.0.0,>=1.0.0
|
|
32
|
-
Requires-Dist: prompt-toolkit>=3.0.52
|
|
33
|
-
Requires-Dist: pydantic[email]<3.0.0,>=2.0.0
|
|
34
|
-
Requires-Dist: pyperclip<2.0.0,>=1.8.0
|
|
35
|
-
Requires-Dist: pyyaml<7.0.0,>=6.0
|
|
36
|
-
Requires-Dist: rich<14.0.0,>=13.0.0
|
|
37
|
-
Requires-Dist: tiktoken>=0.11.0
|
|
38
|
-
Requires-Dist: toml<1.0.0,>=0.10.0
|
|
39
|
-
Requires-Dist: typer>0.10.0
|
|
40
|
-
Requires-Dist: ulid==1.1
|
|
41
|
-
Provides-Extra: dev
|
|
42
|
-
Requires-Dist: mypy<2.0.0,>=1.10.0; extra == 'dev'
|
|
43
|
-
Requires-Dist: pytest-asyncio<1.0.0,>=0.24.0; extra == 'dev'
|
|
44
|
-
Requires-Dist: pytest-cov<5.0.0,>=4.0.0; extra == 'dev'
|
|
45
|
-
Requires-Dist: pytest-mock<4.0.0,>=3.11.0; extra == 'dev'
|
|
46
|
-
Requires-Dist: pytest<9.0.0,>=8.0.0; extra == 'dev'
|
|
47
|
-
Requires-Dist: ruff<1.0.0,>=0.5.0; extra == 'dev'
|
|
48
|
-
Provides-Extra: training
|
|
49
|
-
Requires-Dist: accelerate>=0.27.0; extra == 'training'
|
|
50
|
-
Requires-Dist: safetensors>=0.4.2; extra == 'training'
|
|
51
|
-
Requires-Dist: torch>=2.1.0; extra == 'training'
|
|
52
|
-
Requires-Dist: transformers>=4.38.0; extra == 'training'
|
|
53
|
-
Description-Content-Type: text/markdown
|
|
54
|
-
|
|
55
1
|
# Cade
|
|
56
2
|
|
|
57
3
|
An AI-powered CLI agent for coding and everyday tasks. Powered by [Arcade.dev](https://arcade.dev).
|
|
@@ -75,7 +21,7 @@ brew install cade
|
|
|
75
21
|
|
|
76
22
|
```bash
|
|
77
23
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
78
|
-
uv
|
|
24
|
+
uv tool install cade-cli
|
|
79
25
|
```
|
|
80
26
|
|
|
81
27
|
### Install with pip
|
|
@@ -115,6 +61,27 @@ cade -r # Resume most recent
|
|
|
115
61
|
cade resume "my-project" # Resume by name
|
|
116
62
|
```
|
|
117
63
|
|
|
64
|
+
### Authentication
|
|
65
|
+
|
|
66
|
+
Cade uses Arcade Cloud for authentication and shares credentials with arcade-cli.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
cade login # Log in to Arcade Cloud
|
|
70
|
+
cade logout # Log out
|
|
71
|
+
cade whoami # Show current login status
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Context Management
|
|
75
|
+
|
|
76
|
+
Switch between organizations and projects for Arcade Cloud features.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
cade context show # Show current org/project
|
|
80
|
+
cade context list # List available orgs and projects
|
|
81
|
+
cade context switch -i # Interactive selection
|
|
82
|
+
cade context switch --org my-org --project my-project
|
|
83
|
+
```
|
|
84
|
+
|
|
118
85
|
### Single Message Mode
|
|
119
86
|
|
|
120
87
|
```bash
|
|
@@ -128,6 +95,7 @@ cat error.log | cade -m "What went wrong?"
|
|
|
128
95
|
|--------|-------------|
|
|
129
96
|
| `-r`, `--resume` | Resume the most recent thread |
|
|
130
97
|
| `-m`, `--message` | Single message mode (non-interactive) |
|
|
98
|
+
| `-L`, `--local-only` | Disable remote tools (use only local tools) |
|
|
131
99
|
| `-v`, `--verbose` | Enable debug logging |
|
|
132
100
|
| `--version` | Show version |
|
|
133
101
|
|
|
@@ -205,9 +173,11 @@ Config is stored in `~/.cadecoder/`:
|
|
|
205
173
|
| Variable | Description |
|
|
206
174
|
|----------|-------------|
|
|
207
175
|
| `OPENAI_API_KEY` | OpenAI API key |
|
|
176
|
+
| `OPENAI_BASE_URL` | Custom OpenAI-compatible API endpoint |
|
|
208
177
|
| `ANTHROPIC_API_KEY` | Anthropic API key |
|
|
209
178
|
| `ARCADE_API_KEY` | Arcade API key (alternative to OAuth) |
|
|
210
179
|
| `ARCADE_BASE_URL` | Custom Arcade API endpoint |
|
|
180
|
+
| `CADE_LOCAL_ONLY` | Set to `1` to disable remote tools |
|
|
211
181
|
| `CADECODER_HOME` | Override config directory |
|
|
212
182
|
|
|
213
183
|
### Example Config
|
|
@@ -228,9 +198,73 @@ provider = "openai"
|
|
|
228
198
|
model = "gpt-4.1"
|
|
229
199
|
|
|
230
200
|
[tool_settings]
|
|
231
|
-
|
|
201
|
+
# Tool filtering is managed via MCP server configuration
|
|
202
|
+
# See: cade mcp add --help
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Using Local or Custom LLMs
|
|
206
|
+
|
|
207
|
+
Cade works with any OpenAI-compatible API, including local servers (Ollama, vLLM, llama.cpp) and alternative cloud providers (Together AI, Groq, Fireworks).
|
|
208
|
+
|
|
209
|
+
### Local-Only Mode
|
|
210
|
+
|
|
211
|
+
When using local LLMs, you can skip Arcade Cloud authentication entirely with `--local-only`:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Local Ollama server without Arcade Cloud
|
|
215
|
+
cade chat --local-only --endpoint "http://localhost:11434/v1" --model "llama3"
|
|
216
|
+
|
|
217
|
+
# Or via environment variable
|
|
218
|
+
CADE_LOCAL_ONLY=1 cade chat --endpoint "http://localhost:11434/v1" --model "llama3"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
This disables remote tools and uses only local tools. Cade will also gracefully fall back to local-only mode if Arcade Cloud authentication is not configured.
|
|
222
|
+
|
|
223
|
+
### Via CLI Flags
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Local Ollama server
|
|
227
|
+
cade chat --endpoint "http://localhost:11434/v1" --model "glm-4.7-flash:latest"
|
|
228
|
+
|
|
229
|
+
# vLLM server
|
|
230
|
+
cade chat -e http://localhost:8000/v1 -m mistral-7b
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Via Environment Variables
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
export OPENAI_BASE_URL="http://localhost:11434/v1"
|
|
237
|
+
export OPENAI_API_KEY="ollama" # Dummy key for local model
|
|
238
|
+
cade chat --model glm-4.7-flash:latest
|
|
232
239
|
```
|
|
233
240
|
|
|
241
|
+
### Via Config File
|
|
242
|
+
|
|
243
|
+
```toml
|
|
244
|
+
# ~/.cadecoder/cadecoder.toml
|
|
245
|
+
|
|
246
|
+
default_model = "glm-4.7-flash:latest"
|
|
247
|
+
|
|
248
|
+
[model_settings]
|
|
249
|
+
host = "http://localhost:11434/v1"
|
|
250
|
+
api_key = "ollama"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
After configuring the TOML file:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
cade chat
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### `cade chat` Configuration Precedence
|
|
260
|
+
|
|
261
|
+
Settings are resolved in this order (first is used):
|
|
262
|
+
|
|
263
|
+
1. CLI flags (`--endpoint`, `--model`)
|
|
264
|
+
2. Environment variables (`OPENAI_BASE_URL`, `OPENAI_API_KEY`)
|
|
265
|
+
3. Config file (`model_settings.host`, `model_settings.api_key`)
|
|
266
|
+
4. Hardcoded defaults
|
|
267
|
+
|
|
234
268
|
## Contributing
|
|
235
269
|
|
|
236
270
|
### Development Setup
|
|
@@ -238,9 +272,7 @@ disabled_tools = []
|
|
|
238
272
|
```bash
|
|
239
273
|
git clone https://github.com/arcadeai-labs/cade.git
|
|
240
274
|
cd cade
|
|
241
|
-
uv
|
|
242
|
-
source .venv/bin/activate
|
|
243
|
-
uv pip install -e '.[dev]'
|
|
275
|
+
uv sync --extra dev
|
|
244
276
|
```
|
|
245
277
|
|
|
246
278
|
### Run Tests
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cade-cli"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.5.0"
|
|
4
4
|
description = "Cade - The CLI Agent from Arcade.dev"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
|
-
license = {
|
|
7
|
+
license = {file = "LICENSE"}
|
|
8
8
|
authors = [
|
|
9
9
|
{ name = "Arcade AI Inc.", email = "dev@arcade.dev" },
|
|
10
10
|
]
|
|
@@ -28,16 +28,16 @@ dependencies = [
|
|
|
28
28
|
"pydantic[email]>=2.0.0,<3.0.0",
|
|
29
29
|
"toml>=0.10.0,<1.0.0",
|
|
30
30
|
"pyyaml>=6.0,<7.0.0",
|
|
31
|
-
"arcadepy>=1.3.1",
|
|
32
31
|
"openai>=1.0.0,<2.0.0",
|
|
33
32
|
"anthropic>=0.34.0,<1.0.0",
|
|
34
33
|
"ulid==1.1",
|
|
35
34
|
"arcade-tdk>=2.0.0",
|
|
35
|
+
"arcade-mcp-server>=1.0.0",
|
|
36
36
|
"arcade-core>=4.1.0,<5.0.0",
|
|
37
37
|
"authlib>=1.6.0,<2.0.0",
|
|
38
38
|
"pyperclip>=1.8.0,<2.0.0",
|
|
39
|
-
"prompt-toolkit>=3.0.52",
|
|
40
|
-
"tiktoken>=0.11.0",
|
|
39
|
+
"prompt-toolkit>=3.0.52,<4.0.0",
|
|
40
|
+
"tiktoken>=0.11.0,<1.0.0",
|
|
41
41
|
"httpx>=0.27.0,<1.0.0",
|
|
42
42
|
]
|
|
43
43
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.5.0"
|
|
@@ -13,6 +13,7 @@ from rich.console import Console
|
|
|
13
13
|
|
|
14
14
|
from cadecoder import __version__
|
|
15
15
|
from cadecoder.cli.commands import auth, chat
|
|
16
|
+
from cadecoder.cli.commands.context import context_app
|
|
16
17
|
from cadecoder.cli.commands.mcp import mcp_app
|
|
17
18
|
from cadecoder.cli.commands.model import model_app
|
|
18
19
|
from cadecoder.cli.commands.thread import thread_app
|
|
@@ -41,6 +42,12 @@ app.command(name="resume", help="Resume the most recent thread or a specific thr
|
|
|
41
42
|
)
|
|
42
43
|
|
|
43
44
|
# Register sub-command groups
|
|
45
|
+
app.add_typer(
|
|
46
|
+
context_app,
|
|
47
|
+
name="context",
|
|
48
|
+
help="Manage organization and project context",
|
|
49
|
+
rich_help_panel="User",
|
|
50
|
+
)
|
|
44
51
|
app.add_typer(mcp_app, name="mcp", help="Manage MCP servers", rich_help_panel="Tools")
|
|
45
52
|
app.add_typer(model_app, name="model", help="Manage AI models", rich_help_panel="Tools")
|
|
46
53
|
app.add_typer(tool_app, name="tools", help="View available tools", rich_help_panel="Tools")
|