AppsAgent
Production
Deploy the Agent to Railway.
The Agent Docker image is built from apps/agent/Dockerfile. See Deploy for the build & push workflow.
Railway service
- Create a new project on railway.com
- Add a service → Docker Image →
ghcr.io/yannickarmspach/sherpa-agent:latest - Add ghcr.io registry credentials (GitHub username + PAT with
read:packages) - Set the port to
3000
Environment variables
ANTHROPIC_API_KEY=sk-ant-...
CLAUDE_MODEL=claude-sonnet-4-6
QOBI_USER_ID=<your basecamp person id>Health check
Configure the health check to GET /health — it returns "ok" when the server is ready.
Persistent volume
Mount a volume at /root to persist credentials across deploys:
| Path | Contents |
|---|---|
/root/.claude/ | Claude auth tokens and plugin cache |
/root/.config/basecamp/ | Basecamp OAuth credentials |
/root/.logs/ | Webhook processing logs |
/root/memory.json | Processed webhook deduplication |
Without a persistent volume, you'll need to re-authenticate Claude and Basecamp after every deployment.
Initial authentication
After the first deploy, exec into the container to authenticate:
# In the Railway container shell:
claude auth login
basecamp auth loginDomain
Generate a Railway domain or add a custom domain. This URL is where Basecamp webhooks will point.
Basecamp webhooks
Point Basecamp webhooks to the Agent's public URL:
https://your-agent-domain.railway.app/webhooksFor managed webhook delivery with retries and monitoring, use Hookdeck. Create a connection with Basecamp as the source and your Agent URL as the destination.