gurtcli 0.9.0 → 0.9.2
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 +61 -0
- package/bin/LICENSE +21 -0
- package/bin/README.md +178 -0
- package/bin/gurtcli +0 -0
- package/install.js +1 -1
- package/package.json +4 -4
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# gurtcli
|
|
2
|
+
|
|
3
|
+
A coding agent in your terminal. Type what you want. It does the rest.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install -g gurtcli
|
|
7
|
+
gurtcli
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Written in Go. Distributed as a single binary. The npm package is a thin installer — `npm install -g gurtcli` downloads the right binary for your OS.
|
|
11
|
+
|
|
12
|
+
**Zero config.** First run prompts for provider (OpenAI, Anthropic, or any OpenAI-compatible endpoint) and API key. Key is saved to your OS keychain. Model choice is persisted.
|
|
13
|
+
|
|
14
|
+
## Quick start
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install -g gurtcli
|
|
18
|
+
gurtcli
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Pick a provider, enter your API key, select a model. You're in the chat.
|
|
22
|
+
|
|
23
|
+
## CLI flags
|
|
24
|
+
|
|
25
|
+
| Flag | Purpose |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `--model <name>` | Skip model picker |
|
|
28
|
+
| `--provider <provider>` | Skip provider picker (openai, anthropic) |
|
|
29
|
+
| `--yolo` | Skip all permission prompts |
|
|
30
|
+
| `--dangerously-skip-permissions` | Same as --yolo |
|
|
31
|
+
| `--reconfigure` | Force provider/model setup |
|
|
32
|
+
| `--version` | Print version and exit |
|
|
33
|
+
|
|
34
|
+
## Slash commands
|
|
35
|
+
|
|
36
|
+
| Command | What it does |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `/help` | Show available commands |
|
|
39
|
+
| `/model` | Change model |
|
|
40
|
+
| `/provider` | Change provider |
|
|
41
|
+
| `/auth` | Change API key |
|
|
42
|
+
| `/session` | Switch to a saved session |
|
|
43
|
+
| `/new` | Start a fresh session |
|
|
44
|
+
| `/reasoning` | Toggle reasoning visibility |
|
|
45
|
+
| `/thinking` | Set thinking type (adaptive/enabled/disabled) |
|
|
46
|
+
| `/effort` | Set effort level (low/medium/high/xhigh/max) |
|
|
47
|
+
| `/exit` | Quit |
|
|
48
|
+
|
|
49
|
+
## How it works
|
|
50
|
+
|
|
51
|
+
1. You describe what you want in natural language.
|
|
52
|
+
2. Gurt sends it to an LLM.
|
|
53
|
+
3. The LLM decides which tool to use — read, write, edit, delete, or run a shell command.
|
|
54
|
+
4. Gurt executes it and shows the result.
|
|
55
|
+
|
|
56
|
+
That's the whole loop. No plugins. No MCP. No subagents.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
Built with [Bubble Tea](https://github.com/charmbracelet/bubbletea).
|
|
61
|
+
[GitHub](https://github.com/gru/gurtcli) · [Issues](https://github.com/gru/gurtcli/issues)
|
package/bin/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 gru
|
|
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.
|
package/bin/README.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# gurtcli
|
|
2
|
+
|
|
3
|
+
A coding agent in your terminal. Type what you want. It does the rest.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install -g gurtcli
|
|
7
|
+
gurtcli
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Done. That's the install and setup.
|
|
11
|
+
|
|
12
|
+
## Why
|
|
13
|
+
|
|
14
|
+
Most coding AI tools are bloated. Slow to start. Drowning in config files. Too many buttons.
|
|
15
|
+
|
|
16
|
+
Gurt is the opposite:
|
|
17
|
+
|
|
18
|
+
- **One install command.** `npm install -g gurtcli`. That's it.
|
|
19
|
+
- **One entry point.** `gurtcli` opens a chat. No subcommands. No menus.
|
|
20
|
+
- **Zero config.** Get an API key. First run saves it to your OS keychain.
|
|
21
|
+
- **Fast startup.** Written in Go. Compiles to a single binary. No runtime to load.
|
|
22
|
+
- **Small surface.** Five tools. Read, write, edit, delete, run. Anything more is noise.
|
|
23
|
+
|
|
24
|
+
## How it works
|
|
25
|
+
|
|
26
|
+
1. You type what you want.
|
|
27
|
+
2. Gurt sends it to an LLM.
|
|
28
|
+
3. The LLM decides what to do — read a file, edit code, run a command.
|
|
29
|
+
4. Gurt does it. Shows you the result.
|
|
30
|
+
5. Repeat until you're done.
|
|
31
|
+
|
|
32
|
+
No multi-step approval chains. No subagent trees. No plugin marketplace. Just a chat loop that can touch your filesystem.
|
|
33
|
+
|
|
34
|
+
## Quick start
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install -g gurtcli
|
|
38
|
+
gurtcli
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
First run walks you through provider selection, API key entry, and model picker. After that you're in the chat.
|
|
42
|
+
|
|
43
|
+
Type `/exit` or press `ctrl+c` to quit.
|
|
44
|
+
|
|
45
|
+
### Flags (all optional)
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
--model <name> skip model picker
|
|
49
|
+
--provider <name> skip provider picker (openai, anthropic)
|
|
50
|
+
--yolo skip all permission prompts
|
|
51
|
+
--dangerously-skip-permissions skip all permission prompts
|
|
52
|
+
--reconfigure force provider and model setup
|
|
53
|
+
--version print version and exit
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Slash commands
|
|
57
|
+
|
|
58
|
+
| Command | What it does |
|
|
59
|
+
|---|---|
|
|
60
|
+
| `/help` | Show available commands |
|
|
61
|
+
| `/model` | Change model for current provider |
|
|
62
|
+
| `/provider` | Change provider |
|
|
63
|
+
| `/auth` | Change API key for current provider |
|
|
64
|
+
| `/session` | Switch to a saved session |
|
|
65
|
+
| `/new` | Start a fresh session |
|
|
66
|
+
| `/reasoning` | Toggle reasoning visibility |
|
|
67
|
+
| `/thinking` | Set thinking type (adaptive/enabled/disabled) |
|
|
68
|
+
| `/effort` | Set effort level (low/medium/high/xhigh/max) |
|
|
69
|
+
| `/exit` | Quit the application |
|
|
70
|
+
|
|
71
|
+
Type `/` in chat to see autocomplete suggestions for all commands.
|
|
72
|
+
|
|
73
|
+
## Sessions
|
|
74
|
+
|
|
75
|
+
Every chat session is automatically saved to `.gurtcli/sessions/` in your workspace. Sessions persist your message history, provider, model, and reasoning configuration across restarts.
|
|
76
|
+
|
|
77
|
+
- **Resume a session** — launch `gurtcli` in the same directory and it picks up where you left off.
|
|
78
|
+
- **Switch sessions** — `/session` shows a list of saved sessions.
|
|
79
|
+
- **New session** — `/new` saves the current session and starts fresh.
|
|
80
|
+
|
|
81
|
+
Session data is stored as JSON files and is portable across machines.
|
|
82
|
+
|
|
83
|
+
## Provider & model setup
|
|
84
|
+
|
|
85
|
+
Supports **OpenAI**, **Anthropic**, and any **OpenAI-compatible endpoint**.
|
|
86
|
+
|
|
87
|
+
First run shows a provider picker. Choose one and enter your API key. The key is saved to your OS keychain — no env vars or config file secrets.
|
|
88
|
+
|
|
89
|
+
After picking a provider, models are fetched from the API and displayed in a filterable list. Type to narrow down, press enter to select.
|
|
90
|
+
|
|
91
|
+
Use `--provider` and `--model` flags to skip setup entirely:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
gurtcli --provider anthropic --model claude-sonnet-5-20260630
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Custom endpoints
|
|
98
|
+
|
|
99
|
+
Select "Custom" in the provider picker to use any OpenAI-compatible endpoint (Groq, OpenRouter, Ollama, etc.). You can use it one-time or save it as a named endpoint for reuse.
|
|
100
|
+
|
|
101
|
+
Saved endpoints appear in the provider list. Press `d` to delete a saved endpoint.
|
|
102
|
+
|
|
103
|
+
## Reasoning configuration
|
|
104
|
+
|
|
105
|
+
When your model supports it, gurt lets you configure reasoning behavior after model selection.
|
|
106
|
+
|
|
107
|
+
**Anthropic models** — two settings:
|
|
108
|
+
- **Thinking type** — `adaptive`, `enabled`, or `disabled`
|
|
109
|
+
- **Effort level** — `low`, `medium`, `high`, `xhigh`, or `max`
|
|
110
|
+
|
|
111
|
+
**OpenAI models** — one setting:
|
|
112
|
+
- **Reasoning effort** — `none`, `low`, `medium`, `high`, `xhigh`, or `max`
|
|
113
|
+
|
|
114
|
+
Navigate with `↑`/`↓`, change values with `←`/`→`, confirm with `enter`.
|
|
115
|
+
|
|
116
|
+
Change these mid-session with `/thinking <type>` and `/effort <level>`.
|
|
117
|
+
|
|
118
|
+
Toggle reasoning visibility inline with `/reasoning` or click the `[▼]` / `[▶]` toggle with your mouse.
|
|
119
|
+
|
|
120
|
+
## Permissions
|
|
121
|
+
|
|
122
|
+
Destructive operations (write, edit, delete, run) prompt for confirmation:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
❯ y
|
|
126
|
+
(y)es / (n)o / allow for (a)ll
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
- `y` — allow once
|
|
130
|
+
- `n` — deny once
|
|
131
|
+
- `a` — allow for the rest of this session
|
|
132
|
+
|
|
133
|
+
Use `--yolo` or `--dangerously-skip-permissions` to skip all prompts.
|
|
134
|
+
|
|
135
|
+
## AGENTS.md
|
|
136
|
+
|
|
137
|
+
If your project has an `AGENTS.md` file in its root directory, its contents are appended to the system prompt on every LLM call. Use this to provide project-specific instructions, conventions, and context that the LLM should follow.
|
|
138
|
+
|
|
139
|
+
## API keys
|
|
140
|
+
|
|
141
|
+
Gurt stores your API key in the OS keychain. No env vars needed. You're prompted once on first run and never again.
|
|
142
|
+
|
|
143
|
+
macOS uses Keychain. Linux uses Secret Service (libsecret). Windows uses Credential Manager.
|
|
144
|
+
|
|
145
|
+
**No keychain available?** (headless server, CI) — Gurt asks for the key each session. For CI, set `GURT_API_KEY` as an env var.
|
|
146
|
+
|
|
147
|
+
Your model choice is saved to `~/.config/gurtcli/config.json` after first run.
|
|
148
|
+
|
|
149
|
+
## Tools
|
|
150
|
+
|
|
151
|
+
| Tool | Does |
|
|
152
|
+
|------|------|
|
|
153
|
+
| `read_file` | Read a file with optional offset and limit |
|
|
154
|
+
| `write_file` | Create or overwrite a file (creates parent dirs) |
|
|
155
|
+
| `edit_file` | Replace exact text match in a file |
|
|
156
|
+
| `delete_file` | Remove a file |
|
|
157
|
+
| `run_bash` | Execute a shell command with timeout |
|
|
158
|
+
|
|
159
|
+
## Why Go
|
|
160
|
+
|
|
161
|
+
- Compiles to a single binary. No Python/Node runtime needed.
|
|
162
|
+
- Startup in milliseconds, not seconds.
|
|
163
|
+
- Cross-platform with one build flag.
|
|
164
|
+
- No dependency hell. `go build` produces one file you can scp anywhere.
|
|
165
|
+
|
|
166
|
+
## Why npm as the install path
|
|
167
|
+
|
|
168
|
+
Because `npm install -g` is the least friction for developers. The npm package is a thin wrapper that downloads the right Go binary for your OS. You never touch Go.
|
|
169
|
+
|
|
170
|
+
## Philosophy
|
|
171
|
+
|
|
172
|
+
This tool does one thing: takes a natural language request and turns it into filesystem operations. It doesn't need a plugin system. It doesn't need MCP. It doesn't need skills. It reads your prompt, calls an LLM, and runs tools. That's the whole loop.
|
|
173
|
+
|
|
174
|
+
Adding features is easy. The hard part is stopping.
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
MIT
|
package/bin/gurtcli
ADDED
|
Binary file
|
package/install.js
CHANGED
|
@@ -31,7 +31,7 @@ if (!goos || !goarch) {
|
|
|
31
31
|
|
|
32
32
|
const binaryName = goos === "windows" ? "gurtcli.exe" : "gurtcli";
|
|
33
33
|
const archive = `gurtcli_${version}_${goos}_${goarch}.tar.gz`;
|
|
34
|
-
const url = `https://github.com/
|
|
34
|
+
const url = `https://github.com/sillygru/gurtcli/releases/download/v${version}/${archive}`;
|
|
35
35
|
const binDir = path.join(__dirname, "bin");
|
|
36
36
|
const binPath = path.join(binDir, binaryName);
|
|
37
37
|
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "gurtcli-"));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gurtcli",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "A coding agent in your terminal. Type what you want. It does the rest.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"gurtcli": "cli.js"
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"repository": {
|
|
13
13
|
"type": "git",
|
|
14
|
-
"url": "git+https://github.com/
|
|
14
|
+
"url": "git+https://github.com/sillygru/gurtcli.git"
|
|
15
15
|
},
|
|
16
|
-
"homepage": "https://github.com/
|
|
16
|
+
"homepage": "https://github.com/sillygru/gurtcli",
|
|
17
17
|
"bugs": {
|
|
18
|
-
"url": "https://github.com/
|
|
18
|
+
"url": "https://github.com/sillygru/gurtcli/issues"
|
|
19
19
|
},
|
|
20
20
|
"engines": {
|
|
21
21
|
"node": ">=18"
|