---
title: "List repository skills"
method: GET
path: "/v1/environments/{environment_id}/repo-skills"
tags: ["Environment skills"]
---

# List repository skills

`GET /v1/environments/{environment_id}/repo-skills`

## Request

- Base URL: `https://api.replicas.dev`
- URL: `https://api.replicas.dev/v1/environments/{environment_id}/repo-skills`
- Auth: HTTP bearer

Lists skills, agents, commands, and rules committed to the environment's repositories, read from the default branch. Returns an empty list when no repository is bound.

## Path parameters

- `environment_id` string, required

## Headers

- `X-Replicas-Api-Version` '2026-10-07'

## Response `200`

Successful response. `error` is populated when discovery encountered a partial failure (e.g. the repo has no GitHub App installation); the UI surfaces it inline rather than treating it as a 5xx.

- ListRepoSkillsResponse
  - `repo_skills` RepoSkill[], required
    - `id` string, required: Stable id, formed from the repository UUID and the in-repo path.
    - `repository_id` string, uuid, required
    - `repository_full_name` string, required: Repo's `owner/name` (denormalized for the UI).
    - `branch` string, required: Default branch the file was resolved against.
    - `path` string, required: Repo-relative path of the discovered file or skill directory.
    - `name` string, required: Human-friendly name (from YAML frontmatter when present, otherwise the filename or directory).
    - `description` string, nullable, required: Single-line description, populated from frontmatter when available.
    - `framework` 'claude' | 'codex' | 'cursor' | 'agents', required: Which AI tool owns the discovered file's on-disk convention.
    - `kind` 'skill' | 'agent' | 'command' | 'prompt' | 'plugin', required: Sub-kind within the framework.
    - `html_url` string, uri, required: Direct GitHub blob link.
  - `error` string, nullable, required: Populated when discovery couldn't run end-to-end (e.g. the bound repo has no GitHub App installation). The list may still be partially filled; the UI shows this as an inline banner rather than a 5xx.

## Other responses

- `400`: Bad request - Missing or invalid parameters
- `401`: Unauthorized - Invalid or missing API key
- `404`: Resource not found
- `500`: Internal server error

---

[API](https://skmtc.dev/replicas/apis/replicas-api.md) - [All operations](https://skmtc.dev/replicas/apis/replicas-api/llms.txt) - [OpenAPI document](https://skmtc.dev/replicas/apis/replicas-api/revisions/2703ac1c9cb7?raw)
