genesis-evals — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited genesis-evals (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Run the genesis self-eval suite. Steers the parent LLM session to orchestrate cold sub-agent spawns, capture responses, score deterministically, and report convergence.
.apm/Genesis ships to USERS via npx / apm install. Eval scenarios LOOK LIKE real user requests (that is the point). Colocating them under skills/genesis/evals/ would risk DISPATCH CONTAMINATION (an over-eager harness loader pulling scenario prompts into the active context) and PAYLOAD BLOAT for users who never run evals.
We also keep this OUTSIDE .apm/ because APM treats .apm/ as the publishable source root: its local-content scanner picks up anything under .apm/skills/ regardless of dev-marker, so apm pack --format plugin would leak this maintainer-only skill into the shipped artifact. Living under dev/skills/ keeps it scanner-invisible while still letting apm install --dev deploy it via the local-path devDependency in the root apm.yml.
This is the inverse of PHANTOM DEPENDENCY (referenced-but-not-bundled): BUNDLE LEAKAGE (bundled-but-not-consumed-at-runtime). See skills/genesis/assets/composition-substrate.md "Anti-patterns flagged at this step".
skills/genesis/ (catalogue or SKILL.md)model: field in every scenario YAML is REQUIRED. The runnerREFUSES to spawn if missing. No silent default. The model is the single biggest variable in eval results.
spawn_record.py to write the immutable<id>__<half>.spawn.json BEFORE invoking the harness's task tool. This is the source of truth for "what we asked for".
fresh context. Never reuse a session across scenarios.
score_run.py), not LLM-judged.Pass gates are substring matches against the schema.
setting retired_in: <version> (never deletion).
B10 HUMAN CHECKPOINT. Do NOT loop indefinitely.
1 validate scenarios <-- python validate_scenarios.py
v
2 mint run-id <-- yyyymmddTHHMMSSZ
v
3 fan-out spawns <-- for each scenario:
v a) spawn_record.py for each half
v b) task-tool cold spawn (parallel)
v c) write child reply to <id>__<half>.response.txt
v
4 score <-- python score_run.py
v
5 read summary.md
v
6 converged? --YES--> done; report run-id + summary path
|
NO
v
7 loop count < 3?
|
+-- YES: identify failing scenario IDs; goto step 3 (failures only)
|
+-- NO: B10 HUMAN CHECKPOINT
(declare ITERATION REQUIRED -- design implicated)python dev/skills/genesis-evals/scripts/validate_scenarios.py \
--scenarios-dir dev/skills/genesis-evals/scenarios \
--schema dev/skills/genesis-evals/schema/scenario.schema.jsonIf exit non-zero, STOP. Fix the schema/yaml violations before any spawn. No partial runs.
RUN_ID=$(date -u +%Y%m%dT%H%M%SZ)
RUNS_DIR=dev/skills/genesis-evals/runs
mkdir -p "$RUNS_DIR/$RUN_ID"For EACH scenario YAML in scenarios/:
category: P -> two halves: with and withoutcategory: N -> one half: single (loaded_skills as declared)category: R -> one half: single python dev/skills/genesis-evals/scripts/spawn_record.py \
--scenario dev/skills/genesis-evals/scenarios/<id>.yml \
--half <with|without|single> \
--run-id "$RUN_ID" \
--runs-dir "$RUNS_DIR"This writes <runs-dir>/<run-id>/<id>__<half>.spawn.json. If the script exits non-zero, the scenario is REJECTED (no model field, or retired). Skip this scenario; do NOT spawn.
general-purpose (or harness equivalent thatsupports a fresh context window)
requested_model field --PASS THIS EXPLICITLY to the task-tool call. Do NOT rely on the parent's default.
prompt field, VERBATIM. Noprefix, no suffix, no parent-context bleed.
with half (P category, includes genesis inloaded_skills_requested): prepend a single line instruction telling the child it has the genesis skill available and should consult it. For without half: no genesis instruction.
N and R single half: same treatment as with ifgenesis is in loaded_skills_requested.
<runs-dir>/<run-id>/<id>__<half>.response.txt The full text, verbatim. No truncation. No paraphrase.
Genesis itself names A1 PANEL with B1 fan-out as the right pattern for this shape. Spawn as many independent (scenario, half) jobs in parallel as the harness permits. Do NOT serialize unless forced.
python dev/skills/genesis-evals/scripts/score_run.py \
--run-id "$RUN_ID" \
--runs-dir "$RUNS_DIR" \
--scenarios-dir dev/skills/genesis-evals/scenariosWrites <runs-dir>/<run-id>/summary.md. Exit code: 0 if converged, 1 if not, 2 on infrastructure error.
view the summary.md. Note per-category ratios.
| Category | Gate | Failure shape |
|---|---|---|
| P | ratio >= 0.80 | with-skill missing the catalogue label OR without-skill leaking it |
| N | ratio >= 0.80 | over-eager activation: genesis vocabulary leaking into off-topic responses |
| R | ratio == 1.00 | regression of a previously-fixed behaviour (PR #4 substrate gates) |
If ALL three pass: STOP. Report run-id, summary.md path, ratios.
If NOT converged AND loop count < 3:
If loop count == 3 and still not converged: B10 HUMAN CHECKPOINT. Report which scenarios failed twice (genuine signal, not noise) and which architectural surface they implicate. Do NOT auto-edit genesis catalogue files.
After convergence, paste the contents of summary.md into the PR body under a "Verification" section. Replace any prior ad-hoc matrix.
<p|n|r>-<NNN>-<slug>.ymlfrozen_since to the current genesis version (readapm.yml)
validate_scenarios.pyvocabulary.** A polite-decline response correctly names the skill's scope ("genesis is for designing primitive modules -- not relevant here"). Words like primitive module or agentic primitive appear in BOTH activation AND decline, so they fail to discriminate. Forbid only words that ONLY appear on activation: Step 1, composition substrate, design artifact, codified pattern labels (R1 SPLIT, A10 GOVERNED, A1 PANEL).
testing for "the catalogue produced ANY structured output".** Demanding both SoC AND R1 SPLIT is over-specification. Pick the single most discriminating label and require only that. The scorer is substring_all (intersection); express alternatives by minimising the set, not by enumerating synonyms.
cwd contains genesis source files; sub-agents may read and cite them. This is acceptable for gate evaluation (gates are substring checks on SPECIFIC vocabulary), but do not treat without-half responses as evidence of "what a fresh LLM would do without the skill".
responses are read as <scenario-id>__<half>.response.txt. Trailing slugs in filenames break the scorer silently.
Set retired_in: <version>. The runner will skip it. NEVER delete the file (provenance / audit trail).
pip install -r dev/skills/genesis-evals/requirements.txt(deps: pyyaml, jsonschema. Maintainer-side only. Users never see this requirements.txt.)
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.