소스 정보
- 저장소
- lukemcqueen/hermes-cortex
- 최근 소스 활동
- 2026년 8월 22일 20:24
- 감지된 SKILL.md 언어
- 영어
- 스타
- 4
- 포크
- 1
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/lukemcqueen/hermes-cortex --skill webapp-deploy-verification명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Cross-server agent health monitoring using binary status vectors — deploy health endpoints on each agent, poll from orchestrator, alert on state transitions.
Wire a self-hosted Langfuse instance to Hermes Agent — generate API keys, configure env vars, enable the bundled plugin, install SDK, and verify traces flow.
Use before enforcement code changes or shared-repo commits.
SKILL.md 표시 중
| name | webapp-deploy-verification |
| version | 1.0.0 |
| description | Verify deployed web app routes render and links resolve. |
| author | Hermes Cortex |
| metadata | {"hermes":{"tags":["web","deploy","verification","e2e","routes","links","nextjs","docker"],"related_skills":["deploy-load-verification","integration-audit","dogfood"]}} |
Git commit ≠ running deployment. A committed file is not a serving page. The only proof a web app works is exercising the URL another user would hit and observing the real response. Three axes are independently verifiable — check all three:
Enumerate the route tree from the app dir, then curl each one over the deployed path (never the dev server):
import requests
BASE = "http://127.0.0.1:PORT" # the deployed/proxied origin
routes = ["/", "/about", "/about/x", ...] # from find apps/web/src/app -name page.tsx
for r in routes:
resp = requests.get(BASE + r, allow_redirects=False, timeout=20)
# treat 3xx as "follow, then check final"; 4xx/5xx = broken
Gotchas from the field:
/admin was
layout-only → 404; same for a bare /questions where only [slug] exists).
Flag these separately — no link targets them, but they 404 on direct visit.<title> from each 200 body to confirm you got the right page, not
a generic error page that still returns 200.Read hrefs, then FOLLOW them. Reading href text alone proves nothing. The
expensive failure this session: an i18n header prepended /${locale} (= /en/)
to every nav/footer href, but the locale was a runtime preference
(localStorage/navigator), NOT a URL route — no [locale] dir, no middleware, no
i18n rewrite existed. Every nav/footer link 404'd when clicked, while:
Only following each link surfaced it. The technique:
for each route:
visit it in a real browser, collect every internal <a href>
dedupe the global link set
then HTTP-GET every unique link and assert 200
Also intersect the collected link graph against the actual route tree —
a nav pointing /warriors when the page is /warrior (or /rest vs /breath)
is a dead link neither a route crawl nor a label check will catch.
Synthetic DOM events (dispatchEvent/mouseover) do NOT trigger CSS :hover —
to verify a hover dropdown use a real pointer move, or check the menu nodes exist
in the DOM with correct hrefs and trust the CSS rule.
A compose healthcheck failing does NOT mean the service is down — it means the
probe can't reach the service. unhealthy ≠ down. See the container
pitfalls below; the two classic traps are a server bound to the container IP
(not loopback) and localhost fanning out to IPv6 [::1] first.
server.js binds
to HOSTNAME, which Docker resolves to e.g. 172.26.0.6:3000. A healthcheck
wget http://localhost:3000/ inside is refused while the published -p port
works fine from the host (DNAT targets the container IP).localhost → IPv6 [::1] first. Even after an all-interface bind, a probe
of the hostname localhost resolves to [::1] and gets refused on the
IPv4-only listener. Probe the literal http://127.0.0.1:PORT/, never the
localhost hostname.HOSTNAME: "0.0.0.0" in the compose environment: (or ENV HOSTNAME=0.0.0.0 in the runner stage) AND probe the explicit IPv4 address in
the healthcheck. Verify inside:
docker exec <c> netstat -tlnp | grep :PORT → 0.0.0.0:PORT LISTEN, then
wget -q --spider http://127.0.0.1:PORT/; echo $? → 0.scripts/webapp-http-crawl.py — ready-to-run HTTP route crawl + link check:
pass --base <url> and --routes file-or-list; reports OK/BAD per URL.<a href> collected from the live pages returns 200<title> tag present and correct on the served HTML (empty title = missing metadata export)healthy (not a false unhealthy while serving)