Repository Endpoints CLI Usage Analysis

Claude Code·Opus 4.8[1m]·Soph·2mo ago·51min·1 Checkpoint·1 file change·+49/-2·32.4K tokens

can you tell me which repository endpoints are used against core or cell from the cli

2mo ago·45.4s

The search agent is running. I'll report back once it completes its scan of the repository command implementations and API client packages.

2mo ago·27.9s

Here's the map of repository endpoints and which plane each one hits.

CORE (control-plane, coreapi → <core-host>/api/v1)

The entire entire repo command group runs against core. Wiring in repo.go:21, dialed via the runCore* helpers in corecmd.go.

repo group:

CommandMethod + path
repo create <name>POST /api/v1/repos
repo list <project>GET /api/v1/projects/{projectId}/repos
repo get <repo>GET /api/v1/repos/{repoId}
repo delete <repo>DELETE /api/v1/repos/{repoId}
repo visibility get <repo>GET /api/v1/repos/{repoId}/visibility
repo visibility set <repo> <vis>PUT /api/v1/repos/{repoId}/visibility

repo mirror subtree (repo_mirror.go:121) — also all core:

CommandMethod + path
repo mirror create <url> [cluster]POST /api/v1/mirrors (+ poll GET /api/v1/mirrors/{id} for clone-readiness)
repo mirror listGET /api/v1/mirrors
repo mirror list --show-availableGET /api/v1/mirrors/available
repo mirror get <mirror>GET /api/v1/mirrors/{id} (+ GET /api/v1/mirrors to resolve a URL ref → ULID)
repo mirror remove <url> [cluster]DELETE /api/v1/mirrors?provider&owner&repo&clusterHost
repo mirror collaborators list <url>GET /api/v1/mirrors/collaborators
(wizard region picker)GET /api/v1/clusters

Note: repo clone never makes the data-plane request itself. It resolves placements against core (GET /api/v1/mirrors), then shells out to git clone — the actual data transfer is done by the separate git-remote-entire helper (repo-scoped STS in internal/entireclient/repocreds/).

CELL (data-plane entire-api, auth.NewEntireAPICellClient → <cell>/api/v1)

Repo-scoped calls dialed directly at a specific cell with a jurisdictional identity token:

CommandMethod + path
experts (resolve owner/repo → ULID)GET /api/v1/repos
experts (main call)POST /api/v1/repos/{repoId}/experts
activity / recapGET /api/v1/me/recap?repo={ulid} (home cell)
api --to cell <path>raw passthrough to any /api/v1/… on home cell

cell_fanout.go (multi-cell fan-out) exists but has no production caller yet — it's scaffolding for querying all of a caller's repos across cells.

Repo endpoints that hit BOTH (core to resolve → cell to call)

These are the cross-plane cases — core GET /api/v1/mirrors (the shared listMirrorsForRepo helper) turns origin into a repo ULID / cell target, then the real call goes to the cell:

  1. experts — core GET /api/v1/mirrors + GET /api/v1/clusters to pick the owning cell, then cell GET /api/v1/repos + POST /api/v1/repos/{repoId}/experts.
  2. recap / activity — core GET /api/v1/mirrors to get the ULID, then cell GET /api/v1/me/recap?repo={ulid}.
  3. api … {repo_id} — core GET /api/v1/mirrors to expand {repo_id}, then the templated request against --to core or --to cell.

Aside: BFF data-API (api.BaseURL(), not a per-cell dial)

A few repo-related calls go to the entire.io BFF rather than a specific cell — worth distinguishing from the direct cell client:

  • search/dispatch repo completion → GET /api/v1/repositories?sort=recent
  • enable → POST /api/v1/cli/enable
  • search (code search) → search service on the data-API host

Bottom line: all CRUD/mirror management (entire repo …) is core-only; repo content/insight endpoints (experts, recap, code search) live on the cells, and they lean on a core mirror lookup first to figure out which cell hosts the repo.