projects
This skill should be used when the user wants to list all projects, switch projects, rename a project, enable/disable PR deploys, make a project public/private, or modify project settings.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install railwayapp-railway-skills-projects
Repository
Skill path: plugins/railway/skills/projects
This skill should be used when the user wants to list all projects, switch projects, rename a project, enable/disable PR deploys, make a project public/private, or modify project settings.
Open repositoryBest for
Primary workflow: Run DevOps.
Technical facets: Full Stack, DevOps.
Target audience: everyone.
License: Unknown.
Original source
Catalog source: SkillHub Club.
Repository owner: railwayapp.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install projects into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/railwayapp/railway-skills before adding projects to shared team environments
- Use projects for development workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: projects
description: This skill should be used when the user wants to list all projects, switch projects, rename a project, enable/disable PR deploys, make a project public/private, or modify project settings.
allowed-tools: Bash(railway:*)
---
# Project Management
List, switch, and configure Railway projects.
## When to Use
- User asks "show me all my projects" or "what projects do I have"
- User asks about projects across workspaces
- User asks "what workspaces do I have"
- User wants to switch to a different project
- User asks to rename a project
- User wants to enable/disable PR deploys
- User wants to make a project public or private
- User asks about project settings
## List Projects
The `railway list --json` output can be very large. Run in a subagent and return only essential fields:
- Project: `id`, `name`
- Workspace: `id`, `name`
- Services: `name` (optional, if user needs service context)
```bash
railway list --json
```
Extract and return a simplified summary, not the full JSON.
## List Workspaces
```bash
railway whoami --json
```
Returns user info including all workspaces the user belongs to.
## Switch Project
Link a different project to the current directory:
```bash
railway link -p <project-id-or-name>
```
Or interactively:
```bash
railway link
```
After switching, use `status` skill to see project details.
## Update Project
Modify project settings via GraphQL API.
### Get Project ID
```bash
railway status --json
```
Extract `project.id` from the response.
### Update Mutation
```bash
bash <<'SCRIPT'
scripts/railway-api.sh \
'mutation updateProject($id: String!, $input: ProjectUpdateInput!) {
projectUpdate(id: $id, input: $input) { name prDeploys isPublic botPrEnvironments }
}' \
'{"id": "PROJECT_ID", "input": {"name": "new-name"}}'
SCRIPT
```
### ProjectUpdateInput Fields
| Field | Type | Description |
|-------|------|-------------|
| `name` | String | Project name |
| `description` | String | Project description |
| `isPublic` | Boolean | Make project public/private |
| `prDeploys` | Boolean | Enable/disable PR deploys |
| `botPrEnvironments` | Boolean | Enable Dependabot/Renovate PR environments |
### Examples
**Rename project:**
```bash
scripts/railway-api.sh '<mutation>' '{"id": "uuid", "input": {"name": "new-name"}}'
```
**Enable PR deploys:**
```bash
scripts/railway-api.sh '<mutation>' '{"id": "uuid", "input": {"prDeploys": true}}'
```
**Make project public:**
```bash
scripts/railway-api.sh '<mutation>' '{"id": "uuid", "input": {"isPublic": true}}'
```
**Multiple fields:**
```bash
scripts/railway-api.sh '<mutation>' '{"id": "uuid", "input": {"name": "new-name", "prDeploys": true}}'
```
## Composability
- **View project details**: Use `status` skill
- **Create new project**: Use `new` skill
- **Manage environments**: Use `environment` skill
## Error Handling
### Not Authenticated
```
Not authenticated. Run `railway login` first.
```
### No Projects
```
No projects found. Create one with `railway init`.
```
### Permission Denied
```
You don't have permission to modify this project. Check your Railway role.
```
### Project Not Found
```
Project "foo" not found. Run `railway list` to see available projects.
```
---
## Referenced Files
> The following files are referenced in this skill and included for context.
### scripts/railway-api.sh
```bash
#!/usr/bin/env bash
# Railway GraphQL API helper
# Usage: railway-api.sh '<graphql-query>' ['<variables-json>']
set -e
if ! command -v jq &>/dev/null; then
echo '{"error": "jq not installed. Install with: brew install jq"}'
exit 1
fi
CONFIG_FILE="$HOME/.railway/config.json"
if [[ ! -f "$CONFIG_FILE" ]]; then
echo '{"error": "Railway config not found. Run: railway login"}'
exit 1
fi
TOKEN=$(jq -r '.user.token' "$CONFIG_FILE")
if [[ -z "$TOKEN" || "$TOKEN" == "null" ]]; then
echo '{"error": "No Railway token found. Run: railway login"}'
exit 1
fi
if [[ -z "$1" ]]; then
echo '{"error": "No query provided"}'
exit 1
fi
# Build payload with query and optional variables
if [[ -n "$2" ]]; then
PAYLOAD=$(jq -n --arg q "$1" --argjson v "$2" '{query: $q, variables: $v}')
else
PAYLOAD=$(jq -n --arg q "$1" '{query: $q}')
fi
curl -s https://backboard.railway.com/graphql/v2 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "$PAYLOAD"
```