What
Claude Code can now interact with the claude.ai Project attached to a session. Project docs persist across sessions and surfaces (chat, Cowork, Claude Code), so anything written here is visible to the user and their team on claude.ai.
Usage
The session is attached to a project automatically when CLAUDE_PROJECT_UUID is set in the environment (the harness sets this). Claude uses five methods dispatched on a method field:
project_info— retrieve project name, description, custom instructions, doc list, and knowledge-base budget statsproject_read— read one doc by path; large docs are written to a local temp fileproject_search— run a RAG query against the project's knowledge baseproject_write— create or replace a doc (inlinecontentorlocal_pathupload)project_delete— delete a doc by path
Details
- Requires claude.ai authentication. Not available via Bedrock, Vertex, or other third-party providers.
- OAuth scopes
user:projects:readanduser:projects:writeare requested automatically; if absent, the token is refreshed. - Blocked if
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICis set or if the org's compliance policy (e.g. HIPAA) disables project writes. - The project's docs are injected verbatim into every chat turn while total knowledge is under the search threshold (~50k tokens). Above that threshold, chat degrades to retrieval (RAG) mode.
project_writechecks the budget before writing. Passingforce: trueoverrides the injection-threshold guard but not the hard cap.- Writing a new bare filename (no
/) namespaces it toclaude/<name>automatically; pass an explicit nested path to override. local_pathuploads a file from the working directory directly — its contents never enter the model's context window.
Evidence
Projects tool implementation (search for "project_info", "project_read", "project_write", "project_search", "project_delete" together in a method dispatch, or "Projects API:" in the error class name ProjectsApiError)
Strings lifted out of the shipped bundle, so the claim above can be checked against them.