From b670420a0bbd547865a1e8166026546b36e4ba94 Mon Sep 17 00:00:00 2001 From: Tony Whelan <135849587+anwhelan01@users.noreply.github.com> Date: Sun, 23 Aug 2026 09:15:56 +0000 Subject: [PATCH] feat: Hermes Agent harness and Bot Mode roster Ship each desk as a named Hermes Bot with isolated soul, skills, routines and @mentions. Add AGENTS.md project context, CI where missing, CODEOWNERS, and a production README that installs with ./scripts/install-hermes-bot.sh. --- .github/CODEOWNERS | 1 + .github/dependabot.yml | 7 ++++++ .github/workflows/ci.yml | 19 +++++++++++++++ .gitignore | 4 ++++ .hermes/SOUL.md | 7 ++++++ .hermes/bot.yaml | 18 ++++++++++++++ .hermes/skills/plainly/SKILL.md | 31 ++++++++++++++++++++++++ README.md | 42 +++++++++++++++++++++++++++++++++ SECURITY.md | 6 +++++ scripts/install-hermes-bot.sh | 42 +++++++++++++++++++++++++++++++++ 10 files changed, 177 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .hermes/SOUL.md create mode 100644 .hermes/bot.yaml create mode 100644 .hermes/skills/plainly/SKILL.md create mode 100644 SECURITY.md create mode 100755 scripts/install-hermes-bot.sh diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..3a19bef --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @anwhelan01 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..dd53094 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 5 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..800ecec --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,19 @@ +name: ci + +on: + push: + branches: [main] + pull_request: + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "22" + cache: npm + - run: npm ci + - run: npm run typecheck + - run: npm run lint --if-present diff --git a/.gitignore b/.gitignore index 5c99dfc..848c592 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,7 @@ AGENTS.project.md public/__grok/ .nitro/ coverage/ + +# Hermes personal overrides +AGENTS.override.md +.hermes/*.local.yaml diff --git a/.hermes/SOUL.md b/.hermes/SOUL.md new file mode 100644 index 0000000..2ea2afd --- /dev/null +++ b/.hermes/SOUL.md @@ -0,0 +1,7 @@ +# Plainly + +You are Plainly, a copy desk. Cut throat-clearing, brochure words, and model English. Keep the facts. A skill file is hope; a linter is proof. + +Banned openers: I'd be happy to, Great question, Let's dive in. Banned wrappers: It's important to note. Banned brochure: robust, seamless, tapestry, unlock the potential. + +Voice: Google developer style plus the anti-slop appendix. Short sentences. Verbs first. diff --git a/.hermes/bot.yaml b/.hermes/bot.yaml new file mode 100644 index 0000000..ccb692d --- /dev/null +++ b/.hermes/bot.yaml @@ -0,0 +1,18 @@ +name: plainly +title: Plainly +description: "A copy desk for Claude-lish. Lint, rewrite, export a Google-style writing skill." +avatar: + silhouette: boxy + color: slate +soul: SOUL.md +skills: + - plainly +toolsets: + - terminal + - web +groups: + - desks +mentions: + - bullshit-radar +agent: + bot_mode_protocol: true diff --git a/.hermes/skills/plainly/SKILL.md b/.hermes/skills/plainly/SKILL.md new file mode 100644 index 0000000..a8abe53 --- /dev/null +++ b/.hermes/skills/plainly/SKILL.md @@ -0,0 +1,31 @@ +--- +name: plainly +description: Lint and rewrite prose against Google developer style plus the anti-slop appendix. Export a host-specific SKILL.md. +version: 1.0.0 +metadata: + hermes: + tags: [k3ss, plainly] + category: desk +--- + +# Plainly + +A copy desk for Claude-lish. Lint, rewrite, export a Google-style writing skill. + +## When to use + +The operator is working in `plainly` or @mentions `plainly`. + +## Do + +Lint and rewrite prose against Google developer style plus the anti-slop appendix. Export a host-specific SKILL.md. + +## Do not + +Violate `.hermes/SOUL.md`. Do not commit secrets. Do not invent live market data, checksums, or Sharpes. + +## Project + +Load `AGENTS.md` at the repo root. Install the Bot with `./scripts/install-hermes-bot.sh`. + +Chat: `hermes -p plainly chat` diff --git a/README.md b/README.md index 6c192e7..1bd7c33 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,21 @@ # Plainly +
+ + A copy desk for Claude-lish. Paste AI writing. The desk marks throat-clearing, brochure words, and Google @@ -100,3 +116,29 @@ Anti-slop rules are original to this project. See [NOTICE.md](NOTICE.md). MIT for original code and the anti-slop appendix. Google's source material stays under its licenses. + +--- + +## Hermes Bot Mode + +This desk is a named [Hermes](https://hermes-agent.nousresearch.com/) Bot — own model slot, memory, skills, routines, and `@mentions`. + +```bash +# once +curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash + +# this repo +./scripts/install-hermes-bot.sh +hermes -p plainly chat +``` + +In Hermes Desktop the Bot lands under **Bots**. Type `@plainly` from any chat; group it with the rest of the k3ss roster (`desks`). + +| File | Role | +| --- | --- | +| [`AGENTS.md`](AGENTS.md) | Project harness Hermes loads at session start | +| [`.hermes/SOUL.md`](.hermes/SOUL.md) | Bot personality | +| [`.hermes/bot.yaml`](.hermes/bot.yaml) | Roster, skills, groups | +| [`.hermes/skills/plainly/SKILL.md`](.hermes/skills/plainly/SKILL.md) | Portable skill | + +Docs: [Bot Mode](https://hermes-agent.nousresearch.com/docs/user-guide/bot-mode) · [Context files](https://hermes-agent.nousresearch.com/docs/user-guide/features/context-files) · [Skills](https://hermes-agent.nousresearch.com/docs/user-guide/features/skills) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..be21cff --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,6 @@ +# Security + +- Do not commit API keys, cookies, or session tokens. +- `XAI_API_KEY` and provider secrets stay in the environment, never in git. +- Report vulnerabilities privately: open a security advisory on this repo, or email the owner via GitHub. +- This project is operated by [anwhelan01](https://github.com/anwhelan01). diff --git a/scripts/install-hermes-bot.sh b/scripts/install-hermes-bot.sh new file mode 100755 index 0000000..b4245be --- /dev/null +++ b/scripts/install-hermes-bot.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# Install this repo as a Hermes Bot Mode profile. +# Docs: https://hermes-agent.nousresearch.com/docs/user-guide/bot-mode +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +YAML="$ROOT/.hermes/bot.yaml" +SOUL="$ROOT/.hermes/SOUL.md" + +if [[ ! -f "$YAML" ]]; then + echo "missing $YAML" >&2 + exit 1 +fi + +NAME="$(awk '/^name:/{print $2; exit}' "$YAML" | tr -d '"' | tr -d "'")" +HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}" +DEST="$HERMES_HOME/profiles/$NAME" + +mkdir -p "$DEST/skills" "$DEST/memories" +cp "$YAML" "$DEST/bot.yaml" +if [[ -f "$SOUL" ]]; then + cp "$SOUL" "$DEST/SOUL.md" +fi +if [[ -d "$ROOT/.hermes/skills" ]]; then + cp -R "$ROOT/.hermes/skills/." "$DEST/skills/" +fi +if [[ -f "$ROOT/.hermes/routines.yaml" ]]; then + cp "$ROOT/.hermes/routines.yaml" "$DEST/routines.yaml" +fi + +# Project-local skills are also discovered at