Go Rig
mudrii/openclaw-dashboard
A skill your agent uses when building, reviewing, or refactoring Go code that must follow strict design discipline — ATDD/TDD workflow, explicit dependency injection, package-boundary discipline…
A skill your agent uses when building, reviewing, or refactoring Python code that requires strong maintainability discipline: SRP, DRY, OCP, explicit dependency injection, TDD/ATDD workflow, strict…
$ npx skills add mudrii/hermesd --skill py-rig -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mudrii/hermesd py-rig --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/mudrii/hermesd.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.codex/skills/py-rig .claude/skills/py-rig && 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 "py-rig" agent skill from https://github.com/mudrii/hermesd/tree/main/.codex/skills/py-rig into .claude/skills/py-rig/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "py-rig", 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/mudrii/hermesd/tree/main/.codex/skills/py-rigType 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 mudrii/hermesd --skill py-rig -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mudrii/hermesd py-rig --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mudrii/hermesd.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.codex/skills/py-rig .agents/skills/py-rig && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "py-rig" agent skill from https://github.com/mudrii/hermesd/tree/main/.codex/skills/py-rig into .agents/skills/py-rig/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "py-rig", 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 mudrii/hermesd --skill py-rig -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mudrii/hermesd py-rig --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mudrii/hermesd.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.codex/skills/py-rig .cursor/skills/py-rig && 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 "py-rig" agent skill from https://github.com/mudrii/hermesd/tree/main/.codex/skills/py-rig into .cursor/skills/py-rig/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "py-rig", 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/mudrii/hermesd.git --path .codex/skills/py-rig--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 mudrii/hermesd --skill py-rig -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mudrii/hermesd py-rig --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mudrii/hermesd.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.codex/skills/py-rig .gemini/skills/py-rig && 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 "py-rig" agent skill from https://github.com/mudrii/hermesd/tree/main/.codex/skills/py-rig into .gemini/skills/py-rig/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "py-rig", 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 mudrii/hermesd py-rigInstalls 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 mudrii/hermesd --skill py-rig -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mudrii/hermesd.git skills-src && mkdir -p .github/skills && cp -r skills-src/.codex/skills/py-rig .github/skills/py-rig && 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 "py-rig" agent skill from https://github.com/mudrii/hermesd/tree/main/.codex/skills/py-rig into .github/skills/py-rig/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "py-rig", 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 mudrii/hermesd --skill py-rig -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mudrii/hermesd py-rig --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mudrii/hermesd.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.codex/skills/py-rig .opencode/skills/py-rig && 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 "py-rig" agent skill from https://github.com/mudrii/hermesd/tree/main/.codex/skills/py-rig into .opencode/skills/py-rig/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "py-rig", 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.
py-rigA skill your agent uses when building, reviewing, or refactoring Python code that requires strong maintainability discipline: SRP, DRY, OCP, explicit dependency injection, TDD/ATDD workflow, strict…
Py Rig is an agent skill from mudrii/hermesd. Use this skill when building, reviewing, or refactoring Python code that requires strong maintainability discipline: SRP, DRY, OCP, explicit dependency injection, TDD/ATDD workflow, strict typing, architecture review, and clean project structure. Complements the project's Python AGENTS.md with process rigor.
Its SKILL.md is about 6.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Design patterns, Software architecture and Test-driven development. It works with Python. The repository describes itself as: TUI monitoring dashboard for Hermes AI agent. The licence is MIT.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 1183277. 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:
uvruffFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.
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.
Py Rig loads about 6.3k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 2,844 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 mudrii/hermesd at commit 1183277, republished under its MIT licence (© mudrii). 2,844 words, ~6,299 tokens.
.claude/skills/py-rig/SKILL.md (or your agent's skills folder).<objective>
Apply strict design and testing discipline for Python projects.
This skill complements AGENTS.md, .codex/rules/python-patterns.md, and .codex/rules/python-idioms.md. It must stay aligned with all three and applies as an execution discipline layer on top of the project's Python standards.
This skill adds execution rigor:
If AGENTS.md is stricter on any point, follow AGENTS.md.
</objective>
<when_to_use> Use this skill when:
Any types or tightening weak types in touched code<process>
Follow this workflow:
Inspect the project first.
Read pyproject.toml, project layout, local AGENTS.md, CONTRIBUTING.md, CHANGELOG.md, tool configs ([tool.ruff], [tool.mypy], [tool.pytest.ini_options]), and existing tests.
Define acceptance behavior first. Express the user-visible outcome before writing implementation details.
Add or update an acceptance-level test when the project has that layer.
For hermesd, the acceptance seam is Collector → DashboardState → panel renderer. Use rich.console.Console(record=True) to capture output for end-to-end render assertions.
Add the next smallest failing test. Prefer a focused unit or module test for the next behavior increment.
Implement the minimum change that makes the test pass. Keep the diff tight. Do not rewrite unrelated code.
Refactor while green. Improve naming, cohesion, dependency flow, and readability without changing behavior.
Keep standards and user-facing docs in sync.
If the task materially changes project conventions, architecture, or workflow expectations, update AGENTS.md or the relevant rule/skill in the same change. Update CHANGELOG.md for user-visible changes and README.md when install/usage instructions change.
Verify locally before opening a PR.
Run uv run ruff check ., uv run ruff format --check ., uv run mypy hermesd scripts, uv run pytest tests/ -q -ra --tb=short -W error::ResourceWarning --cov=hermesd --cov-report=term-missing, uv run python scripts/pip_audit_gate.py, uv lock --check, uv build, wheel smoke installs, and uv run twine check dist/*. CI runs the same gate commands across Python 3.11/3.12/3.13/3.14.
</process>
<design_rules> Apply these rules during implementation:
OCP example in hermesd. hermesd/panels/__init__.py is the canonical OCP seam: add a new panel by writing hermesd/panels/your_panel.py, adding a _render_your_panel(ctx: PanelRenderContext) wrapper, then registering that wrapper in _RENDERERS and the label in PANEL_NAMES. This pattern is documented in CONTRIBUTING.md#Adding a New Panel.
</design_rules>
<dependency_injection> Manage code relationships explicitly.
General rules:
__init__ parameters) for long-lived collaboratorsComposition-root carve-out. The composition root — typically the main() entry point or a single top-level CLI class — is allowed to construct collaborators directly. In hermesd, __main__.main() and DashboardApp.__init__ form this root: they may call Collector(hermes_home) and load_theme(hermes_home) without those being injected parameters. Below the composition root, follow the general DI rules strictly — collectors, renderers, and panel functions must not construct their own DB readers, file readers, clocks, or theme loaders.
When testing the composition root itself, prefer constructing it with a fake hermes_home directory (see tests/conftest.py::hermes_home) rather than mocking the inner collaborators.
Python-specific guidance:
dataclasses or Pydantic models for typed configurationfunctools.partial or closures for lightweight function-level injection# hermesd-shaped constructor injection — domain logic stays testable
from dataclasses import dataclass
from pathlib import Path
from typing import Protocol
class DatabaseReader(Protocol):
def read_sessions(self) -> list[dict[str, object]]: ...
def read_tool_stats(self) -> list[dict[str, object]]: ...
class Clock(Protocol):
def now(self) -> float: ...
@dataclass(frozen=True, slots=True)
class SessionSummarizer:
db: DatabaseReader # injected, not constructed inside
clock: Clock # no time.time() inside this class
def summarize(self) -> dict[str, object]:
rows = self.db.read_sessions()
return {"count": len(rows), "as_of": self.clock.now()}# function parameter for short-lived/pure logic
def within_budget(cost: float, now: float, budget_reset_at: float) -> bool:
return now >= budget_reset_at or cost < 10.0</dependency_injection>
<threading_rules> hermesd is threading-based, not async. Apply these rules to any code that runs across threads:
threading.Lock/RLock for shared mutable state; name the attribute _*_lock and document what it guards.threading.Event for cross-thread signaling (e.g., _force_refresh in DashboardApp). Prefer Event.wait(timeout=...) over sleep loops.daemon=True) must not hold open resources through shutdown. Close explicitly in a finally: block on the main thread.signal.signal(SIGINT, handler) on the main thread; daemon threads cannot receive signals. Signal handlers must be fast and set flags only — never call into Rich or SQLite from a handler.check_same_thread=False. See hermesd/db.py.app.py::_collector_loop swallows exceptions into is_stale=True on purpose. Mirror that pattern for any new background thread.self._running flag the thread checks every iteration).For any future async code (not applicable to current hermesd):
asyncio.TaskGroup (3.11+) for structured concurrency over bare create_task.asyncio.gather(return_exceptions=True) when all tasks must complete regardless of failures.asyncio.run() calls; one event loop per thread; prefer asyncio.run() or asyncio.Runner as the single entry point.run_in_executor.
</threading_rules><resilience_rules>
hermesd is a read-only observer of ~/.hermes/. Data sources can disappear, corrupt, or lag. Readers MUST preserve continuity of display.
hermesd/db.py::HermesDB._cached_* and hermesd/collector.py::_read_json_cached.HermesDB._consecutive_errors.None for the renderable.or 0 / or "" coalescence, not dict.get(key, default). This is a AGENTS.md critical rule.~/.hermes/*.db without ?mode=ro. Never write files, create directories, or mutate data under ~/.hermes/.<style_and_readability> Keep the code easy to read and maintain.
.codex/rules/python-idioms.md for version-tagged patternsfrom __future__ import annotations at the top of every module (project convention)ruff format defines layout (4 spaces, 100-char lines per [tool.ruff])snake_case for functions/variables, PascalCase for classesimport * outside __init__.py re-exportshermesd/__main__.py::main deferring DashboardApp import). Prefer top-of-module imports otherwise.
</style_and_readability><type_discipline>
Strict types are enforced via mypy in CI.
[tool.mypy] in pyproject.toml is the source of truth for enforced strictnessAny in domain code; use object, Protocol, generics, Union, or narrower types[tool.mypy] never sets disallow_any_explicit, so explicit Any is currently legal in every module; the hermesd.db per-module override (disallow_any_explicit = false) is a no-op today and only becomes meaningful if the base flag is ever enabled. By convention, Any stays at the untyped boundary: raw SQLite rows (hermesd/db.py, hermesd/collect/sqlite_util.py) and parsed JSON/YAML/state data (hermesd/collect/*, hermesd/collector.py). Translate into typed Pydantic models at the earliest reasonable point — hermesd/models.py and hermesd/panels/* contain no Any, and new Any should not be introduced past the collector. Enabling disallow_any_explicit = true repo-wide currently reports 150+ violations across the boundary modules; tightening to enforcement is aspirational and would require narrowing the boundary types first.NewType for domain IDs and values that should not mix: UserId = NewType("UserId", int) — plain assignment, not the type statementProtocol for dependency boundaries; enables structural typing without inheritance couplingLiteral for constrained value sets; Final for immutable module-level bindings# type: ignore[code] requires a specific error code and inline justification — never bare # type: ignorecast() unless unavoidable; prefer narrowing with isinstance or restructuringVersion-specific type syntax (see .codex/rules/python-idioms.md for full details):
@override (3.12+) — requires typing_extensions import on 3.11; do not use unconditionally while the project supports 3.11TypeIs (3.13) — requires typing_extensions on 3.11/3.12; prefer TypeGuard in library code supporting 3.11def fn[T](...) (3.12+) — SyntaxError on 3.11; use the old TypeVar("T") form in library code
</type_discipline><testing_discipline> Testing is mandatory. TDD is the default workflow.
pytest with fixtures; prefer fixtures over monkeypatch for dependency injection@pytest.mark.parametrize for table-driven tests; direct narrative tests when variation is not the pointtmp_path for filesystem tests; time_machine or freezegun for time-dependent testshermesd test taxonomy. Tests live in a flat tests/ directory with file-prefix categories:
| Prefix | Scope |
|---|---|
test_models.py | Pydantic model construction, field defaults |
test_db*.py | SQLite reader, caching, resilience |
test_collector*.py | data collection from ~/.hermes/ |
test_*_panel.py | panel rendering (compact + detail) |
test_app*.py | TUI key handling, layout, lifecycle |
test_*_resilience.py | error handling, cache preservation |
Add new tests to the matching prefix. Use tests/conftest.py fixtures (hermes_home, sample_db, populated_hermes_home) rather than hand-rolling setup.
Acceptance seam. For user-visible changes, assert against a full Collector → DashboardState → render_panel flow using rich.console.Console(record=True) to capture output. See existing test_*_resilience.py files for the pattern.
# hermesd-shaped fixture + sync test (no async — project is threading-based)
@pytest.fixture
def collector(hermes_home: Path) -> Collector:
return Collector(hermes_home)
def test_collector_returns_empty_state_when_home_is_bare(collector: Collector) -> None:
state = collector.collect()
assert state.gateway.running is False
assert state.sessions == []
def test_collector_preserves_cache_on_db_corruption(
collector: Collector,
sample_db: Path,
) -> None:
first = collector.collect()
sample_db.write_bytes(b"corrupt")
second = collector.collect()
assert second.sessions == first.sessions # cache-preservation invariant
assert second.is_stale is False # collector thread sets is_stale, not collect()</testing_discipline>
<comment_rules> Write comments only when they add information the code cannot carry cleanly on its own.
Good comments explain:
Do not write comments that:
Docstrings (hermesd convention):
<error_and_type_rules> Keep errors and types strict and readable.
except: — it catches SystemExit and KeyboardInterruptexcept Exception: without re-raise is acceptable only at these boundary handlers:hermesd/__main__.py::main)hermesd/app.py::_collector_loop, _input_loop)hermesd/collector.py::_CollectionHealth.collect)hermesd/app.py::_search_session_messages_worker)hermesd/collect/redaction.py::_safe_exception_text) — must remain non-throwing while handling another error; return only the exception type if sanitization failsraise NewError("context") from original_err to preserve cause chainscontextlib.suppress(SpecificError) only for known-safe cases with clear justificationExceptionGroup and except* (3.11+) when multiple independent errors should be reported togetherNone or Optional only when absence is a valid, documented part of the contractOptional return would be clearer
</error_and_type_rules><tooling_rules> Verification is part of the implementation, not an optional cleanup step.
uv run ruff format --check . (or uv run ruff format . to fix)uv run ruff check . (with --fix for auto-fixable issues)uv run mypy hermesd scripts (configured via [tool.mypy] in pyproject.toml)uv run pytest tests/ -v -W error::ResourceWarning (with relevant paths for tighter affected-scope checks)uv run python scripts/pip_audit_gate.py; CI runs it on every pushuv lock --check; if dependencies changed, run uv lock and verify the diffuv build, smoke install dist/hermesd-*.whl, and run uv run twine check dist/* before release or packaging-affecting changes# noqa or # type: ignore commentspre-commit is a reasonable option — add a .pre-commit-config.yaml running ruff + mypy on staged files if the team wants it
</tooling_rules><review_checklist> Before finishing, verify:
AGENTS.md#Critical Rules project invariants hold (read-only, no hermes-agent imports, cache preservation, NULL tolerance, escape-sequence bulk reads)<type_discipline> — Any stays at the documented SQLite and parsed-data boundaries, no bare # type: ignoreruff format defaultsexcept:; except Exception: only at documented boundary handlers; no swallowed errors; no mutable default arguments<threading_rules><resilience_rules>CHANGELOG.md updated for user-visible changes; README.md updated for install/usage changes<tooling_rules> passes locallyAGENTS.md, .codex/rules/python-idioms.md, and .codex/rules/python-patterns.md has been followed
</review_checklist><reject_patterns> Reject these patterns:
Any added or left in touched code without explicit justification or the documented boundary carve-outexcept: anywhere; except Exception: without re-raise outside the handlers listed in <error_and_type_rules>def fn(items=[]))import * in non-__init__.py files# type: ignore without specific error code and justificationcast() used to silence type errors instead of fixing the type~/.hermes/ or importing from hermes-agenttype statement, @override), 3.13+ syntax (TypeIs, warnings.deprecated), or 3.14+ syntax (template strings) in library code while requires-python still includes 3.11
</reject_patterns><success_criteria> This skill is being followed correctly when:
AGENTS.md and .codex/rules/uv run ruff check, uv run mypy hermesd scripts, uv run pytest, and uv run python scripts/pip_audit_gate.py all pass
</success_criteria>© mudrii, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .codex/skills/py-rig of mudrii/hermesd.
Open the folder on GitHubat commit 1183277
Py Rig 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 |
|---|---|---|---|---|---|---|
| Py Rig this skillmudrii/hermesd | 119 | — | ~6.3k | Automated safety check: Pass | MIT | |
| Go Rigmudrii/openclaw-dashboard | 457 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Go Rigmudrii/openclaw-dashboard | 457 | — | ~682 | Automated safety check: Pass | MIT | |
| Architecture PatternsKartikLabhshetwar/better-shot | 2.4k | 2 repos | ~1.4k | Automated safety check: Pass | Custom licence | |
| Solidramziddin/solid-skills | 606 | — | ~2.7k | Automated safety check: Pass | None | |
| Python Designmindfold-ai/Trellis | 15k | — | ~4k | Automated safety check: Pass | AGPL-3.0 |
mudrii/openclaw-dashboard
A skill your agent uses when building, reviewing, or refactoring Go code that must follow strict design discipline — ATDD/TDD workflow, explicit dependency injection, package-boundary discipline…
mudrii/openclaw-dashboard
A skill your agent uses when building, reviewing, or refactoring Go code in this repository.
KartikLabhshetwar/better-shot
Deep dive into software architecture for macOS. An agent skill from KartikLabhshetwar/better-shot.
ramziddin/solid-skills
A skill your agent uses when writing code, implementing features, refactoring, planning architecture, designing systems, reviewing code, or debugging.
mindfold-ai/Trellis
Python design patterns for CLI scripts and utilities — type-first development, deep modules, complexity management, and red flags.
hyhmrright/brooks-lint
Architecture audit that maps module dependencies, checks layering integrity, and flags structural decay across a codebase, drawing on twelve classic engineering books.
Works with
Categories
A skill your agent uses when building, reviewing, or refactoring Python code that requires strong maintainability discipline: SRP, DRY, OCP, explicit dependency injection, TDD/ATDD workflow, strict…. Py Rig is an agent skill from mudrii/hermesd. Use this skill when building, reviewing, or refactoring Python code that requires strong maintainability discipline: SRP, DRY, OCP, explicit dependency injection, TDD/ATDD workflow, strict typing, architecture review, and clean project structure.
Py Rig fits situations like: refactoring Python code that requires strong maintainability discipline: SRP; explicit dependency injection; TDD/ATDD workflow; architecture review.
Run `npx skills add mudrii/hermesd --skill py-rig -a claude-code`. Or copy the skill folder (.codex/skills/py-rig in mudrii/hermesd) into .claude/skills/py-rig in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mudrii/hermesd --skill py-rig -a codex`. Or copy the skill folder (.codex/skills/py-rig in mudrii/hermesd) into .agents/skills/py-rig 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 mudrii/hermesd --skill py-rig -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/py-rig, .gemini/skills/py-rig, .github/skills/py-rig and .opencode/skills/py-rig in your project.
Going by SKILL.md and its folder, Py Rig needs the command-line tools its instructions call (uv and ruff). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. 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.
Py Rig is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.3k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Py Rig: Go Rig (mudrii/openclaw-dashboard, 457 stars), Go Rig (mudrii/openclaw-dashboard, 457 stars), Architecture Patterns (KartikLabhshetwar/better-shot, 2.4k stars) and Solid (ramziddin/solid-skills, 606 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mudrii (a GitHub user) maintains it in mudrii/hermesd, which has 119 GitHub stars. The repository was last updated on October 1, 2026.
Source: mudrii/hermesd on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.