kubrick-cli 0.1.5__tar.gz → 0.2.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.
Files changed (81) hide show
  1. kubrick_cli-0.2.0/PKG-INFO +191 -0
  2. kubrick_cli-0.2.0/README.md +158 -0
  3. kubrick_cli-0.2.0/kubrick_cli/__init__.py +3 -0
  4. kubrick_cli-0.2.0/kubrick_cli/agent_loop.py +386 -0
  5. kubrick_cli-0.2.0/kubrick_cli/aws_credentials.py +130 -0
  6. kubrick_cli-0.2.0/kubrick_cli/config.py +352 -0
  7. kubrick_cli-0.2.0/kubrick_cli/context_manager.py +267 -0
  8. kubrick_cli-0.2.0/kubrick_cli/credentials.py +330 -0
  9. kubrick_cli-0.2.0/kubrick_cli/display.py +213 -0
  10. kubrick_cli-0.2.0/kubrick_cli/glyphs.py +56 -0
  11. kubrick_cli-0.2.0/kubrick_cli/main.py +983 -0
  12. kubrick_cli-0.2.0/kubrick_cli/messages.py +226 -0
  13. kubrick_cli-0.2.0/kubrick_cli/permissions.py +336 -0
  14. kubrick_cli-0.2.0/kubrick_cli/prompts.py +138 -0
  15. kubrick_cli-0.2.0/kubrick_cli/providers/anthropic_provider.py +546 -0
  16. kubrick_cli-0.2.0/kubrick_cli/providers/base.py +159 -0
  17. kubrick_cli-0.2.0/kubrick_cli/providers/bedrock_provider.py +760 -0
  18. kubrick_cli-0.2.0/kubrick_cli/providers/factory.py +192 -0
  19. kubrick_cli-0.2.0/kubrick_cli/providers/http.py +146 -0
  20. kubrick_cli-0.2.0/kubrick_cli/providers/openai_provider.py +641 -0
  21. kubrick_cli-0.2.0/kubrick_cli/providers/triton_provider.py +99 -0
  22. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/kubrick_cli/safety.py +9 -7
  23. kubrick_cli-0.2.0/kubrick_cli/setup_wizard.py +651 -0
  24. kubrick_cli-0.2.0/kubrick_cli/tool_protocol.py +141 -0
  25. kubrick_cli-0.2.0/kubrick_cli/tools.py +614 -0
  26. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/kubrick_cli/triton_client.py +32 -15
  27. kubrick_cli-0.2.0/kubrick_cli/ui.py +312 -0
  28. kubrick_cli-0.2.0/kubrick_cli/updater.py +293 -0
  29. kubrick_cli-0.2.0/kubrick_cli/widgets.py +441 -0
  30. kubrick_cli-0.2.0/kubrick_cli.egg-info/PKG-INFO +191 -0
  31. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/kubrick_cli.egg-info/SOURCES.txt +25 -7
  32. kubrick_cli-0.2.0/kubrick_cli.egg-info/requires.txt +23 -0
  33. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/pyproject.toml +9 -4
  34. kubrick_cli-0.2.0/tests/test_agent_loop.py +273 -0
  35. kubrick_cli-0.2.0/tests/test_anthropic_provider.py +592 -0
  36. kubrick_cli-0.2.0/tests/test_aws_credentials.py +75 -0
  37. kubrick_cli-0.2.0/tests/test_bedrock_provider.py +663 -0
  38. kubrick_cli-0.2.0/tests/test_config.py +76 -0
  39. kubrick_cli-0.2.0/tests/test_context_manager.py +109 -0
  40. kubrick_cli-0.2.0/tests/test_credentials.py +92 -0
  41. kubrick_cli-0.2.0/tests/test_end_to_end.py +133 -0
  42. kubrick_cli-0.2.0/tests/test_openai_provider.py +216 -0
  43. kubrick_cli-0.2.0/tests/test_permissions.py +166 -0
  44. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/tests/test_safety.py +14 -0
  45. kubrick_cli-0.2.0/tests/test_tool_calling.py +104 -0
  46. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/tests/test_tool_executor.py +70 -0
  47. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/tests/test_triton_client_unit.py +62 -0
  48. kubrick_cli-0.2.0/tests/test_triton_provider.py +103 -0
  49. kubrick_cli-0.2.0/tests/test_ui.py +358 -0
  50. kubrick_cli-0.2.0/tests/test_updater.py +170 -0
  51. kubrick_cli-0.1.5/PKG-INFO +0 -202
  52. kubrick_cli-0.1.5/README.md +0 -178
  53. kubrick_cli-0.1.5/kubrick_cli/__init__.py +0 -47
  54. kubrick_cli-0.1.5/kubrick_cli/agent_loop.py +0 -294
  55. kubrick_cli-0.1.5/kubrick_cli/classifier.py +0 -194
  56. kubrick_cli-0.1.5/kubrick_cli/config.py +0 -272
  57. kubrick_cli-0.1.5/kubrick_cli/context_manager.py +0 -402
  58. kubrick_cli-0.1.5/kubrick_cli/display.py +0 -154
  59. kubrick_cli-0.1.5/kubrick_cli/execution_strategy.py +0 -195
  60. kubrick_cli-0.1.5/kubrick_cli/main.py +0 -985
  61. kubrick_cli-0.1.5/kubrick_cli/planning.py +0 -319
  62. kubrick_cli-0.1.5/kubrick_cli/progress.py +0 -162
  63. kubrick_cli-0.1.5/kubrick_cli/providers/anthropic_provider.py +0 -209
  64. kubrick_cli-0.1.5/kubrick_cli/providers/base.py +0 -153
  65. kubrick_cli-0.1.5/kubrick_cli/providers/factory.py +0 -161
  66. kubrick_cli-0.1.5/kubrick_cli/providers/openai_provider.py +0 -181
  67. kubrick_cli-0.1.5/kubrick_cli/providers/triton_provider.py +0 -96
  68. kubrick_cli-0.1.5/kubrick_cli/scheduler.py +0 -183
  69. kubrick_cli-0.1.5/kubrick_cli/setup_wizard.py +0 -161
  70. kubrick_cli-0.1.5/kubrick_cli/tools.py +0 -542
  71. kubrick_cli-0.1.5/kubrick_cli.egg-info/PKG-INFO +0 -202
  72. kubrick_cli-0.1.5/kubrick_cli.egg-info/requires.txt +0 -11
  73. kubrick_cli-0.1.5/tests/test_completion_detector.py +0 -345
  74. kubrick_cli-0.1.5/tests/test_config.py +0 -130
  75. kubrick_cli-0.1.5/tests/test_tool_calling.py +0 -126
  76. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/LICENSE +0 -0
  77. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/kubrick_cli/providers/__init__.py +0 -0
  78. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/kubrick_cli.egg-info/dependency_links.txt +0 -0
  79. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/kubrick_cli.egg-info/entry_points.txt +0 -0
  80. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/kubrick_cli.egg-info/top_level.txt +0 -0
  81. {kubrick_cli-0.1.5 → kubrick_cli-0.2.0}/setup.cfg +0 -0
