violin
AGENTS.md159 starsChanged 52 days agoMITView on GitHub
Violin is a supervised Hermes pentest profile. This file guides development and maintenance of the directory tree containing it. Follow more specific AGENTS.md files for their subtrees; direct system, developer, and user instructions take precedence. Repository development is distinct from running an engagement. - Confirm the working directory, branch, base commit, and existing changes before editing. Preserve unrelated work. Keep review-only requests read-only. - Run commands below from the project directory containing this file and pyproject.toml. In copied benchmark trees,…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository7 other files it gives its agents.
- api-testingSkill
- business-logicSkill
- identity-authSkill
- llm-securitySkill
- misconfigSkill
- pentestSkill
- web-appSkill
The file
Show its rules and text
We split this AGENTS.md into the rules it gives an agent
24 rules. About 0 are common, 13 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈13
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 12
Run commands below from the project directory containing this file and pyproject.toml.
- Very specific: line 15
Use the Python version in .python-version, consistent with requires-python in pyproject.toml and the CI matrix.
- Very specific: line 20
Read CONTRIBUTING.md for contribution conventions, docs/BENCHMARKS.md for evaluation methodology, and .github/workflows/ci.yml for …
- Distinctive: line 23
Keep this guidance aligned with those files when workflows change.
- Distinctive: line 34
Prefer the smallest cohesive change.
- Distinctive: line 36
Do not add wrappers or split modules without a concrete maintenance benefit.
- Distinctive: line 48
Add regression tests for changed behavior: reproduce the defect, exercise the public boundary, and verify observable outcomes.
- Distinctive: line 52
Use dependency injection or mocks for external boundaries, never production branches that detect test modules.
- Distinctive: line 56
Before declaring an edited tree verified or ready for merge, run all four checks against the final tree, including for documentation-only …
- Distinctive: line 66
All required checks must exit successfully.
- Distinctive: line 71
Avoid unrelated formatting changes.
- Very specific: line 95
Every PR: run uv run pytest tests/benchmark -q and both scorer fixtures:
- Very specific: line 112
Follow docs/BENCHMARKS.md.
- Distinctive: line 120
Use an authorized isolated target, reset between independent runs, and pin the target identity, source revision, runtime image, …
- Distinctive: line 122
Never rely on the runner's default hosted target for merge evidence.
- Distinctive: line 135
Keep evaluator golden data, matchers, and calibration fixtures out of the agent runtime.
- Very specific: line 174
Use explicit UTF-8 for text file I/O, ISO-8601 UTC timestamps via datetime.now(UTC).isoformat(), American English symbols, and descriptive …
- Very specific: line 180
Start feature work from current dev on codex/<topic>.
- Distinctive: line 182
Delete the topic branch only after confirming its merge.
- Very specific: line 183
Use Conventional Commit titles as specified in CONTRIBUTING.md, with a lowercase summary and no trailing period.
- Distinctive: line 187
Before merge, verify required CI checks and reviews on the current PR revision, resolve conflicts, and refresh affected verification when …
- Very specific: line 191
Update routing and README layout when adding skills.
- Very specific: line 196
After merge, verify release CI, tag/release, and the fast-forward dev-sync workflow.
- Very specific: line 199
Follow .github/ISSUE_STANDARDS.md for every created or edited issue.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Violin repository guidance
Violin is a supervised Hermes pentest profile. This file guides development and maintenance of the directory tree containing it. Follow more specific AGENTS.md files for their subtrees; direct system, developer, and user instructions take precedence. Repository development is distinct from running an engagement.
Start here
- Confirm the working directory, branch, base commit, and existing changes before editing. Preserve unrelated work. Keep review-only requests read-only.
- Run commands below from the project directory containing this file and
pyproject.toml. In copied benchmark trees, Git may resolve to a parent checkout; do not mistake that parent's commit or clean status for the snapshot's identity. - Use the Python version in
.python-version, consistent withrequires-pythoninpyproject.tomland the CI matrix. Resolve discrepancies before changing runtime versions; do not upgrade Python as an incidental documentation fix. - Install development dependencies with
uv sync --dev; useuv runand the project.venv. Keep dependency and lockfile updates intentional. - Read CONTRIBUTING.md for contribution conventions, docs/BENCHMARKS.md for evaluation methodology, and .github/workflows/ci.yml for automated checks. Keep this guidance aligned with those files when workflows change.
Where changes belong
plugins/violin_guard/: Hermes tools, schemas, execution gates, and state.scripts/: administrative CLI, smoke checks, and maintenance helpers.skills/: routed skills and domain playbooks; shared templates and references remain underskills/pentest/. Follow the routing map inCONTRIBUTING.md.benchmark/: runner, host-side evaluator, calibration, and aggregation.tests/: guard, benchmark, CLI, and documentation contract tests.
Prefer the smallest cohesive change. Reuse existing project helpers, the standard library, and declared dependencies before adding custom parsing or abstractions. Do not add wrappers or split modules without a concrete maintenance benefit.
Testing and completion
During development, run the affected tests first, for example:
uv run pytest tests/guard/integration/test_plugin_import_correctness.py -q
uv run pytest tests/benchmark -q
uv run pytest tests/pentest_docs -qAdd regression tests for changed behavior: reproduce the defect, exercise the public boundary, and verify observable outcomes. For guards and state changes, cover malformed inputs, rejection before mutation, and relevant retry/concurrency cases. Use temporary directories and fixtures; avoid live targets in unit tests. Use dependency injection or mocks for external boundaries, never production branches that detect test modules. Name tests after capabilities or invariants, not ticket numbers or release versions.
Before declaring an edited tree verified or ready for merge, run all four checks against the final tree, including for documentation-only changes:
uv run pytest
uv run ruff check .
uv run ruff format --check .
uv run python scripts/violin_guard.py check-release- All required checks must exit successfully. Report skipped tests and their reasons; a skip is not a passing test. Do not hide failures, weaken assertions, or add exclusions to obtain green output. Update expectations only when the intended behavior changes, and explain that change.
- Format changed Python files with
uv run ruff format <path>when needed. Avoid unrelated formatting changes. check-releasevalidates isolated plugin loading, registered tool/schema consistency, release surfaces, and skill references/snapshots. It also runs Ruff and pytest by default. CI'sVIOLIN_CHECK_RELEASE_SKIP_HEAVY=1only avoids repeating separately executed checks; it is not permission to omit them.- For administrative bootstrap/CLI changes, also run
pwsh -File scripts/smoke-test.ps1on Windows. On Unix, useuv run bash scripts/smoke-test.sh --no-installfor structural checks; the full script also installs a temporary Hermes profile and invokes a model, so use it for packaging/runtime validation with configured prerequisites. These smoke checks do not validate live target execution. - CI tests Ubuntu and Windows. Local success on one OS does not prove both passed.
For Windows cache/temp permission problems, use a writable uv cache and a fresh
pytest
--basetempunder an ignored directory with-p no:cacheprovider; create its parent directory first. - Report commands, results, relevant skips, and any unavailable checks. A blocked environment is a verification limitation, not evidence of success. Recheck the final diff for whitespace errors, unrelated changes, secrets, and artifacts.
Benchmarking before merge
Benchmark evidence is a merge requirement in addition to the checks above. The two tiers answer different questions:
Every PR: run
uv run pytest tests/benchmark -qand both scorer fixtures:uv run python -m benchmark.score --calibrate known-good uv run python -m benchmark.score --calibrate known-badKnown-good must match all golden cases; known-bad must receive zero credit. Both commands should exit successfully for their expected outcomes.
- Runtime or evaluation changes, and releases: complete live Hermes benchmarks before merging changes to guards, execution, findings/receipts, prompts, skills/playbooks, model/runtime configuration, packaging that affects runtime behavior, or the runner/evaluator. For documentation-only or other changes with no runtime/evaluation effect, record why live benchmarking is not applicable in the PR. Instructions consumed by the pentest agent are runtime behavior, even when written in Markdown.
Follow docs/BENCHMARKS.md. Inspect available options with
uv run python -m benchmark.run --help. The following single-line template works
in PowerShell and Bash after replacing the quoted placeholders:
uv run python -m benchmark.run --target "<authorized-local-target-url>" --provider "<provider>" --api-base "<api-base-url>" --model "<model-id>" --target-isolation-id "<immutable-image-digest-or-reset-id>"- Use an authorized isolated target, reset between independent runs, and pin the target identity, source revision, runtime image, model/provider, and settings. Never rely on the runner's default hosted target for merge evidence.
- Compare the candidate with its
devbaseline under the same conditions. Use at least three independent runs per revision; report all runs and failures, mean pass@1, variation, pass@k/pass^k, and per-case regressions. Usebenchmark.aggregatewith an explicit glob per revision; never mix baselines, candidates, or incompatible protocols in one aggregate. - Require valid runner completion and completed host evaluation. Inspect
benchmark_passin the results, not only the process exit code. The current scorer requires at least 15/20 confirmed findings (75%), complete coverage and methodology, and a comparable protocol. Do not lower the finding gate below 15/20 or change proof rules merely to make a candidate pass. Investigate failures and regressions before calling the change merge-ready; do not select only a best run or treat aggregate union coverage as a passing individual run. - Keep evaluator golden data, matchers, and calibration fixtures out of the agent runtime. Credit requires authenticated receipts and decisive proof; finding prose, checklist completion, and demonstration scores are separate.
- Attach sanitized summaries or access-controlled artifact links to the PR,
identifying baseline/candidate revisions, configuration, run count, scores,
failures, and regressions. Keep credentials and raw engagement evidence out
of Git and public PRs/issues. Publishable comparisons require a clean source
tree and the pinned comparison protocol described in
docs/BENCHMARKS.md. - .github/workflows/benchmark.yml is manually dispatched; ordinary CI runs deterministic tests. A green CI run, calibration, dry run, missing-Hermes fallback, or skipped live job does not satisfy a live benchmark requirement. If prerequisites are missing, report the blocker and leave live validation pending. These instructions do not by themselves add a required GitHub status check or authorize arbitrary external targets.
Runtime and data invariants
- Target-touching commands must use registered Hermes Guard tools, including
violin_exec/violin_exec_burst, with scope and approval gates intact. The standalone CLI is for administration and diagnostics. Normal local development commands above are not target execution. - Resolve engagement targets through
violin_targetorscope.yaml; do not embed operational target IPs. Synthetic test fixtures remain isolated. - Validate state and commands fail-closed before mutation or execution. Use
Pydantic v2 models in
plugins/violin_guard/core/schemas.pyfor tool contracts; keep registrations andplugin.yamlconsistent. - Acquire the existing advisory lock (
lock_file/workflow_lock) before state/feedback writes, and use existing atomic-write helpers where applicable. Pass environment overrides to child processes explicitly; never mutate globalos.environin request handlers or adapters. - Preserve canonical hypothesis blocks, status fields, table columns, and all template sections during Markdown rewrites, including Observations, Decoy Trail, Research Log, and Resolved Theories. Never replace structured hypothesis state with an unstructured narrative.
- Save raw engagement evidence under
$ENG_DIR/evidence/<phase>/;state/is reserved for runtime tracking. Preserve tool-managed paths such asevidence/executions/andevidence/findings.jsonl. Declare file-based proof withviolin_exec.evidence_outputsand cite authenticated receipts and evidence paths throughviolin_submit_finding. - Use explicit UTF-8 for text file I/O, ISO-8601 UTC timestamps via
datetime.now(UTC).isoformat(), American English symbols, and descriptive parameter names. Never silently swallow exceptions.
Pull requests, releases, and issues
- Start feature work from current
devoncodex/<topic>; preserve in-progress work when choosing a checkout. Feature PRs targetdevand are squash-merged. Delete the topic branch only after confirming its merge. - Use Conventional Commit titles as specified in
CONTRIBUTING.md, with a lowercase summary and no trailing period. Fill in .github/PULL_REQUEST_TEMPLATE.md, including Summary, Verification, benchmark evidence/applicability, and relevant issues. - Before merge, verify required CI checks and reviews on the current PR revision, resolve conflicts, and refresh affected verification when the candidate changes. A local check or earlier commit's benchmark does not certify later changes.
- New playbooks require Evidence, Stop Conditions, and Blocked Actions sections.
Update routing and README layout when adding skills. Keep user-facing docs,
distribution.yaml, version surfaces, andskills.snapshot.jsonsynchronized when the change affects them; do not invent release bumps for unrelated work. - Release only through
devtomasterusing Create a merge commit, never squash or rebase. Verify branch ancestry and shipped issue references first. After merge, verify release CI, tag/release, and the fast-forward dev-sync workflow. If sync fails due to divergence, inspect the graph and mergemasterback intodev; never force-push protected shared branches. - Follow .github/ISSUE_STANDARDS.md for every created or edited issue. Search open/closed issues and open PRs first; keep one reviewable concern, native metadata/dependencies, testable acceptance criteria, and existing evidence/decisions. Report undisclosed Violin vulnerabilities privately as described in SECURITY.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

