Railway CLI Skill
Manage Railway deployments and infrastructure using the Railway CLI.
Pre-flight Check
Current status: !
railway status 2>&1 || echo "NOT_LINKED"
Auto-Recovery
Before running any command, check the pre-flight status above:
- If "command not found": Run
npm install -g @railway/cli
- If "Not logged in": Tell user to run manually (requires browser)
- If "NOT_LINKED" or "No project linked":
- Run to show available projects
- Ask user which project to link, or auto-detect from package.json name
- Link with
railway link -p <project-id>
Command Routing
Based on
, execute the appropriate workflow:
"status" (default when no args)
bash
railway status
railway domain
railway deployment list --limit 1
Report: project info, URL, and last deployment status/time.
"logs" [options]
Parse natural language options:
- "errors" →
- "last hour" / "1h" →
- "build" →
- Number like "100" →
Summarize output - highlight errors, warnings, or interesting patterns.
"deploy" / "up"
Then wait and check:
- Run
railway deployment list --limit 1
to get status
- If SUCCESS, fetch the domain URL and verify it responds:
curl -s -o /dev/null -w "%{http_code}" <domain>
- If FAILED, show build logs:
railway logs --build --lines 50
"redeploy"
Redeploys without rebuilding. Useful for env var changes.
"restart"
Restarts the service without rebuild or redeploy.
"vars" / "env" [action]
IMPORTANT: When displaying variables, redact sensitive values:
- API keys: show first 8 chars + "..."
- Passwords: show "********"
- Tokens: show first 8 chars + "..."
For setting:
railway variables set KEY=value
For deleting:
railway variables delete KEY
(ask for confirmation first!)
"deployments" / "history"
bash
railway deployment list --limit 10
Format as a table with: ID (short), Status, Time ago, Commit message (truncated)
"domain"
Show the public URL. If none exists, offer to create one.
"health"
Then curl the domain to check HTTP status:
bash
curl -s -o /dev/null -w "%{http_code}" -m 10 <domain-url>
Report if healthy (2xx), unhealthy, or unreachable.
"open"
Opens the Railway dashboard in browser.
"switch <project-name>"
Switch to a different Railway project by name (fuzzy match).
bash
# List all projects
railway list
Find the project ID that matches the name, then:
bash
railway link -p <project-id>
Confirm the switch with
.
"db" / "connect"
Connect to the project's database shell (Postgres, MongoDB, Redis, etc.)
If multiple databases exist, Railway will prompt to select one.
"link"
List available projects and link one:
Show projects in a numbered list. Ask user which to link, then:
bash
railway link -p <project-id>
Safety Guards
Before destructive operations, ask for confirmation:
- - removes deployment
- - removes env var
- - unlinks project
Format: "This will [action]. Are you sure? (y/n)"
Response Format
Always provide:
- Summary: One-line status (✓ success / ✗ failure / ⚠ warning)
- Details: Relevant information in a clean table or list
- URL: Public URL if applicable
- Next steps: If something failed, suggest how to fix it
Example Responses
Status check:
✓ MyApp is deployed and healthy
| Project | MyApp |
| Environment | production |
| Service | MyApp |
| URL | https://myapp-production.up.railway.app |
| Last deploy | 2 hours ago (SUCCESS) |
After deploy:
✓ Deployment successful
Build completed in 45s
URL: https://myapp-production.up.railway.app
Health check: 200 OK
On error:
✗ Deployment failed
Build error at line 23: Module not found 'xyz'
Suggested fix: Run `npm install xyz` and redeploy