@@ -0,0 +1,191 @@
1
+ Metadata-Version: 2.4
2
+ Name: kubrick-cli
3
+ Version: 0.2.0
4
+ Summary: Agentic coding CLI for local models (Ollama, vLLM, llama.cpp), Anthropic, OpenAI, Bedrock, and Triton
5
+ Author-email: Russell Land <rcland12@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/rcland12/kubrick-cli
8
+ Project-URL: Repository, https://github.com/rcland12/kubrick-cli
9
+ Project-URL: Issues, https://github.com/rcland12/kubrick-cli/issues
10
+ Requires-Python: >=3.9
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: rich>=13.0.0
14
+ Requires-Dist: prompt_toolkit>=3.0.36
15
+ Requires-Dist: cryptography>=42.0.0
16
+ Provides-Extra: bedrock
17
+ Requires-Dist: boto3>=1.34.0; extra == "bedrock"
18
+ Provides-Extra: keyring
19
+ Requires-Dist: keyring>=24.0.0; extra == "keyring"
20
+ Provides-Extra: all
21
+ Requires-Dist: boto3>=1.34.0; extra == "all"
22
+ Requires-Dist: keyring>=24.0.0; extra == "all"
23
+ Provides-Extra: dev
24
+ Requires-Dist: boto3>=1.34.0; extra == "dev"
25
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
26
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
27
+ Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
28
+ Requires-Dist: black>=22.0.0; extra == "dev"
29
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
30
+ Requires-Dist: build>=1.0.0; extra == "dev"
31
+ Requires-Dist: twine>=5.0.0; extra == "dev"
32
+ Dynamic: license-file
33
+
34
+ # <img src="https://raw.githubusercontent.com/rcland12/kubrick-cli/master/docs/images/logo.svg" alt="" width="34" align="top"> Kubrick CLI
35
+
36
+ [![CI](https://github.com/rcland12/kubrick-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/rcland12/kubrick-cli/actions/workflows/ci.yml)
37
+ [![CD](https://github.com/rcland12/kubrick-cli/actions/workflows/cd.yml/badge.svg)](https://github.com/rcland12/kubrick-cli/actions/workflows/cd.yml)
38
+ [![Security](https://github.com/rcland12/kubrick-cli/actions/workflows/security.yml/badge.svg)](https://github.com/rcland12/kubrick-cli/actions/workflows/security.yml)
39
+ [![PyPI version](https://badge.fury.io/py/kubrick-cli.svg)](https://badge.fury.io/py/kubrick-cli)
40
+ [![Python Versions](https://img.shields.io/pypi/pyversions/kubrick-cli.svg)](https://pypi.org/project/kubrick-cli/)
41
+ [![Downloads](https://pepy.tech/badge/kubrick-cli)](https://pepy.tech/project/kubrick-cli)
42
+ [![Docker Pulls](https://img.shields.io/docker/pulls/rcland12/kubrick-cli.svg)](https://hub.docker.com/r/rcland12/kubrick-cli)
43
+ [![Docker Image Size](https://img.shields.io/docker/image-size/rcland12/kubrick-cli/latest.svg)](https://hub.docker.com/r/rcland12/kubrick-cli)
44
+ [![codecov](https://codecov.io/gh/rcland12/kubrick-cli/branch/master/graph/badge.svg)](https://codecov.io/gh/rcland12/kubrick-cli)
45
+ [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/rcland12/kubrick-cli/badge)](https://securityscorecards.dev/viewer/?uri=github.com/rcland12/kubrick-cli)
46
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
47
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
48
+
49
+ An agentic coding CLI in the spirit of Claude Code — but provider-agnostic and built to work
50
+ well with **local models**. Kubrick reads and edits your code, runs commands, and iterates until
51
+ the task is done, using native tool calling on Ollama, vLLM, llama.cpp, LM Studio, Anthropic,
52
+ OpenAI, and Amazon Bedrock (Triton is supported with a text-based tool protocol).
53
+
54
+ ## Installation
55
+
56
+ ```bash
57
+ pip install kubrick-cli # core (local servers, Anthropic, OpenAI, Triton)
58
+ pip install 'kubrick-cli[bedrock]' # + Amazon Bedrock (boto3)
59
+ pip install 'kubrick-cli[keyring]' # + store API keys in the OS keychain
60
+ pip install 'kubrick-cli[all]' # everything
61
+ ```
62
+
63
+ Requires Python 3.9+. A Docker image is also available — see [DOCKER.md](docs/DOCKER.md).
64
+ `uv tool install kubrick-cli` or `pipx install kubrick-cli` keeps it in its own environment.
65
+
66
+ **Updating:** `kubrick update` (or `/update` in a session) checks PyPI and runs the right
67
+ upgrade for how Kubrick was installed: `uv tool upgrade`, `pipx upgrade`, or pip in its
68
+ virtualenv. Docker and source checkouts get the command to run instead. `kubrick update
69
+ --check` only reports. Kubrick also checks once a day and mentions new releases at startup;
70
+ turn that off with `/config check_for_updates false`.
71
+
72
+ ## Quick start
73
+
74
+ Run `kubrick` and the setup wizard walks you through choosing a provider. Or configure it
75
+ directly:
76
+
77
+ **Local model (Ollama, vLLM, llama.cpp, LM Studio)** — any OpenAI-compatible server:
78
+
79
+ ```bash
80
+ # On the GPU box (Ollama example): serve on the LAN with a usable context window
81
+ OLLAMA_HOST=0.0.0.0 OLLAMA_CONTEXT_LENGTH=32768 ollama serve
82
+
83
+ # On your machine
84
+ kubrick setup # "Local model server" > Ollama > type gpu-box:11434 > pick a model
85
+ kubrick
86
+ ```
87
+
88
+ **Anthropic**
89
+
90
+ ```bash
91
+ kubrick auth login anthropic # stored encrypted (or in the OS keychain)
92
+ kubrick --provider anthropic # default model: claude-opus-5-5
93
+ ```
94
+
95
+ **OpenAI**
96
+
97
+ ```bash
98
+ export OPENAI_API_KEY=... # env vars work too and take precedence
99
+ kubrick --provider openai # default model: gpt-5
100
+ ```
101
+
102
+ **Amazon Bedrock** — uses your normal AWS credentials (profiles, SSO); Kubrick stores none:
103
+
104
+ ```bash
105
+ aws sso login --profile work
106
+ kubrick setup # choose "Amazon Bedrock", enter a model / inference profile ID
107
+ ```
108
+
109
+ **Triton Inference Server** — see [TRITON.md](docs/TRITON.md).
110
+
111
+ ## Usage
112
+
113
+ ```
114
+ > fix the failing test in tests/test_parser.py
115
+
116
+ ● Bash(pytest -q tests/test_parser.py)
117
+ └ Exit code: 1 ...
118
+ ● Read(src/parser.py)
119
+ └ Read 212 lines
120
+ ● Edit(src/parser.py)
121
+ └ Edited src/parser.py (1 replacement(s))
122
+ ● Bash(pytest -q tests/test_parser.py)
123
+ └ Exit code: 0
124
+
125
+ Fixed the off-by-one in parse_range (src/parser.py:88); the test now passes.
126
+ ```
127
+
128
+ Kubrick asks before editing files or running commands (read-only commands like `git status`
129
+ run without asking). Pick "Yes, and allow ..." (or press `a`) to allow that kind of action for
130
+ the rest of the session, or start with `--permission-mode accept_edits`. `/plan` switches to a
131
+ read-only planning mode.
132
+
133
+ Type `/` to open the command menu. It filters as you type (`/pr` shows `/provider`); press
134
+ ↑/↓ to pick one, Tab to complete, Esc to close, or just keep typing and Enter sends what you
135
+ typed. `/provider`, `/model` and `/permissions` without an argument open a picker.
136
+
137
+ **Terminals.** Kubrick works in any terminal, including tmux/screen, Windows Terminal, and
138
+ Emacs (`vterm`, `eat`, `ansi-term`; in `M-x shell` and other dumb terminals menus become
139
+ numbered prompts). Set `KUBRICK_ASCII=1` if your font is missing symbols,
140
+ `KUBRICK_SIMPLE_UI=1` to always use numbered prompts, `NO_COLOR=1` to drop color, and
141
+ `/config editing_mode vi` for vi key bindings.
142
+
143
+ Non-interactive / scripting:
144
+
145
+ ```bash
146
+ kubrick -p "summarize what this repo does"
147
+ git diff | kubrick -p "review this diff for bugs"
148
+ kubrick -p "update the changelog" --permission-mode accept_edits
149
+ kubrick -c # continue the most recent conversation
150
+ ```
151
+
152
+ Put project-specific instructions (build/test commands, conventions) in a `KUBRICK.md` at the
153
+ repo root — `CLAUDE.md` and `AGENTS.md` are read too. `/init` generates one for you.
154
+
155
+ ## Development
156
+
157
+ ```bash
158
+ make dev # .venv with an editable install + dev tools (needs uv)
159
+ make run # run it against a throwaway playground project, with its own ~/.kubrick
160
+ make test # tests; `make lint` runs the CI checks
161
+ make sandbox # run it in Docker: only the project is visible, installs stay inside
162
+ make reset # delete .venv and .dev/ (everything above lives there)
163
+ ```
164
+
165
+ `make run DIR=~/src/project` points it at a real project; `make reset-home` re-runs the setup
166
+ wizard. See [CONTRIBUTING.md](CONTRIBUTING.md).
167
+
168
+ ## Features
169
+
170
+ - Native tool calling on every provider, with automatic fallback to a text protocol for models
171
+ or servers that don't support tools
172
+ - Claude Code-style permission modes, plan mode, and project instruction files
173
+ - Local-model friendly: context-window auto-detection (vLLM, Ollama), reasoning/`<think>`
174
+ display, recovery of unparsed `<tool_call>` output
175
+ - Automatic context compaction, conversation history (`-c`, `-r`, `/list`, `/load`)
176
+ - API keys kept out of config files: env vars, OS keychain, or a machine-bound encrypted store
177
+ - Streaming output, parallel read-only tools, ripgrep-backed search
178
+
179
+ ## Documentation
180
+
181
+ - [WIKI.md](docs/WIKI.md) — commands, flags, permissions, configuration, troubleshooting
182
+ - [PROVIDERS.md](docs/PROVIDERS.md) — setting up each provider and local servers
183
+ - [SECURITY.md](docs/SECURITY.md) — credential storage and security policy
184
+ - [DOCKER.md](docs/DOCKER.md) — running in Docker
185
+ - [TRITON.md](docs/TRITON.md) — Triton backend setup
186
+ - [TESTING.md](docs/TESTING.md) — development and testing
187
+ - [CICD.md](docs/CICD.md) — CI, releases, and publishing
188
+
189
+ ## License
190
+
191
+ MIT License - See [LICENSE](LICENSE)
@@ -0,0 +1,158 @@
1
+ # <img src="https://raw.githubusercontent.com/rcland12/kubrick-cli/master/docs/images/logo.svg" alt="" width="34" align="top"> Kubrick CLI
2
+
3
+ [![CI](https://github.com/rcland12/kubrick-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/rcland12/kubrick-cli/actions/workflows/ci.yml)
4
+ [![CD](https://github.com/rcland12/kubrick-cli/actions/workflows/cd.yml/badge.svg)](https://github.com/rcland12/kubrick-cli/actions/workflows/cd.yml)
5
+ [![Security](https://github.com/rcland12/kubrick-cli/actions/workflows/security.yml/badge.svg)](https://github.com/rcland12/kubrick-cli/actions/workflows/security.yml)
6
+ [![PyPI version](https://badge.fury.io/py/kubrick-cli.svg)](https://badge.fury.io/py/kubrick-cli)
7
+ [![Python Versions](https://img.shields.io/pypi/pyversions/kubrick-cli.svg)](https://pypi.org/project/kubrick-cli/)
8
+ [![Downloads](https://pepy.tech/badge/kubrick-cli)](https://pepy.tech/project/kubrick-cli)
9
+ [![Docker Pulls](https://img.shields.io/docker/pulls/rcland12/kubrick-cli.svg)](https://hub.docker.com/r/rcland12/kubrick-cli)
10
+ [![Docker Image Size](https://img.shields.io/docker/image-size/rcland12/kubrick-cli/latest.svg)](https://hub.docker.com/r/rcland12/kubrick-cli)
11
+ [![codecov](https://codecov.io/gh/rcland12/kubrick-cli/branch/master/graph/badge.svg)](https://codecov.io/gh/rcland12/kubrick-cli)
12
+ [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/rcland12/kubrick-cli/badge)](https://securityscorecards.dev/viewer/?uri=github.com/rcland12/kubrick-cli)
13
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
14
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
15
+
16
+ An agentic coding CLI in the spirit of Claude Code — but provider-agnostic and built to work
17
+ well with **local models**. Kubrick reads and edits your code, runs commands, and iterates until
18
+ the task is done, using native tool calling on Ollama, vLLM, llama.cpp, LM Studio, Anthropic,
19
+ OpenAI, and Amazon Bedrock (Triton is supported with a text-based tool protocol).
20
+
21
+ ## Installation
22
+
23
+ ```bash
24
+ pip install kubrick-cli # core (local servers, Anthropic, OpenAI, Triton)
25
+ pip install 'kubrick-cli[bedrock]' # + Amazon Bedrock (boto3)
26
+ pip install 'kubrick-cli[keyring]' # + store API keys in the OS keychain
27
+ pip install 'kubrick-cli[all]' # everything
28
+ ```
29
+
30
+ Requires Python 3.9+. A Docker image is also available — see [DOCKER.md](docs/DOCKER.md).
31
+ `uv tool install kubrick-cli` or `pipx install kubrick-cli` keeps it in its own environment.
32
+
33
+ **Updating:** `kubrick update` (or `/update` in a session) checks PyPI and runs the right
34
+ upgrade for how Kubrick was installed: `uv tool upgrade`, `pipx upgrade`, or pip in its
35
+ virtualenv. Docker and source checkouts get the command to run instead. `kubrick update
36
+ --check` only reports. Kubrick also checks once a day and mentions new releases at startup;
37
+ turn that off with `/config check_for_updates false`.
38
+
39
+ ## Quick start
40
+
41
+ Run `kubrick` and the setup wizard walks you through choosing a provider. Or configure it
42
+ directly:
43
+
44
+ **Local model (Ollama, vLLM, llama.cpp, LM Studio)** — any OpenAI-compatible server:
45
+
46
+ ```bash
47
+ # On the GPU box (Ollama example): serve on the LAN with a usable context window
48
+ OLLAMA_HOST=0.0.0.0 OLLAMA_CONTEXT_LENGTH=32768 ollama serve
49
+
50
+ # On your machine
51
+ kubrick setup # "Local model server" > Ollama > type gpu-box:11434 > pick a model
52
+ kubrick
53
+ ```
54
+
55
+ **Anthropic**
56
+
57
+ ```bash
58
+ kubrick auth login anthropic # stored encrypted (or in the OS keychain)
59
+ kubrick --provider anthropic # default model: claude-opus-5-5
60
+ ```
61
+
62
+ **OpenAI**
63
+
64
+ ```bash
65
+ export OPENAI_API_KEY=... # env vars work too and take precedence
66
+ kubrick --provider openai # default model: gpt-5
67
+ ```
68
+
69
+ **Amazon Bedrock** — uses your normal AWS credentials (profiles, SSO); Kubrick stores none:
70
+
71
+ ```bash
72
+ aws sso login --profile work
73
+ kubrick setup # choose "Amazon Bedrock", enter a model / inference profile ID
74
+ ```
75
+
76
+ **Triton Inference Server** — see [TRITON.md](docs/TRITON.md).
77
+
78
+ ## Usage
79
+
80
+ ```
81
+ > fix the failing test in tests/test_parser.py
82
+
83
+ ● Bash(pytest -q tests/test_parser.py)
84
+ └ Exit code: 1 ...
85
+ ● Read(src/parser.py)
86
+ └ Read 212 lines
87
+ ● Edit(src/parser.py)
88
+ └ Edited src/parser.py (1 replacement(s))
89
+ ● Bash(pytest -q tests/test_parser.py)
90
+ └ Exit code: 0
91
+
92
+ Fixed the off-by-one in parse_range (src/parser.py:88); the test now passes.
93
+ ```
94
+
95
+ Kubrick asks before editing files or running commands (read-only commands like `git status`
96
+ run without asking). Pick "Yes, and allow ..." (or press `a`) to allow that kind of action for
97
+ the rest of the session, or start with `--permission-mode accept_edits`. `/plan` switches to a
98
+ read-only planning mode.
99
+
100
+ Type `/` to open the command menu. It filters as you type (`/pr` shows `/provider`); press
101
+ ↑/↓ to pick one, Tab to complete, Esc to close, or just keep typing and Enter sends what you
102
+ typed. `/provider`, `/model` and `/permissions` without an argument open a picker.
103
+
104
+ **Terminals.** Kubrick works in any terminal, including tmux/screen, Windows Terminal, and
105
+ Emacs (`vterm`, `eat`, `ansi-term`; in `M-x shell` and other dumb terminals menus become
106
+ numbered prompts). Set `KUBRICK_ASCII=1` if your font is missing symbols,
107
+ `KUBRICK_SIMPLE_UI=1` to always use numbered prompts, `NO_COLOR=1` to drop color, and
108
+ `/config editing_mode vi` for vi key bindings.
109
+
110
+ Non-interactive / scripting:
111
+
112
+ ```bash
113
+ kubrick -p "summarize what this repo does"
114
+ git diff | kubrick -p "review this diff for bugs"
115
+ kubrick -p "update the changelog" --permission-mode accept_edits
116
+ kubrick -c # continue the most recent conversation
117
+ ```
118
+
119
+ Put project-specific instructions (build/test commands, conventions) in a `KUBRICK.md` at the
120
+ repo root — `CLAUDE.md` and `AGENTS.md` are read too. `/init` generates one for you.
121
+
122
+ ## Development
123
+
124
+ ```bash
125
+ make dev # .venv with an editable install + dev tools (needs uv)
126
+ make run # run it against a throwaway playground project, with its own ~/.kubrick
127
+ make test # tests; `make lint` runs the CI checks
128
+ make sandbox # run it in Docker: only the project is visible, installs stay inside
129
+ make reset # delete .venv and .dev/ (everything above lives there)
130
+ ```
131
+
132
+ `make run DIR=~/src/project` points it at a real project; `make reset-home` re-runs the setup
133
+ wizard. See [CONTRIBUTING.md](CONTRIBUTING.md).
134
+
135
+ ## Features
136
+
137
+ - Native tool calling on every provider, with automatic fallback to a text protocol for models
138
+ or servers that don't support tools
139
+ - Claude Code-style permission modes, plan mode, and project instruction files
140
+ - Local-model friendly: context-window auto-detection (vLLM, Ollama), reasoning/`<think>`
141
+ display, recovery of unparsed `<tool_call>` output
142
+ - Automatic context compaction, conversation history (`-c`, `-r`, `/list`, `/load`)
143
+ - API keys kept out of config files: env vars, OS keychain, or a machine-bound encrypted store
144
+ - Streaming output, parallel read-only tools, ripgrep-backed search
145
+
146
+ ## Documentation
147
+
148
+ - [WIKI.md](docs/WIKI.md) — commands, flags, permissions, configuration, troubleshooting
149
+ - [PROVIDERS.md](docs/PROVIDERS.md) — setting up each provider and local servers
150
+ - [SECURITY.md](docs/SECURITY.md) — credential storage and security policy
151
+ - [DOCKER.md](docs/DOCKER.md) — running in Docker
152
+ - [TRITON.md](docs/TRITON.md) — Triton backend setup
153
+ - [TESTING.md](docs/TESTING.md) — development and testing
154
+ - [CICD.md](docs/CICD.md) — CI, releases, and publishing
155
+
156
+ ## License
157
+
158
+ MIT License - See [LICENSE](LICENSE)
@@ -0,0 +1,3 @@
1
+ """Kubrick CLI - agentic coding assistant for local and hosted models."""
2
+
3
+ __version__ = "0.2.0"