@kaitranntt/ccs 7.65.3 → 7.66.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -750
- package/dist/api/services/profile-lifecycle-service.d.ts.map +1 -1
- package/dist/api/services/profile-lifecycle-service.js +4 -0
- package/dist/api/services/profile-lifecycle-service.js.map +1 -1
- package/dist/api/services/profile-writer.d.ts.map +1 -1
- package/dist/api/services/profile-writer.js +3 -0
- package/dist/api/services/profile-writer.js.map +1 -1
- package/dist/auth/auth-commands.d.ts +1 -0
- package/dist/auth/auth-commands.d.ts.map +1 -1
- package/dist/auth/auth-commands.js +11 -0
- package/dist/auth/auth-commands.js.map +1 -1
- package/dist/auth/commands/backup-command.d.ts +3 -0
- package/dist/auth/commands/backup-command.d.ts.map +1 -0
- package/dist/auth/commands/backup-command.js +126 -0
- package/dist/auth/commands/backup-command.js.map +1 -0
- package/dist/auth/commands/index.d.ts +1 -0
- package/dist/auth/commands/index.d.ts.map +1 -1
- package/dist/auth/commands/index.js +3 -1
- package/dist/auth/commands/index.js.map +1 -1
- package/dist/auth/profile-continuity-inheritance.d.ts +1 -0
- package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -1
- package/dist/auth/profile-continuity-inheritance.js +10 -6
- package/dist/auth/profile-continuity-inheritance.js.map +1 -1
- package/dist/auth/profile-detector.d.ts +9 -1
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +35 -0
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/auth/resume-lane-diagnostics.d.ts +21 -0
- package/dist/auth/resume-lane-diagnostics.d.ts.map +1 -0
- package/dist/auth/resume-lane-diagnostics.js +146 -0
- package/dist/auth/resume-lane-diagnostics.js.map +1 -0
- package/dist/auth/resume-lane-warning.d.ts +9 -0
- package/dist/auth/resume-lane-warning.d.ts.map +1 -0
- package/dist/auth/resume-lane-warning.js +60 -0
- package/dist/auth/resume-lane-warning.js.map +1 -0
- package/dist/ccs.js +82 -7
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/auth/auth-types.d.ts +29 -6
- package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
- package/dist/cliproxy/auth/auth-types.js +58 -10
- package/dist/cliproxy/auth/auth-types.js.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts +9 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.js +196 -45
- package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
- package/dist/cliproxy/auth/oauth-process.d.ts +13 -1
- package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-process.js +262 -17
- package/dist/cliproxy/auth/oauth-process.js.map +1 -1
- package/dist/cliproxy/executor/env-resolver.d.ts +3 -0
- package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
- package/dist/cliproxy/executor/env-resolver.js +19 -1
- package/dist/cliproxy/executor/env-resolver.js.map +1 -1
- package/dist/cliproxy/executor/index.d.ts +5 -0
- package/dist/cliproxy/executor/index.d.ts.map +1 -1
- package/dist/cliproxy/executor/index.js +138 -12
- package/dist/cliproxy/executor/index.js.map +1 -1
- package/dist/cliproxy/gemini-cli-quota-normalizer.d.ts +10 -0
- package/dist/cliproxy/gemini-cli-quota-normalizer.d.ts.map +1 -0
- package/dist/cliproxy/gemini-cli-quota-normalizer.js +122 -0
- package/dist/cliproxy/gemini-cli-quota-normalizer.js.map +1 -0
- package/dist/cliproxy/quota-fetcher-gemini-cli.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher-gemini-cli.js +133 -92
- package/dist/cliproxy/quota-fetcher-gemini-cli.js.map +1 -1
- package/dist/cliproxy/quota-types.d.ts +8 -0
- package/dist/cliproxy/quota-types.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-settings.js +11 -0
- package/dist/cliproxy/services/variant-settings.js.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand.js +10 -1
- package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
- package/dist/commands/command-catalog.d.ts +39 -0
- package/dist/commands/command-catalog.d.ts.map +1 -0
- package/dist/commands/command-catalog.js +299 -0
- package/dist/commands/command-catalog.js.map +1 -0
- package/dist/commands/completion-backend.d.ts +14 -0
- package/dist/commands/completion-backend.d.ts.map +1 -0
- package/dist/commands/completion-backend.js +216 -0
- package/dist/commands/completion-backend.js.map +1 -0
- package/dist/commands/cursor-command-display.d.ts.map +1 -1
- package/dist/commands/cursor-command-display.js +25 -5
- package/dist/commands/cursor-command-display.js.map +1 -1
- package/dist/commands/cursor-command.d.ts +1 -3
- package/dist/commands/cursor-command.d.ts.map +1 -1
- package/dist/commands/cursor-command.js +3 -15
- package/dist/commands/cursor-command.js.map +1 -1
- package/dist/commands/help-command.d.ts +4 -3
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +209 -503
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/install-command.d.ts.map +1 -1
- package/dist/commands/install-command.js +16 -3
- package/dist/commands/install-command.js.map +1 -1
- package/dist/commands/root-command-router.d.ts +2 -0
- package/dist/commands/root-command-router.d.ts.map +1 -1
- package/dist/commands/root-command-router.js +13 -13
- package/dist/commands/root-command-router.js.map +1 -1
- package/dist/commands/shell-completion-command.d.ts +1 -0
- package/dist/commands/shell-completion-command.d.ts.map +1 -1
- package/dist/commands/shell-completion-command.js +27 -11
- package/dist/commands/shell-completion-command.js.map +1 -1
- package/dist/copilot/copilot-executor.d.ts +2 -0
- package/dist/copilot/copilot-executor.d.ts.map +1 -1
- package/dist/copilot/copilot-executor.js +36 -4
- package/dist/copilot/copilot-executor.js.map +1 -1
- package/dist/cursor/constants.d.ts +3 -0
- package/dist/cursor/constants.d.ts.map +1 -0
- package/dist/cursor/constants.js +20 -0
- package/dist/cursor/constants.js.map +1 -0
- package/dist/cursor/cursor-models.d.ts.map +1 -1
- package/dist/cursor/cursor-models.js +2 -0
- package/dist/cursor/cursor-models.js.map +1 -1
- package/dist/cursor/cursor-profile-executor.d.ts +10 -0
- package/dist/cursor/cursor-profile-executor.d.ts.map +1 -0
- package/dist/cursor/cursor-profile-executor.js +158 -0
- package/dist/cursor/cursor-profile-executor.js.map +1 -0
- package/dist/cursor/cursor-translator.d.ts +22 -11
- package/dist/cursor/cursor-translator.d.ts.map +1 -1
- package/dist/cursor/cursor-translator.js +254 -75
- package/dist/cursor/cursor-translator.js.map +1 -1
- package/dist/cursor/index.d.ts +1 -0
- package/dist/cursor/index.d.ts.map +1 -1
- package/dist/cursor/index.js +4 -1
- package/dist/cursor/index.js.map +1 -1
- package/dist/delegation/headless-executor.d.ts.map +1 -1
- package/dist/delegation/headless-executor.js +79 -2
- package/dist/delegation/headless-executor.js.map +1 -1
- package/dist/management/checks/image-analysis-check.d.ts.map +1 -1
- package/dist/management/checks/image-analysis-check.js +4 -5
- package/dist/management/checks/image-analysis-check.js.map +1 -1
- package/dist/management/instance-manager.js +1 -1
- package/dist/management/instance-manager.js.map +1 -1
- package/dist/shared/claude-extension-setup.d.ts.map +1 -1
- package/dist/shared/claude-extension-setup.js +36 -16
- package/dist/shared/claude-extension-setup.js.map +1 -1
- package/dist/targets/target-runtime-compatibility.d.ts.map +1 -1
- package/dist/targets/target-runtime-compatibility.js +6 -0
- package/dist/targets/target-runtime-compatibility.js.map +1 -1
- package/dist/types/profile.d.ts +1 -1
- package/dist/types/profile.d.ts.map +1 -1
- package/dist/ui/assets/accounts-l__hcQUq.js +1 -0
- package/dist/ui/assets/{alert-dialog-D0EFRcfB.js → alert-dialog-BtM3eP43.js} +1 -1
- package/dist/ui/assets/{api-DhM3BYXr.js → api-Ddwn7EXC.js} +1 -1
- package/dist/ui/assets/{auth-section-DVp8FQGm.js → auth-section-BnYn1EA3.js} +1 -1
- package/dist/ui/assets/{backups-section-CRo0NZkA.js → backups-section-M4jx3HzK.js} +1 -1
- package/dist/ui/assets/{channels-uZ_9CBqO.js → channels-D9ywyAj3.js} +1 -1
- package/dist/ui/assets/{checkbox-32DNqW_Q.js → checkbox-Df-yoPbe.js} +1 -1
- package/dist/ui/assets/{claude-extension-BfXlz5gV.js → claude-extension-Cxg0a-Ee.js} +1 -1
- package/dist/ui/assets/cliproxy-DPFdpIHy.js +3 -0
- package/dist/ui/assets/{cliproxy-ai-providers-5SHLMHiy.js → cliproxy-ai-providers-DtW-6cPc.js} +6 -6
- package/dist/ui/assets/cliproxy-control-panel-0TyLDMf7.js +1 -0
- package/dist/ui/assets/{codex-CRUSpjsu.js → codex-BtPojOrJ.js} +3 -3
- package/dist/ui/assets/{confirm-dialog-DVf5ZmCZ.js → confirm-dialog-BMwFBq5G.js} +1 -1
- package/dist/ui/assets/{copilot-BZrihl_Z.js → copilot-BG3BnHxa.js} +2 -2
- package/dist/ui/assets/{cursor-BP4nbEk_.js → cursor-BfDO73Lu.js} +1 -1
- package/dist/ui/assets/{droid-BG92rdM2.js → droid-iW-Vtuhy.js} +2 -2
- package/dist/ui/assets/{globalenv-section-Cf6dKgSf.js → globalenv-section-d9h23hIf.js} +1 -1
- package/dist/ui/assets/{health-BTy1UZs3.js → health-BPPMFQMR.js} +1 -1
- package/dist/ui/assets/icons-BxSzn11s.js +1 -0
- package/dist/ui/assets/index-B6Y8wFQ0.css +1 -0
- package/dist/ui/assets/{index-wg7UtkFv.js → index-BPyp9RJE.js} +1 -1
- package/dist/ui/assets/{index-DHrTq-0n.js → index-CctYE17X.js} +1 -1
- package/dist/ui/assets/{index-BVeN0dIB.js → index-CeP2Pr2w.js} +1 -1
- package/dist/ui/assets/{index-DuRYaONg.js → index-DYY3wcwk.js} +1 -1
- package/dist/ui/assets/{index-N2ZSJurX.js → index-DusmDwkD.js} +1 -1
- package/dist/ui/assets/index-wIy8qzU9.js +69 -0
- package/dist/ui/assets/{masked-input-DX9bedLy.js → masked-input-DWNtAEKs.js} +1 -1
- package/dist/ui/assets/{proxy-status-widget-DVDMuZK5.js → proxy-status-widget-GS3qroms.js} +1 -1
- package/dist/ui/assets/{radix-ui-C98W0NRG.js → radix-ui-Zb8sVEtn.js} +1 -1
- package/dist/ui/assets/{raw-json-settings-editor-panel-Dkt5E6Z_.js → raw-json-settings-editor-panel-e3Ziu5B1.js} +1 -1
- package/dist/ui/assets/{searchable-select-BP3Q1-Yn.js → searchable-select-D2G6gg3h.js} +1 -1
- package/dist/ui/assets/{separator-BLGGUlh9.js → separator-CR1SGLxF.js} +1 -1
- package/dist/ui/assets/{shared-G0XRyLig.js → shared-BpB5GiWS.js} +1 -1
- package/dist/ui/assets/{table-B4lRrWC-.js → table-BMbwptG_.js} +1 -1
- package/dist/ui/assets/{tanstack-CfKik0yL.js → tanstack-DWm6aJ-G.js} +1 -1
- package/dist/ui/assets/{updates--A2Sdo7N.js → updates-iC3kvbKP.js} +1 -1
- package/dist/ui/index.html +5 -5
- package/dist/utils/config-manager.d.ts +5 -0
- package/dist/utils/config-manager.d.ts.map +1 -1
- package/dist/utils/config-manager.js +10 -1
- package/dist/utils/config-manager.js.map +1 -1
- package/dist/utils/hooks/get-image-analysis-hook-env.d.ts +26 -0
- package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -1
- package/dist/utils/hooks/get-image-analysis-hook-env.js +79 -1
- package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -1
- package/dist/utils/hooks/image-analysis-backend-resolver.d.ts.map +1 -1
- package/dist/utils/hooks/image-analysis-backend-resolver.js +13 -5
- package/dist/utils/hooks/image-analysis-backend-resolver.js.map +1 -1
- package/dist/utils/hooks/image-analysis-runtime-status.d.ts +2 -0
- package/dist/utils/hooks/image-analysis-runtime-status.d.ts.map +1 -1
- package/dist/utils/hooks/image-analysis-runtime-status.js +15 -11
- package/dist/utils/hooks/image-analysis-runtime-status.js.map +1 -1
- package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +1 -1
- package/dist/utils/hooks/image-analyzer-hook-installer.js +60 -27
- package/dist/utils/hooks/image-analyzer-hook-installer.js.map +1 -1
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -1
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +3 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -1
- package/dist/utils/hooks/index.d.ts +2 -1
- package/dist/utils/hooks/index.d.ts.map +1 -1
- package/dist/utils/hooks/index.js +14 -7
- package/dist/utils/hooks/index.js.map +1 -1
- package/dist/utils/image-analysis/claude-tool-args.d.ts +6 -0
- package/dist/utils/image-analysis/claude-tool-args.d.ts.map +1 -0
- package/dist/utils/image-analysis/claude-tool-args.js +65 -0
- package/dist/utils/image-analysis/claude-tool-args.js.map +1 -0
- package/dist/utils/image-analysis/index.d.ts +4 -0
- package/dist/utils/image-analysis/index.d.ts.map +1 -1
- package/dist/utils/image-analysis/index.js +20 -1
- package/dist/utils/image-analysis/index.js.map +1 -1
- package/dist/utils/image-analysis/mcp-installer.d.ts +18 -0
- package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -0
- package/dist/utils/image-analysis/mcp-installer.js +447 -0
- package/dist/utils/image-analysis/mcp-installer.js.map +1 -0
- package/dist/web-server/routes/account-routes.d.ts.map +1 -1
- package/dist/web-server/routes/account-routes.js +14 -2
- package/dist/web-server/routes/account-routes.js.map +1 -1
- package/dist/web-server/routes/auth-routes.d.ts +10 -0
- package/dist/web-server/routes/auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/auth-routes.js +33 -6
- package/dist/web-server/routes/auth-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts +8 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +141 -11
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.js +30 -5
- package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
- package/lib/hooks/image-analysis-runtime.cjs +469 -0
- package/lib/hooks/image-analyzer-transformer.cjs +27 -418
- package/lib/hooks/websearch-transformer.cjs +37 -2
- package/lib/mcp/ccs-image-analysis-server.cjs +440 -0
- package/package.json +1 -1
- package/scripts/completion/README.md +55 -131
- package/scripts/completion/ccs.bash +22 -190
- package/scripts/completion/ccs.fish +19 -245
- package/scripts/completion/ccs.ps1 +37 -427
- package/scripts/completion/ccs.zsh +27 -305
- package/dist/ui/assets/accounts-BHEYnq6b.js +0 -1
- package/dist/ui/assets/cliproxy-DjNY9H-U.js +0 -3
- package/dist/ui/assets/cliproxy-control-panel-Zax_m1AC.js +0 -1
- package/dist/ui/assets/icons-CeH5899d.js +0 -1
- package/dist/ui/assets/index-B6SrL1O-.css +0 -1
- package/dist/ui/assets/index-Corv1lSo.js +0 -69
package/README.md
CHANGED
|
@@ -4,809 +4,147 @@
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
### The
|
|
8
|
-
|
|
7
|
+
### The multi-provider profile and runtime manager for Claude Code and compatible CLIs
|
|
8
|
+
|
|
9
|
+
Run Claude, Codex, Droid-routed profiles, GLM, local models, and
|
|
10
|
+
Anthropic-compatible APIs without config thrash.
|
|
9
11
|
|
|
10
12
|
[](LICENSE)
|
|
11
13
|
[](https://www.npmjs.com/package/@kaitranntt/ccs)
|
|
12
14
|
[](https://claudekit.cc?ref=HMNKXOHN)
|
|
13
15
|
|
|
14
|
-
**[
|
|
16
|
+
**[Website](https://ccs.kaitran.ca)** |
|
|
17
|
+
**[Documentation](https://docs.ccs.kaitran.ca)** |
|
|
18
|
+
**[Product Tour](https://docs.ccs.kaitran.ca/getting-started/product-tour)** |
|
|
19
|
+
**[CLI Reference](https://docs.ccs.kaitran.ca/reference/cli-commands)**
|
|
15
20
|
|
|
16
21
|
</div>
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
## Why CCS
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
CCS gives you one stable command surface while letting you switch between:
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
- multiple runtimes such as Claude Code, Factory Droid, and Codex CLI
|
|
28
|
+
- multiple Claude subscriptions and isolated account contexts
|
|
29
|
+
- OAuth providers like Codex, Copilot, Kiro, Claude, Qwen, Kimi, and more
|
|
30
|
+
- API and local-model profiles like GLM, Kimi, OpenRouter, Ollama, llama.cpp,
|
|
31
|
+
Novita, and Alibaba Coding Plan
|
|
27
32
|
|
|
28
|
-
|
|
33
|
+
The goal is simple: stop rewriting config files, stop breaking active sessions,
|
|
34
|
+
and move between providers in seconds.
|
|
29
35
|
|
|
30
36
|
## Quick Start
|
|
31
37
|
|
|
32
|
-
Looking for the full setup guide, command reference, provider guides, or troubleshooting?
|
|
33
|
-
Start at **https://docs.ccs.kaitran.ca**.
|
|
34
|
-
|
|
35
|
-
## Contribute And Report Safely
|
|
36
|
-
|
|
37
|
-
- Contributing guide: [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
38
|
-
- Starter work: [good first issue](https://github.com/kaitranntt/ccs/labels/good%20first%20issue), [help wanted](https://github.com/kaitranntt/ccs/labels/help%20wanted)
|
|
39
|
-
- Questions: [open a question issue](https://github.com/kaitranntt/ccs/issues/new/choose)
|
|
40
|
-
- Security reports: [SECURITY.md](./SECURITY.md) and the [private advisory form](https://github.com/kaitranntt/ccs/security/advisories/new)
|
|
41
|
-
|
|
42
|
-
### 1. Install
|
|
43
|
-
|
|
44
38
|
```bash
|
|
45
39
|
npm install -g @kaitranntt/ccs
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
<details>
|
|
49
|
-
<summary>Alternative package managers</summary>
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
yarn global add @kaitranntt/ccs # yarn
|
|
53
|
-
pnpm add -g @kaitranntt/ccs # pnpm (70% less disk space)
|
|
54
|
-
bun add -g @kaitranntt/ccs # bun (30x faster)
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
</details>
|
|
58
|
-
|
|
59
|
-
### 2. Open Dashboard
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
40
|
ccs config
|
|
63
|
-
# Opens a local browser URL
|
|
64
41
|
```
|
|
65
42
|
|
|
66
|
-
|
|
67
|
-
the CLI also prints bind/network details plus an auth reminder.
|
|
68
|
-
|
|
69
|
-
Force all-interface binding for remote devices:
|
|
43
|
+
Then launch whatever runtime fits the task:
|
|
70
44
|
|
|
71
45
|
```bash
|
|
72
|
-
ccs
|
|
73
|
-
|
|
46
|
+
ccs
|
|
47
|
+
ccs codex
|
|
48
|
+
ccs --target droid glm
|
|
49
|
+
ccs glm
|
|
50
|
+
ccs ollama
|
|
74
51
|
```
|
|
75
52
|
|
|
76
|
-
|
|
53
|
+
Need the full setup path instead of the short version?
|
|
77
54
|
|
|
78
|
-
|
|
55
|
+
| Need | Start here |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| Install and verify CCS | [`/getting-started/installation`](https://docs.ccs.kaitran.ca/getting-started/installation) |
|
|
58
|
+
| First successful session | [`/getting-started/first-session`](https://docs.ccs.kaitran.ca/getting-started/first-session) |
|
|
59
|
+
| Visual walkthrough | [`/getting-started/product-tour`](https://docs.ccs.kaitran.ca/getting-started/product-tour) |
|
|
60
|
+
| Provider selection | [`/providers/concepts/overview`](https://docs.ccs.kaitran.ca/providers/concepts/overview) |
|
|
61
|
+
| Full command reference | [`/reference/cli-commands`](https://docs.ccs.kaitran.ca/reference/cli-commands) |
|
|
62
|
+
| Troubleshooting | [`/reference/troubleshooting`](https://docs.ccs.kaitran.ca/reference/troubleshooting) |
|
|
79
63
|
|
|
80
|
-
|
|
64
|
+
## See CCS In Action
|
|
81
65
|
|
|
82
|
-
|
|
66
|
+
### Usage Analytics
|
|
83
67
|
|
|
84
|
-
|
|
68
|
+

|
|
85
69
|
|
|
86
|
-
|
|
70
|
+
Track usage, costs, and session patterns across profiles. Deep dive:
|
|
71
|
+
[Dashboard Analytics](https://docs.ccs.kaitran.ca/features/dashboard/analytics).
|
|
87
72
|
|
|
88
|
-
|
|
89
|
-
- **OAuth Providers**: One-click auth for Gemini, Codex, Antigravity, Kiro, Copilot
|
|
90
|
-
- **AI Providers**: Configure Gemini, Codex, Claude, Vertex, and OpenAI-compatible API keys under `CLIProxy -> AI Providers`
|
|
91
|
-
- **API Profiles**: Configure GLM, Kimi, OpenRouter, and other Anthropic-compatible APIs as CCS-native profiles
|
|
92
|
-
- **Codex CLI**: Dedicated dashboard page for native runtime diagnostics and guarded `config.toml` editing
|
|
93
|
-
- **Factory Droid**: Track Droid install location and BYOK settings health
|
|
94
|
-
- **Updates Center**: Track support rollouts (Droid target, CLIProxy provider changes, WebSearch integrations)
|
|
95
|
-
- **Health Monitor**: Real-time status across all profiles
|
|
96
|
-
- **Language Switcher**: Toggle dashboard locale between English, Simplified Chinese, and Vietnamese
|
|
97
|
-
|
|
98
|
-
**Analytics Dashboard**
|
|
99
|
-
|
|
100
|
-

|
|
101
|
-
|
|
102
|
-
**Live Auth Monitor**
|
|
73
|
+
### Live Auth And Health Monitoring
|
|
103
74
|
|
|
104
75
|

|
|
105
76
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-

|
|
111
|
-
|
|
112
|
-
**WebSearch Fallback**
|
|
113
|
-
|
|
114
|
-

|
|
115
|
-
|
|
116
|
-
<br>
|
|
117
|
-
|
|
118
|
-
## Built-in Providers
|
|
119
|
-
|
|
120
|
-
| Provider | Auth Type | Command | Best For |
|
|
121
|
-
|----------|-----------|---------|----------|
|
|
122
|
-
| **Claude** | Subscription | `ccs` | Default, strategic planning |
|
|
123
|
-
| **Gemini** | OAuth | `ccs gemini` | Zero-config, fast iteration |
|
|
124
|
-
| **Codex** | OAuth | `ccs codex` | Code generation |
|
|
125
|
-
| **Copilot** | OAuth | `ccs copilot` or `ccs ghcp` | GitHub Copilot models |
|
|
126
|
-
| **Cursor IDE** | Local Token | `ccs cursor` | Cursor subscription models via local daemon |
|
|
127
|
-
| **Kiro** | OAuth (AWS default) | `ccs kiro` | AWS CodeWhisperer (Claude-powered) |
|
|
128
|
-
| **Antigravity** | OAuth | `ccs agy` | Alternative routing |
|
|
129
|
-
| **OpenRouter** | API Key | `ccs openrouter` | 300+ models, unified API |
|
|
130
|
-
| **Ollama** | Local | `ccs ollama` | Local open-source models, privacy |
|
|
131
|
-
| **llama.cpp** | Local | `ccs llamacpp` | Local GGUF inference via llama.cpp server |
|
|
132
|
-
| **Ollama Cloud** | API Key | `ccs ollama-cloud` | Cloud-hosted open-source models |
|
|
133
|
-
| **GLM** | API Key | `ccs glm` | Cost-optimized execution |
|
|
134
|
-
| **KM (Kimi API)** | API Key | `ccs km` | Long-context, thinking mode |
|
|
135
|
-
| **Kimi (OAuth)** | OAuth | `ccs kimi` | Device-code OAuth via CLIProxy |
|
|
136
|
-
| **Azure Foundry** | API Key | `ccs foundry` | Claude via Microsoft Azure |
|
|
137
|
-
| **Minimax** | API Key | `ccs mm` | M2 series, 1M context |
|
|
138
|
-
| **DeepSeek** | API Key | `ccs deepseek` | V3.2 and R1 reasoning |
|
|
139
|
-
| **Novita AI** | API Key | `ccs api create --preset novita` | Anthropic-compatible Novita endpoint for Claude Code |
|
|
140
|
-
| **Qwen (OAuth)** | OAuth | `ccs qwen` | Qwen Code via CLIProxy |
|
|
141
|
-
| **Qwen API** | API Key | `ccs api create --preset qwen` | DashScope Anthropic-compatible API |
|
|
142
|
-
| **Alibaba Coding Plan** | API Key | `ccs api create --preset alibaba-coding-plan` | Model Studio Coding Plan endpoint |
|
|
143
|
-
|
|
144
|
-
**OpenRouter Integration** (v7.0.0): CCS v7.0.0 adds OpenRouter with interactive model picker, dynamic discovery, and tier mapping (opus/sonnet/haiku). Create via `ccs api create --preset openrouter` or dashboard.
|
|
145
|
-
|
|
146
|
-
**Alibaba Coding Plan Integration**: Configure via `ccs api create --preset alibaba-coding-plan` (or preset alias `alibaba`) with Coding Plan keys (`sk-sp-...`) and endpoint `https://coding-intl.dashscope.aliyuncs.com/apps/anthropic`.
|
|
147
|
-
|
|
148
|
-
**Ollama Integration**: Run local open-source models (qwen3-coder, gpt-oss:20b) with full privacy. Use `ccs api create --preset ollama` - requires [Ollama v0.14.0+](https://ollama.com) installed. For cloud models, use `ccs api create --preset ollama-cloud`.
|
|
149
|
-
|
|
150
|
-
> **Third-party WebSearch steering:** Claude-backed third-party launches keep Anthropic's native `WebSearch` disabled, provision `ccs-websearch.WebSearch` when the managed runtime is available, and append a short system hint so Claude prefers that managed tool over ad hoc Bash or `curl` lookups whenever current web information is needed.
|
|
151
|
-
> Setting `websearch.enabled: false` disables the managed local runtime, but CCS still suppresses Anthropic's native `WebSearch` on third-party backends because those providers cannot execute it correctly.
|
|
152
|
-
|
|
153
|
-
> **Image backend visibility:** `ccs config image-analysis --set-fallback <backend>` defines the backend CCS should use when a profile alias cannot be inferred directly. Use `--set-profile-backend <profile> <backend>` and `--clear-profile-backend <profile>` for explicit per-profile mappings. In the dashboard, the global `Settings -> Image` section now shows the shared backend routing state, while each profile editor keeps a compact `Image` status card that links back to those global controls.
|
|
154
|
-
|
|
155
|
-
> **Copilot config behavior:** Opening the dashboard or other read-only Copilot endpoints does not rewrite `~/.ccs/copilot.settings.json`. If CCS detects deprecated Copilot model IDs such as `raptor-mini`, it shows warnings immediately and only persists replacements when you explicitly save the Copilot configuration.
|
|
156
|
-
|
|
157
|
-
**llama.cpp Integration**: Run a local llama.cpp OpenAI-compatible server and create a profile with `ccs api create --preset llamacpp`. CCS defaults to `http://127.0.0.1:8080`, matching the standard llama.cpp server port.
|
|
158
|
-
|
|
159
|
-
**Azure Foundry**: Use `ccs api create --preset foundry` to set up Claude via Microsoft Azure AI Foundry. Requires Azure resource and API key from [ai.azure.com](https://ai.azure.com).
|
|
160
|
-
|
|
161
|
-

|
|
162
|
-
|
|
163
|
-
> **OAuth providers** authenticate via browser on first run. Tokens are cached in `~/.ccs/cliproxy/auth/`.
|
|
164
|
-
|
|
165
|
-
> **Kiro / Copilot account naming:** Manual nicknames are optional. If the provider does not expose an email, CCS derives a safe internal identifier automatically and you can rename it later.
|
|
166
|
-
|
|
167
|
-
> **AI Providers dashboard:** Configure CLIProxy-managed API key families at `ccs config` -> `CLIProxy` -> `AI Providers`. Use `API Profiles` only for CCS-native Anthropic-compatible profiles.
|
|
168
|
-
|
|
169
|
-
**Powered by:**
|
|
170
|
-
- [CLIProxyAPIPlus](https://github.com/router-for-me/CLIProxyAPIPlus) - Extended OAuth proxy with Kiro ([@fuko2935](https://github.com/fuko2935), [@Ravens2121](https://github.com/Ravens2121)) and Copilot ([@em4go](https://github.com/em4go)) support
|
|
171
|
-
- [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI) - Core OAuth proxy for Gemini, Codex, Antigravity
|
|
172
|
-
- [copilot-api](https://github.com/ericc-ch/copilot-api) - GitHub Copilot API integration
|
|
173
|
-
|
|
174
|
-
> [!TIP]
|
|
175
|
-
> **Need more?** CCS supports **any Anthropic-compatible API**. Create custom profiles for self-hosted LLMs, enterprise gateways, or alternative providers. See [API Profiles documentation](https://docs.ccs.kaitran.ca/providers/api-profiles).
|
|
176
|
-
|
|
177
|
-
<br>
|
|
178
|
-
|
|
179
|
-
## Usage
|
|
180
|
-
|
|
181
|
-
### Basic Commands
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
ccs # Default Claude session
|
|
185
|
-
ccs gemini # Gemini (OAuth)
|
|
186
|
-
ccs codex # OpenAI Codex (OAuth)
|
|
187
|
-
ccs cursor # Cursor IDE integration (token import + local daemon)
|
|
188
|
-
ccs kiro # Kiro/AWS CodeWhisperer (OAuth)
|
|
189
|
-
ccs ghcp # GitHub Copilot (OAuth device flow)
|
|
190
|
-
ccs agy # Antigravity (OAuth)
|
|
191
|
-
ccs qwen # Qwen Code (OAuth via CLIProxy)
|
|
192
|
-
ccs ollama # Local Ollama (no API key needed)
|
|
193
|
-
ccs llamacpp # Local llama.cpp (no API key needed)
|
|
194
|
-
ccs glm # GLM (API key)
|
|
195
|
-
ccs km # Kimi API profile (API key)
|
|
196
|
-
ccs api create --preset alibaba-coding-plan # Alibaba Coding Plan profile
|
|
197
|
-
ccs api discover --register # Auto-register orphan *.settings.json
|
|
198
|
-
ccs api copy glm glm-backup # Duplicate profile config + settings
|
|
199
|
-
ccs api export glm --out ./glm.ccs-profile.json # Export for cross-device transfer
|
|
200
|
-
ccs api import ./glm.ccs-profile.json # Import exported profile bundle
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### Runtime Aliases (built-in bins / `argv[0]` pattern)
|
|
204
|
-
|
|
205
|
-
Built-in Droid and native Codex runtime aliases are installed with the package:
|
|
206
|
-
|
|
207
|
-
```bash
|
|
208
|
-
ccs-droid glm # explicit alias
|
|
209
|
-
ccsd glm # legacy shortcut
|
|
210
|
-
ccs-codex # explicit native Codex alias
|
|
211
|
-
ccsx # short native Codex alias
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
CCS also ships an opinionated Codex provider shortcut:
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
ccsxp # same as: ccs codex --target codex
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Need additional alias names? First create the matching symlink or another launcher that
|
|
221
|
-
preserves the invoked basename, then map that name with `CCS_TARGET_ALIASES` (preferred) or legacy
|
|
222
|
-
target-specific env vars:
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
ln -s "$(command -v ccs)" /usr/local/bin/mydroid
|
|
226
|
-
ln -s "$(command -v ccs)" /usr/local/bin/mycodex
|
|
227
|
-
CCS_TARGET_ALIASES='droid=mydroid;codex=mycodex'
|
|
228
|
-
# Legacy fallback still supported:
|
|
229
|
-
CCS_DROID_ALIASES='mydroid'
|
|
230
|
-
CCS_CODEX_ALIASES='mycodex'
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
For Factory BYOK compatibility, CCS also stores a per-profile Droid provider hint
|
|
234
|
-
(`CCS_DROID_PROVIDER`) using one of:
|
|
235
|
-
`anthropic`, `openai`, or `generic-chat-completion-api`.
|
|
236
|
-
If the hint is missing, CCS resolves provider from base URL/model at runtime.
|
|
237
|
-
|
|
238
|
-
CCS also persists Droid's active model selector in `~/.factory/settings.json`
|
|
239
|
-
(`model: custom:<alias>`). This avoids passing `-m` argv in interactive mode,
|
|
240
|
-
which Droid treats as queued prompt text.
|
|
241
|
-
|
|
242
|
-
CCS supports structural Droid command passthrough after profile selection:
|
|
243
|
-
|
|
244
|
-
```bash
|
|
245
|
-
ccs-droid codex exec --skip-permissions-unsafe "fix failing tests"
|
|
246
|
-
ccs-droid codex --skip-permissions-unsafe "fix failing tests" # auto-routed to: droid exec ...
|
|
247
|
-
ccs-droid codex -m custom:gpt-5.3-codex "fix failing tests" # short exec flags auto-routed too
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
If you pass exec-only flags without a prompt (for example `--skip-permissions-unsafe`),
|
|
251
|
-
Droid `exec` will return its native "No prompt provided" usage guidance.
|
|
252
|
-
|
|
253
|
-
If multiple reasoning flags are provided in Droid exec mode, CCS keeps the first
|
|
254
|
-
flag and warns about duplicates.
|
|
255
|
-
|
|
256
|
-
Dashboard parity: `ccs config` -> `Factory Droid`
|
|
257
|
-
|
|
258
|
-
### Native Codex Runtime (runtime-only in v1)
|
|
259
|
-
|
|
260
|
-
CCS can launch native Codex as a first-class runtime target without rewriting your
|
|
261
|
-
`~/.codex/config.toml` on every run. CCS uses transient `codex -c key=value` overrides for
|
|
262
|
-
Codex-routed sessions and leaves your existing Codex home/config in place.
|
|
263
|
-
|
|
264
|
-
Supported in v1:
|
|
265
|
-
|
|
266
|
-
```bash
|
|
267
|
-
ccs --target codex # native Codex default session
|
|
268
|
-
ccs-codex # explicit Codex alias
|
|
269
|
-
ccsx # short native Codex alias
|
|
270
|
-
ccsxp # built-in CCS Codex provider on native Codex
|
|
271
|
-
ccs codex --target codex # explicit equivalent of ccsxp
|
|
272
|
-
ccs api create codex-api --cliproxy-provider codex
|
|
273
|
-
ccs codex-api --target codex # Codex bridge profile on native Codex
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
Not supported in v1:
|
|
277
|
-
- Claude account profiles on Codex target
|
|
278
|
-
- Copilot profiles on Codex target
|
|
279
|
-
- Generic API profiles that are not Codex-routed CLIProxy bridges
|
|
280
|
-
- Non-Codex CLIProxy providers on Codex target
|
|
281
|
-
- Composite CLIProxy variants on Codex target
|
|
282
|
-
|
|
283
|
-
Dashboard parity: `ccs config` -> `Compatible` -> `Codex CLI`
|
|
284
|
-
|
|
285
|
-
The dedicated Codex dashboard reads and writes the user layer only: `~/.codex/config.toml`
|
|
286
|
-
(or `$CODEX_HOME/config.toml`). It now ships as a split-view control center:
|
|
287
|
-
|
|
288
|
-
- left pane: guided controls for top-level runtime defaults, project trust, profiles,
|
|
289
|
-
model providers, MCP servers, and supported feature toggles
|
|
290
|
-
- right pane: raw `config.toml` editor for unsupported or exact-fidelity edits
|
|
291
|
-
- overview/docs tabs: binary detection, user-layer summary, support matrix guidance, and
|
|
292
|
-
upstream OpenAI references
|
|
293
|
-
|
|
294
|
-
Structured saves intentionally normalize TOML formatting and drop comments. Use the raw editor
|
|
295
|
-
when exact layout matters. Structured edits also refresh the raw snapshot immediately. Guided
|
|
296
|
-
controls stay disabled while the raw editor has unsaved or invalid TOML, project trust paths must
|
|
297
|
-
be absolute or start with `~/`, and supported feature flags can be cleared back to Codex defaults
|
|
298
|
-
with `Use default`. CCS also keeps warning that transient runtime overrides such as
|
|
299
|
-
`codex -c key=value` and `CCS_CODEX_API_KEY` can change the effective runtime without persisting
|
|
300
|
-
back into the user config file.
|
|
301
|
-
|
|
302
|
-
#### CLIProxy-backed native Codex
|
|
303
|
-
|
|
304
|
-
There are two supported ways to use CLIProxy with native Codex:
|
|
305
|
-
|
|
306
|
-
1. `ccsxp` or `ccs codex --target codex`
|
|
307
|
-
Uses the built-in CCS Codex provider route on native Codex. This path relies on transient
|
|
308
|
-
CCS-managed `-c` overrides and does **not** require changing your saved `model_provider`.
|
|
309
|
-
|
|
310
|
-
2. Plain `codex` or a personal alias like `cxp`
|
|
311
|
-
Save CLIProxy as the native default provider in `~/.codex/config.toml` (or
|
|
312
|
-
`$CODEX_HOME/config.toml`), then export `CLIPROXY_API_KEY` in your shell.
|
|
313
|
-
|
|
314
|
-
```toml
|
|
315
|
-
model_provider = "cliproxy"
|
|
316
|
-
|
|
317
|
-
[model_providers.cliproxy]
|
|
318
|
-
base_url = "http://127.0.0.1:8317/api/provider/codex"
|
|
319
|
-
env_key = "CLIPROXY_API_KEY"
|
|
320
|
-
wire_api = "responses"
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
The top-level `model_provider = "cliproxy"` line is required. Defining only
|
|
324
|
-
`[model_providers.cliproxy]` is not enough for plain `codex` to pick it by default.
|
|
325
|
-
|
|
326
|
-
```bash
|
|
327
|
-
export CLIPROXY_API_KEY="ccs-internal-managed"
|
|
328
|
-
ccsxp "your prompt" # CCS shortcut for the built-in provider route
|
|
329
|
-
codex "your prompt" # native Codex using your saved cliproxy default
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
Dashboard parity: `ccs config` -> `Compatible` -> `Codex CLI`
|
|
333
|
-
|
|
334
|
-
- `Overview`: explains `ccsx` vs `ccsxp`
|
|
335
|
-
- `Top-level settings`: set **Default provider** to `cliproxy`
|
|
336
|
-
- `Model providers`: save `cliproxy` with `env_key = "CLIPROXY_API_KEY"`
|
|
337
|
-
|
|
338
|
-
### Per-Profile Target Defaults
|
|
339
|
-
|
|
340
|
-
You can pin a default target (`claude` or `droid`) per profile:
|
|
341
|
-
|
|
342
|
-
```bash
|
|
343
|
-
# API profile defaults to Droid
|
|
344
|
-
ccs api create myglm --preset glm --target droid
|
|
345
|
-
|
|
346
|
-
# CLIProxy variant defaults to Droid
|
|
347
|
-
ccs cliproxy create mycodex --provider codex --target droid
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
Built-in CLIProxy providers also work with Droid alias/target override:
|
|
351
|
-
|
|
352
|
-
```bash
|
|
353
|
-
ccs-droid codex
|
|
354
|
-
ccs-droid agy
|
|
355
|
-
ccs codex --target droid
|
|
356
|
-
ccs-droid codex exec --auto high "triage this bug report"
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
Dashboard parity:
|
|
360
|
-
- `ccs config` -> `API Profiles` -> set **Default Target**
|
|
361
|
-
- `ccs config` -> `CLIProxy` -> create/edit variant -> set **Default Target**
|
|
362
|
-
|
|
363
|
-
### Kiro Auth Methods
|
|
364
|
-
|
|
365
|
-
`ccs kiro --auth` defaults to AWS Builder ID Device OAuth (best support for AWS org accounts).
|
|
366
|
-
|
|
367
|
-
```bash
|
|
368
|
-
ccs kiro --auth --kiro-auth-method aws # AWS Builder ID device code (default)
|
|
369
|
-
ccs kiro --auth --kiro-auth-method aws-authcode # AWS Builder ID auth code
|
|
370
|
-
ccs kiro --auth --kiro-auth-method google # Google OAuth
|
|
371
|
-
ccs kiro --auth --kiro-auth-method github # Dashboard management OAuth flow
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
Dashboard parity: `ccs config` -> Accounts -> Add Kiro account -> choose `Auth Method`.
|
|
375
|
-
|
|
376
|
-
### Cursor IDE Quick Start
|
|
377
|
-
|
|
378
|
-
```bash
|
|
379
|
-
ccs cursor enable
|
|
380
|
-
ccs cursor auth
|
|
381
|
-
ccs cursor start
|
|
382
|
-
ccs cursor status
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
If auto-detect is unavailable:
|
|
386
|
-
|
|
387
|
-
```bash
|
|
388
|
-
ccs cursor auth --manual --token <token> --machine-id <machine-id>
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
Defaults:
|
|
392
|
-
- Port: `20129`
|
|
393
|
-
- Ghost mode: enabled
|
|
394
|
-
- Dashboard page: `ccs config` -> `Cursor IDE`
|
|
395
|
-
|
|
396
|
-
Detailed guide: [`docs/cursor-integration.md`](./docs/cursor-integration.md)
|
|
397
|
-
|
|
398
|
-
### Claude IDE Extension Setup
|
|
399
|
-
|
|
400
|
-
CCS now has a native setup flow for the Anthropic Claude extension in VS Code and compatible hosts.
|
|
401
|
-
Use the same resolver in both the CLI and dashboard, so API profiles, CCS auth accounts,
|
|
402
|
-
CLIProxy-backed profiles, Copilot, and default-profile continuity all map to the correct env shape.
|
|
403
|
-
|
|
404
|
-
Preferred shared-settings path:
|
|
405
|
-
|
|
406
|
-
```bash
|
|
407
|
-
ccs persist glm
|
|
408
|
-
ccs persist work
|
|
409
|
-
ccs persist default
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
This writes the resolved setup to `~/.claude/settings.json`, which is the best option when you want
|
|
413
|
-
the Claude CLI and the IDE extension to share one CCS profile.
|
|
414
|
-
|
|
415
|
-
IDE-local snippet path:
|
|
416
|
-
|
|
417
|
-
```bash
|
|
418
|
-
ccs env glm --format claude-extension --ide vscode
|
|
419
|
-
ccs env work --format claude-extension --ide cursor
|
|
420
|
-
ccs env default --format claude-extension --ide windsurf
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
This prints a copy-ready `settings.json` snippet for the installed Claude extension host:
|
|
424
|
-
|
|
425
|
-
- `vscode` / `cursor`: `claudeCode.environmentVariables` plus `claudeCode.disableLoginPrompt`
|
|
426
|
-
- `windsurf`: `claude-code.environmentVariables`
|
|
427
|
-
|
|
428
|
-
Account and continuity-aware flows use `CLAUDE_CONFIG_DIR` instead of Anthropic transport env vars.
|
|
429
|
-
CLIProxy and Copilot flows emit the required `ANTHROPIC_*` variables and still depend on their local
|
|
430
|
-
proxy/daemon being reachable.
|
|
431
|
-
|
|
432
|
-
Dashboard parity:
|
|
433
|
-
- `ccs config` -> `Claude Extension`
|
|
434
|
-
- Select a CCS profile and IDE host to copy either the shared `~/.claude/settings.json` payload or the IDE-local extension snippet
|
|
77
|
+
See auth state, account health, and provider readiness without dropping into raw
|
|
78
|
+
config. Deep dive:
|
|
79
|
+
[Live Auth Monitor](https://docs.ccs.kaitran.ca/features/dashboard/live-auth-monitor).
|
|
435
80
|
|
|
436
|
-
###
|
|
81
|
+
### OAuth Provider Control Center
|
|
437
82
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
> Delegation compatibility: when CCS spawns child Claude sessions, it strips the `CLAUDECODE` guard variable to avoid nested-session blocking in Claude Code v2.1.39+.
|
|
441
|
-
|
|
442
|
-
```bash
|
|
443
|
-
# Terminal 1: Planning (Claude Pro)
|
|
444
|
-
ccs work "design the authentication system"
|
|
445
|
-
|
|
446
|
-
# Terminal 2: Execution (GLM - cost optimized)
|
|
447
|
-
ccs glm "implement the user service from the plan"
|
|
448
|
-
|
|
449
|
-
# Terminal 3: Local testing (Ollama - offline, privacy)
|
|
450
|
-
ccs ollama "run tests and generate coverage report"
|
|
451
|
-
|
|
452
|
-
# Terminal 4: Review (Gemini)
|
|
453
|
-
ccs gemini "review the implementation for security issues"
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
### Multi-Account Claude
|
|
457
|
-
|
|
458
|
-
Create isolated Claude instances for work/personal separation:
|
|
459
|
-
|
|
460
|
-
```bash
|
|
461
|
-
ccs auth create work
|
|
462
|
-
|
|
463
|
-
# Run concurrently in separate terminals
|
|
464
|
-
ccs work "implement feature" # Terminal 1
|
|
465
|
-
ccs "review code" # Terminal 2 (personal account)
|
|
466
|
-
```
|
|
467
|
-
|
|
468
|
-
#### Account Context Modes (Isolation-First)
|
|
469
|
-
|
|
470
|
-
Account profiles are isolated by default.
|
|
471
|
-
|
|
472
|
-
| Mode | Default | Requirements |
|
|
473
|
-
|------|---------|--------------|
|
|
474
|
-
| `isolated` | Yes | No `context_group` required |
|
|
475
|
-
| `shared` | No (explicit opt-in) | Valid non-empty `context_group` |
|
|
476
|
-
|
|
477
|
-
Shared mode continuity depth:
|
|
478
|
-
|
|
479
|
-
- `standard` (default): shares project workspace context only
|
|
480
|
-
- `deeper` (advanced opt-in): additionally syncs `session-env`, `file-history`, `shell-snapshots`, `todos`
|
|
481
|
-
|
|
482
|
-
Opt in to shared context when needed:
|
|
483
|
-
|
|
484
|
-
```bash
|
|
485
|
-
# Share context with default group
|
|
486
|
-
ccs auth create backup --share-context
|
|
487
|
-
|
|
488
|
-
# Share context only within named group
|
|
489
|
-
ccs auth create backup2 --context-group sprint-a
|
|
490
|
-
|
|
491
|
-
# Advanced deeper continuity mode (requires shared mode)
|
|
492
|
-
ccs auth create backup3 --context-group sprint-a --deeper-continuity
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
Update existing accounts without recreating login:
|
|
496
|
-
|
|
497
|
-
1. Run `ccs config`
|
|
498
|
-
2. Open `Accounts`
|
|
499
|
-
3. Click the pencil icon in Actions and set `isolated` or `shared` mode + continuity depth
|
|
500
|
-
|
|
501
|
-
Shared mode metadata in `~/.ccs/config.yaml`:
|
|
502
|
-
|
|
503
|
-
```yaml
|
|
504
|
-
accounts:
|
|
505
|
-
work:
|
|
506
|
-
created: "2026-02-24T00:00:00.000Z"
|
|
507
|
-
last_used: null
|
|
508
|
-
context_mode: "shared"
|
|
509
|
-
context_group: "team-alpha"
|
|
510
|
-
continuity_mode: "standard"
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
`context_group` rules:
|
|
514
|
-
|
|
515
|
-
- lowercase letters, numbers, `_`, `-`
|
|
516
|
-
- must start with a letter
|
|
517
|
-
- max length `64`
|
|
518
|
-
- non-empty after normalization
|
|
519
|
-
- normalized by trim + lowercase + whitespace collapse (`" Team Alpha "` -> `"team-alpha"`)
|
|
520
|
-
|
|
521
|
-
Shared context with `standard` depth links project workspace data. `deeper` depth links additional continuity artifacts. Credentials remain isolated per account.
|
|
522
|
-
|
|
523
|
-
#### Cross-Profile Continuity Inheritance (Claude Target)
|
|
524
|
-
|
|
525
|
-
You can map non-account profiles (API, CLIProxy, Copilot, or `default`) to reuse continuity artifacts from an account profile:
|
|
526
|
-
|
|
527
|
-
```yaml
|
|
528
|
-
continuity:
|
|
529
|
-
inherit_from_account:
|
|
530
|
-
glm: pro
|
|
531
|
-
gemini: pro
|
|
532
|
-
copilot: pro
|
|
533
|
-
```
|
|
534
|
-
|
|
535
|
-
With this config, `ccs glm`, `ccs gemini`, and `ccs copilot` run with `pro`'s `CLAUDE_CONFIG_DIR` continuity context while keeping each profile's own provider credentials/settings.
|
|
536
|
-
|
|
537
|
-
Alternative path for lower manual switching:
|
|
538
|
-
|
|
539
|
-
- Use CLIProxy Claude pool (`ccs cliproxy auth claude`) and manage pool behavior in `ccs config` -> `CLIProxy Plus`.
|
|
540
|
-
|
|
541
|
-
Technical details: [`docs/session-sharing-technical-analysis.md`](docs/session-sharing-technical-analysis.md)
|
|
542
|
-
|
|
543
|
-
<br>
|
|
544
|
-
|
|
545
|
-
## Maintenance
|
|
546
|
-
|
|
547
|
-
### Health Check
|
|
548
|
-
|
|
549
|
-
```bash
|
|
550
|
-
ccs doctor
|
|
551
|
-
```
|
|
552
|
-
|
|
553
|
-
Verifies: Claude CLI, config files, symlinks, permissions.
|
|
554
|
-
|
|
555
|
-
### Update
|
|
556
|
-
|
|
557
|
-
```bash
|
|
558
|
-
ccs update # Update to latest
|
|
559
|
-
ccs update --force # Force reinstall
|
|
560
|
-
ccs update --beta # Install dev channel
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
### CI Parity Gate (for contributors)
|
|
564
|
-
|
|
565
|
-
Before opening or updating a PR, run:
|
|
566
|
-
|
|
567
|
-
```bash
|
|
568
|
-
bun run validate:ci-parity
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
This mirrors CI behavior (build + validate + base-branch freshness check) and is also enforced by the local `pre-push` hook.
|
|
572
|
-
|
|
573
|
-
### Sync Shared Items
|
|
574
|
-
|
|
575
|
-
```bash
|
|
576
|
-
ccs sync
|
|
577
|
-
```
|
|
578
|
-
|
|
579
|
-
Re-creates symlinks for shared commands, skills, and settings.
|
|
580
|
-
|
|
581
|
-
### Quota Management
|
|
582
|
-
|
|
583
|
-
```bash
|
|
584
|
-
ccs cliproxy doctor # Check quota status for all agy accounts
|
|
585
|
-
ccs cliproxy quota # Show agy/claude/codex/gemini/ghcp quotas (Claude/Codex: 5h + weekly reset schedule)
|
|
586
|
-
```
|
|
587
|
-
|
|
588
|
-
**Auto-Failover**: When a managed account runs out of quota, CCS automatically switches to another account with remaining capacity. Shared GCP project accounts are excluded (pooled quota).
|
|
589
|
-
|
|
590
|
-
### CLIProxy Lifecycle
|
|
591
|
-
|
|
592
|
-
```bash
|
|
593
|
-
ccs cliproxy start # Start CLIProxy background service
|
|
594
|
-
ccs cliproxy status # Check running status
|
|
595
|
-
ccs cliproxy restart # Restart CLIProxy service
|
|
596
|
-
ccs cliproxy stop # Stop running CLIProxy service
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
<br>
|
|
600
|
-
|
|
601
|
-
## Configuration
|
|
602
|
-
|
|
603
|
-
CCS auto-creates config on install. Dashboard is the recommended way to manage settings.
|
|
604
|
-
|
|
605
|
-
**Config location**: `~/.ccs/config.yaml`
|
|
606
|
-
|
|
607
|
-
<details>
|
|
608
|
-
<summary>Custom Claude CLI path</summary>
|
|
609
|
-
|
|
610
|
-
If Claude CLI is installed in a non-standard location:
|
|
611
|
-
|
|
612
|
-
```bash
|
|
613
|
-
export CCS_CLAUDE_PATH="/path/to/claude" # Unix
|
|
614
|
-
$env:CCS_CLAUDE_PATH = "D:\Tools\Claude\claude.exe" # Windows
|
|
615
|
-
```
|
|
616
|
-
|
|
617
|
-
CCS sanitizes child Claude spawn environments by stripping `CLAUDECODE` (case-insensitive) to prevent nested-session guard failures during delegation. `CCS_CLAUDE_PATH` is still respected after this sanitization step.
|
|
618
|
-
|
|
619
|
-
</details>
|
|
620
|
-
|
|
621
|
-
<details>
|
|
622
|
-
<summary>Windows symlink support</summary>
|
|
623
|
-
|
|
624
|
-
Enable Developer Mode for true symlinks:
|
|
625
|
-
|
|
626
|
-
1. **Settings** → **Privacy & Security** → **For developers**
|
|
627
|
-
2. Enable **Developer Mode**
|
|
628
|
-
3. Reinstall: `npm install -g @kaitranntt/ccs`
|
|
629
|
-
|
|
630
|
-
Without Developer Mode, CCS falls back to copying directories.
|
|
631
|
-
|
|
632
|
-
</details>
|
|
633
|
-
|
|
634
|
-
<br>
|
|
635
|
-
|
|
636
|
-
## WebSearch
|
|
637
|
-
|
|
638
|
-
Third-party profiles (Gemini, Codex, GLM, etc.) cannot use Anthropic's native WebSearch. CCS now provisions a first-class local `ccs-websearch` MCP tool when the managed runtime is available, disables native `WebSearch` on third-party launches, and steers Claude toward real local providers instead of surfacing a denied native-tool call.
|
|
639
|
-
|
|
640
|
-
### How It Works
|
|
641
|
-
|
|
642
|
-
| Profile Type | WebSearch Method |
|
|
643
|
-
|--------------|------------------|
|
|
644
|
-
| Claude (native) | Anthropic WebSearch API |
|
|
645
|
-
| Third-party profiles | CCS local MCP `WebSearch` tool when available; otherwise Bash/network fallback |
|
|
646
|
-
|
|
647
|
-
### Local Search Backend Chain
|
|
648
|
-
|
|
649
|
-
For third-party profiles, CCS steers Claude toward the managed `ccs-websearch.WebSearch` MCP tool when it is available. The tool is intentionally named to match the native `WebSearch` concept, which helps Claude prefer it over ad hoc Bash or `curl` fetches, but Bash/network fallback can still happen if the tool is unavailable or ignored. When the tool is used, CCS routes that request through deterministic search providers in this order:
|
|
650
|
-
|
|
651
|
-
| Priority | Provider | Setup | Notes |
|
|
652
|
-
|----------|----------|-------|-------|
|
|
653
|
-
| 1st | Exa | `EXA_API_KEY` | API-backed search with extracted content |
|
|
654
|
-
| 2nd | Tavily | `TAVILY_API_KEY` | Agent-oriented search API |
|
|
655
|
-
| 3rd | Brave Search | `BRAVE_API_KEY` | Cleaner API-backed results |
|
|
656
|
-
| 4th | DuckDuckGo | None | Built-in default fallback |
|
|
657
|
-
| 5th | Gemini / OpenCode / Grok | Optional | Legacy compatibility fallback only |
|
|
658
|
-
|
|
659
|
-
### Configuration
|
|
660
|
-
|
|
661
|
-
Configure via dashboard (**Settings** page) or `~/.ccs/config.yaml`:
|
|
662
|
-
|
|
663
|
-
```yaml
|
|
664
|
-
websearch:
|
|
665
|
-
enabled: true # Enable/disable (default: true)
|
|
666
|
-
providers:
|
|
667
|
-
exa:
|
|
668
|
-
enabled: false # Enable when EXA_API_KEY is set
|
|
669
|
-
tavily:
|
|
670
|
-
enabled: false # Enable when TAVILY_API_KEY is set
|
|
671
|
-
duckduckgo:
|
|
672
|
-
enabled: true # Built-in zero-setup fallback
|
|
673
|
-
brave:
|
|
674
|
-
enabled: false # Enable when BRAVE_API_KEY is set
|
|
675
|
-
gemini:
|
|
676
|
-
enabled: false # Optional legacy fallback
|
|
677
|
-
```
|
|
678
|
-
|
|
679
|
-
> [!TIP]
|
|
680
|
-
> **DuckDuckGo** still works out of the box. Add **Exa**, **Tavily**, or **Brave Search** if you want API-backed results, then keep Gemini/OpenCode/Grok only if you explicitly want legacy fallback behavior.
|
|
681
|
-
> CCS manages the user-scope MCP entry in `~/.claude.json` and syncs it into isolated account configs when needed.
|
|
682
|
-
|
|
683
|
-
> [!NOTE]
|
|
684
|
-
> Set `CCS_WEBSEARCH_TRACE=1` to write correlated launch, MCP, provider, and headless summary records to `~/.ccs/logs/websearch-trace.jsonl`. That trace is designed to answer whether CCS exposed the managed tool, whether Claude called it, which provider won, and when a headless run likely bypassed it via `Bash` or `WebFetch`.
|
|
685
|
-
|
|
686
|
-
See [docs/websearch.md](./docs/websearch.md) for detailed configuration and troubleshooting.
|
|
687
|
-
|
|
688
|
-
<br>
|
|
689
|
-
|
|
690
|
-
## Remote CLIProxy
|
|
83
|
+

|
|
691
84
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
- **Network isolation**: Keep API credentials on a secure server
|
|
85
|
+
Manage OAuth-backed providers, quota visibility, and routing from one place.
|
|
86
|
+
Deep dive:
|
|
87
|
+
[CLIProxy API](https://docs.ccs.kaitran.ca/features/proxy/cliproxy-api).
|
|
696
88
|
|
|
697
|
-
###
|
|
89
|
+
### Managed Tooling And Fallbacks
|
|
698
90
|
|
|
699
|
-
|
|
91
|
+

|
|
700
92
|
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
ccs
|
|
704
|
-
```
|
|
93
|
+
CCS can provision first-class local tools like WebSearch and image analysis for
|
|
94
|
+
third-party launches instead of leaving you to wire them by hand. Deep dive:
|
|
95
|
+
[WebSearch](https://docs.ccs.kaitran.ca/features/ai/websearch).
|
|
705
96
|
|
|
706
|
-
|
|
97
|
+
## Docs Matrix
|
|
707
98
|
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
| `--proxy-host` | Remote proxy hostname or IP |
|
|
711
|
-
| `--proxy-port` | Remote proxy port (default: 8317 for HTTP, 443 for HTTPS) |
|
|
712
|
-
| `--proxy-protocol` | `http` or `https` (default: http) |
|
|
713
|
-
| `--proxy-auth-token` | Bearer token for authentication |
|
|
714
|
-
| `--local-proxy` | Force local mode, ignore remote config |
|
|
715
|
-
| `--remote-only` | Fail if remote unreachable (no fallback) |
|
|
99
|
+
The README stays short on purpose. The docs site owns the detailed guides and
|
|
100
|
+
reference material.
|
|
716
101
|
|
|
717
|
-
|
|
102
|
+
| If you want to... | Read this |
|
|
103
|
+
| --- | --- |
|
|
104
|
+
| Understand what CCS is and how the pieces fit together | [Introduction](https://docs.ccs.kaitran.ca/introduction) |
|
|
105
|
+
| Install CCS cleanly on a new machine | [Installation](https://docs.ccs.kaitran.ca/getting-started/installation) |
|
|
106
|
+
| Go from install to a successful first run | [Your First CCS Session](https://docs.ccs.kaitran.ca/getting-started/first-session) |
|
|
107
|
+
| See the dashboard and workflow surfaces before setup | [Product Tour](https://docs.ccs.kaitran.ca/getting-started/product-tour) |
|
|
108
|
+
| Compare OAuth providers, Claude accounts, and API profiles | [Provider Overview](https://docs.ccs.kaitran.ca/providers/concepts/overview) |
|
|
109
|
+
| Learn the dashboard structure and feature pages | [Dashboard Overview](https://docs.ccs.kaitran.ca/features/dashboard/overview) |
|
|
110
|
+
| Configure profiles, paths, and environment variables | [Configuration](https://docs.ccs.kaitran.ca/getting-started/configuration) |
|
|
111
|
+
| Keep OpenCode aligned with your live CCS setup | [OpenCode Sync Plugin](https://docs.ccs.kaitran.ca/features/workflow/opencode-sync) |
|
|
112
|
+
| Browse every command and flag | [CLI Commands](https://docs.ccs.kaitran.ca/reference/cli-commands) |
|
|
113
|
+
| Recover from install, auth, or provider failures | [Troubleshooting](https://docs.ccs.kaitran.ca/reference/troubleshooting) |
|
|
114
|
+
| Understand storage, config, and architecture details | [Reference](https://docs.ccs.kaitran.ca/reference/architecture) |
|
|
718
115
|
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
## Standard Fetch Proxy
|
|
722
|
-
|
|
723
|
-
CCS also respects standard proxy environment variables for fetch-based quota, dashboard,
|
|
724
|
-
and provider management requests:
|
|
116
|
+
## Example Workflow
|
|
725
117
|
|
|
726
118
|
```bash
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
export ALL_PROXY=http://proxy.example.com:8080
|
|
730
|
-
export NO_PROXY=localhost,127.0.0.1,.internal.corp
|
|
731
|
-
```
|
|
732
|
-
|
|
733
|
-
Notes:
|
|
734
|
-
- CCS automatically bypasses loopback addresses (`localhost`, `127.0.0.1`, `::1`) for its own local services.
|
|
735
|
-
- If `HTTPS_PROXY` is unset, CCS falls back to `HTTP_PROXY` for HTTPS fetches.
|
|
736
|
-
- `ALL_PROXY` is used when protocol-specific proxy variables are not configured.
|
|
737
|
-
- Proxy URLs must use `http://` or `https://`.
|
|
119
|
+
# Design with default Claude
|
|
120
|
+
ccs "design the auth flow"
|
|
738
121
|
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
## Documentation Hub
|
|
742
|
-
|
|
743
|
-
If you are not sure where to start, open **https://docs.ccs.kaitran.ca** first.
|
|
744
|
-
The hosted docs are the best entry point for setup, command reference, provider guides, and troubleshooting.
|
|
745
|
-
|
|
746
|
-
| Topic | Link |
|
|
747
|
-
|-------|------|
|
|
748
|
-
| Docs Home | [docs.ccs.kaitran.ca](https://docs.ccs.kaitran.ca) |
|
|
749
|
-
| Installation | [docs.ccs.kaitran.ca/getting-started/installation](https://docs.ccs.kaitran.ca/getting-started/installation) |
|
|
750
|
-
| Configuration | [docs.ccs.kaitran.ca/getting-started/configuration](https://docs.ccs.kaitran.ca/getting-started/configuration) |
|
|
751
|
-
| OAuth Providers | [docs.ccs.kaitran.ca/providers/oauth-providers](https://docs.ccs.kaitran.ca/providers/oauth-providers) |
|
|
752
|
-
| Multi-Account Claude | [docs.ccs.kaitran.ca/providers/claude-accounts](https://docs.ccs.kaitran.ca/providers/claude-accounts) |
|
|
753
|
-
| API Profiles | [docs.ccs.kaitran.ca/providers/api-profiles](https://docs.ccs.kaitran.ca/providers/api-profiles) |
|
|
754
|
-
| Remote Proxy | [docs.ccs.kaitran.ca/features/remote-proxy](https://docs.ccs.kaitran.ca/features/remote-proxy) |
|
|
755
|
-
| Cursor IDE (local guide) | [./docs/cursor-integration.md](./docs/cursor-integration.md) |
|
|
756
|
-
| Dashboard i18n (local guide) | [./docs/i18n-dashboard.md](./docs/i18n-dashboard.md) |
|
|
757
|
-
| CLI Reference | [docs.ccs.kaitran.ca/reference/cli-commands](https://docs.ccs.kaitran.ca/reference/cli-commands) |
|
|
758
|
-
| Architecture | [docs.ccs.kaitran.ca/reference/architecture](https://docs.ccs.kaitran.ca/reference/architecture) |
|
|
759
|
-
| Troubleshooting | [docs.ccs.kaitran.ca/reference/troubleshooting](https://docs.ccs.kaitran.ca/reference/troubleshooting) |
|
|
760
|
-
|
|
761
|
-
<br>
|
|
762
|
-
|
|
763
|
-
## Uninstall
|
|
764
|
-
|
|
765
|
-
```bash
|
|
766
|
-
npm uninstall -g @kaitranntt/ccs
|
|
767
|
-
```
|
|
122
|
+
# Implement with a different provider
|
|
123
|
+
ccs codex "implement the user service"
|
|
768
124
|
|
|
769
|
-
|
|
770
|
-
|
|
125
|
+
# Use a cheaper API profile for routine work
|
|
126
|
+
ccs glm "clean up tests and docs"
|
|
771
127
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
pnpm remove -g @kaitranntt/ccs
|
|
775
|
-
bun remove -g @kaitranntt/ccs
|
|
128
|
+
# Run a local model when you need privacy or offline access
|
|
129
|
+
ccs ollama "summarize these logs"
|
|
776
130
|
```
|
|
777
131
|
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
<br>
|
|
781
|
-
|
|
782
|
-
## Philosophy
|
|
783
|
-
|
|
784
|
-
- **YAGNI**: No features "just in case"
|
|
785
|
-
- **KISS**: Simple, focused implementation
|
|
786
|
-
- **DRY**: One source of truth (config)
|
|
787
|
-
|
|
788
|
-
<br>
|
|
789
|
-
|
|
790
|
-
## Contributing
|
|
791
|
-
|
|
792
|
-
See [CONTRIBUTING.md](./CONTRIBUTING.md). For suspected vulnerabilities, use [SECURITY.md](./SECURITY.md) instead of a public issue.
|
|
793
|
-
|
|
794
|
-
<br>
|
|
795
|
-
|
|
796
|
-
## License
|
|
132
|
+
## Community Projects
|
|
797
133
|
|
|
798
|
-
|
|
134
|
+
| Project | Author | Description |
|
|
135
|
+
| --- | --- | --- |
|
|
136
|
+
| [opencode-ccs-sync](https://github.com/JasonLandbridge/opencode-ccs-sync) | [@JasonLandbridge](https://github.com/JasonLandbridge) | Auto-sync CCS providers into OpenCode |
|
|
799
137
|
|
|
800
|
-
|
|
138
|
+
## Contribute And Report Safely
|
|
801
139
|
|
|
802
|
-
|
|
140
|
+
- Contributing guide: [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
141
|
+
- Starter work:
|
|
142
|
+
[good first issue](https://github.com/kaitranntt/ccs/labels/good%20first%20issue),
|
|
143
|
+
[help wanted](https://github.com/kaitranntt/ccs/labels/help%20wanted)
|
|
144
|
+
- Questions: [open a question issue](https://github.com/kaitranntt/ccs/issues/new/choose)
|
|
145
|
+
- Security reports: [SECURITY.md](./SECURITY.md) and the
|
|
146
|
+
[private advisory form](https://github.com/kaitranntt/ccs/security/advisories/new)
|
|
803
147
|
|
|
804
148
|
## Star History
|
|
805
149
|
|
|
806
150
|
[](https://www.star-history.com/#kaitranntt/ccs&type=date&legend=top-left)
|
|
807
|
-
|
|
808
|
-
---
|
|
809
|
-
|
|
810
|
-
**[ccs.kaitran.ca](https://ccs.kaitran.ca)** | **[docs.ccs.kaitran.ca](https://docs.ccs.kaitran.ca)** | [Issue Templates](https://github.com/kaitranntt/ccs/issues/new/choose) | [Private Security Report](https://github.com/kaitranntt/ccs/security/advisories/new) | [Star on GitHub](https://github.com/kaitranntt/ccs)
|
|
811
|
-
|
|
812
|
-
</div>
|