
Ccc
- 4.3k installs
- 2.6k repo stars
- Updated August 4, 2026
- cocoindex-io/cocoindex-code
A CLI tool providing semantic code search and index management for development teams to locate functionality by concept across projects.
About
ccc is a CLI tool for CocoIndex Code that enables semantic search over project codebases and manages code indexing. Developers use it to find code by concept or behavior rather than exact syntax - for example, searching 'database connection pooling' or 'user authentication flow' across files. The agent handles initialization, index freshness, and search automatically. Key workflows include initializing projects with ccc init, building indexes with ccc index, performing semantic searches with filtering by language or path patterns, and pagination for exploring result sets. Results include file paths and line ranges that integrate with editor tools or terminal commands for context exploration. Semantic code search by concept/behavior, not syntax Automatic index initialization and freshness management by agent Filter results by language (--lang), path (--path), with pagination support Returns file paths
- Semantic code search by concept/behavior, not syntax
- Automatic index initialization and freshness management by agent
- Filter results by language (--lang), path (--path), with pagination support
- Returns file paths and line ranges for targeted context retrieval
- Integrates with editor read tools and terminal extraction commands
Ccc by the numbers
- 4,317 all-time installs (skills.sh)
- +93 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #154 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
ccc capabilities & compatibility
- Capabilities
- semantic codebase search by concept/behavior · automatic index initialization and management · filter results by language and file path pattern · pagination for exploring large result sets · integration with editor file readers and termina
- Use cases
- code review · debugging · refactoring · documentation
- Platforms
- macOS · Windows · Linux · WSL
- Runs
- Runs locally
- Pricing
- Free
What ccc says it does
The query should describe the concept, functionality, or behavior to find, not exact code syntax.
npx skills add https://github.com/cocoindex-io/cocoindex-code --skill cccAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4.3k |
|---|---|
| repo stars | ★ 2.6k |
| Security audit | 3 / 3 scanners passed |
| Last updated | August 4, 2026 |
| Repository | cocoindex-io/cocoindex-code ↗ |
What it does
Search and index codebases semantically to locate functionality, patterns, and implementation details without exact syntax matching.
Who is it for?
Finding code patterns, authentication flows, error handling, database schemas, API implementations, refactoring targets across medium-to-large codebases.
Skip if: Real-time code execution, exact syntax matching, version control operations, dependency management.
When should I use this skill?
User requests codebase search, asks about specific functionality locations, needs index updates after code changes, or mentions ccc/cocoindex-code explicitly.
What you get
Developers can quickly locate relevant code patterns, functions, and implementations using natural language queries without exhaustive manual search.
- Semantic search results
- File summaries
- Updated codebase index
By the numbers
- Supports multiple language filtering with repeatable --lang flag
- Pagination via --offset and --limit parameters
- Results include file paths and line ranges for context extraction
Files
ccc - Semantic Code Search & Indexing
ccc is the CLI for CocoIndex Code, providing semantic search over the current codebase and index management.
Ownership
The agent owns the ccc lifecycle for the current project — initialization, indexing, and searching. Do not ask the user to perform these steps; handle them automatically.
- Initialization: If
ccc searchorccc indexfails with an initialization error (e.g., "Not in an initialized project directory"), runccc initfrom the project root directory, thenccc indexto build the index, then retry the original command. - Index freshness: Keep the index up to date by running
ccc index(orccc search --refresh) when the index may be stale — e.g., at the start of a session, or after making significant code changes (new files, refactors, renamed modules). There is no need to re-index between consecutive searches if no code was changed in between. - Installation: If
cccitself is not found (command not found), refer to management.md for installation instructions and inform the user.
Searching the Codebase
To perform a semantic search:
ccc search <query terms>The query should describe the concept, functionality, or behavior to find, not exact code syntax. For example:
ccc search database connection pooling
ccc search user authentication flow
ccc search error handling retry logicFiltering Results
- By language (
--lang, repeatable): restrict results to specific languages.
ccc search --lang python --lang markdown database schema- By path (
--path): restrict results to a glob pattern relative to project root. If omitted, defaults to the current working directory (only results under that subdirectory are returned).
ccc search --path 'src/api/*' request validationPagination
Results default to the first page. To retrieve additional results:
ccc search --offset 5 --limit 5 database schemaIf all returned results look relevant, use --offset to fetch the next page — there are likely more useful matches beyond the first page.
Working with Search Results
Search results include file paths and line ranges. To explore a result in more detail:
- Use the editor's built-in file reading capabilities (e.g., the
Readtool) to load the matched file and read lines around the returned range for full context. - When working in a terminal without a file-reading tool, use
sed -n '<start>,<end>p' <file>to extract a specific line range.
Settings
To view or edit embedding model configuration, include/exclude patterns, or language overrides, see settings.md.
Management & Troubleshooting
For installation, initialization, daemon management, troubleshooting, and cleanup commands, see management.md.
ccc Management
Installation
Install CocoIndex Code via pipx. Two install styles:
pipx install 'cocoindex-code[full]' # batteries included (local embeddings via sentence-transformers)
pipx install cocoindex-code # slim (LiteLLM-only; requires a cloud embedding provider + API key)The [full] extra pulls in sentence-transformers so the first-run default (local embeddings, no API key) works out of the box. The slim install is for environments where you don't want the torch/transformers deps and plan to use a LiteLLM-supported cloud provider instead.
To upgrade to the latest version:
pipx upgrade cocoindex-codeAfter installation, the ccc command is available globally.
Project Initialization
Run from the root directory of the project to index:
ccc initFirst run (global settings don't exist yet) — ccc init prompts interactively for the embedding provider (sentence-transformers / litellm) and model, then runs a one-off test embed via the daemon to confirm the model works. Accept the defaults for the sentence-transformers path, or pick litellm and enter a model identifier.
Subsequent runs (global settings already exist) — prompts are skipped; only project settings and .gitignore are set up.
To skip the interactive prompts on the first run (e.g. in a script or container), pass --litellm-model MODEL:
ccc init --litellm-model openai/text-embedding-3-smallThis is also the only way to pick a LiteLLM model when stdin isn't a TTY and you've done a slim install.
ccc init creates:
~/.cocoindex_code/global_settings.yml(user-level, embedding config + env vars)..cocoindex_code/settings.yml(project-level, include/exclude patterns).
If .git exists in the directory, .cocoindex_code/ is automatically added to .gitignore.
Use -f to skip the confirmation prompt if ccc init detects a potential parent project root.
After initialization, edit the settings files if needed (see settings.md for format details), then run ccc index to build the initial index. If the model test printed [FAIL] during init, edit global_settings.yml (and optionally add API keys under the commented envs: block) and verify with ccc doctor before indexing.
Troubleshooting
Diagnostics
Run ccc doctor to check system health end-to-end:
ccc doctorThis checks global settings, daemon status, embedding model (runs a test embedding), and — if run from within a project — file matching (walks files using the same logic as the indexer) and index status. Results stream incrementally. Always points to daemon.log at the end for further investigation.
Checking Project Status
To view the current project's index status:
ccc statusThis shows whether indexing is ongoing and index statistics.
Daemon Management
The daemon starts automatically on first use. To check its status:
ccc daemon statusThis shows whether the daemon is running, its version, uptime, and loaded projects.
To restart the daemon (useful if it gets into a bad state):
ccc daemon restartTo stop the daemon:
ccc daemon stopCleanup
To reset a project's index (removes databases, keeps settings):
ccc resetTo fully remove all CocoIndex Code data for a project (including settings):
ccc reset --allBoth commands prompt for confirmation. Use -f to skip.
ccc Settings
Configuration lives in two YAML files, both created automatically by ccc init.
User-Level Settings (~/.cocoindex_code/global_settings.yml)
Shared across all projects. Controls the embedding model and extra environment variables for the daemon.
embedding:
provider: sentence-transformers # or "litellm" (default when provider is omitted)
model: Snowflake/snowflake-arctic-embed-xs
device: mps # optional: cpu, cuda, mps (auto-detected if omitted)
min_interval_ms: 300 # optional: pace LiteLLM embedding requests to reduce 429s; defaults to 5 for LiteLLM
envs: # extra environment variables for the daemon
OPENAI_API_KEY: your-key # only needed if not already in the shell environmentFields
| Field | Description |
|---|---|
embedding.provider | sentence-transformers for local models, litellm (or omit) for cloud/remote models |
embedding.model | Model identifier — format depends on provider (see examples below) |
embedding.device | Optional. cpu, cuda, or mps. Auto-detected if omitted. Only relevant for sentence-transformers. |
embedding.min_interval_ms | Optional. Minimum delay between LiteLLM embedding requests in milliseconds. Defaults to 5 for LiteLLM and is ignored by sentence-transformers. Set explicitly to override the default. |
envs | Key-value map of environment variables injected into the daemon. Use for API keys not already in the shell environment. |
Embedding Model Examples
Local (sentence-transformers, no API key needed):
embedding:
provider: sentence-transformers
model: Snowflake/snowflake-arctic-embed-xs # default, lightweightembedding:
provider: sentence-transformers
model: nomic-ai/CodeRankEmbed # better code retrieval, needs GPU (~1 GB VRAM)Ollama (local):
embedding:
model: ollama/nomic-embed-textOpenAI:
embedding:
model: text-embedding-3-small
min_interval_ms: 300
envs:
OPENAI_API_KEY: your-api-keyGemini:
embedding:
model: gemini/gemini-embedding-001
envs:
GEMINI_API_KEY: your-api-keyVoyage (code-optimized):
embedding:
model: voyage/voyage-code-3
envs:
VOYAGE_API_KEY: your-api-keyFor the full list of supported cloud providers and model identifiers, see LiteLLM Embedding Models.
Important
Switching embedding models changes vector dimensions — you must re-index after changing the model:
ccc reset && ccc indexProject-Level Settings (<project>/.cocoindex_code/settings.yml)
Per-project. Controls which files to index. Created by ccc init and automatically added to .gitignore.
include_patterns:
- "**/*.py"
- "**/*.js"
- "**/*.ts"
# ... (sensible defaults for 28+ file types)
exclude_patterns:
- "**/.*" # hidden directories
- "**/__pycache__"
- "**/node_modules"
- "**/dist"
# ...
language_overrides:
- ext: inc # treat .inc files as PHP
lang: phpFields
| Field | Description |
|---|---|
include_patterns | Glob patterns for files to index. Defaults cover common languages (Python, JS/TS, Rust, Go, Java, C/C++, C#, SQL, Shell, Markdown, PHP, Lua, etc.). |
exclude_patterns | Glob patterns for files/directories to skip. Defaults exclude hidden dirs, node_modules, dist, __pycache__, vendor, etc. |
language_overrides | List of {ext, lang} pairs to override language detection for specific file extensions. |
Editing Tips
- To index additional file types, append glob patterns to
include_patterns(e.g."**/*.proto"). - To exclude a directory, append to
exclude_patterns(e.g."**/generated"). - After editing, run
ccc indexto re-index with the new settings.
Related skills
How it compares
Pick ccc over plain ripgrep skills when agents need concept-level codebase search with maintained semantic indexes on large repositories.
FAQ
When should I re-index the codebase?
Run ccc index after significant code changes like new files, refactors, or renamed modules. No need between consecutive searches if code unchanged.
How do I filter search results?
Use --lang for language filtering (repeatable), --path for glob patterns, and --offset/--limit for pagination across result pages.
What if ccc initialization fails?
Run ccc init from project root, then ccc index to build the index, then retry your original search command.
Is Ccc safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.