code-context-control 2.63.0__py3-none-any.whl → 2.63.2__py3-none-any.whl

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.
cli/c3.py CHANGED
@@ -92,7 +92,7 @@ console = Console() if HAS_RICH else None
92
92
  # Config
93
93
  CONFIG_DIR = ".c3"
94
94
  CONFIG_FILE = ".c3/config.json"
95
- __version__ = "2.63.0"
95
+ __version__ = "2.63.2"
96
96
 
97
97
 
98
98
  def _compress_file_cli(compressor, path, mode="smart", **kw):
@@ -365,7 +365,7 @@ const Dashboard = ({ stats, loading, notifications = [], ackNotification, ackAll
365
365
  ))}
366
366
  </div>
367
367
  <div className="mono" style={{ fontSize: 10, color: T.textDim }}>
368
- ID: {(session.id || "-").slice(0, 16)} \u00b7 started {localTime(session.started)}
368
+ ID: {(session.id || "-").slice(0, 16)} {"\u00b7"} started {localTime(session.started)}
369
369
  </div>
370
370
 
371
371
  {/* Live Claude Code token ticker — updates each exchange */}
@@ -494,7 +494,7 @@ const Dashboard = ({ stats, loading, notifications = [], ackNotification, ackAll
494
494
  color={T.purple}
495
495
  open={showUsage}
496
496
  onToggle={() => setShowUsage(!showUsage)}
497
- badge={<Badge color={T.purple}>{fmtK(totalSourceTokens)} total \u00b7 {sourceEntries.length} sources</Badge>}
497
+ badge={<Badge color={T.purple}>{fmtK(totalSourceTokens)} total {"\u00b7"} {sourceEntries.length} sources</Badge>}
498
498
  >
499
499
  <div style={{ display: "flex", flexDirection: "column", gap: 8 }}>
500
500
  {sourceEntries.map(([name, data]) => {
@@ -0,0 +1,344 @@
1
+ Metadata-Version: 2.4
2
+ Name: code-context-control
3
+ Version: 2.63.2
4
+ Summary: Local MCP code-intelligence for AI coding tools: surgical search/read/edit, agent-config version history, path-level access + masking guards, and a multi-project hub.
5
+ Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/drknowhow/code-context-control
8
+ Project-URL: Documentation, https://github.com/drknowhow/code-context-control#readme
9
+ Project-URL: Repository, https://github.com/drknowhow/code-context-control
10
+ Project-URL: Changelog, https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md
11
+ Project-URL: Issues, https://github.com/drknowhow/code-context-control/issues
12
+ Project-URL: Funding, https://github.com/sponsors/drknowhow
13
+ Keywords: claude,claude-code,mcp,ai,code-intelligence,code-context,developer-tools,llm-tools
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
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: Topic :: Software Development :: Libraries :: Python Modules
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: tiktoken>=0.7.0
28
+ Requires-Dist: fastmcp>=2.0.0
29
+ Requires-Dist: watchdog>=4.0.0
30
+ Requires-Dist: tree-sitter>=0.22.0
31
+ Requires-Dist: tree-sitter-python>=0.21.0
32
+ Requires-Dist: tree-sitter-javascript>=0.21.0
33
+ Requires-Dist: tree-sitter-typescript>=0.21.0
34
+ Requires-Dist: tree-sitter-html>=0.21.0
35
+ Requires-Dist: tree-sitter-markdown>=0.3.2
36
+ Requires-Dist: tree-sitter-css>=0.21.0
37
+ Requires-Dist: tree-sitter-go>=0.21.0
38
+ Requires-Dist: tree-sitter-rust>=0.21.0
39
+ Requires-Dist: tree-sitter-json>=0.21.0
40
+ Requires-Dist: tree-sitter-yaml>=0.6.0
41
+ Requires-Dist: flask>=3.0.0
42
+ Requires-Dist: rich>=13.0.0
43
+ Requires-Dist: click>=8.0.0
44
+ Requires-Dist: pyyaml>=6.0.0
45
+ Requires-Dist: keyring>=24.0
46
+ Provides-Extra: vector
47
+ Requires-Dist: scikit-learn>=1.3.0; extra == "vector"
48
+ Requires-Dist: numpy>=1.24.0; extra == "vector"
49
+ Requires-Dist: chromadb>=0.4.24; extra == "vector"
50
+ Provides-Extra: tui
51
+ Requires-Dist: textual>=0.50.0; extra == "tui"
52
+ Provides-Extra: telemetry
53
+ Requires-Dist: sentry-sdk>=2.0.0; extra == "telemetry"
54
+ Provides-Extra: dev
55
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
56
+ Requires-Dist: pyright>=1.1.350; extra == "dev"
57
+ Requires-Dist: ruff>=0.6.0; extra == "dev"
58
+ Requires-Dist: build>=1.0.0; extra == "dev"
59
+ Requires-Dist: twine>=5.0.0; extra == "dev"
60
+ Requires-Dist: numpy>=1.24.0; extra == "dev"
61
+ Requires-Dist: scikit-learn>=1.3.0; extra == "dev"
62
+ Dynamic: license-file
63
+
64
+ <h1 align="center">Code Context Control</h1>
65
+
66
+ <p align="center">
67
+ <strong>The local code-intelligence layer for AI coding tools.</strong><br>
68
+ Retrieve less, read less, edit safer — and control what an agent may read, write, or see.<br>
69
+ Works with Claude Code, Codex, Copilot, Cursor, and Antigravity.
70
+ </p>
71
+
72
+ <p align="center">
73
+ <a href="https://pypi.org/project/code-context-control/"><img alt="PyPI" src="https://img.shields.io/pypi/v/code-context-control?color=blue&logo=pypi&logoColor=white"></a>
74
+ <a href="https://github.com/drknowhow/code-context-control/blob/main/LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg"></a>
75
+ <img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
76
+ <img alt="Platforms" src="https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey">
77
+ <img alt="Status: Beta" src="https://img.shields.io/badge/status-beta-yellow">
78
+ <a href="https://github.com/sponsors/drknowhow"><img alt="Sponsor" src="https://img.shields.io/badge/sponsor-%E2%9D%A4-EA4AAA?logo=githubsponsors&logoColor=white"></a>
79
+ </p>
80
+
81
+ <p align="center">
82
+ <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_dashboard.png" alt="C3 per-project dashboard" width="900">
83
+ </p>
84
+
85
+ ---
86
+
87
+ ## The problem
88
+
89
+ LLM-driven coding tools have one expensive failure mode: **they read too much.** They `cat` whole files, regex the entire repo, dump 10k-line logs into context, edit-and-pray, and burn through budget before they touch a single line of code. On a half-day session you can spend $20+ on token waste that adds zero value.
90
+
91
+ And they read too *widely*: the same agent that greps your source also greps your `.env`, your customer CSV, and your production dumps.
92
+
93
+ ## What C3 does about it
94
+
95
+ A thin **local** layer between your IDE and your repo. Every AI tool call is routed through a narrow, surgical operation instead of a broad, wasteful one:
96
+
97
+ | Without C3 | With C3 |
98
+ |---|---|
99
+ | `Read` the whole 2,000-line file | `c3_compress` returns a structural map at 40-70% of the original token count → `c3_read(symbols=...)` for the exact function |
100
+ | `Grep` the whole repo blindly | `c3_search` returns ranked candidates with TF-IDF + symbol awareness |
101
+ | Dump full `pytest` output into the prompt | `c3_filter` distills 500 lines → 30 actionable ones |
102
+ | Edit, hope it compiled | `c3_edit` writes via a ledger + `c3_validate` runs `pyright`/`tsc` automatically |
103
+ | `Bash` test runs that hang on Windows | `c3_shell` returns structured `{exit_code, stdout, stderr, duration}` with auto-filter |
104
+ | Lose all context on `/clear` | `c3_session(snapshot)` + `c3_memory` persist decisions across sessions |
105
+ | Re-explain the project every session | Auto-synced `CLAUDE.md` / `AGENTS.md` / `copilot-instructions.md` from one source of truth |
106
+ | Agent reads `.env`, a customer CSV, a prod dump | **Access Guard** denies the path outright, or **Mask Guard** serves a redacted view |
107
+
108
+ Everything runs **locally**. No source code, prompts, or model output leaves your machine unless you explicitly opt into a third-party model API.
109
+
110
+ ---
111
+
112
+ ## Install
113
+
114
+ Requires Python 3.10+. Recommended via [pipx](https://pipx.pypa.io):
115
+
116
+ ```bash
117
+ pipx install code-context-control
118
+ c3 init /path/to/your/project
119
+ ```
120
+
121
+ Or `pip install "code-context-control[tui]"` for the optional Textual UI.
122
+
123
+ `c3 init` walks you through IDE selection (Claude Code, Codex CLI, VS Code, Cursor, Antigravity, or Custom), optional `git init`, MCP registration, and — for Claude Code — a permission tier. Headless:
124
+
125
+ ```bash
126
+ c3 init /path/to/project --force --ide claude --mcp-mode direct --permissions standard
127
+ c3 init /path/to/huge-repo --force --no-embed # skip the embedding index on large repos
128
+ ```
129
+
130
+ Upgrade with `c3 upgrade` (or `pipx upgrade code-context-control`). MCP is wired through the `c3-mcp` entry point, so upgrading needs no per-project reconfiguration.
131
+
132
+ > **Upgrading from before v2.60.1 on Windows:** existing projects are *not* repaired by upgrading — re-run `c3 init` once per project to fix hook registration.
133
+
134
+ Full notes: [Upgrading](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md) · [Contributing](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md#from-source-contributors)
135
+
136
+ ---
137
+
138
+ ## The UI
139
+
140
+ Three local web apps, no Electron — pure Flask + vanilla JS: the **Hub** (`c3 hub`, port 3330), the **per-project UI** (`c3 ui`), and the optional **Oracle** (`c3 oracle serve`).
141
+
142
+ ### Project Hub — multi-project mission control
143
+
144
+ <p align="center">
145
+ <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/hub_projects.png" alt="C3 Project Hub" width="900">
146
+ </p>
147
+
148
+ Every C3-initialized project registers itself here on `c3 init`. Filter by active/idle, see IDE / version / port / last activity per row, and launch your IDE or the project UI in one click. <kbd>Ctrl</kbd>+<kbd>K</kbd> searches code and memory across *every* registered project.
149
+
150
+ Three top-level views — **Projects**, **Tasks** (a cross-project kanban), and **Credentials** — plus a drill-in panel per project covering Overview, Sub-projects, Tasks, Artifacts, Memory, Ledger, Sessions, Health, Budget, Credentials, Config, and MCP.
151
+
152
+ **Sub-projects** make a nested repo a first-class child with its own `.c3`: the parent's index excludes the child's subtree, and `c3_search` / `c3_memory` fan out on demand (`scope='all'`, or one child by name). → [Sub-projects guide](https://github.com/drknowhow/code-context-control/blob/main/docs/sub-projects.md)
153
+
154
+ ### Per-project UI
155
+
156
+ ```bash
157
+ c3 ui # binds the first free port from 3333
158
+ ```
159
+
160
+ Twelve tabs. The dashboard above shows token savings, indexed files, the live session, and a stream of recent tool calls and file changes.
161
+
162
+ | Tab | What it's for |
163
+ |---|---|
164
+ | **Dashboard** | Token savings, codebase breakdown, live session counters, recent activity |
165
+ | **Chat** | Browse and search indexed IDE chat transcripts |
166
+ | **Sessions** | Every session with duration, decisions, files, tool calls, token cost |
167
+ | **Memory** | Durable facts across sessions — categories, semantic search, list ↔ graph |
168
+ | **Tasks** | Per-project PM: dependencies, milestones, time tracking, health |
169
+ | **Edits** | The Edit Ledger — every AI-driven change, versioned and restorable |
170
+ | **Bitbucket** | PRs, branches, activity, admin against Bitbucket Data Center |
171
+ | **Jira** | My Work board, JQL search, transitions, comments |
172
+ | **Credentials** | Named secrets — metadata only, values are never returned to the browser |
173
+ | **Access Guard** | Path rules: deny / read-only / mask, plus the path tester |
174
+ | **Instructions** | One editor for `CLAUDE.md`, `AGENTS.md`, `copilot-instructions.md` |
175
+ | **Settings** | Budgets, feature flags, background agents, delegate routing, MCP |
176
+
177
+ <p align="center">
178
+ <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_tasks.png" alt="C3 Tasks" width="900">
179
+ </p>
180
+
181
+ **Tasks** (v2.45.0, extended v2.53.0) is a durable per-project tracker — dependencies and subtasks, milestones, decision notes, full event history, health reports, and both automatic and manual time tracking. It rolls up into the Hub's cross-project board.
182
+
183
+ **Instructions** keeps your agent-facing docs in sync. C3-generated content sits inside a `<!-- C3:BEGIN … -->` block; anything you write outside it is preserved. Since v2.60.0 generated docs point at `.c3/MAP.md` — a machine-owned, byte-stable repo map C3 refreshes automatically — instead of embedding a tree that goes stale. `AGENTS.md` serves both Codex and Antigravity; `GEMINI.md` is read if present but no longer generated (the Gemini CLI profile was removed in v2.52).
184
+
185
+ ---
186
+
187
+ ## The MCP tool suite
188
+
189
+ C3 exposes **20 tools** as a native MCP server. Your IDE calls them directly:
190
+
191
+ | Tool | What it does |
192
+ |---|---|
193
+ | `c3_search` | TF-IDF / regex / semantic search, ranked; fans out to sub-projects with `scope=` |
194
+ | `c3_compress` | AST-based file map (`map`, `dense_map`, `smart`, `diff`, `bug_scan`, `ast`) |
195
+ | `c3_read` | Surgical reads — by symbol name, regex, or line ranges |
196
+ | `c3_edit` | Atomic patch with ledger logging + content-addressable history |
197
+ | `c3_validate` | Type / syntax check (pyright, tsc, ruff — auto-detected) |
198
+ | `c3_filter` | Distill long terminal/log output via pattern + LLM summarization |
199
+ | `c3_shell` | Shell commands with structured returns + auto-filtered stdout |
200
+ | `c3_status` | Views: `budget`, `health`, `notifications`, `sessions`, `ghost_files`, `access` |
201
+ | `c3_memory` | Fact store with categories, recall, graph queries, `index`→`fetch` two-step |
202
+ | `c3_session` | Snapshot, restore, log decisions, compact history |
203
+ | `c3_impact` | Blast-radius analysis before editing shared symbols |
204
+ | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
205
+ | `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
206
+ | `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter |
207
+ | `c3_task` | Per-project PM — tasks, dependencies, milestones, time tracking (v2.53.0) |
208
+ | `c3_artifacts` | Agent-config version history, diff & restore (v2.46.0) |
209
+ | `c3_credentials` | Named-secret vault; values never enter model context (v2.58.0) |
210
+ | `c3_bitbucket` | Bitbucket Data Center — PRs, branches, builds, admin (v2.30.0) |
211
+ | `c3_jira` | Jira Cloud + Data Center — JQL, issues, transitions (v2.56.0) |
212
+ | `c3_project` | Cross-project discovery & operations; guarded writes (v2.31.0) |
213
+
214
+ Every tool is **read-only safe in plan mode** except `c3_edit`, `c3_shell`, `c3_artifacts(action='restore')`, `c3_delegate` with write delegation enabled, and write actions on `c3_bitbucket` / `c3_jira` / `c3_credentials` / `c3_project` / `c3_task`.
215
+
216
+ On Windows `c3_shell` uses Git Bash when available. Git Bash bundles no `jq`; use `python -m json.tool` for portable JSON formatting.
217
+
218
+ ---
219
+
220
+ ## Guards — what the agent may touch, and what it sees
221
+
222
+ <p align="center">
223
+ <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_access_guard.png" alt="C3 Access Guard and Mask Guard" width="900">
224
+ </p>
225
+
226
+ Two questions, two answers. **Access Guard** (v2.62.0) answers *may the agent touch this path?* **Mask Guard** (v2.63.0) answers *what should it see when it does?*
227
+
228
+ ```bash
229
+ c3 access add "secrets/**" --kind deny # never read, never write
230
+ c3 access add "migrations/**" --kind read_only # readable, never written
231
+ c3 access mask add "data/*.csv" --preset sample_rows --params "count=20,strategy=first"
232
+ c3 access mask activate # purge pre-mask artifacts, build views
233
+ ```
234
+
235
+ ```diff
236
+ - AWS_KEY = "AKIAIOSFODNN7EXAMPLE" # your file
237
+ + AWS_KEY = "«c3:redacted:aws_access_key»" # what the agent sees
238
+ ```
239
+
240
+ - **Tighten-only.** No allow list exists; global and project scopes merge as a union, so a cloned repo's config can only *add* protection.
241
+ - **`deny` means deny-enumerate too** — denied paths never appear in search results, maps, or the vector index.
242
+ - **Masked means read-only, always.** Cropped rows have no inverse, so an edit in transformed coordinates would corrupt the one file you protected.
243
+ - **Four deterministic presets, no LLM in the read path:** `redact_secrets`, `redact_columns` (salted one-way pseudonyms — joins survive, no reverse dictionary), `sample_rows`, `signatures_only`.
244
+ - **Rule changes are human-only** (UI tab or CLI) and ledger-logged. Agents have no mutation surface.
245
+ - **Honest coverage.** This guards *cooperative* agents against mistakes and prompt injection. It is not a sandbox — a raw shell outside C3's tools still sees the real bytes.
246
+
247
+ → [Access Guard](https://github.com/drknowhow/code-context-control/blob/main/docs/access-guard.md) · [Mask Guard](https://github.com/drknowhow/code-context-control/blob/main/docs/mask-guard.md)
248
+
249
+ ---
250
+
251
+ ## Integrations
252
+
253
+ | | What you get | Guide |
254
+ |---|---|---|
255
+ | **Credential vault** (v2.58.0) | Named secrets, global + per-project, in the OS keyring. Agents use them by name — `env_creds='NPM_TOKEN'` or `{{cred:NAME}}` — and values are decoded only at the subprocess boundary, never in model context. Hub-wide Credentials view since v2.59.0. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#credential-vault) |
256
+ | **Bitbucket DC/Server** (v2.30.0) | PRs, branches, builds, repo admin over REST + PAT. Merges and branch deletes land in the edit ledger. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#bitbucket-data-center--server) |
257
+ | **Jira** (v2.56.0) | Cloud (REST v3) and Data Center (REST v2) behind one tool: raw JQL, My Work board, transitions, comments, and an Activity view linking ledger work to issue keys. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#jira--cloud--data-center) |
258
+ | **Oracle Discovery API** (v2.32.0) | Expose cross-project code + memory intelligence as tools for an external LLM, over MCP (`:3332/mcp`) or OpenAPI REST (`:3331/api/discovery`). Read + safe-action tools only, Bearer token in the keyring. | [guide](https://github.com/drknowhow/code-context-control/blob/main/oracle-guide/discovery-api.md) |
259
+
260
+ All tokens live in the **OS keyring** (Windows Credential Manager, macOS Keychain, Linux Secret Service) — never in `.c3/config.json`. Each supports `login --global` so one login is reusable across every C3 project.
261
+
262
+ ---
263
+
264
+ ## Tiered local AI (optional)
265
+
266
+ Optional Ollama integration so the primary model doesn't spend context on grunt work:
267
+
268
+ | Tier | Model class | Used for | Latency target |
269
+ |---|---|---|---|
270
+ | **Nano** | `qwen2:0.5b` | Intent routing, classification | <100 ms |
271
+ | **Micro** | `deepseek-r1:1.5b` | Last-turn Q&A, summarization | <1 s |
272
+ | **Base** | `llama3.2:3b`+ | Code analysis, technical reasoning | <5 s |
273
+
274
+ ```text
275
+ c3_delegate(task="summarize this 4k-line stacktrace", backend="ollama")
276
+ c3_delegate(task="rate-limit refactor", backend="auto") # picks the right tier
277
+ ```
278
+
279
+ Ollama is fully optional. C3 works without it.
280
+
281
+ ---
282
+
283
+ ## Permissions (Claude Code)
284
+
285
+ C3 manages `.claude/settings.local.json` with three tiers:
286
+
287
+ | Tier | What it allows |
288
+ |---|---|
289
+ | `read-only` | Exploration only — no file writes, no git writes, no installs |
290
+ | `standard` | Normal dev workflow — edit, build, test, local git **(recommended)** |
291
+ | `permissive` | Full trust — everything except destructive ops |
292
+
293
+ ```bash
294
+ c3 permissions show
295
+ c3 permissions standard
296
+ ```
297
+
298
+ All tiers allow C3's MCP tools and include a hard deny list (`rm -rf`, `sudo`, `git push --force`). Switching a tier **preserves your own `allow`/`deny` rules** — only C3-managed entries are replaced. The same applies to `.mcp.json` and your hooks.
299
+
300
+ ---
301
+
302
+ ## Benchmarks
303
+
304
+ Every number C3 advertises is reproducible on your own machine, against your own project:
305
+
306
+ ```bash
307
+ c3 bench session # six realistic workflow scenarios, A/B with vs without C3
308
+ c3 benchmark /path/to/project # per-operation micro-benchmarks
309
+ c3 bench aider # Aider Polyglot suite (external; burns real API tokens)
310
+ c3 bench swe # SWE-bench Lite (external)
311
+ ```
312
+
313
+ The session benchmark's baseline models a *competent* agent working without C3 — one targeted search, each file read once — and scores answer quality alongside tokens. Runs against C3's own repository land around **~50% token savings (2×)** at quality parity — 51.8% at v2.43.0, 49.9% at v2.63.2, with C3 scoring 98.8% on answer quality against the baseline's 96.5% in both. File sampling is deterministic (largest files first, no RNG), so a given commit reproduces the same figure. Your numbers will differ with your project's shape; that's why the harness ships with the tool.
314
+
315
+ C3 also records real per-tool usage to `.c3/tool_telemetry.jsonl`, so estimates can be checked against what actually happened.
316
+
317
+ ---
318
+
319
+ ## Security & privacy
320
+
321
+ - **All web servers bind `127.0.0.1` by default** and are guarded against browser-based attacks even on loopback — a Host-header allowlist (defeats DNS rebinding) plus an Origin/Referer check on every request (defeats cross-origin CSRF), with scoped, non-wildcard CORS. There is still **no user authentication**, so do not expose these servers to an untrusted network without auth/TLS in front. Binding to a non-loopback interface is opt-in and warned at startup. *(Hardening added in v2.33.0.)*
322
+ - **No telemetry by default.** The OSS package collects nothing. Opt-in Sentry crash reporting requires the `[telemetry]` extra plus both `SENTRY_DSN` and `C3_TELEMETRY_OPT_IN=1`; even then request bodies, local variables, and prompts are stripped.
323
+ - **LLM memory distillation is local-first.** Cloud distillation (v2.51.0) is off by default and opt-in per project.
324
+ - **API keys** for third-party providers are read from the environment and never persisted by C3.
325
+ - Full hardening guide and disclosure policy: [`SECURITY.md`](https://github.com/drknowhow/code-context-control/blob/main/SECURITY.md)
326
+
327
+ ---
328
+
329
+ ## Support C3
330
+
331
+ C3 is free, open source, and built by one person. If it saves you tokens — that's the whole point — consider [sponsoring on GitHub](https://github.com/sponsors/drknowhow). Sponsorship funds API costs for cross-model test runs and dedicated development time.
332
+
333
+ ## License
334
+
335
+ Apache License 2.0 ([`LICENSE`](https://github.com/drknowhow/code-context-control/blob/main/LICENSE)) — free for any use, including commercial. Third-party deps: [`THIRD_PARTY_LICENSES.md`](https://github.com/drknowhow/code-context-control/blob/main/THIRD_PARTY_LICENSES.md).
336
+
337
+ The author may introduce a paid offering or relicense future major versions; no commitment either way. Releases already published under Apache-2.0 (including all 2.x versions) keep that grant irrevocably. Background: [`LICENSING.md`](https://github.com/drknowhow/code-context-control/blob/main/LICENSING.md).
338
+
339
+ ## Links
340
+
341
+ - **PyPI:** https://pypi.org/project/code-context-control/
342
+ - **Changelog:** [`CHANGELOG.md`](https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md)
343
+ - **Issues:** https://github.com/drknowhow/code-context-control/issues
344
+ - **Sponsor:** https://github.com/sponsors/drknowhow
@@ -1,6 +1,6 @@
1
1
  cli/__init__.py,sha256=ec66drCZGNMRU4V6ov0zVhYZph1us12Vn8OvG_LJyRY,22
2
2
  cli/_hook_utils.py,sha256=nDbcEKRwpcSltsh_SrZpH-z8ERrK_GRxHS2HHW2Bnmk,13465
3
- cli/c3.py,sha256=D650fTBteKMjORopcD-a5APee4yDFck680T9YLrN5ug,335378
3
+ cli/c3.py,sha256=O4BlX8aOH5BPqdbBtfykJJGSYQtLDQv6o77iwWPeRcE,335378
4
4
  cli/docs.html,sha256=bNymSz7LatnWHjxSXL92QSUtGvB3jBzNHbOV-bRpAOo,142507
5
5
  cli/edits.html,sha256=UjAhoCmBmQ89cklGvJqzC6eyNP2tc8H6T-e01DVkLvE,43418
6
6
  cli/hook_access_guard.py,sha256=4lJ1kibjC6MOVuiUrry5UUa90nMTWLWbpz9Z1MM7ZvM,4293
@@ -97,7 +97,7 @@ cli/ui/components/access.js,sha256=F_W4MPBYSkda0-4Z4POcTKqDng5L9qMPx6UKKJLFIwc,3
97
97
  cli/ui/components/bitbucket.js,sha256=vrJN_n4nHPbYuBz5LKfmDkwZr4FYPTEOsSWrUob0DCQ,14285
98
98
  cli/ui/components/chat.js,sha256=GpdDBI4DfpGhCGkDsJ-CmSsXtI1HWu78zCvnBP5G7Vo,34804
99
99
  cli/ui/components/credentials.js,sha256=6FGns3eM9YQiwaCFcGzLDTd4RLxZepMzqpvLw4iVxtI,17101
100
- cli/ui/components/dashboard.js,sha256=F7v9NGEnYTAmnUWa9qgE-VfkTMn1zuEZYsKZnMoq2-M,33656
100
+ cli/ui/components/dashboard.js,sha256=nIC0Gp9dg-QzvqFVRErKdgoWQo-xMyNpmxDC0dQjALY,33664
101
101
  cli/ui/components/edits.js,sha256=afMhmDFUH-D316vmDqxUwp5D6baEG0pDB58M7oLMRAs,10856
102
102
  cli/ui/components/instructions.js,sha256=Vyu1YBKUm5RCTfcdvNPqkPGO7ABRQMP4DzW7iHRYQ2k,19343
103
103
  cli/ui/components/jira.js,sha256=dCXkI5bTwroZMiK0RX3Hj8CWmZrlO2kCW7wDSIIjM-k,12875
@@ -106,7 +106,7 @@ cli/ui/components/sessions.js,sha256=FIKtil76B8tCkAmcFV7hlj6GQ_DCJK2jCzvEmdK7NBE
106
106
  cli/ui/components/settings.js,sha256=ATbAjBlVIwCNpxq7s191b49a_INQV38iwmySqtJLYwY,79066
107
107
  cli/ui/components/sidebar.js,sha256=K2ym2kUgpbyG-EBA_wBIIiqQY8qTatsiBZwzseMWuIQ,9939
108
108
  cli/ui/components/tasks.js,sha256=vyKQ3uwoppMwvdEaHlhWXW4oWcAisx4NveqzMhsYqHo,38438
109
- code_context_control-2.63.0.dist-info/licenses/LICENSE,sha256=l8Kh5QCNWNvR6kIt8L0BUZvc2LAFiHv2c-FnsGnUZf4,11301
109
+ code_context_control-2.63.2.dist-info/licenses/LICENSE,sha256=l8Kh5QCNWNvR6kIt8L0BUZvc2LAFiHv2c-FnsGnUZf4,11301
110
110
  core/__init__.py,sha256=TSDCEcM4V7gcZVM3w2ykJaqEUch4Dkon-rivV17T73s,2501
111
111
  core/config.py,sha256=YmkcZwedz_lfDM0ZuI_f4xpe98ixPLcSQFcTCHgRiRg,19206
112
112
  core/ide.py,sha256=V6VVMVsFdmmcsMyxikjQp7z9xa42CWiHKS-ya-MAcG4,6172
@@ -248,8 +248,8 @@ tui/screens/search_view.py,sha256=MMHjVdlk3HZSuDBSvq8IGrqv_Mh5Us6YqXQ80bcWSMk,19
248
248
  tui/screens/session_view.py,sha256=eZ1eDwHTvPOck1wCCviixtOaCxIkBT_95ytNNNriGNA,5991
249
249
  tui/screens/stats.py,sha256=p81PjzdaIv7hllb8f45-rlVe4lJZwSdIMqu7e86_u5s,6223
250
250
  tui/screens/ui_view.py,sha256=1QJCgLh2YfgWIpvzRG1KOGXYEaOYX6ojN61Azjf2oX0,2125
251
- code_context_control-2.63.0.dist-info/METADATA,sha256=iwVWssllkrPb8yZUcPE-_GRlU434tfvQyAi4S5T7Tpc,33656
252
- code_context_control-2.63.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
253
- code_context_control-2.63.0.dist-info/entry_points.txt,sha256=7kX_WUsDCF2hbXzvbNyscyaBb9AeA-DJY5v_5hN0DlU,93
254
- code_context_control-2.63.0.dist-info/top_level.txt,sha256=wRt41zBybVF3qAiNXHz9BURbkKvUvfhmWWtKMhaw6eE,29
255
- code_context_control-2.63.0.dist-info/RECORD,,
251
+ code_context_control-2.63.2.dist-info/METADATA,sha256=aQ4NEcQGKHmcDxqA_XbIkx_Qlbj00S32KunXSDGBZF0,21275
252
+ code_context_control-2.63.2.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
253
+ code_context_control-2.63.2.dist-info/entry_points.txt,sha256=7kX_WUsDCF2hbXzvbNyscyaBb9AeA-DJY5v_5hN0DlU,93
254
+ code_context_control-2.63.2.dist-info/top_level.txt,sha256=wRt41zBybVF3qAiNXHz9BURbkKvUvfhmWWtKMhaw6eE,29
255
+ code_context_control-2.63.2.dist-info/RECORD,,
@@ -1,604 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: code-context-control
3
- Version: 2.63.0
4
- Summary: Local code-intelligence layer for AI coding tools (Claude Code, Codex, Copilot, Cursor, Antigravity). Retrieve less, read less, edit safer — version the configs that shape your agent (CLAUDE.md, skills, hooks, MCP), and manage multi-project + sub-project hierarchies from a local hub.
5
- Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
6
- License-Expression: Apache-2.0
7
- Project-URL: Homepage, https://github.com/drknowhow/code-context-control
8
- Project-URL: Documentation, https://github.com/drknowhow/code-context-control#readme
9
- Project-URL: Repository, https://github.com/drknowhow/code-context-control
10
- Project-URL: Changelog, https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md
11
- Project-URL: Issues, https://github.com/drknowhow/code-context-control/issues
12
- Project-URL: Funding, https://github.com/sponsors/drknowhow
13
- Keywords: claude,claude-code,mcp,ai,code-intelligence,code-context,developer-tools,llm-tools
14
- Classifier: Development Status :: 4 - Beta
15
- Classifier: Intended Audience :: Developers
16
- Classifier: Operating System :: OS Independent
17
- Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.10
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: Topic :: Software Development :: Libraries :: Python Modules
24
- Requires-Python: >=3.10
25
- Description-Content-Type: text/markdown
26
- License-File: LICENSE
27
- Requires-Dist: tiktoken>=0.7.0
28
- Requires-Dist: fastmcp>=2.0.0
29
- Requires-Dist: watchdog>=4.0.0
30
- Requires-Dist: tree-sitter>=0.22.0
31
- Requires-Dist: tree-sitter-python>=0.21.0
32
- Requires-Dist: tree-sitter-javascript>=0.21.0
33
- Requires-Dist: tree-sitter-typescript>=0.21.0
34
- Requires-Dist: tree-sitter-html>=0.21.0
35
- Requires-Dist: tree-sitter-markdown>=0.3.2
36
- Requires-Dist: tree-sitter-css>=0.21.0
37
- Requires-Dist: tree-sitter-go>=0.21.0
38
- Requires-Dist: tree-sitter-rust>=0.21.0
39
- Requires-Dist: tree-sitter-json>=0.21.0
40
- Requires-Dist: tree-sitter-yaml>=0.6.0
41
- Requires-Dist: flask>=3.0.0
42
- Requires-Dist: rich>=13.0.0
43
- Requires-Dist: click>=8.0.0
44
- Requires-Dist: pyyaml>=6.0.0
45
- Requires-Dist: keyring>=24.0
46
- Provides-Extra: vector
47
- Requires-Dist: scikit-learn>=1.3.0; extra == "vector"
48
- Requires-Dist: numpy>=1.24.0; extra == "vector"
49
- Requires-Dist: chromadb>=0.4.24; extra == "vector"
50
- Provides-Extra: tui
51
- Requires-Dist: textual>=0.50.0; extra == "tui"
52
- Provides-Extra: telemetry
53
- Requires-Dist: sentry-sdk>=2.0.0; extra == "telemetry"
54
- Provides-Extra: dev
55
- Requires-Dist: pytest>=7.0.0; extra == "dev"
56
- Requires-Dist: pyright>=1.1.350; extra == "dev"
57
- Requires-Dist: ruff>=0.6.0; extra == "dev"
58
- Requires-Dist: build>=1.0.0; extra == "dev"
59
- Requires-Dist: twine>=5.0.0; extra == "dev"
60
- Requires-Dist: numpy>=1.24.0; extra == "dev"
61
- Requires-Dist: scikit-learn>=1.3.0; extra == "dev"
62
- Dynamic: license-file
63
-
64
- <h1 align="center">Code Context Control</h1>
65
-
66
- <p align="center">
67
- <strong>The local code-intelligence layer for AI coding tools.</strong><br>
68
- Stop burning tokens on whole-file reads, blind greps, and unbounded log dumps.<br>
69
- Works with Claude Code, Codex, Copilot, Cursor, and Antigravity.
70
- </p>
71
-
72
- <p align="center">
73
- <a href="https://pypi.org/project/code-context-control/"><img alt="PyPI" src="https://img.shields.io/pypi/v/code-context-control?color=blue&logo=pypi&logoColor=white"></a>
74
- <a href="LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg"></a>
75
- <img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
76
- <img alt="Platforms" src="https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey">
77
- <img alt="Status: Beta" src="https://img.shields.io/badge/status-beta-yellow">
78
- <a href="https://github.com/sponsors/drknowhow"><img alt="Sponsor" src="https://img.shields.io/badge/sponsor-%E2%9D%A4-EA4AAA?logo=githubsponsors&logoColor=white"></a>
79
- </p>
80
-
81
- <p align="center">
82
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/ui_dashboard.png" alt="C3 per-project dashboard" width="900">
83
- </p>
84
-
85
- ---
86
-
87
- ## The problem
88
-
89
- LLM-driven coding tools have one expensive failure mode: **they read too much.** They `cat` whole files, regex the entire repo, dump 10k-line logs into context, edit-and-pray, and burn through budget before they touch a single line of code. On a half-day session you can spend $20+ on token waste that adds zero value.
90
-
91
- ## What C3 does about it
92
-
93
- A thin **local** layer that sits between your IDE and your repo. Every AI tool call gets routed through narrow, surgical operations instead of broad, wasteful ones:
94
-
95
- | Without C3 | With C3 |
96
- |---|---|
97
- | `Read` the whole 2,000-line file | `c3_compress` returns a structural map at 40-70% of the original token count (30-60% smaller) → `c3_read(symbols=...)` for the exact function |
98
- | `Grep` the whole repo blindly | `c3_search` returns ranked candidates with TF-IDF + symbol awareness |
99
- | Dump full `pytest` output into the prompt | `c3_filter` distills 500 lines → 30 actionable ones |
100
- | Edit, hope it compiled | `c3_edit` writes via a ledger + `c3_validate` runs `pyright`/`tsc` automatically |
101
- | `Bash` test runs that hang on Windows | `c3_shell` returns structured `{exit_code, stdout, stderr, duration}` with auto-filter |
102
- | Lose all context on `/clear` | `c3_session(snapshot)` + `c3_memory` persist decisions across sessions |
103
- | Re-explain the project every session | Auto-synced `CLAUDE.md` / `AGENTS.md` / `copilot-instructions.md` from a single source of truth |
104
-
105
- Everything runs **locally**. No source code, prompts, or model output ever leaves your machine unless you explicitly opt into a third-party model API.
106
-
107
- ---
108
-
109
- ## Install
110
-
111
- Requires Python 3.10+. No clone needed — C3 is published on PyPI.
112
-
113
- The recommended install is [pipx](https://pipx.pypa.io) (isolated environment, on your PATH):
114
-
115
- ```bash
116
- pipx install code-context-control
117
- c3 init /path/to/your/project
118
- ```
119
-
120
- Or with pip:
121
-
122
- ```bash
123
- pip install "code-context-control[tui]" # [tui] adds the optional Textual UI
124
- c3 init /path/to/your/project
125
- ```
126
-
127
- Running `c3` with no arguments opens the interactive TUI. `c3 init` walks you through:
128
- 1. **IDE selection** (Claude Code CLI/App, Codex CLI, VS Code, Cursor, Antigravity, or Custom — the Gemini CLI profile was removed in v2.52; use Antigravity, which reads AGENTS.md)
129
- 2. Optional local `git init`
130
- 3. MCP server registration (auto-wired into your IDE)
131
- 4. (Claude Code only) Permission tier selection
132
-
133
- Headless / scripted install:
134
-
135
- ```bash
136
- c3 init /path/to/project --force --ide claude --mcp-mode direct --permissions standard
137
- ```
138
-
139
- ### Upgrading
140
-
141
- ```bash
142
- c3 upgrade # upgrade the running install in place
143
- c3 upgrade --check # just report whether a newer release exists
144
- # equivalently:
145
- pipx upgrade code-context-control
146
- pip install -U code-context-control
147
- ```
148
-
149
- MCP is wired through the `c3-mcp` entry point, so upgrading needs **no per-project
150
- reconfiguration** — your existing `.mcp.json` files keep working. C3 also nudges you
151
- in-app when a newer release is available.
152
-
153
- ### From source (contributors)
154
-
155
- ```bash
156
- git clone https://github.com/drknowhow/code-context-control.git
157
- cd code-context-control
158
- pip install -e ".[dev]" # editable dev install: tests, linters, build tools
159
- ```
160
-
161
- ---
162
-
163
- ## A tour of the UI
164
-
165
- C3 ships with two web UIs (no electron, no install — pure Flask + vanilla JS):
166
-
167
- - **The Hub** (`c3-hub`, port 3330) — manage all your C3 projects from one dashboard.
168
- - **The per-project UI** (`c3 ui`, per-project port) — deep dive into one project's session, memory, edits, instructions, and settings.
169
-
170
- ### 1. Project Hub — multi-project mission control
171
-
172
- <p align="center">
173
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/hub_projects.png" alt="C3 Project Hub - all projects" width="900">
174
- </p>
175
-
176
- Every C3-initialized project on your machine appears here automatically — `c3 init` registers the project with the hub on first run, no extra step. Group them by tag, filter by active/idle, see which IDE each project uses, jump straight into your IDE with one click, and monitor session activity at a glance. Each project card shows live status, version, MCP wiring mode, port, and last activity.
177
-
178
- Per-card actions cover the full lifecycle: launch the IDE, open the per-project UI, edit name / tags / notes, transfer the registration to a new path, **merge** another project's memory + conversation history + edit ledger into this one (with optional source cleanup), or remove it from the registry.
179
-
180
- **Sub-projects — nested repos as first-class children.** Designate any sub-folder (a service in a monorepo, a vendored tool) as a linked child project with its own `.c3`: the parent's index excludes the child's subtree, and `c3_search` / `c3_memory` fan out across children on demand (`scope='all'` or one child by name). The whole hierarchy is manageable from the hub:
181
-
182
- - **Designate** from any project card or the drill-in **Sub-projects** tab — folder picker with upfront validation, adopt-vs-initialize preview, and IDE choice. An existing top-level project that physically sits inside a parent can be re-linked via **"Make sub-project of…"**.
183
- - **Link health is passive** — parent cards show a red "N link issues" badge and children show their link status automatically; **Reconcile** shows exactly what's broken and repairs it on confirm.
184
- - **Cascade** update / reindex / health across all children (cancellable, optionally including the parent), **promote** a child back to top-level, or **de-initialize** it entirely behind a typed-name confirm.
185
- - **Change parent…** moves a child between parents honestly: folders must physically nest, so the wizard stages the move, validates every step, and never leaves a broken state silently.
186
- - Federation behavior per parent — memory roll-up, search fan-out, children per query — is editable in the project's config editor.
187
-
188
- **Open in your IDE of choice** — C3 auto-detects which CLIs you have installed and gives you one-click launchers:
189
-
190
- <p align="center">
191
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/hub_ide_config.png" alt="C3 Hub IDE picker" width="700">
192
- </p>
193
-
194
- Hub runs as a **background Windows service** if you want it to (no terminal, auto-starts on login):
195
-
196
- <p align="center">
197
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/hub_settings.png" alt="C3 Hub settings" width="700">
198
- </p>
199
-
200
- ### 2. Per-project dashboard — at-a-glance health
201
-
202
- ```bash
203
- c3 ui # opens http://127.0.0.1:3333
204
- ```
205
-
206
- <p align="center">
207
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/ui_dashboard.png" alt="C3 per-project dashboard" width="900">
208
- </p>
209
-
210
- Illustrative example from one project's dashboard (numbers vary by project): **448K tokens saved** (89.9% rate) — C3's estimate versus a full-file-read baseline — plus 208 files indexed, 20 sessions, codebase breakdown by language, current-session live counters (in/out tokens, cache reads, services online), and a stream of recent tool calls and file changes. Run `c3 bench session` on your own project to generate your own scorecard.
211
-
212
- ### 3. Edit Ledger — every AI-driven edit tracked
213
-
214
- <p align="center">
215
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/ui_edits.png" alt="C3 Edit Ledger" width="900">
216
- </p>
217
-
218
- A complete audit trail of every file change made via `c3_edit` (or via Bash git commands intercepted by the C3 shell). Each entry shows timestamp, file, version number, change summary, and +/- line counts. Filter by file path, switch to **Stats** view for aggregate trends. Backed by a content-addressable store so any prior version is one click away.
219
-
220
- ### 4. Memory — durable knowledge across sessions
221
-
222
- <p align="center">
223
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/ui_memory.png" alt="C3 Memory" width="900">
224
- </p>
225
-
226
- A categorized store of facts the AI has learned about your project (architecture decisions, conventions, gotchas, references). Categories, full-text + semantic search, decision tracking, list ↔ graph toggle, and one-click Markdown export. Backed by TF-IDF + optional Ollama embeddings + `chromadb` (when the `[vector]` extra is installed).
227
-
228
- ### 5. Sessions — history, decisions, costs
229
-
230
- <p align="center">
231
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/ui_sessions.png" alt="C3 Sessions" width="900">
232
- </p>
233
-
234
- Every session you've ever run, with duration, decision count, file count, tool calls, token usage, and cost. Captured automatically via the IDE's Stop hook — nothing to remember to click. Click any row to see the full task list, decisions, and file diffs from that session.
235
-
236
- ### 6. Instructions — sync your project context across IDEs
237
-
238
- <p align="center">
239
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/ui_instructions.png" alt="C3 Instructions" width="900">
240
- </p>
241
-
242
- Manage `CLAUDE.md`, `AGENTS.md` (Codex), `GEMINI.md`, and `.github/copilot-instructions.md` from one editor. Generate from project state, run a Health Check (drift detection vs the actual codebase), Compact stale sections, or Promote insights captured during sessions. **One source of truth** instead of four out-of-sync files.
243
-
244
- C3-generated content is wrapped in a `<!-- C3:BEGIN … -->` / `<!-- C3:END -->` block. Regenerating (or `Compact`) only rewrites that block — **anything you write outside it is preserved**, so it's safe to keep your own notes in the same file.
245
-
246
- **Live repo map (v2.60.0):** generated docs no longer embed a frozen project tree. They carry a stable pointer to `.c3/MAP.md` — a machine-owned, byte-stable map (commands, entry points, module one-liners, tree) that C3 refreshes automatically via edit hooks and a first-tool-call freshness check. Manage it with `c3 map status|ensure|refresh`; set `map.enabled=false` in `.c3/config.json` to restore the embedded tree.
247
-
248
- ### 7. Chat — browse prior AI conversations
249
-
250
- <p align="center">
251
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/ui_chat.png" alt="C3 Chat" width="900">
252
- </p>
253
-
254
- C3 syncs and indexes your IDE's chat transcripts (currently Claude Code; others coming). Filter by source, search, click a row to view the full conversation. Useful for "wait, what did we decide about X last week?".
255
-
256
- ### 8. Settings — feature flags + integrations
257
-
258
- <p align="center">
259
- <img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/ui_settings.png" alt="C3 Settings" width="900">
260
- </p>
261
-
262
- Per-project knobs for everything: budget thresholds, feature flag mode, edit ledger, background agents, delegate routing, Codex/Gemini integrations, agent workflows, proxy mode, MCP servers, Claude Code permission tier, and more.
263
-
264
- ---
265
-
266
- ## The MCP tool suite
267
-
268
- C3 exposes 18 tools as a native MCP server. Your IDE calls them directly:
269
-
270
- | Tool | What it does |
271
- |---|---|
272
- | `c3_search` | TF-IDF / regex / semantic search ranked across the indexed repo |
273
- | `c3_compress` | AST-based file map (modes: `map`, `dense_map`, `smart`, `diff`, `bug_scan`, `ast`) |
274
- | `c3_read` | Surgical reads — by symbol name, regex, or line ranges |
275
- | `c3_edit` | Atomic patch with automatic ledger logging + content-addressable history |
276
- | `c3_validate` | Type / syntax check (pyright, tsc, ruff, etc. — auto-detected) |
277
- | `c3_filter` | Distill long terminal/log output via pattern + LLM summarization |
278
- | `c3_shell` | Run shell commands with structured returns + auto-filtered stdout |
279
- | `c3_status` | Project health, token budget, notifications, ghost-file detection |
280
- | `c3_memory` | Persistent fact store with categories, recall, and graph queries |
281
- | `c3_session` | Snapshot, restore, log decisions, compact session history |
282
- | `c3_impact` | Blast-radius analysis before edits to shared symbols |
283
- | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini / etc. |
284
- | `c3_agent` | Multi-step agentic workflows (review, investigate, refactor) |
285
- | `c3_edits` | Edit-ledger queries + version diffs + restore points + per-branch filter |
286
- | `c3_bitbucket` | Bitbucket Data Center integration — PRs, branches, builds, repo admin (v2.30.0) |
287
- | `c3_jira` | Jira integration — Cloud + Data Center: JQL search, issues, transitions, My Work board (v2.56.0) |
288
- | `c3_credentials` | Credential vault — named secrets (global + per-project), injection-first: agents use them by name, values never enter model context (v2.58.0) |
289
- | `c3_project` | Cross-project — discover & operate on other c3-installed projects; guarded writes (v2.31.0) |
290
- | `c3_task` | Durable per-project PM — tasks with dependencies & subtasks, milestones, decision notes, event history, health reports, and auto+manual time tracking (v2.53.0) |
291
- | `c3_artifacts` | Agent-config tracking — version history, diff & restore for CLAUDE.md, settings/hooks, MCP configs, skills (v2.46.0) |
292
-
293
- On Windows, `c3_shell` uses Git Bash when available. Git Bash does not bundle
294
- optional utilities such as `jq`; use `python -m json.tool` for portable JSON
295
- formatting, or install `jq` separately when filter expressions are required.
296
-
297
- Every tool is **read-only safe in plan mode** (except `c3_edit`, `c3_shell`, `c3_artifacts(action='restore')`, and write actions on `c3_bitbucket` / `c3_jira` / `c3_credentials` / `c3_project` / `c3_task`).
298
-
299
- ### Bitbucket Data Center / Server (v2.30.0)
300
-
301
- `c3_bitbucket` connects to self-hosted enterprise Bitbucket via REST + Personal
302
- Access Token. Tokens live in the **OS keyring** (Windows Credential Manager,
303
- macOS Keychain, Linux Secret Service) — never in `.c3/config.json`.
304
-
305
- ```bash
306
- # One-time login per server (stored under this project's .c3/config.json)
307
- c3 bitbucket login --url https://bitbucket.example.com
308
- # -> prompts for username + PAT (masked)
309
-
310
- # ...or store it globally so every C3 project can use it
311
- c3 bitbucket login --global --url https://bitbucket.example.com
312
-
313
- # Pin defaults so subsequent calls don't need project/repo
314
- c3 bitbucket set-default --project PROJ --repo my-service
315
-
316
- # Inspect status
317
- c3 bitbucket status
318
- ```
319
-
320
- **Account resolution precedence:** the project's `.c3/config.json` wins, but when
321
- it has no active account C3 falls back to the global `~/.c3/config.json`. So a
322
- single `login --global` (or any login done from your home directory) is reusable
323
- across every C3 project — the PAT always lives in the OS keyring, never on disk.
324
-
325
- ### Credential vault (v2.58.0)
326
-
327
- `c3_credentials` gives agents a protected, user-managed place for API keys,
328
- tokens, and `.env`-style values — **global** (`~/.c3`, every project) or
329
- **per-project** (`.c3`, shadows the global name). Values live in the **OS
330
- keyring** (large values in a Fernet-encrypted `.c3/secrets.enc` whose master
331
- key lives in the keyring) — never in config files, and *never in the model's
332
- context*: the agent addresses secrets by name and C3 decodes them only at the
333
- subprocess boundary.
334
-
335
- ```bash
336
- # Store a secret for this project (value prompted, masked)
337
- c3 creds set OPENAI_KEY --desc "OpenAI billing key"
338
-
339
- # ...or globally for every C3 project
340
- c3 creds set NPM_TOKEN --global
341
-
342
- # Bulk-import an existing .env; list what the agent can see
343
- c3 creds import .env
344
- c3 creds list
345
- ```
346
-
347
- The agent then runs commands *with* the secret but without ever seeing it:
348
-
349
- ```
350
- c3_shell(cmd='npm publish', env_creds='NPM_TOKEN') # injected as env var
351
- c3_shell(cmd='curl -H "Authorization: Bearer {{cred:OPENAI_KEY}}" …') # expanded server-side
352
- ```
353
-
354
- Echoed values are auto-redacted from output (`env` dumps come back as
355
- `[cred:NAME]`), every use is ledger-logged by name, and `reveal` — the only
356
- action that returns a value — is disabled per entry until you flip
357
- `agent_readable` in the **Credentials UI tab** or via
358
- `c3 creds set NAME --agent-readable`. A hostile repo config can't siphon your
359
- global secrets (realm-atomic resolution, tested), cross-project shells run
360
- with credentials disabled, and the vault is hard-excluded from the Oracle
361
- Discovery API.
362
-
363
- Since **v2.59.0** the Hub has a top-level **Credentials** view: manage the
364
- global vault (`~/.c3`) and every registered project's entries from one place,
365
- with overriding shown both ways ("overrides global" on project entries,
366
- "overridden ×N" on globals). **v2.61.0** makes it navigable at scale:
367
-
368
- - **Cross-project search** — <kbd>/</kbd> or <kbd>Ctrl/⌘-K</kbd>. Free words
369
- match name / description / env var / project; `project:` `scope:` `type:`
370
- `storage:` `name:` `env:` `inject:` `agent:` `shadow:` qualifiers narrow
371
- further. Results are **grouped by credential name**, so "where is
372
- `STRIPE_KEY` defined and which one wins?" is one glance instead of forty
373
- accordions. `agent:true` and `inject:true` are one-key exposure audits.
374
- - **Per-credential settings drawer** — metadata, the two exposure switches
375
- with their blast radius written out, an on-demand resolution check +
376
- fingerprint, write-only value replacement, usage and override
377
- relationships, and a separated danger zone.
378
- - **Right-click context menu** on any row (also `⋯` and <kbd>Shift</kbd>+<kbd>F10</kbd>),
379
- with typed confirmations replacing `window.confirm`: deleting or granting
380
- agent-read access requires typing the credential's name.
381
-
382
- The write-only wire contract extends to the hub: values are submitted
383
- inbound-only, **no hub route ever returns a stored value** (there is no
384
- `reveal` on the hub at all), and search indexes metadata only.
385
-
386
- Full documentation: [`cli/guide/credentials.html`](cli/guide/credentials.html)
387
- — open it in the app at `/guide/credentials.html`.
388
-
389
- ### Access Guard (v2.62.0)
390
-
391
- The Credential Vault protects *values*; **Access Guard** protects *files and
392
- folders*. Two glob lists in your config mark what an agent must never read
393
- (`deny`) or never write (`read_only`), and one shared evaluator enforces them
394
- at every C3 surface — the MCP tools (`c3_read`/`c3_edit`/`c3_search`/…, so
395
- any agent using C3 is covered), Claude Code's native tools via PreToolUse
396
- hooks (fail-closed: a broken guard denies writes instead of waving them
397
- through), and `c3_shell` via a best-effort command scan.
398
-
399
- ```bash
400
- c3 access add "secrets/**" --kind deny # never read, never write
401
- c3 access add "migrations/**" --kind read_only
402
- c3 access check secrets/key.txt # probe: verdict + matched rule
403
- ```
404
-
405
- - **Tighten-only.** No allow list exists; scopes (global `~/.c3` + project
406
- `.c3`) merge as a union. A cloned repo's config can only add protection,
407
- never grant itself access.
408
- - **`deny` means deny-create and deny-enumerate** too: alternate spellings
409
- are canonicalized before matching, and denied paths never appear in search
410
- results, maps, or the vector index.
411
- - **Refusals teach the agent to stop.** Every denial carries a stable
412
- `[c3-access:*]` tag, the matched rule and scope, and explicit
413
- do-not-retry guidance — no retry loops, no "file must not exist, let me
414
- recreate it".
415
- - **All rule changes are human-only** (Access Guard UI tab or `c3 access`
416
- CLI), ledger-logged; agents have no mutation surface.
417
- - **Built-ins always on:** `.env*` files, the credential vault's sidecars,
418
- and write-denies on `.c3/`, `.claude/settings*.json`, `.git/`, and the
419
- installed C3 package itself.
420
- - **Honest coverage:** this guards *cooperative* agents against mistakes and
421
- prompt-injection. It is not a sandbox — raw shell or direct file access
422
- outside C3's tools and hooks is not stopped. The guide states exactly
423
- where each layer holds.
424
-
425
- Full documentation: [`cli/guide/access.html`](cli/guide/access.html)
426
- — open it in the app at `/guide/access.html`.
427
-
428
- ### Jira — Cloud + Data Center (v2.56.0)
429
-
430
- `c3_jira` connects to Jira Cloud (REST v3, email + API token) or self-hosted
431
- Jira Data Center / Server (REST v2, PAT) behind one tool. Tokens live in the
432
- **OS keyring** — never in `.c3/config.json`.
433
-
434
- ```bash
435
- # One-time login — Cloud is inferred for *.atlassian.net
436
- c3 jira login --url https://yoursite.atlassian.net
437
- # -> prompts for email + API token (masked)
438
-
439
- # Self-hosted Data Center / Server
440
- c3 jira login --url https://jira.example.com --deployment data_center
441
-
442
- # ...or store it globally so every C3 project can use it
443
- c3 jira login --global --url https://yoursite.atlassian.net
444
-
445
- # Pin a default project; check connectivity
446
- c3 jira set-default --project PROJ
447
- c3 jira status
448
- ```
449
-
450
- The agent gets `c3_jira`: raw-JQL `search`, `my_issues`, issue reads, and
451
- ledger-logged mutations (`create_issue` is pre-validated against create
452
- metadata and returns machine-readable missing required fields; `transition`
453
- accepts an id or a name). The web UI gains a **Jira tab** — a My Work board
454
- grouped by status category, JQL search, an issue drawer with transitions and
455
- comments, and an Activity view that links edit-ledger work to issue keys
456
- (`PROJ-123` detected in branch names and edit summaries; works even before
457
- login). Named accounts support multiple sites (`--name work`, `--name
458
- internal`); the registry resolves project → home **wholesale from one file**,
459
- so a repository's config can never override the credential-bound server URL
460
- or TLS settings of a globally registered account.
461
-
462
- > **Upgrading:** stop the running `c3-mcp` server / CLI before `c3 upgrade`. A live
463
- > process can hold package files open, leaving pip's `~`-prefixed backup dirs
464
- > (`~ervices`, `~ools`, …) in `site-packages`; those are inert and safe to delete
465
- > after the upgrade completes.
466
-
467
- The MCP tool dispatches by `action`. Read-only actions: `status`, `whoami`,
468
- `list_projects`, `list_repos`, `get_repo`, `list_prs`, `get_pr`, `get_pr_diff`,
469
- `get_pr_activities`, `list_branches`, `list_commits`, `list_activity`,
470
- `build_status`, `repo_settings`, `list_webhooks`, `list_permissions`. Write
471
- actions: `create_pr`, `comment_pr`, `approve_pr`, `unapprove_pr`, `decline_pr`,
472
- `merge_pr`, `create_branch`, `delete_branch`, `update_repo_settings`,
473
- `create_webhook`, `delete_webhook`. PR merges and branch deletes are recorded
474
- to the C3 edit ledger so the audit trail covers platform-side changes too.
475
-
476
- The **Hub UI** (per-project) gains a "Bitbucket" tab with sub-views for
477
- Overview / Pull Requests / Branches / Activity / Admin.
478
-
479
- ### Oracle Discovery API (v2.32.0)
480
-
481
- The **Oracle** is C3's optional cross-project memory agent (a local web app). As of
482
- v2.32.0 it can expose C3's cross-project code & memory intelligence as **tools for an
483
- external LLM** — point Claude (or any function-calling model) at a running Oracle and
484
- it can discover your projects and search code, memory, and the cross-project graph
485
- across all of them.
486
-
487
- Two transports share one tool core:
488
-
489
- - **MCP** (streamable HTTP/SSE) at `http://127.0.0.1:3332/mcp` — native for Claude
490
- Code / Claude Desktop / any MCP client.
491
- - **OpenAPI REST** at `http://127.0.0.1:3331/api/discovery` — for any LLM with
492
- function-calling (fetch `/openapi.json` to auto-register the tools).
493
-
494
- ```bash
495
- # Start the Oracle (serves the REST + MCP discovery endpoints)
496
- python oracle/oracle_server.py --no-browser
497
-
498
- # Print the Bearer token + a ready-to-paste .mcp.json snippet
499
- c3 oracle api info
500
- ```
501
-
502
- Only **read** and **safe-action** tools are exposed (no code editing); requests need a
503
- **Bearer token** (stored in the OS keyring) and both servers bind `127.0.0.1` by
504
- default. Generate, rotate, and copy the token from the dashboard's **Settings →
505
- Discovery API** tab. See the [Oracle Discovery API guide](oracle-guide/discovery-api.md).
506
-
507
- As of v2.38.0 the Oracle also reports a **cross-project activity digest** — sessions,
508
- tool calls, edits, git mutations, and token/cost for a day — via the `activity_report`
509
- discovery tool, the `GET /api/activity/digest` endpoint, and the dashboard's **Activity** tab.
510
-
511
- ---
512
-
513
- ## Tiered local AI (optional)
514
-
515
- C3 ships with optional Ollama integration so the primary model doesn't have to waste context on grunt work:
516
-
517
- | Tier | Model class | Used for | Latency target |
518
- |---|---|---|---|
519
- | **Nano** | `qwen2:0.5b` | Intent routing, classification | <100 ms |
520
- | **Micro** | `deepseek-r1:1.5b` | Last-turn Q&A, summarization | <1 s |
521
- | **Base** | `llama3.2:3b`+ | Code analysis, technical reasoning | <5 s |
522
-
523
- ```text
524
- c3_delegate(task="summarize this 4k-line stacktrace", backend="ollama")
525
- c3_delegate(task="rate-limit refactor", backend="auto") # picks the right tier
526
- ```
527
-
528
- Ollama is **fully optional**. C3 works without it.
529
-
530
- ---
531
-
532
- ## Permissions (Claude Code)
533
-
534
- C3 manages `.claude/settings.local.json` for you, with three sensible tiers:
535
-
536
- | Tier | What it allows |
537
- |---|---|
538
- | `read-only` | Exploration only — no file writes, no git writes, no installs |
539
- | `standard` | Normal dev workflow — edit, build, test, local git **(recommended)** |
540
- | `permissive` | Full trust — everything except destructive ops |
541
-
542
- All tiers always allow C3 MCP tools and include a hard deny list (`rm -rf`, `sudo`, `git push --force`, etc.).
543
-
544
- ```bash
545
- c3 permissions show
546
- c3 permissions standard
547
- ```
548
-
549
- Applying or switching a tier **preserves your own `allow`/`deny` rules** (and keys like `ask`/`defaultMode`) — only C3-managed entries are replaced. Likewise, C3 never clobbers your other entries in `.mcp.json` (only its own `c3` server) or the hooks you've added to `settings.local.json` (only its own hooks).
550
-
551
- ---
552
-
553
- ## Benchmarks
554
-
555
- Don't take our word for it — every number C3 advertises is reproducible on your own machine, against your own project:
556
-
557
- ```bash
558
- c3 bench session # six realistic workflow scenarios, A/B with vs without C3
559
- c3 benchmark /path/to/project # per-operation micro-benchmarks (compression, retrieval, filtering, validation)
560
- c3 bench aider # Aider Polyglot suite (external; burns real API tokens)
561
- c3 bench swe # SWE-bench Lite (external)
562
- ```
563
-
564
- The session benchmark's baseline models a *competent* agent working without C3 — one targeted search, each file read once — not a strawman that re-reads everything, and it scores answer quality alongside tokens. For reference, a run against C3's own repository (v2.43.0, 2026-07-02) measured **51.8% token savings (2.07×)** across the six scenarios at quality parity. Your numbers will differ with your project's shape — that's why the harness ships with the tool.
565
-
566
- Beyond synthetic scenarios, C3 records real per-tool usage to `.c3/tool_telemetry.jsonl`, so estimated savings can always be checked against what actually happened in your sessions.
567
-
568
- Reports include token deltas, cost deltas, win rates, tool-usage analysis, and per-task breakdowns. See the **Benchmark Dashboard** under Settings → Background Agents in the Hub.
569
-
570
- ---
571
-
572
- ## Security & privacy
573
-
574
- - **All web servers (Hub, per-project UI, Oracle) bind to `127.0.0.1` by default and are guarded against browser-based attacks even on loopback** — a Host-header allowlist (defeats DNS rebinding) plus an Origin/Referer check on every request (defeats cross-origin CSRF), with scoped, non-wildcard CORS. A malicious web page you visit therefore cannot drive C3's local endpoints. There is still **no user authentication**, so do not expose these servers to an untrusted network without auth/TLS in front. Binding to a non-loopback interface in `~/.c3/hub_config.json` (`host`) or Oracle's config (`bind_host`) is opt-in and warned at startup; add externally-facing hostnames/IPs to an `allowed_hosts` list there so the guard permits them. _(Cross-origin/CSRF + DNS-rebinding hardening added in v2.33.0.)_
575
- - **No telemetry by default.** The OSS package collects nothing. Opt-in Sentry crash reporting requires the `[telemetry]` extra plus both `SENTRY_DSN` and `C3_TELEMETRY_OPT_IN=1`. Even when enabled, request bodies, local variables, and prompts are stripped before sending.
576
- - **API keys** for third-party model providers are read from environment variables and never persisted by C3.
577
- - See [`SECURITY.md`](SECURITY.md) for the full hardening guide and disclosure policy.
578
-
579
- ---
580
-
581
- ## Support C3
582
-
583
- C3 is free, open source, and built by one person. If it saves you tokens (it should — that's the whole point), consider [sponsoring on GitHub](https://github.com/sponsors/drknowhow). Sponsorship directly funds API costs for cross-model test runs and dedicated development time.
584
-
585
- ---
586
-
587
- ## License
588
-
589
- - **Current OSS license** — Apache License 2.0 ([`LICENSE`](LICENSE)). Free for any use, including commercial. Modify, fork, redistribute — all permitted under Apache-2.0 terms.
590
- - **Third-party deps** — see [`THIRD_PARTY_LICENSES.md`](THIRD_PARTY_LICENSES.md).
591
-
592
- The author may introduce a paid offering or relicense future major versions; no commitment either way. Releases already published under Apache-2.0 (including all 2.x versions) keep their Apache-2.0 grant — that grant is irrevocable. Background and FAQ in [`LICENSING.md`](LICENSING.md). No warranty or support obligation; see LICENSE Sections 7–8.
593
-
594
- ---
595
-
596
- ## Links
597
-
598
- - **PyPI:** https://pypi.org/project/code-context-control/
599
- - **Changelog:** [`CHANGELOG.md`](CHANGELOG.md)
600
- - **Oracle Discovery API:** [`oracle-guide/discovery-api.md`](oracle-guide/discovery-api.md)
601
- - **Security policy:** [`SECURITY.md`](SECURITY.md)
602
- - **Licensing FAQ:** [`LICENSING.md`](LICENSING.md)
603
- - **Issues:** https://github.com/drknowhow/code-context-control/issues
604
- - **Sponsor:** https://github.com/sponsors/drknowhow