LLM Gateway
BagelHole/DevOps-Security-Agent-Skills
Deploy an API gateway for LLM traffic with load balancing, rate limiting, key management, semantic caching, fallback routing, and cost tracking.
Build, test, and debug Hermes Agent RL environments for Atropos training.
$ npx skills add Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Tommy-yw/RunbookHermes hermes-atropos-environments --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/Tommy-yw/RunbookHermes.git skills-src && mkdir -p .claude/skills && cp -r skills-src/optional-skills/mlops/hermes-atropos-environments .claude/skills/hermes-atropos-environments && 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 "hermes-atropos-environments" agent skill from https://github.com/Tommy-yw/RunbookHermes/tree/main/optional-skills/mlops/hermes-atropos-environments into .claude/skills/hermes-atropos-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hermes-atropos-environments", 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/Tommy-yw/RunbookHermes/tree/main/optional-skills/mlops/hermes-atropos-environmentsType 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 Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Tommy-yw/RunbookHermes hermes-atropos-environments --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Tommy-yw/RunbookHermes.git skills-src && mkdir -p .agents/skills && cp -r skills-src/optional-skills/mlops/hermes-atropos-environments .agents/skills/hermes-atropos-environments && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "hermes-atropos-environments" agent skill from https://github.com/Tommy-yw/RunbookHermes/tree/main/optional-skills/mlops/hermes-atropos-environments into .agents/skills/hermes-atropos-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hermes-atropos-environments", 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 Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Tommy-yw/RunbookHermes hermes-atropos-environments --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Tommy-yw/RunbookHermes.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/optional-skills/mlops/hermes-atropos-environments .cursor/skills/hermes-atropos-environments && 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 "hermes-atropos-environments" agent skill from https://github.com/Tommy-yw/RunbookHermes/tree/main/optional-skills/mlops/hermes-atropos-environments into .cursor/skills/hermes-atropos-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hermes-atropos-environments", 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/Tommy-yw/RunbookHermes.git --path optional-skills/mlops/hermes-atropos-environments--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 Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Tommy-yw/RunbookHermes hermes-atropos-environments --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Tommy-yw/RunbookHermes.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/optional-skills/mlops/hermes-atropos-environments .gemini/skills/hermes-atropos-environments && 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 "hermes-atropos-environments" agent skill from https://github.com/Tommy-yw/RunbookHermes/tree/main/optional-skills/mlops/hermes-atropos-environments into .gemini/skills/hermes-atropos-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hermes-atropos-environments", 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 Tommy-yw/RunbookHermes hermes-atropos-environmentsInstalls 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 Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Tommy-yw/RunbookHermes.git skills-src && mkdir -p .github/skills && cp -r skills-src/optional-skills/mlops/hermes-atropos-environments .github/skills/hermes-atropos-environments && 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 "hermes-atropos-environments" agent skill from https://github.com/Tommy-yw/RunbookHermes/tree/main/optional-skills/mlops/hermes-atropos-environments into .github/skills/hermes-atropos-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hermes-atropos-environments", 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 Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Tommy-yw/RunbookHermes hermes-atropos-environments --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Tommy-yw/RunbookHermes.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/optional-skills/mlops/hermes-atropos-environments .opencode/skills/hermes-atropos-environments && 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 "hermes-atropos-environments" agent skill from https://github.com/Tommy-yw/RunbookHermes/tree/main/optional-skills/mlops/hermes-atropos-environments into .opencode/skills/hermes-atropos-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hermes-atropos-environments", 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.
hermes-atropos-environmentsBuild, test, and debug Hermes Agent RL environments for Atropos training.
Hermes Atropos Environments is an agent skill from Tommy-yw/RunbookHermes. Build, test, and debug Hermes Agent RL environments for Atropos training. Covers the HermesAgentBaseEnv interface, reward functions, agent loop integration, evaluation with tools, wandb logging, and the three CLI modes (serve/process/evaluate). Use when creating, reviewing, or fixing RL environments in the hermes-agent repo.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/agentresult-fields.md`, `references/atropos-base-env.md` and `references/usage-patterns.md`).
It sits in AI & LLM Engineering, covering Autonomous loops, Reinforcement learning and MLOps. It works with Weights & Biases, OpenAI, OpenRouter and vLLM. The repository describes itself as: Hermes-native AIOps agent for evidence-driven incident response, approval-gated remediation, and runbook learning. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7fd2b9a. 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:
pythonFrom 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 these keys or tokens, usually read from environment variables:
OPENROUTER_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Hermes Atropos Environments loads about 3.3k tokens when it runs, and up to ~6.1k if it reads all its reference files. Until then it costs about 89 tokens; SKILL.md has 845 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 Tommy-yw/RunbookHermes at commit 7fd2b9a, republished under its MIT licence (© Tommy-yw). 845 words, ~3,330 tokens.
.claude/skills/hermes-atropos-environments/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Guide for building RL environments in the hermes-agent repo that integrate with the Atropos training framework.
Atropos BaseEnv (atroposlib/envs/base.py)
└── HermesAgentBaseEnv (environments/hermes_base_env.py)
├── Handles agent loop orchestration
├── Handles tool resolution per group
├── Handles ToolContext for reward verification
└── YOUR ENVIRONMENT (environments/your_env.py)
Only implements: setup, get_next_item, format_prompt,
compute_reward, evaluate, wandb_logHermes environments are special because they run a multi-turn agent loop with tool calling — not just single-turn completions. The base env handles the loop; you implement the task and scoring.
| File | Purpose |
|---|---|
environments/hermes_base_env.py | Base class with agent loop + tool resolution |
environments/agent_loop.py | HermesAgentLoop + AgentResult dataclass |
environments/tool_context.py | ToolContext for reward verification |
environments/tool_call_parsers.py | Phase 2 tool call parsers (hermes, mistral, etc.) |
environments/your_env.py | Your environment implementation |
IMPORTANT: Before running any test, evaluation, or data generation command, always ask the user how they want to handle inference. Do NOT assume OpenRouter or any specific endpoint. Present these options:
anthropic/claude-sonnet-4.5, google/gemini-2.5-pro, meta-llama/llama-3.3-70b-instruct, etc.). Requires OPENROUTER_API_KEY in environment.http://localhost:8000/v1) and model name. Set --openai.server_type vllm.--openai.server_type openai and --openai.health_check false.serve mode with a live training loop. Default http://localhost:8000/v1.Once the user tells you their setup, use those values in all CLI commands for that session. Example prompts:
"Before I run this, how would you like to handle inference?
- OpenRouter (I'll need your preferred model, e.g. claude-sonnet-4.5)
- A self-hosted VLLM endpoint (give me the URL and model name)
- Another OpenAI-compatible API (give me the URL, model, and any auth details)
- Local Atropos training server (serve mode)"
| Provider | --openai.server_type | --openai.health_check | --openai.api_key |
|---|---|---|---|
| OpenRouter | openai | false | $OPENROUTER_API_KEY |
| VLLM (self-hosted) | vllm | (default) | (not needed) |
| Other OpenAI-compatible | openai | false | As needed |
| Local Atropos | (default) | (default) | (not needed) |
setup() — Load dataset and initialize stateasync def setup(self) -> None:
"""Called once at startup. Load datasets, initialize state."""
# Try HuggingFace first, fallback to built-in samples
try:
from datasets import load_dataset
ds = load_dataset("your/dataset", split="test")
self._items = [...]
except Exception:
self._items = BUILTIN_SAMPLES
# Always split into train/eval
random.shuffle(self._items)
eval_size = max(20, int(len(self._items) * 0.1))
self._eval_items = self._items[:eval_size]
self._items = self._items[eval_size:]get_next_item() — Return next training itemasync def get_next_item(self) -> dict:
"""Return next item, cycling through dataset."""
item = self._items[self._index % len(self._items)]
self._index += 1
return itemformat_prompt(item) — Convert item to user messagedef format_prompt(self, item: dict) -> str:
"""Convert a dataset item into the user-facing prompt."""
return f"Research this question: {item['question']}"compute_reward(item, result, ctx) — Score the rolloutCRITICAL: result is an AgentResult, NOT a dict. It has these attributes:
result.messages — List of message dicts (OpenAI format)result.turns_used — Number of LLM calls maderesult.finished_naturally — True if model stopped voluntarilyresult.tool_errors — List of ToolError objectsAgentResult does NOT have: final_response, tool_calls, tools_used.
You must extract these from result.messages:
async def compute_reward(self, item, result: AgentResult, ctx: ToolContext) -> float:
# Extract final response (last assistant message with content)
final_response = ""
tools_used = []
for msg in reversed(result.messages):
if msg.get("role") == "assistant" and msg.get("content") and not final_response:
final_response = msg["content"]
if msg.get("role") == "assistant" and msg.get("tool_calls"):
for tc in msg["tool_calls"]:
fn = tc.get("function", {}) if isinstance(tc, dict) else {}
name = fn.get("name", "")
if name:
tools_used.append(name)
# Score using LLM judge, heuristic, or ToolContext verification
correctness = await self._llm_judge(item, final_response)
return correctnessctx (ToolContext) gives you terminal/file access to the agent's sandbox for verification:
# Run tests in the agent's sandbox
result = ctx.terminal("pytest /workspace/test.py")
return 1.0 if result["exit_code"] == 0 else 0.0evaluate() — Periodic evaluation with full agent loopMUST use the full agent loop with tools, not single-turn chat_completion. The whole point of hermes-agent environments is agentic evaluation:
async def evaluate(self, *args, **kwargs) -> None:
import time, uuid
from environments.agent_loop import HermesAgentLoop
from environments.tool_context import ToolContext
start_time = time.time()
tools, valid_names = self._resolve_tools_for_group()
samples = []
for item in self._eval_items[:self.config.eval_size]:
task_id = str(uuid.uuid4())
messages = []
if self.config.system_prompt:
messages.append({"role": "system", "content": self.config.system_prompt})
messages.append({"role": "user", "content": self.format_prompt(item)})
agent = HermesAgentLoop(
server=self.server,
tool_schemas=tools,
valid_tool_names=valid_names,
max_turns=self.config.max_agent_turns,
task_id=task_id,
temperature=0.0, # Deterministic for eval
max_tokens=self.config.max_token_length,
extra_body=self.config.extra_body,
)
result = await agent.run(messages)
ctx = ToolContext(task_id)
try:
reward = await self.compute_reward(item, result, ctx)
finally:
ctx.cleanup()
samples.append({"prompt": ..., "response": ..., "reward": reward})
eval_metrics = {"eval/mean_reward": ...}
await self.evaluate_log(metrics=eval_metrics, samples=samples,
start_time=start_time, end_time=time.time())wandb_log() — Custom metrics loggingAlways call super().wandb_log() at the end:
async def wandb_log(self, wandb_metrics=None):
if wandb_metrics is None:
wandb_metrics = {}
if self._reward_buffer:
n = len(self._reward_buffer)
wandb_metrics["train/mean_reward"] = sum(self._reward_buffer) / n
self._reward_buffer.clear()
await super().wandb_log(wandb_metrics) # MUST call superPitfall: compute_reward appends to metric buffers. During eval, this pollutes training metrics. Roll back buffer entries added during eval.
Always create a custom config subclass with Pydantic Field descriptors. Key inherited fields you can tune: enabled_toolsets, max_agent_turns, agent_temperature, system_prompt, terminal_backend, group_size, steps_per_eval, total_steps.
Classmethod returning (YourEnvConfig, [APIServerConfig(...)]). Set server_type to "openai" for OpenRouter/external APIs. Load API key from environment variable.
# SERVE — Full training loop (connects to Atropos API server)
python environments/my_env.py serve --openai.base_url http://localhost:8000/v1
# PROCESS — Offline data generation (saves JSONL)
python environments/my_env.py process --env.total_steps 10 --env.group_size 1 \
--env.use_wandb false --env.data_path_to_save_groups output.jsonl \
--openai.base_url "<USER_BASE_URL>" \
--openai.model_name "<USER_MODEL>" \
--openai.server_type <USER_SERVER_TYPE> --openai.health_check false
# EVALUATE — Standalone eval (runs setup + evaluate only)
python environments/my_env.py evaluate --env.eval_size 20 \
--env.data_dir_to_save_evals /tmp/eval_results \
--openai.base_url "<USER_BASE_URL>" \
--openai.model_name "<USER_MODEL>" \
--openai.server_type <USER_SERVER_TYPE> --openai.health_check falseConfig priority: CLI args > YAML file > config_init() defaults.
AgentResult has .messages, not .final_response — Extract the final response by iterating reversed(result.messages) looking for the last assistant message with content.
evaluate() must use HermesAgentLoop, not chat_completion — Single-turn chat_completion has no tools. The whole point of hermes-agent benchmarks is agentic evaluation with tool use.
Don't call _llm_judge twice — If compute_reward already calls it, extract the score from the buffer instead of calling judge separately in evaluate().
Eval pollutes training buffers — compute_reward appends to metric buffers. During eval, roll back buffer entries to keep training metrics clean.
Always set health_check=false for OpenRouter — OpenRouter has no /health endpoint.
Set data_dir_to_save_evals in evaluate mode — Without it, results aren't saved.
default_toolsets class variable vs enabled_toolsets config — The class variable is a hint; the config field is what actually controls tool resolution.
Tool call parsing in messages — Tool calls are dicts with {"function": {"name": ..., "arguments": ...}}. Always check isinstance(tc, dict).
ToolContext.cleanup() — Always call in a finally block to release sandbox resources.
server_type must be "openai" for external APIs — Without it, Atropos assumes a local VLLM server.
Always ask the user for their inference setup — Never hardcode or assume a specific provider/model. See the "Inference Setup" section above.
Use self.server.chat_completion() with a scoring prompt. Parse JSON response for score float. Always include a heuristic fallback (keyword overlap) for when the judge call fails.
Use ctx.terminal("pytest test.py -q") to run tests in the agent's sandbox. Return 1.0 for pass, 0.0 for fail.
Weight correctness (0.6) + tool usage (0.2) + efficiency (0.2) + optional bonuses. Clamp to [0, 1].
python -c "from environments.my_env import MyEnv; print('OK')"class MyEnv(HermesAgentBaseEnv):
name = "my-env"
env_config_cls = MyEnvConfig
@classmethod
def config_init(cls): ... # Default server + env config
async def setup(self): ... # Load dataset + train/eval split
async def get_next_item(self): ... # Cycle through training items
def format_prompt(self, item): ... # Item → user message string
async def compute_reward(self, item, result, ctx): ... # Score rollout
async def evaluate(self, *args, **kwargs): ... # Full agent loop eval
async def wandb_log(self, metrics=None): ... # Custom metrics + super()
if __name__ == "__main__":
MyEnv.cli()© Tommy-yw, 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 3 other files (references) in optional-skills/mlops/hermes-atropos-environments of Tommy-yw/RunbookHermes.
Open the folder on GitHubat commit 7fd2b9a
Hermes Atropos Environments 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 |
|---|---|---|---|---|---|---|
| Hermes Atropos Environments this skillTommy-yw/RunbookHermes | 546 | — | ~3.3k | Automated safety check: Pass | MIT | |
| LLM GatewayBagelHole/DevOps-Security-Agent-Skills | 1.2k | — | ~2k | Automated safety check: Pass | MIT | |
| Datagen Standard Launchopen-thoughts/OpenThoughts-Agent | 301 | — | ~947 | Automated safety check: Pass | Apache-2.0 | |
| Proxy Mode ReferenceMadAppGang/claude-code | 285 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Agents Best PracticesDenisSergeevitch/agents-best-practices | 2.4k | — | ~7.4k | Automated safety check: Pass | MIT | |
| vLLM Model ServingOrchestra-Research/AI-Research-SKILLs | 13k | 5 repos | ~2.3k | Automated safety check: Pass | MIT |
BagelHole/DevOps-Security-Agent-Skills
Deploy an API gateway for LLM traffic with load balancing, rate limiting, key management, semantic caching, fallback routing, and cost tracking.
open-thoughts/OpenThoughts-Agent
Launch NON-AGENTIC (standard) data generation — plain vLLM/API completion generation with NO Harbor agent loop or Daytona sandboxes.
MadAppGang/claude-code
Reference guide for using external AI models via claudish CLI.
DenisSergeevitch/agents-best-practices
A skill your agent uses when designing, generating an MVP blueprint for, auditing, troubleshooting, refactoring, or explaining an agentic harness for any domain.
Orchestra-Research/AI-Research-SKILLs
Deploys LLMs with vLLM for high-throughput serving, covering the OpenAI-compatible server, offline batch inference, monitoring and a Docker rollout.
Detrol/quorum-cli
Run a structured debate between agent CLIs (claude, codex, agy, grok) and the user's configured API or local models (OpenAI, Anthropic, Google, xAI, OpenRouter, Ollama and more) through the Quorum…
Tommy-yw/RunbookHermes
Build, test, inspect, install, and deploy MCP servers with FastMCP in Python.
Tommy-yw/RunbookHermes
Pharmaceutical research assistant for drug discovery workflows.
Tommy-yw/RunbookHermes
Fetch YouTube video transcripts and transform them into structured content (chapters, summaries, threads, blog posts).
Tommy-yw/RunbookHermes
Supply chain investigation, evidence recovery, and forensic analysis for GitHub repositories.
Tommy-yw/RunbookHermes
Production pipeline for interactive and generative visual art using p5.js.
Tommy-yw/RunbookHermes
Control a running TouchDesigner instance via twozero MCP — create operators, set parameters, wire connections, execute Python, build real-time visuals.
Works with
Build, test, and debug Hermes Agent RL environments for Atropos training. Hermes Atropos Environments is an agent skill from Tommy-yw/RunbookHermes. Build, test, and debug Hermes Agent RL environments for Atropos training.
Hermes Atropos Environments fits situations like: fixing RL environments in the hermes-agent repo; tasks that involve Autonomous loops; tasks that involve Reinforcement learning.
Run `npx skills add Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a claude-code`. Or copy the skill folder (optional-skills/mlops/hermes-atropos-environments in Tommy-yw/RunbookHermes) into .claude/skills/hermes-atropos-environments in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a codex`. Or copy the skill folder (optional-skills/mlops/hermes-atropos-environments in Tommy-yw/RunbookHermes) into .agents/skills/hermes-atropos-environments 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 Tommy-yw/RunbookHermes --skill hermes-atropos-environments -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hermes-atropos-environments, .gemini/skills/hermes-atropos-environments, .github/skills/hermes-atropos-environments and .opencode/skills/hermes-atropos-environments in your project.
Going by SKILL.md and its folder, Hermes Atropos Environments needs the command-line tools its instructions call (python) and credentials named OPENROUTER_API_KEY. Our summary lists: Python 3; A credential in OPENROUTER_API_KEY.
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.
Hermes Atropos Environments is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k 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 2.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Hermes Atropos Environments: LLM Gateway (BagelHole/DevOps-Security-Agent-Skills, 1.2k stars), Datagen Standard Launch (open-thoughts/OpenThoughts-Agent, 301 stars), Proxy Mode Reference (MadAppGang/claude-code, 285 stars) and Agents Best Practices (DenisSergeevitch/agents-best-practices, 2.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Tommy-yw (a GitHub user) maintains it in Tommy-yw/RunbookHermes, which has 546 GitHub stars. The repository holds 38 skills in this directory. The repository was last updated on May 18, 2026.
Source: Tommy-yw/RunbookHermes on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.