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.- Exception: if
ccc indexrefuses because the directory holds ccc's user settings directory (usually your home directory), do not runccc initthere. Run ccc from inside the project instead, or ask the user which project to use. - Exception: if a ccc note says the project in use is that directory (a repo below it has no project of its own), tell the user. Do not run
ccc resetthere yourself: whether it should stay a project is the user's call.
- Exception: if
- 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 [blocked] for installation instructions and inform the user.
Searching the Codebase
To perform a semantic search:
The query should describe the concept, functionality, or behavior to find, not exact code syntax. For example:
Filtering Results
-
By language (
--lang, repeatable): restrict results to specific languages. -
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).
Pagination
Results default to the first page. To retrieve additional results:
If 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 [blocked].
Management & Troubleshooting
For installation, initialization, daemon management, troubleshooting, and cleanup commands, see management.md [blocked].


