Skip to main content
List repositories using cursor pagination. Required scope: read

Options

string | undefined
Organization override.
string | undefined
Opaque pagination cursor from a previous response.
number | undefined
Maximum number of repositories to return. The server maximum is 100.
RepoTagFilter | string | undefined
Filter results by repository tags. See Tag Filters below.

Tag Filters

Filter the repository list by the tags on each repository. Pass an object where each key is a tag name:
A repository matches when every key matches: multiple keys in one object are implicitly combined with the logical $and operator. The filter above is equivalent to:
Combine $and, $or, and $not to build more complex queries:
Operator names start with $ and are case-insensitive ($and, $AND, and $AnD are equivalent). The $ prefix is reserved for operators, so a tag name can never start with $ — but plain and, or, and not are ordinary tag names.

Value Operators

Tag values match exactly by default. Wrap the value in an operator object for other comparisons: $exists checks only whether the tag key is present, regardless of its value. To match a specific value, use an exact match instead.

Complex Composition

This example selects active production-like skill or memory repos that are owned by platform teams and located in US regions:
Matching semantics:
  • Everything is case-insensitive: operator names, tag keys (normalized to lowercase), and tag value comparisons.
  • $and matches when all child filters match, $or when any child matches, and $not negates its child filter.
  • $contains, $starts_with, and $ends_with match literal text — %, _, and \ in the search text are escaped, not treated as wildcards.
  • Filters are limited to depth 8, 64 total clauses, 32 items in $and, $or, and $in arrays, and 256 characters per tag key or value.
The TypeScript SDK serializes filter objects and sends them to the API. Invalid filters return 400 INVALID_REQUEST from the server. For direct REST calls, pass the filter as a JSON-encoded string in the tags query parameter:
Legacy comma-separated string filters ('environment:prod,team:core') are still accepted but deprecated. Pass the result directly to fs.mount() to mount the filtered set of repositories:

Response

string | null
Cursor for the next page, or null when no more results remain.
boolean
Whether another page of results is available.
Repo[]
Repository objects.

Repo

string
Repository ID.
string
Organization slug.
string
Repository name.
string
Default bookmark name.
string
Current change ID at the default bookmark tip.
UpstreamConfig | null
Configured upstream remote, or null when no upstream is configured.
string
Creation time.
Record<string, string>
Repository tags.

UpstreamConfig

string
Upstream Git remote URL.
'token' | 'username_password' | null
Stored upstream authentication kind, or null when the upstream is public.