User Story Writer
deanpeters/Product-Manager-Skills
Writes user stories in Mike Cohn's format with Gherkin acceptance criteria, turning user needs into development-ready work with testable conditions.
[omh] Accepted plan awaiting implementation: split it into disjoint parallel lanes with per-lane acceptance criteria, verification commands, and owners; prevents two lanes editing the same file.
$ npx skills add rlaope/oh-my-hermes --skill ulw-work -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rlaope/oh-my-hermes ulw-work --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rlaope/oh-my-hermes.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ulw-work .claude/skills/ulw-work && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ulw-work" agent skill from https://github.com/rlaope/oh-my-hermes/tree/main/skills/ulw-work into .claude/skills/ulw-work/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ulw-work", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rlaope/oh-my-hermes/tree/main/skills/ulw-workType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rlaope/oh-my-hermes --skill ulw-work -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rlaope/oh-my-hermes ulw-work --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rlaope/oh-my-hermes.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ulw-work .agents/skills/ulw-work && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ulw-work" agent skill from https://github.com/rlaope/oh-my-hermes/tree/main/skills/ulw-work into .agents/skills/ulw-work/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ulw-work", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rlaope/oh-my-hermes --skill ulw-work -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rlaope/oh-my-hermes ulw-work --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rlaope/oh-my-hermes.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ulw-work .cursor/skills/ulw-work && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ulw-work" agent skill from https://github.com/rlaope/oh-my-hermes/tree/main/skills/ulw-work into .cursor/skills/ulw-work/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ulw-work", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rlaope/oh-my-hermes.git --path skills/ulw-work--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rlaope/oh-my-hermes --skill ulw-work -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rlaope/oh-my-hermes ulw-work --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rlaope/oh-my-hermes.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ulw-work .gemini/skills/ulw-work && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ulw-work" agent skill from https://github.com/rlaope/oh-my-hermes/tree/main/skills/ulw-work into .gemini/skills/ulw-work/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ulw-work", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rlaope/oh-my-hermes ulw-workInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rlaope/oh-my-hermes --skill ulw-work -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rlaope/oh-my-hermes.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ulw-work .github/skills/ulw-work && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ulw-work" agent skill from https://github.com/rlaope/oh-my-hermes/tree/main/skills/ulw-work into .github/skills/ulw-work/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ulw-work", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rlaope/oh-my-hermes --skill ulw-work -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rlaope/oh-my-hermes ulw-work --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rlaope/oh-my-hermes.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ulw-work .opencode/skills/ulw-work && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ulw-work" agent skill from https://github.com/rlaope/oh-my-hermes/tree/main/skills/ulw-work into .opencode/skills/ulw-work/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ulw-work", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ulw-work[omh] Accepted plan awaiting implementation: split it into disjoint parallel lanes with per-lane acceptance criteria, verification commands, and owners; prevents two lanes editing the same file.
Ulw Work is an agent skill from rlaope/oh-my-hermes. [omh] Accepted plan awaiting implementation: split it into disjoint parallel lanes with per-lane acceptance criteria, verification commands, and owners; prevents two lanes editing the same file. Aliases: ulw. Use when the user says: ultrawork, parallel work, parallel implementation, parallel then integrate, high throughput, coding team, coordinated workers, finish until done.
Its SKILL.md is about 7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files (for example `references/campaign-orchestrator.md`, `references/dependency-topology.md` and `references/file-ownership-manifest.md`).
It sits in Product & Project Management, covering User stories. The repository describes itself as: All in one plugin for Hermes Agent ⚚ the coding intelligence, a long-term memory system and model optimized workflow packages. The licence is MIT.
Read from SKILL.md and the folder at commit 41de9dc. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
makeclaudecodexFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ulw Work loads about 7k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 97 tokens; SKILL.md has 3,710 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from rlaope/oh-my-hermes at commit 41de9dc, republished under its MIT licence (© rlaope). 3,710 words, ~7,031 tokens.
.claude/skills/ulw-work/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.This is a Hermes-native ultrawork workflow skill.
ultrawork exists to choose one-owner, ordered-dependency, or independent-frontier execution for an accepted implementation plan without letting concurrency blur ownership, verification, worker protocol, worktree isolation, or observed runtime evidence. It also carries four named internal capabilities absorbed from sibling engines: coordinated_scope (coordinated worker lanes), delivery_boundary (one bounded plan-to-PR cycle), single_owner_persistence (one owner finishes and verifies), and durable_checkpoint (durable goal ledger with checkpoints and a final gate).
omh_todo (todo init) — bootstrap, one implement/verify/deliver task per lane or work unit, independent review lanes, and an evidence-and-cleanup close, with one task per observable outcome — keep exactly one item active while working, and update states as lanes complete; the run walks a bounded, HUD-visible checklist instead of an open-ended reasoning loop. Phase names and task titles are written in English — short, operator-legible labels — even when the conversation runs in another language, since the HUD todo checklist is an operator surface under the repo's English-by-default output contract.decision-prototype.coordinated_scope capability before parallel delivery.loop instead.durable_checkpoint capability.single_owner_persistence capability.loop.Good example:
Bad example:
omh_delegate_route before dispatch, or its parent inheritance was explicitly stated; an inherit-labeled wave is an unrouted wave.hermes_coding_harness/v1 to separate builder, verifier, reviewer, docs, and PR lanes.omh_run_summary line (elapsed seconds and token usage) or an explicit run-summary not_available statement — never a model-estimated number.idea-to-deploy, llm-app-dev, cto-loop, deploy-and-monitor, code-review, build-failure-triage, verification-gate, security-safety-review, +28 more) - coding owners, handoffs, review, CI, and merge evidence.oh-my-hermes or name the adjacent workflow.omh-routing/references/skill-common-rail.md.Use when an accepted implementation plan can be split into independent, reviewable work lanes.
Strong routing signals: `ultrawork`, `$ultrawork`, `ulw`, `$ulw`, `parallel work`, `parallel implementation`, `parallel then integrate`, `high throughput`, `coding team`, `coordinated workers`, `finish until done`, `persistent execution`, `implement`, `one-cycle delivery`, `single-cycle delivery`, `end-to-end process`, `delivery process`, `research plan implement review docs pr`, `plan implement review docs pr`, `prepare a pr`, `make a pr`, `open a pr`, `pr-ready`, `red green refactor`, `red-green refactor`, `red-green`, `failing test first`, `並列で実装`, `並列実装`, `並行して実装`, `コーディングチームで`, `并行实现`, `并行开发`, `并行推进`, `编码团队`Category: execution
Phase: parallel-delivery
Hermes role: handoff-guide
Quality tier: handoff-gated
Reasoning demand: heavy
Quality bar:
references/dependency-topology.md for the full discipline, references/kanban-lane.md for lanes outliving the session, references/team-lane.md for checked lanes.references/file-ownership-manifest.md.omh handoff-risk-scan --brief-file <final-brief> --repo <workspace> --strict --json. Route high_risk (exit 1) to existing confirmation or security-safety-review; scan_error (exit 2) requires repaired input and a new scan. Clear never grants permission or bypasses metadata preflight, approval, or host policy.references/tdd-red-green.md for the full discipline.omh_delegate_route mixture route and acceptance criteria and verification commands attached; hand off to the durable_checkpoint capability for work that must survive sessions, and prepare a selected external executor/runtime path only on the user's explicit owner acceptance.ulw-maestro's contract — load it and follow its explicit-owner precondition, skill-set-informed prompt composition, readiness and permission probes, and session-id capture; a lane with an external owner is never a Hermes-native delegate_task lane. Lane framing, disjointness, integration verification, and the closing brief stay here.omh_run_summary with the conversation's language and print its summary_text verbatim as the final lines (elapsed seconds, token usage, and models used from observed host accounting — never numbers the model estimated); when the tool reports a non-observed status (no session id, no accounting row), print an explicit run-summary not_available line instead of omitting it or estimating the numbers.ulw-loop/references/goal-constraint-discipline.md for the method.Handoff policy:
Keep the workflow name for compatibility. The default implementation owner is the Hermes coding harness itself: run coding lanes as Hermes-native delegate_task subagents with OMH skills loaded, each lane given disjoint scope, verification, and review expectations, and each lane routed through the mixture categories — set the route with the omh_delegate_route tool before dispatch (research/scan lanes quick or unspecified-low; ideation and hard debugging ultrabrain or deep; architecture and system-design lanes architect; visual work visual-engineering or artistry; docs writing) and name the routed category and reasoning effort in the lane's status. When the user names a model for the run (for example 'use fable' or 'fable로 해줘'), pin it: keep the fitting category for each lane's label but pass the user's model and reasoning effort as explicit overrides in omh_delegate_route on every lane, so each dispatch runs the named model and the lane status shows it. [capability:delivery_boundary] Convert implementation into an external executor/runtime handoff such as Codex, Claude Code, OMX/OMO/OMC, or another coding agent only when the user accepts that owner; no external CLI is the default owner, and external handoff is a separate opt-in path, never the default recommendation.
Executor readiness:
executor_readiness/v1 for the selected Codex, Claude Code, Hermes, or oh-my runtime path before first dispatch.missing or blocked, ask the user to choose another coding agent, configure PATH, continue in Hermes, or keep a prompt/runtime handoff; retry only after that state changes.Delegation transparency:
... [truncated, N chars total] — the user must see WHAT was asked, not just that something was.(model effort) in status and briefing lines — including runtime-native subagents; when no effort is exposed, show the model alone as (model) rather than writing a placeholder like unknown beside a known model, and never emit empty parentheses. Carry token and elapsed figures the same way in these narration lines: report observed figures and omit unobserved ones — when the user asks for a figure directly, say it was not observed instead of omitting it; a rendered status-board column keeps its own unknown cell.--output-format json and read session_id from the result (resume with claude -p --resume <session-id>); for Codex pass --json and read thread_id (resume with codex exec resume <thread-id>, repeating --skip-git-repo-check outside a git repo). Never leave a delegate run with no recorded way to resume or steer it — a plain-text one-shot that hides its session id strands the work when the run stalls or times out.--permission-mode acceptEdits or an explicit --allowedTools list (--dangerously-skip-permissions only inside an isolated worktree or sandbox), and the equivalent sandbox/approval flags for other CLIs. acceptEdits: true is not a settings key and ~/.claude/settings.local.json is not a file Claude Code reads — user scope is ~/.claude/settings.json and project scope is the dispatch cwd's .claude/settings.local.json with rules under permissions.allow. Prove the grant with a bounded scratch-edit probe run before the real dispatch: a permission denial in a non-interactive run recurs identically on retry, so never redispatch until a changed grant is proven, and surface an ungrantable permission as a blocker before dispatch, not after minutes of silence.Required inputs:
Expected outputs:
durable_checkpoint or selected executor/runtime handoffArtifact expectations:
Safety rules:
loop when the user wants ongoing cycles.When the user asks for TDD, tests first, or red-green delivery, every implementation lane runs under the red/green contract. The iron law: no implementation line before a failing test - write the test that describes the missing behavior, run it, and watch it fail for the right reason before any implementation edit. A cycle is observed only when a failing (non-zero) run of the lane's test command precedes a passing (zero) run, both with pasted output; a lane that shows only green is prepared_not_observed on its red phase and does not count as tests-first delivery. Never edit, delete, skip, xfail, or weaken a test to make it pass - a failing test means fix the code - and a test that passes on its first run proves nothing: make it fail first. Commit the failing test as a checkpoint before implementing, so any later test edit is diff-visible.
Hermes bundles the superpowers test-driven-development skill; when it is loaded, follow its cycle - this contract reinforces it with OMH's evidence vocabulary and never overrides it. Load references/tdd-red-green.md for the full discipline: the evidence ledger, forbidden moves, the rationalization table, and the observed red-before-green rule.
Preferred harness for this skill: goal-execution.
omh runtime record --skill ultrawork --harness goal-execution --status startedRecord observed delegation results; otherwise return not_available or not_observed.
Prepared OMH routing is not execution, review, CI, merge-readiness, or merge evidence.
memory_review_card/v1 or handoff_context_pack/v1, treat it as reviewed OMH-local or wrapper-supplied context only. Use conflict-free context summaries to shape plans and handoffs, but do not claim Hermes internal memory was read or changed.
Preserve workflow intent and stop conditions; verify before claiming completion.
Reply in the user's own words and the host's own voice: its SOUL.md persona owns reply language, tone, speech level, and sentence endings, progress updates included (where it sets no language, use the one the user wrote in), and OMH shapes structure and content only; OMH's record terms (surface, lane, wrapper, handoff, evidence boundary, not_observed) stay in records and tool calls, never in the sentence the user reads unless they ask about one; and when a stop condition or a decision the user owns ends the turn, offer the next action as a question rather than declaring what will not be done.Use Hermes-native subagent/delegation features when available: native subagents -> Hermes delegation when available, otherwise sequential lanes.
Shared product, compatibility, topology, memory, harness, and execution rules: omh-routing/references/skill-common-rail.md. Load it when applicable; otherwise name an unavailable capability.
© rlaope, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files (references) in skills/ulw-work of rlaope/oh-my-hermes.
Open the folder on GitHubat commit 41de9dc
Ulw Work next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ulw Work this skillrlaope/oh-my-hermes | 3.2k | — | ~7k | Automated safety check: Pass | MIT | |
| User Story Writerdeanpeters/Product-Manager-Skills | 7.2k | 2 repos | ~2.9k | Automated safety check: Pass | Custom licence | |
| Ralph Tui Create Beadssubsy/ralph-tui | 2.5k | 1 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Agile Product Owneralirezarezvani/claude-skills | 28k | 3 repos | ~3.2k | Automated safety check: Pass | MIT | |
| Ralph Tui Create Beads Rustsubsy/ralph-tui | 2.5k | 1 repos | ~2.8k | Automated safety check: Pass | MIT | |
| To Specbestofjs/bestofjs | 3.1k | 21 repos | ~757 | Automated safety check: Pass | MIT |
deanpeters/Product-Manager-Skills
Writes user stories in Mike Cohn's format with Gherkin acceptance criteria, turning user needs into development-ready work with testable conditions.
subsy/ralph-tui
Convert PRDs to beads for ralph-tui execution. An agent skill from subsy/ralph-tui.
alirezarezvani/claude-skills
Writes INVEST-checked user stories with acceptance criteria, splits epics, plans sprints from velocity and ranks the backlog with a weighted score.
subsy/ralph-tui
Convert PRDs to beads for ralph-tui execution using beads-rust (br CLI).
bestofjs/bestofjs
Turn the current conversation into a spec and publish it to the project issue tracker — no interview, just synthesis of what you've already discussed.
subsy/ralph-tui
Convert PRDs to prd.json format for ralph-tui execution. An agent skill from subsy/ralph-tui.
rlaope/oh-my-hermes
[omh] Screen-reader or keyboard accessibility gaps: prepare WCAG, keyboard, focus, screen-reader, target-size, and reflow evidence gates for UI surfaces.
rlaope/oh-my-hermes
[omh] Choosing between coding agents on evidence: compare executor or agent choices on reproducible tasks using quality, cost, time, tool, and evidence metrics.
rlaope/oh-my-hermes
[omh] Agent instruction file for a repo -- AGENTS.md, CLAUDE.md, a Cursor rule: write or update what an agent cannot derive from the code, inside a marked region, with every command verified or…
rlaope/oh-my-hermes
[omh] AI agent progress for managers: help managers inspect AI-agent progress, blockers, quality gates, and throughput levers.
rlaope/oh-my-hermes
[omh] Messy or AI-generated code to clean up: delete AI-generated slop, dead code, and duplication while observable behavior stays identical.
rlaope/oh-my-hermes
[omh] Application code misbehaves -- a wrong value, a flaky test, a lost update: reproduce it first, form competing hypotheses, discriminate them with the cheapest observation, and only then fix the…
Categories
[omh] Accepted plan awaiting implementation: split it into disjoint parallel lanes with per-lane acceptance criteria, verification commands, and owners; prevents two lanes editing the same file. Ulw Work is an agent skill from rlaope/oh-my-hermes. [omh] Accepted plan awaiting implementation: split it into disjoint parallel lanes with per-lane acceptance criteria, verification commands, and owners; prevents two lanes editing the same file.
Ulw Work fits situations like: the user says: ultrawork; parallel implementation; parallel then integrate; high throughput.
Run `npx skills add rlaope/oh-my-hermes --skill ulw-work -a claude-code`. Or copy the skill folder (skills/ulw-work in rlaope/oh-my-hermes) into .claude/skills/ulw-work in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rlaope/oh-my-hermes --skill ulw-work -a codex`. Or copy the skill folder (skills/ulw-work in rlaope/oh-my-hermes) into .agents/skills/ulw-work in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rlaope/oh-my-hermes --skill ulw-work -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ulw-work, .gemini/skills/ulw-work, .github/skills/ulw-work and .opencode/skills/ulw-work in your project.
Going by SKILL.md and its folder, Ulw Work needs the command-line tools its instructions call (make, claude and codex).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ulw Work is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7k tokens (SKILL.md is roughly 28k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 9.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Ulw Work: User Story Writer (deanpeters/Product-Manager-Skills, 7.2k stars), Ralph Tui Create Beads (subsy/ralph-tui, 2.5k stars), Agile Product Owner (alirezarezvani/claude-skills, 28k stars) and Ralph Tui Create Beads Rust (subsy/ralph-tui, 2.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rlaope (a GitHub user) maintains it in rlaope/oh-my-hermes, which has 3,233 GitHub stars. The repository holds 143 skills in this directory. The repository was last updated on October 8, 2026.
Source: rlaope/oh-my-hermes on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.