skills/railway-deployer/SKILL.md
Deploy and manage Railway services using templates via the Railway API. Use for deploying Railway templates (FastAPI, Next.js, databases), creating multi-service projects, managing Railway deployments, setting up infrastructure from pre-configured templates, or deploying custom template definitions.
npx skillsauth add garrettroi/open-manus railway-deployerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Deploy and manage Railway services using pre-configured templates via the Railway GraphQL API.
This skill enables programmatic deployment of Railway templates, replicating the "Deploy to Railway" experience through API calls. Deploy popular stacks (FastAPI + PostgreSQL, databases, etc.) or custom template definitions with automatic configuration of services, variables, networking, and volumes.
Set Railway API token as environment variable:
export RAILWAY_TOKEN="your-token"
# or
export RailwayAPI="your-token"
Get token from: https://railway.com/account/tokens
from scripts.template_deployer import deploy_template
# Deploy FastAPI + PostgreSQL
result = deploy_template('/home/ubuntu/skills/railway-deployer/templates/fastapi.json')
# Result includes project_id, service IDs, URLs, and configuration
print(result)
Create a template JSON file following the template format (see Template Catalog), then deploy:
result = deploy_template('/path/to/custom_template.json')
Pre-configured templates in templates/ directory:
For detailed template information, read /home/ubuntu/skills/railway-deployer/references/template_catalog.md
Templates define services, variables, settings, networking, and volumes:
{
"name": "Template Name",
"description": "Description",
"services": [
{
"name": "service-name",
"source": {
"type": "github|docker",
"repo": "user/repo",
"branch": "main",
"image": "image:tag"
},
"variables": {
"KEY": "value",
"SECRET": "${{secret(32)}}",
"DB_URL": "${{SERVICE.postgres.DATABASE_URL}}"
},
"settings": {
"startCommand": "command",
"healthcheckPath": "/path",
"rootDirectory": "/"
},
"networking": {
"public": true
},
"volumes": [
{"mountPath": "/data"}
]
}
]
}
${{secret()}} - 32-char random secret${{secret(64)}} - 64-char random secret${{secret(16, "0123456789abcdef")}} - 16-char hex secret${{randomInt()}} - Random int (0-100)${{randomInt(1000, 9999)}} - Random int between 1000-9999${{SERVICE.postgres.DATABASE_URL}} - Reference variable from another serviceDatabase services (PostgreSQL, MySQL, MongoDB, Redis) automatically generate:
Example for PostgreSQL:
POSTGRES_PASSWORD - Auto-generatedPOSTGRES_USER - "postgres"POSTGRES_DB - Service nameDATABASE_URL - Full connection stringMain deployment script:
from scripts.template_deployer import TemplateDeployer, load_template
from scripts.railway_client import RailwayClient
# Load template
template = load_template('templates/fastapi.json')
# Create client
client = RailwayClient()
# Deploy
deployer = TemplateDeployer(client, template)
result = deployer.deploy()
Direct API operations:
from scripts.railway_client import RailwayClient
client = RailwayClient()
# Create project
project = client.create_project("My Project", "Description")
# Create service from GitHub
service = client.create_service_from_github(
project_id=project['id'],
name="api",
repo="user/repo",
branch="main"
)
# Set variables
client.set_variables(
project_id=project['id'],
environment_id=env_id,
service_id=service['id'],
variables={"KEY": "value"}
)
# Add domain
domain = client.add_railway_domain(
service_id=service['id'],
environment_id=env_id
)
Generate secrets and resolve variables:
from scripts.template_functions import (
generate_secret,
generate_random_int,
parse_template_variable,
resolve_all_variables
)
# Generate secret
secret = generate_secret(32)
# Generate random int
port = generate_random_int(3000, 9000)
# Parse template variable
value = parse_template_variable(
"${{secret(32)}}",
context={'services': {}}
)
# Resolve all variables in dict
resolved = resolve_all_variables(
{"SECRET": "${{secret()}}", "PORT": "${{randomInt(3000, 9000)}}"},
context={'services': {}}
)
# PostgreSQL
deploy_template('templates/postgres.json')
# Redis
deploy_template('templates/redis.json')
# MongoDB
deploy_template('templates/mongodb.json')
# FastAPI + PostgreSQL
deploy_template('templates/fastapi.json')
{
"name": "Custom Stack",
"description": "Frontend + Backend + Database",
"services": [
{
"name": "frontend",
"source": {"type": "github", "repo": "user/frontend"},
"variables": {"API_URL": "${{SERVICE.backend.url}}"},
"networking": {"public": true}
},
{
"name": "backend",
"source": {"type": "github", "repo": "user/backend"},
"variables": {
"DATABASE_URL": "${{SERVICE.postgres.DATABASE_URL}}",
"SECRET_KEY": "${{secret(32)}}"
},
"networking": {"public": true}
},
{
"name": "postgres",
"source": {"type": "docker", "image": "postgres:16"},
"volumes": [{"mountPath": "/var/lib/postgresql/data"}]
}
]
}
Ensure RAILWAY_TOKEN or RailwayAPI environment variable is set:
export RAILWAY_TOKEN="your-token"
${{function()}}Successful deployment returns:
{
"project_id": "project-id",
"environment_id": "environment-id",
"template_name": "Template Name",
"services": {
"service-name": {
"id": "service-id",
"name": "service-name",
"url": "https://service.railway.app",
"has_database_url": true
}
}
}
${{SERVICE.name.VAR}} for service-to-service connectionsAfter deployment:
development
# Voice Sanitizer This skill cleans up text before it is sent to the Text-to-Speech (TTS) engine. It removes technical jargon, code blocks, and long URLs to ensure the agent sounds natural and conversational in voice chat. ## Usage To sanitize text for speech, run the following command in the terminal: ```bash python3 /app/skills/voice_sanitizer/sanitizer.py "Your long, technical text with `code` and https://links.com/long-url" ``` ### Example Output ```text Your long, technical text with a
tools
Professional AI video production workflow. Use when creating videos, short films, commercials, or any video content using AI generation tools.
tools
Secure API key access from the centralized vault. Fetch keys on-demand without storing them in environment variables.
testing
# Task Board — Persistent Task Tracking for Open Manus This skill provides a shared task board backed by Redis. Harmony uses it to track delegated work across all agents, and agents use it to report progress and completion. ## When to Use - **Harmony**: Use this whenever you delegate a task to an agent. Add the task to the board, then check the board periodically to follow up. - **Worker Agents**: Use this to update your task status or mark tasks as complete. ## Commands ### Add a new task