This is a submission for the Hermes Agent Challenge
Live app: https://devbrief-tau.vercel.app
Repo: github.com/sundayonah/devbrief
Hermes health: devbrief-hermes.onrender.com/health
Setup guide: How I connected Hermes to Next.js
What I Built
DevBrief turns GitHub activity into human-readable standups, PR changelogs, or work logs. Any visitor can sign in with GitHub OAuth, pick a repo, set a time range and branch, filter PRs and authors, choose a tone (casual / formal / concise), and hit Generate.
The Next.js app does not call OpenRouter directly. It fetches commits, PRs, and issues from GitHub, then calls Hermes Agent’s OpenAI-compatible API (POST /v1/chat/completions) on a long-running gateway. Hermes runs the agent loop (skills, tools, server-side model config) and returns the final brief.
Architecture:
Users → DevBrief (Vercel)
↓ POST /api/summary → lib/hermes.ts
Hermes gateway (Docker on Render)
↓ model: openrouter/owl-alpha
OpenRouter (API key only on Hermes — not on Vercel)
Demo
Try it:
- Open devbrief-tau.vercel.app
- Connect GitHub → select a repo → choose output mode and tone → Generate
- Confirm Hermes is up: https://devbrief-hermes.onrender.com/health
Code
Repository: github.com/sundayonah/devbrief
| Piece | Location |
|---|---|
| Hermes client |
lib/hermes.ts → HERMES_ENDPOINT + POST /v1/chat/completions
|
| Summary API | app/api/summary/route.ts |
| Standup skill | hermes-skills/standup-writer.md |
| Hermes Docker image | docker/hermes/Dockerfile |
| Production model config |
docker/hermes/config.yaml (openrouter/owl-alpha, max_tokens: 2048) |
| Deploy guide | docs/DEPLOYMENT.md |
My Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Next.js 14 (App Router), TypeScript, Tailwind CSS |
| Auth & GitHub | NextAuth.js, Octokit, GitHub OAuth |
| AI agent |
Hermes Agent — hermes gateway run + API server |
| Model |
openrouter/owl-alpha via OpenRouter (on Hermes host only) |
| App hosting | Vercel |
| Agent hosting | Docker on Render |
How I Used Hermes Agent
Hermes is not a chatbot wrapper here — the gateway is the brain for every generation.
| Hermes capability | How DevBrief uses it |
|---|---|
| API server |
API_SERVER_ENABLED=true; Next.js calls /v1/chat/completions server-side (no browser CORS) |
| Gateway |
hermes gateway run in Docker on Render — not inside Vercel serverless |
| Skills |
standup-writer.md copied to /root/.hermes/skills/ in the image |
| Server model config |
docker/hermes/config.yaml sets model.default: openrouter/owl-alpha (request model field is not what drives inference) |
| OpenRouter |
OPENROUTER_API_KEY on Render only — not in Vercel env |
| Auth |
API_SERVER_KEY on Render ↔ HERMES_API_KEY on Vercel |
| Cron / messaging |
hermes schedule documented as a next step in the UI; Slack/Telegram delivery disabled in current deploy |
Request flow:
POST /api/summary
→ GitHub API (user OAuth token)
→ generateBrief() in lib/hermes.ts
→ Hermes POST /v1/chat/completions
→ standup / PR changelog / work log
→ UI (copy, edit, history)
The long setup story (WSL PATH, duplicate .env keys, 127.0.0.1 vs localhost, OpenRouter 402, baking config.yaml for Render) is in the tutorial post.
What I learned
-
Start the gateway, hit
/health, then/v1/chat/completionsbefore wiring the app. -
Hermes reads
~/.hermes/config.yamlfor the real model — env vars and JSONmodelalone were not enough on Render until we shippeddocker/hermes/config.yaml. - Split hosting: serverless Next.js + long-running Hermes elsewhere is the right pattern for this challenge.
Thanks for reading — try the live demo and leave a comment if you hit snags with Hermes on Render or Vercel.

Top comments (2)
I've been wanting to use some coding agents lately. I've only used regular Claude AI and Cursor Pro agents so far. This is definitely some good info to get me started. Thank you!
thanks.