AGENTS.md · git:20260817.611180a · 2026-08-17 · sha256 8bdc919d49e3eacd

AGENTS.md git:20260817.611180aA

Immutable. This exact content never changes and is served at /api/v1/blob/8bdc919d49e3eacd.

# OOMOL Hermes Agent Development Guide

This repository builds the standalone open-source OOMOL Hermes Agent Docker
distribution from a pinned NousResearch Hermes Agent revision. These rules are
mandatory.

## Required Reading

Read the document matching the work before editing:

| Work | Required document |
| --- | --- |
| Project boundaries and runtime layout | `docs/architecture.md` |
| Local setup, tests, or Docker builds | `docs/development.md` |
| Hermes version or patch changes | `docs/upstream-maintenance.md` |
| Current migration status and next work | `docs/handoff.md` |

## Project Boundaries

This is a Docker distribution project, not an independent Hermes fork. It may
assemble OO CLI, curated Skills, provider Plugins, and minimal generic Hermes
patches that cannot use an existing extension surface.

Do not add OOMOL production bindings, internal operations tooling, messaging
platform patches, or reimplementations of Hermes core behavior. Do not copy
internal operational code from `oomol/hermes-agent` merely because it exists.

## Change Policy

- Prefer the distribution layer: Docker, configuration, scripts, Skills,
  Plugins, tests, and public documentation.
- Add an upstream patch only when no extension surface can implement the
  behavior. Keep patches small, reviewable, and fail closed with
  `git apply --check`; never replace a complete upstream source file.
- Treat `upstream.lock.json` as the canonical Hermes and OO CLI version record.
  Pin Hermes by full commit SHA and OO CLI artifacts by version and per-arch
  SHA-256.
- Follow `docs/upstream-maintenance.md` for upstream changes and keep each
  upstream update in its own commit.

## Skills And Providers

- Install only Skills listed in `config/curated-skills.txt` or
  `config/hermes-skills.txt`. Reject collisions, traversal, and symlinks.
- Install runtime dependencies at image build time. Keep image-owned Skills
  immutable and user Skills under `$HERMES_HOME`.
- Keep Hermes's 60-character Skill-description default. Any larger limit must
  be an explicit per-Skill exception.
- Verify artifacts created by document-producing Skills by reading or rendering
  them back.
- Register providers through Hermes provider ABCs; do not add model tools to
  core.
- Invoke OO CLI with argument arrays, bound timeouts, and sanitized errors.
  Never log prompts, uploaded contents, credentials, signed URLs, or sensitive
  raw responses.
- Keep non-secret configuration in `config.yaml`. OO credentials come only from
  runtime `OO_API_KEY` or the OO configuration volume, never image layers.
- Provider failures must not prevent Hermes from starting.

## Runtime And Security

- Startup must not require OO authentication or network access.
- Keep mutable state under `/data`; `$HERMES_HOME` and `OO_CONFIG_DIR` must live
  below it.
- Seed `config.yaml` only when missing and never overwrite user changes.
- Run the final process as the `hermes` user and keep the entrypoint small and
  transparent.
- Do not add private registries, internal endpoints, or company credentials.

## Validation And Commits

- Run repository tooling through Docker. `uv` may be used inside build
  containers but must not be a host prerequisite.
- Follow `docs/development.md`; release and upstream changes require the full
  Docker integration test.
- Run `git diff --check` before committing.
- Keep unrelated changes in separate Conventional Commits.

## Open-Source Hygiene

- Preserve the OOMOL MIT license and required upstream or third-party notices.
- Never commit `.env`, credentials, user data, generated artifacts, runtime
  state, or downloaded Hermes source.
- Use placeholders in public examples and document current public behavior, not
  internal deployment history.