Skip to main content

Docs Site Deployment

This repository is a fork of NousResearch/hermes-agent. It publishes its own docs site at https://agent.yyc3.vip (GitHub Pages, custom domain) under the YYC3 Hermes Agent brand, while keeping upstream attribution intact.

Two deployment chains​

Upstream deploy-site.ymlFork deploy-pages.yml
TriggerPush to main (website paths)Push to main (website/**, pubilc/**, workflow file) + workflow_dispatch
Gategithub.repository == 'NousResearch/hermes-agent'github.repository == 'YYC-Cube/YYC3-Hermes-Agent'
AuthGitHub App tokenBuilt-in GITHUB_TOKEN
Skills indexCrawls the live skills libraryReuses the upstream index via CDN GET (hermes-agent.nousresearch.com/docs/api/skills-index.json), falls back to {"skills": []}
Custom domain—pubilc/CNAME staged at artifact root
URL shape/docs/ baseUrlDomain root (baseUrl: '/')

The fork workflow never calls upstream-generated assets that require the App token; the CDN re-use keeps the skills catalog fresh with zero API cost.

Build & stage locally​

cd website
npm ci
npm run build # outputs build/ (zh-Hans nested, en at root)

Keep lockfiles on the official registry. npm ≥ 11.6 rejects packages whose resolved URL points at a different host than the configured registry (EALLOWREMOTE: Fetching packages of type "remote" have been disabled). If your global npm registry is a mirror (e.g. registry.npmmirror.com), npm install/npm update will write mirror tarball URLs into package-lock.json and break CI with npm ci. After local installs, check and repoint: grep -c npmmirror package-lock.json should be 0.

deploy-pages.yml stages the language-prefixed build plus llms.txt into _site/ at the domain root and copies pubilc/CNAME to _site/CNAME, then uploads via actions/upload-pages-artifact and deploys with actions/configure-pages + actions/deploy-pages. Custom domain + "Enforce HTTPS" are configured in the repo's Pages settings.

Brand assets​

All icons derive from pubilc/yyc3-icons/ (iOS, Android, macOS, Windows, tvOS, watchOS sets).

TargetSourceNotes
apps/desktop/assets/icon.icnsmacos/AppIcon.iconseticonutil -c icns
apps/desktop/assets/icon.icowindows/windows/icon-256.pngPillow save(format='ICO', sizes=[(16,16)...(256,256)]) — multi-frame
apps/desktop/assets/icon.png, apps/desktop/public/apple-touch-icon.pngmacos/.../icon_512x512@2x.png1024px
web/public/favicon.ico, website/static/img/favicon.icowindows/windows/icon-256.pngSame ICO recipe as desktop
website/static/img/logo.png, favicon-16x16.png, favicon-32x32.png, apple-touch-icon.pngicon setswebsite/docusaurus.config.ts references them

electron-builder resolves "icon": "assets/icon" by prefix, so the .icns/.ico/.png triple replaces the upstream icons without config changes. The desktop app's runtime identity (productName: Hermes, appId: com.nousresearch.hermes, protocol handler) intentionally stays upstream — renaming it would break auto-update and deep links.