Loading...
Loading...
Install and configure Oh My Hermes workflow layer for building, shipping, and operating apps with Hermes Agent
npx skill4agent add aradotso/hermes-skills oh-my-hermes-workflowSkill by ara.so — Hermes Skills collection.
# One-line install
curl -fsSL https://raw.githubusercontent.com/salomondiei08/oh-my-hermes/main/install.sh | bash
# Or clone and install manually
git clone https://github.com/salomondiei08/oh-my-hermes /tmp/oh-my-hermes
bash /tmp/oh-my-hermes/install.sh# Navigate to your project directory
cd /path/to/your/project
# Run bootstrap script
bash /tmp/oh-my-hermes/scripts/bootstrap.sh
# Verify installation
bash /tmp/oh-my-hermes/scripts/verify.shset up the CTO loop~/.hermes/skills/# Trigger in Hermes chat
"walk me through setting up oh my hermes"# Trigger in Hermes chat
"start a new app"
"clarify requirements for this project"# Trigger after clarify-requirements
"generate the product brief"PRODUCT_BRIEF.md# Trigger in Hermes chat
"convert my design to implementation spec"# Trigger in Hermes chat
"implement this feature"# Invoked by choose-engine for complex multi-file tasks
# Scaffolds Claude Code with:
# - Full project context
# - Scope constraints
# - Security guardrails# Invoked by choose-engine for single-file fixes
# Quick targeted edits# Trigger in Hermes chat
"deploy to vercel"
"ship this to production"# Trigger in Hermes chat
"connect supabase"
"set up database"# Trigger in Hermes chat
"set up monitoring"# Runs automatically every 15 minutes
# Manual trigger:
"run health check"/api/health# Trigger in Hermes chat
"triage github issues"
"create issue for bug in login"
"close issue #42"# Automatic during implementation workflow
# Includes:
# - Secret scan before PR creation
# - Conventional commit messages
# - Linked issue references# Runs hourly via cron
# Scores issues by:
# - User impact
# - Business priority
# - Technical debt
# Picks top priority and starts implementation# Automatic when PR is ready
# Provides:
# - Diff analysis
# - Security checks
# - Plain-English summary
# - Preview URL validation# Runs on every PR
# Weekly supply chain audit
"run security review on PR #12".hermes/config.env# GitHub Integration
GITHUB_OWNER=your-username
GITHUB_REPO=your-repo
GITHUB_TOKEN=${GITHUB_TOKEN} # Fine-grained token with repo access
# Deployment
VERCEL_TOKEN=${VERCEL_TOKEN} # Vercel API token
VERCEL_PROJECT_ID=${VERCEL_PROJECT_ID}
VERCEL_ORG_ID=${VERCEL_ORG_ID}
# Database
SUPABASE_URL=${SUPABASE_URL}
SUPABASE_ANON_KEY=${SUPABASE_ANON_KEY}
SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY}
# Monitoring
SENTRY_DSN=${SENTRY_DSN}
UPTIME_KUMA_URL=${UPTIME_KUMA_URL}
UPTIME_KUMA_TOKEN=${UPTIME_KUMA_TOKEN}
# Notifications
SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}
TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID}
# Production
PRODUCTION_URL=https://yourapp.com~/.hermes/memory/
├── requirements.json # From clarify-requirements
├── product-brief.md # Generated brief
├── kanban-state.json # Current task status
└── deployment-log.json # Deployment historyBacklog → In Progress → Review → Done~/.hermes/memory/kanban-state.json{
"backlog": [
{"id": "issue-42", "priority": 8, "title": "Fix login redirect"}
],
"in_progress": [
{"id": "issue-39", "assigned": "dev-agent", "started": "2026-05-16T10:00:00Z"}
],
"review": [
{"id": "pr-12", "reviewer": "security-agent", "checks": ["secret-scan", "owasp"]}
],
"done": [
{"id": "issue-38", "completed": "2026-05-15T14:30:00Z", "deployed": true}
]
}Start a new app called TaskFlow — a Kanban board for small teamsclarify-requirementsPRODUCT_BRIEF.mdchoose-engineAdd Google OAuth login to the appPR #15 — Add Google OAuth login
What changed: Users can now sign in with Google.
Added /api/auth/google endpoint and callback handler.
Build: passing | Preview: healthy (200ms) | No secrets found
Preview: https://taskflow-oauth.vercel.app
Reply YES to ship. Reply NO and tell me why.YES# From your project directory
cd /path/to/your/project
# Message Hermes:
"deploy to vercel"
# Or run skill directly (if configured)
hermes run deploy-to-vercel# Message Hermes:
"run security review on main branch"
# Hermes will:
# - Scan for hardcoded secrets
# - Check dependencies for CVEs
# - Run OWASP checks
# - Generate report# Message Hermes:
"check if production is healthy"
# Hermes validates:
# - Production URL responds
# - Database is connected
# - API endpoints work
# - Response times are acceptable┌─────────────────────────────────────────┐
│ GitHub Issue Opened (#42) │
└───────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ PM Agent (auto-issue-triage) │
│ - Scores issue: priority 8/10 │
│ - Moves to Backlog │
└───────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Dev Agent (implement) │
│ - Moves to In Progress │
│ - Writes code │
│ - Creates PR #12 │
└───────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Security Agent (security-review) │
│ - Secret scan: PASS │
│ - OWASP check: PASS │
│ - CVE scan: PASS │
└───────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ QA Agent (review-github-pr) │
│ - Build: passing │
│ - Health check: 180ms │
│ - Plain-English summary written │
│ - Moves to Review │
└───────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Notification Sent (YOU on Telegram) │
│ "PR #12 ready. Reply YES to ship." │
└───────────┬─────────────────────────────┘
│
┌──────┴──────┐
│ │
▼ ▼
┌─────┐ ┌──────┐
│ YES │ │ NO │
└──┬──┘ └───┬──┘
│ │
│ ▼
│ ┌────────────────┐
│ │ Dev Agent │
│ │ iterates on │
│ │ your feedback │
│ └────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Ops Agent │
│ - Merges PR │
│ - Deploys to production │
│ - Runs health check │
│ - Confirms live URL │
│ - Moves to Done │
└─────────────────────────────────────────┘/goal/goal Build a working MVP of TaskFlow with Google OAuth, deploy to Vercel, and set up monitoring — all within the next 2 hours# Message Hermes:
"create a new skill for automated database backups"
# Hermes will:
# - Use create-skill meta-skill
# - Generate skill template
# - Save to ~/.hermes/skills/db-backup.md
# - Make it available for invocation---
name: db-backup
description: Automated Supabase database backup to S3
triggers:
- "backup the database"
- "create db backup"
---
# db-backup
## What it does
Creates timestamped backup of Supabase database and uploads to S3.
## Prerequisites
- Supabase CLI installed
- AWS credentials configured
- S3 bucket created
## Steps
1. Export database: `supabase db dump -f backup.sql`
2. Compress: `gzip backup.sql`
3. Upload: `aws s3 cp backup.sql.gz s3://my-backups/$(date +%Y%m%d-%H%M%S).sql.gz`
4. Verify upload
5. Clean up local files
6. Notify completion
## Configuration
- S3_BUCKET=${S3_BUCKET}
- SUPABASE_PROJECT_REF=${SUPABASE_PROJECT_REF}~/.hermes/cron.d/# Hourly issue triage
0 * * * * hermes run auto-issue-triage
# Daily deployment report
0 9 * * * hermes run daily-report
# Weekly security audit
0 2 * * 0 hermes run security-review --full-audit
# Every 15 minutes health check
*/15 * * * * hermes run health-check# Message Hermes:
"refactor the authentication system to use sessions instead of JWT"
# Hermes workflow:
# 1. choose-engine analyzes complexity
# 2. Determines Claude Code is needed
# 3. Scaffolds Claude Code session with:
# - Full project context
# - Relevant files identified
# - Scope constraints
# - Security requirements
# 4. Claude Code performs refactor
# 5. Hermes reviews changes
# 6. Creates PR for your approval# Verify skills directory
ls -la ~/.hermes/skills/
# Re-run installer
bash /tmp/oh-my-hermes/install.sh
# Check Hermes logs
tail -f ~/.hermes/logs/hermes.log# Verify token has correct permissions
# Required: repo (full), workflow, admin:repo_hook
# Test token manually
curl -H "Authorization: Bearer ${GITHUB_TOKEN}" \
https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}
# Reconfigure in Hermes chat:
"reconfigure github integration"# Verify Vercel token
vercel whoami
# Check environment variables are set
hermes run verify-env
# View deployment logs
vercel logs ${VERCEL_PROJECT_ID}
# Manual health check
curl https://your-production-url.vercel.app/api/health# Verify Sentry DSN
echo ${SENTRY_DSN}
# Test Uptime Kuma connection
curl ${UPTIME_KUMA_URL}/api/status
# Reconfigure monitoring
"set up monitoring again"# Check cron jobs are configured
crontab -l | grep hermes
# Verify Hermes daemon is running
ps aux | grep hermes
# Restart Hermes
systemctl restart hermes # if using systemd
# or
hermes restart
# Check kanban state
cat ~/.hermes/memory/kanban-state.json~/.hermes/config/agents.yamlagents:
pm:
issue_scoring:
user_impact_weight: 0.4
business_priority_weight: 0.3
technical_debt_weight: 0.3
auto_triage_frequency: "0 * * * *" # Hourly
dev:
max_parallel_tasks: 2
preferred_engine: "claude-code" # or "codex" or "hermes"
security:
require_all_checks: true
fail_on_secrets: true
weekly_audit_day: "sunday"
qa:
health_check_timeout: 5000 # ms
required_response_time: 1000 # ms
ops:
auto_merge_on_approval: true
deployment_health_check_retries: 3~/.hermes/config/notifications.yamltemplates:
pr_ready:
title: "PR #{pr_number} — {pr_title}"
body: |
What changed: {summary}
Build: {build_status} | Preview: {health_status} ({response_time}ms)
Security: {security_status}
Preview: {preview_url}
Reply YES to ship. Reply NO and tell me why.
deployment_success:
title: "✅ Deployed to production"
body: |
{project_name} v{version}
URL: {production_url}
Health: {health_status}
Deploy time: {deploy_time}s"set up oh my hermes"~/.hermes/memory/.hermes/skills/.env.gitignore# Deploy
vercel deploy --prod
# Get deployment URL
vercel ls ${PROJECT_NAME} --json | jq -r '.[0].url'
# Set environment variable
vercel env add SUPABASE_URL production# Push migrations
supabase db push
# Get connection string
supabase db connection-string
# Run query
supabase db query "SELECT * FROM users LIMIT 1"# Create issue
curl -X POST \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "Content-Type: application/json" \
https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/issues \
-d '{"title": "Bug in login", "body": "Description", "labels": ["bug"]}'
# Create PR
curl -X POST \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "Content-Type: application/json" \
https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/pulls \
-d '{"title": "Fix login", "head": "fix-login", "base": "main", "body": "Fixes #42"}'# Initialize
sentry-cli init
# Upload source maps
sentry-cli releases files ${VERSION} upload-sourcemaps ./dist