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

Options

str | None
Organization override.
str | None
Opaque pagination cursor from a previous response.
int | None
Maximum number of repositories to return. The server maximum is 100.
str | dict[str, object] | None
Filter results by repository tags. See Tag Filters below.

Tag Filters

Filter the repository list by the tags on each repository. Pass a dictionary where each key is a tag name:
A repository matches when every key matches: multiple keys in one dictionary 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 dictionary 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 Python SDK serializes filter dictionaries 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 listed repo names into fs.mount() to mount the filtered set of repositories:

Response

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

Repo

str
Repository ID.
str
Organization slug.
str
Repository name.
str
Default bookmark name.
str
Current change ID at the default bookmark tip.
UpstreamConfig | None
Configured upstream remote, or null when no upstream is configured.
datetime
Creation time.
dict[str, str]
Repository tags.

UpstreamConfig

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