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 +1 -1
- cli/ui/components/dashboard.js +2 -2
- code_context_control-2.63.2.dist-info/METADATA +344 -0
- {code_context_control-2.63.0.dist-info → code_context_control-2.63.2.dist-info}/RECORD +8 -8
- code_context_control-2.63.0.dist-info/METADATA +0 -604
- {code_context_control-2.63.0.dist-info → code_context_control-2.63.2.dist-info}/WHEEL +0 -0
- {code_context_control-2.63.0.dist-info → code_context_control-2.63.2.dist-info}/entry_points.txt +0 -0
- {code_context_control-2.63.0.dist-info → code_context_control-2.63.2.dist-info}/licenses/LICENSE +0 -0
- {code_context_control-2.63.0.dist-info → code_context_control-2.63.2.dist-info}/top_level.txt +0 -0
cli/c3.py
CHANGED
cli/ui/components/dashboard.js
CHANGED
|
@@ -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=
|
|
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=
|
|
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.
|
|
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.
|
|
252
|
-
code_context_control-2.63.
|
|
253
|
-
code_context_control-2.63.
|
|
254
|
-
code_context_control-2.63.
|
|
255
|
-
code_context_control-2.63.
|
|
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
|
|
File without changes
|
{code_context_control-2.63.0.dist-info → code_context_control-2.63.2.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{code_context_control-2.63.0.dist-info → code_context_control-2.63.2.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{code_context_control-2.63.0.dist-info → code_context_control-2.63.2.dist-info}/top_level.txt
RENAMED
|
File without changes
|